OptSeq |
#rcpsp43.py
from optseq import *
import math
#====データセット
#Key:["",期間,[後続]、員数,開始,完了],\
data={
"A01":["A01_3人",3,["A04","A06"],3,0,0],
"A02":["A02_1人",4,["A05","A07"],1,0,0],
"A03":["A03_1人",6,["A08","0"],1,0,0],
"A04":["A04_4人",4,["A05","A07"],4,0,0],
"A05":["A05_4人",5,["A08","0"],4,0,0],
"A06":["A06_4人",5,["A09","0"],4,0,0],
"A07":["A07_5人",4,["A10","0"],5,0,0],
"A08":["A08_2人",2,["A10","0"],2,0,0],
"A09":["A09_5人",2,["A10","0"],5,0,0],
"A10":["A10_3人",4,["0","0"],3,0,0],\
}
#====アクティビティ
prob=Model()
act={}
for i in data:
act[i]=prob.addActivity(data[i][0])
#====先行制約
for i in data:
for j in data[i][2]:
if j!="0": prob.addTemporal(act[i],act[j])
#====資源制約
res=prob.addResource("Resource",capacity={(0,"inf"):10})
mode={}
for i in data:
mode[i]=Mode("M["+i+"][{0:02d}]".format(data[i][3]),
duration=data[i][1])
mode[i].addResource(res,requirement=data[i][3])
act[i].addModes(mode[i])
#====求解
prob.Params.Makespan=True
prob.Params.TimeLimit=1
prob.Params.OutputFlag=True
prob.optimize()
prob.write("rcpsp43a.txt")
prob.writeExcel("rcpsp43a.csv")
#=======================================================================
print("")
for a in prob.act:
mode_nam=a.selected.name
i=a.name[0:3]
data[i][4]=a.start
data[i][5]=a.completion
#-----
w1=[]; w2=[]; w3=[]; w4=[]; w5=[];
d1=5; d2=20;
for i in data:
start=data[i][4]
stop=data[i][5]
if stop
|