場所の割付

ここでは、作業場所の割付、配置計画について検討します。

上図のように、作業場所はサイズ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
#----------------------------------  

このプログラムを実行して、次の結果を得ます。