D11

スケジューリングソルバーOptSeqのマニュアルに出てくる例題の分析を行います。

例題1


from optseq import *
ex1=Model()
#-----基礎データの定義
data={\
1:[13,[3]],\
2:[25,[5,4]],\
3:[15,[4]],\
4:[27,[6]],\
5:[22,[6]],\
6:[1,[0]],\
}
#-----作業へのモードの割当
act={}
mode={}
for i in data:
  act[i]=ex1.addActivity("Act[{0}]".format(i))
  mode[i]=Mode("Mode[{0}]".format(i),data[i][0])
  act[i].addModes(mode[i])
#-----先行制約の定義
for i in data:
  if i<6:
    for j in data[i][1]:
      ex1.addTemporal(act[i],act[j])
#-----最適化
ex1.Params.TimeLimit=1
ex1.Params.Makespan=True
ex1.Params.OutputFlag=True
ex1.optimize()
ex1.writeExcel("ex1_result.csv")
ex1.write("ex1.txt")


例題2


from optseq import *
ex2=Model()
#-----基礎データの定義
data={\
1:[13,[3]],\
2:[25,[5,4]],\
3:[15,[4]],\
4:[27,[6]],\
5:[22,[6]],\
6:[1,[0]],\
}
res=ex2.addResource("worker",capacity={(0,"inf"):1})
#-----作業の定義とモードの割当
act={}
mode={}
for i in data:
act[i]=ex2.addActivity("Act[{0}]".format(i))
mode[i]=Mode("Mode[{0}]".format(i),data[i][0])
mode[i].addResource(res,requirement=1)
act[i].addModes(mode[i])
#-----先行制約の定義
for i in data:
if i<6:
for j in data[i][1]:
ex2.addTemporal(act[i],act[j])
#-----最適化
ex2.Params.TimeLimit=1
ex2.Params.Makespan=True
ex2.Params.OutputFlag=True
ex2.optimize()
ex2.writeExcel("ex2_result.csv")
ex2.write("ex2.txt")


例題3


例題4


例題5


例題6


例題7


例題8


例題9


例題10


例題11


例題12


例題13


例題14


例題15


例題16


例題17


例題18


例題19


例題20


例題21


その他

最適化過程 fig = plot_optseq()
plotly.offline.plot(fig);
ガントチャート fig = make_gannt(model)
plotly.offline.plot(fig);
資源使用状況 fig = make_resource_graph(model)
#plotly.offline.plot(fig);


OPTSEQ
●クラス「モデル」
model=Model()

●クラス「作業」
作業インスタンス=model.addActivity(name,duedate='inf',...)
作業インスタンス.addModes(モードインスタンス1,モードインスタンス2,...)

●クラス「モード」
モードインスタンス=Mode(name,duration=0)
モードインスタンス.addResource(resource,requirement={},...)
モードインスタンス.addBreak(start=0, finish=0,maxtime='inf')
モードインスタンス.addParallel(start=1,finish=1,maxparallel='inf')
モードインスタンス.addState(state,fromValue=0,toValue=0)

●クラス「資源」
資源インスタンス=model.addResource(name,capacity,...)
資源インスタンス.addCapacity(start,finish,amount)
資源インスタンス.addTerms(coeffs,vars,values)

●クラス「時間制約」
時間制約インスタンス=model.addTemporal(pred,succ,tempType='CS',delay=0)

●クラス「状態」
状態インスタンス=model.addState(name)