ここでは、作業場所の割付、配置計画について検討します。
上図のように、作業場所はサイズ5Lx5Bの定盤で、ここにサイズ2Lx2Bの製作物を3日間だけ据置きたいとします。ただし黒色のメッシュは柱があって使えないとします。このとき割付可能な候補は12通りあり、このうちのどれか1つを選びたいとします。
#prob21.py
from optseq import *
#=====リソース
prob21=Model()
res={}
for i in range(0,5):
for j in range(0,5):
if i==1 and j==3 :
res[i,j] =prob21.addResource("place[{0:02d}_{1:02d}]".format(i,j),capacity={(0,"inf"):0})
else:
res[i,j] =prob21.addResource("place[{0:02d}_{1:02d}]".format(i,j),capacity={(0,"inf"):1})
#====データセット
#i:[期間,納期,[l,b]]
data={1:[3,5,[2,2]]}
#=====アクティビティ
act={}
for i in data.keys():
act[i]=prob21.addActivity("act[{0}]".format(i))
#====資源制約
L=5; B=5; L1=0; L2=4; B1=0; B2=4; skipL=1; skipB=1;
mode={}
for i in data.keys():
#mode[i]=Mode("Mode[{0}]".format(i),duration=data[i][0])
l=data[i][2][0]; b=data[i][2][1];
for j in range(L1,L2-l+1,skipL):
for k in range(B1,B2-b+1,skipB):
mode[i,j,k]=Mode("mode[{0:02d}]_[{1:02d}_{2:02d}][{3:02d}_{4:02d}]".\
format(i,j,k,l,b),duration=data[i][0])
for s in range(0,l):
for t in range(0,b):
mode[i,j,k].addResource(res[j+s,k+t],1)
act[i].addModes(mode[i,j,k])
#=====最適化
prob21.Params.Makespan=True
prob21.Params.TimeLimit=1
#prob3.Params.OutputFlag=True
prob21.optimize()
prob21.write("prob21.txt")
prob21.writeExcel("prob21.csv")
#=====prob21.txt
# activity mode duration 123
#----------------------------------
# act[1] mode[01]_[01_00][02_02] 3 ===
#----------------------------------
# resource usage/capacity
#----------------------------------
# place[00_00] 000 # place[03_00] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[00_01] 000 # place[03_01] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[00_02] 000 # place[03_02] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[00_03] 000 # place[03_03] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[00_04] 000 # place[03_04] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[01_00] 111 # place[04_00] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[01_01] 111 # place[04_01] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[01_02] 000 # place[04_02] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[01_03] 000 # place[04_03] 000
# 000 # 111
#---------------------------------- #----------------------------------
# place[01_04] 000 # place[04_04] 000
# 111 # 111
#---------------------------------- #----------------------------------
# place[02_00] 111
# 111
#----------------------------------
# place[02_01] 111
# 111
#----------------------------------
# place[02_02] 000
# 111
#----------------------------------
# place[02_03] 000
# 111
#----------------------------------
# place[02_04] 000
# 111
#----------------------------------
このプログラムを実行して、次の結果を得ます。