スケジューリングソルバー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)