実装後による結果です。126Aでは、次のようにプロパティファイルを生成しました。
#daydef 制約開始日=5 制約終了日=35 表示開始日=0 daydef=['2016-06-26','2016-06-27','2016-06-28','2016-06-29','2016-06-30','2016-07-01','2016-07-02','2016-07-03','2016-07-04','2016-07-05','2016-07-06','2016-07-07','2016-07-08','2016-07-09','2016-07-10','2016-07-11','2016-07-12','2016-07-13','2016-07-14','2016-07-15','2016-07-16','2016-07-17','2016-07-18','2016-07-19','2016-07-20','2016-07-21','2016-07-22','2016-07-23','2016-07-24','2016-07-25','2016-07-26','2016-07-27','2016-07-28','2016-07-29','2016-07-30','2016-07-31'] #staffcollection 全スタッフ=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 「@地上波+BS」=[0,4,10,11] 「@地上波のみ」=[1,2,6,7,8,19,20] 「@地上波+NBD」=[3,5] 「@BS+NBD」=[9,17] 「@BSのみ」=[12,14,15,16,18,21,22] 「@BSのみ女性」=[13] 「@BS+NBD」=[9,17] 「@アンクル」=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 「@データトラフィック」=[19,20,21,22] 「@NS3連続禁止」=[0,1,2,3,4,5,6,7,8,9,10,13,14,15,17,18,19,20,21,22] 「CとEのバランス気にしない」=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] 「明けの後勤務最大1日」=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] 「単勤最大日数1日」=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] 「単休最大日数1日」=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] 「6日連続勤務0日」=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] 「4連休OK」=[0,9,11,12,13,14,15,16,17,18] 「@NS単発0回」=[11,12,16] 「@シフト希望4~5日」=[0,2,6,12,13,16,17,22] 「@シフト希望6日以上」=[9,19] 「@BS+勤務禁止」=[18] 「3連休なくても良い」=[] 「2単勤最大日数1日」=[] 「2単勤最大日数2日」=[] パターン制約適用しない=[23] シフト希望4~5日でない=[1,3,4,5,7,8,9,10,11,14,15,18,19,20,21] シフト希望6日以上でない=[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22] 4連休OKでない=[1,2,3,4,5,6,7,8,10,19,20,21,22] 3連休なくても良くない=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] CとEのバランス気にしなくない=[1,2,3,5,6,7,8,19,20] @4連休NG=[1,3,4,5,7,8,10,20,21] @3連休1つ以上=[1,3,4,5,7,8,10,11,14,15,18,20,21] @CとEのバランス気にする=[1,3,5,7,8,20] @単勤最大日数1日=[1,3,4,5,7,8,10,11,14,15,18,20,21] @単勤最大日数2日=[1,3,4,5,7,8,10,11,14,15,18,20,21] @単休最大日数1日=[1,3,4,5,7,8,10,11,14,15,18,20,21] @単休最大日数2日=[1,3,4,5,7,8,10,11,14,15,18,20,21] @2単勤最大日数1日=[] @2単勤最大日数2日=[] @明けの後勤務最大1日=[4,10,11,14,15,18,21] @明けの後勤務最大2日=[4,10,11,14,15,18,21] @6日連続勤務禁止=[1,3,4,5,7,8,10,11,14,15,18,20,21] @希望3日以下=[1,3,4,5,7,8,10,11,14,15,18,20,21] @NS3連続OK=[11,12,16] パターン制約適用=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] J=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] X=[3,9,17] Z=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 単宿=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 明勤=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 朝番=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 遅番=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] A=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] B=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] C=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] D=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] E=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] F=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] G=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] H=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] a=[0,4,9,10,11,12,13,21,22] b=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] c=[0,4,9,10,11,12,13,21,22] d=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] e=[0,4,9,10,11,12,13,21,22] f=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] V=[3,5,9,17] W=[3,5,9,17] X=[3,9,17] Y=[3,5,17] g=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] h=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] i=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] #daycollection 今月=[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 日=[0,7,14,21,28,35] 月=[1,8,15,22,29] 火=[2,9,16,23,30] 水=[3,10,17,24,31] 木=[4,11,18,25,32] 金=[5,12,19,26,33] 土=[6,13,20,27,34] 全日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 祝=[22] NBD1人=[16,18,32,33] NB夜1人=[10,11,13,17] NB夜2人=[12] NB夜3人=[] NB遅1人=[5,6,9,10,15,22,25,26,27,29,34,35] NB遅2人=[23,24] NB遅3人=[11] NB朝1人=[8,9,10,17,18,19,20,31,32] NB朝2人=[14,15,16] NB朝3人=[] MS+の日=[] DS+の日=[26,27,28] NS+の日=[] 平日=[1,2,3,4,5,8,9,10,11,12,15,16,17,18,19,22,23,24,25,26,29,30,31,32,33] 週末=[0,7,14,21,28,35] 休日=[0,7,14,21,28,35] 稼働日=[1,2,3,4,5,6,8,9,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,29,30,31,32,33,34] 制約開始日一日前=[4] 制約開始日二日前=[3] 制約開始日三日前=[2] 制約開始日四日前=[1] 制約開始日五日前=[0] 制約開始日六日前=[] 制約開始日七日前=[] 制約開始日P1=[6] 制約開始日P2=[7] 制約開始日P3=[8] 制約開始日P4=[9] 制約開始日P5=[10] 制約開始日P6=[11] 第一週=[5,6,7,8,9,10,11] 第二週=[12,13,14,15,16,17,18] 第三週=[19,20,21,22,23,24,25] 第四週=[26,27,28,29,30,31,32] 第五週=[33,34,35] 第六週=[] 四週間=[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32] 制約開始日1日前から=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日2日前から=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日3日前から=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日4日前から=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日5日前から=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日6日前から=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約終了日六日前=[29] 制約終了日五日前=[30] 制約終了日四日前=[31] 制約終了日三日前=[32] 制約終了日二日前=[33] 制約終了日一日前=[34] 金土日=[0,5,7,12,14,19,21,26,28,33,35] 金土日月=[0,1,5,7,8,12,14,15,19,21,22,26,28,29,33,35] NBD0人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35] notNB夜1人=[0,1,2,3,4,5,6,7,8,9,12,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB夜2人=[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB夜3人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] NB夜0人=[5,6,7,8,9,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] MS+がない日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] DS+がない日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,29,30,31,32,33,34,35] NS+がない日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB朝1人=[0,1,2,3,4,5,6,7,11,12,13,14,15,16,21,22,23,24,25,26,27,28,29,30,33,34,35] notNB朝2人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB朝3人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] NB朝0人=[] notNB遅1人=[0,1,2,3,4,7,8,11,12,13,14,16,17,18,19,20,21,23,24,28,30,31,32,33] notNB遅2人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,25,26,27,28,29,30,31,32,33,34,35] notNB遅3人=[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] NB遅0人=[] 第一週P3=[8,9,10,11,12,13,14] F10日=[5,6,7,8,9,10,11,12,13,14] F20日=[15,16,17,18,19,20,21,22,23,24] F30日=[25,26,27,28,29,30,31,32,33,34] F31日=[25,26,27,28,29,30,31,32,33,34,35] #shiftcollection 泊=[0,4] S=[0,1,3,4,5,6,7] #classcollection 全スタッフ属性=[全スタッフ] 地上波・BS・NBD=[「@地上波+BS」,「@地上波のみ」,「@地上波+NBD」,「@BS+NBD」,「@BSのみ」,「@BSのみ女性」,「@BS+NBD」] アンクルデータトラフィック=[「@アンクル」,「@データトラフィック」] 「@NS3連続禁止」属性=[「@NS3連続禁止」] 「CとEのバランス気にしない」属性=[「CとEのバランス気にしない」] 「明けの後勤務最大1日」属性=[「明けの後勤務最大1日」] 「単勤最大日数1日」属性=[「単勤最大日数1日」] 「単休最大日数1日」属性=[「単休最大日数1日」] 「6日連続勤務0日」属性=[「6日連続勤務0日」] 「4連休OK」属性=[「4連休OK」] 「@NS単発0回」属性=[「@NS単発0回」] シフト希望属性=[「@シフト希望4~5日」,「@シフト希望6日以上」] 「@BS+勤務禁止」属性=[「@BS+勤務禁止」] 「3連休なくても良い」属性=[「3連休なくても良い」] 「2単勤最大日数1日」属性=[「2単勤最大日数1日」] 「2単勤最大日数2日」属性=[「2単勤最大日数2日」] パターン制約=[パターン制約適用しない] #shiftdef shiftdef={'J':J,'X':X,'Z':Z,'t':t,'単宿':単宿,'明勤':明勤,'朝番':朝番,'遅番':遅番} #taskdef taskdef={'A':A,'B':B,'C':C,'D':D,'E':E,'F':F,'G':G,'H':H,'a':a,'b':b,'c':c,'d':d,'e':e,'f':f,'V':V,'W':W,'X':X,'Y':Y,'g':g,'h':h,'i':i,'t':t} #non_auto_tasks non_auto_tasks=['t'] #phase_list PH0=0 #task collections R={'A':A,'C':C} U={'g':g,'h':h,'i':i} #digited group #column_constraints A=(True,('今月',今月),'',PH0,('A',A),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) B=(True,('今月',今月),'',PH0,('B',B),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) C=(True,('今月',今月),'',PH0,('C',C),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) D=(True,('今月',今月),'',PH0,('D',D),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) E=(True,('今月',今月),'',PH0,('E',E),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) F=(True,('今月',今月),'',PH0,('F',F),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) G=(True,('今月',今月),'',PH0,('G',G),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) H=(True,('今月',今月),'',PH0,('H',H),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) a=(True,('今月',今月),'',PH0,('a',a),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) b=(True,('今月',今月),'',PH0,('b',b),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) c=(True,('今月',今月),'',PH0,('c',c),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) d=(True,('今月',今月),'',PH0,('d',d),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) e=(True,('今月',今月),'',PH0,('e',e),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) f=(True,('今月',今月),'',PH0,('f',f),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NBデスク1人=(True,('NBD1人',NBD1人),'',PH0,('X',X),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NBデスク0人=(True,('NBD0人',NBD0人),'',PH0,('X',X),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB夜0人=(True,('NB夜0人',NB夜0人),'',PH0,('Y',Y),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB夜1人=(True,('NB夜1人',NB夜1人),'',PH0,('Y',Y),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NB夜2人=(True,('NB夜2人',NB夜2人),'',PH0,('Y',Y),全スタッフ,1,2,2,-1.000000,-1.000000,0,100) NB夜3人=(True,('NB夜3人',NB夜3人),'',PH0,('Y',Y),全スタッフ,1,3,3,-1.000000,-1.000000,0,100) MS+あり=(True,('MS+の日',MS+の日),'',PH0,('g',g),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) MS+なし=(True,('MS+がない日',MS+がない日),'',PH0,('g',g),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) DS+あり=(True,('DS+の日',DS+の日),'',PH0,('h',h),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) DS+なし=(True,('DS+がない日',DS+がない日),'',PH0,('h',h),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NS+あり=(True,('NS+の日',NS+の日),'',PH0,('i',i),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NS+なし=(True,('NS+がない日',NS+がない日),'',PH0,('i',i),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB朝0人=(True,('NB朝0人',NB朝0人),'',PH0,('W',W),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB朝1人=(True,('NB朝1人',NB朝1人),'',PH0,('W',W),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NB朝2人=(True,('NB朝2人',NB朝2人),'',PH0,('W',W),全スタッフ,1,2,2,-1.000000,-1.000000,0,100) NB朝3人=(True,('NB朝3人',NB朝3人),'',PH0,('W',W),全スタッフ,1,3,3,-1.000000,-1.000000,0,100) NB遅0人=(True,('NB遅0人',NB遅0人),'',PH0,('V',V),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB遅1人=(True,('NB遅1人',NB遅1人),'',PH0,('V',V),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NB遅2人=(True,('NB遅2人',NB遅2人),'',PH0,('V',V),全スタッフ,1,2,2,-1.000000,-1.000000,0,100) NB遅3人=(True,('NB遅3人',NB遅3人),'',PH0,('V',V),全スタッフ,1,3,3,-1.000000,-1.000000,0,100) 列制約グループ1フェーズ={'A':A,'B':B,'C':C,'D':D,'E':E,'F':F,'G':G,'H':H,'a':a,'b':b,'c':c,'d':d,'e':e,'f':f,'NBデスク1人':NBデスク1人,'NBデスク0人':NBデスク0人,'NB夜0人':NB夜0人,'NB夜1人':NB夜1人,'NB夜2人':NB夜2人,'NB夜3人':NB夜3人,'MS+あり':MS+あり,'MS+なし':MS+なし,'DS+あり':DS+あり,'DS+なし':DS+なし,'NS+あり':NS+あり,'NS+なし':NS+なし,'NB朝0人':NB朝0人,'NB朝1人':NB朝1人,'NB朝2人':NB朝2人,'NB朝3人':NB朝3人,'NB遅0人':NB遅0人,'NB遅1人':NB遅1人,'NB遅2人':NB遅2人,'NB遅3人':NB遅3人} column_constraints={'列制約グループ1フェーズ':列制約グループ1フェーズ}
当然ながら、この状態では、次のようにコンパイルエラーとなります。
コンパイルの準備中ソルバを呼び出し中です。 python propertyファイル生成を開始します。 python propertyファイル生成が終了しました。 SyntaxError: ('invalid character in identifier', ('', 11, 5, '「@地上波+BS」=[0,4,10,11]\n'))解探索が終了しました。 0 (秒) 解を見つけることが出来ませんでした。
同じプロジェクトですが、127Aでは、次のように生成されエラーとはなりません。
#daydef 制約開始日=5 制約終了日=35 表示開始日=0 daydef=['2016-06-26','2016-06-27','2016-06-28','2016-06-29','2016-06-30','2016-07-01','2016-07-02','2016-07-03','2016-07-04','2016-07-05','2016-07-06','2016-07-07','2016-07-08','2016-07-09','2016-07-10','2016-07-11','2016-07-12','2016-07-13','2016-07-14','2016-07-15','2016-07-16','2016-07-17','2016-07-18','2016-07-19','2016-07-20','2016-07-21','2016-07-22','2016-07-23','2016-07-24','2016-07-25','2016-07-26','2016-07-27','2016-07-28','2016-07-29','2016-07-30','2016-07-31'] #staffcollection 全スタッフ=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] a_地上波BS=[0,4,10,11] b_地上波のみ=[1,2,6,7,8,19,20] c_地上波NBD=[3,5] d_BSNBD=[9,17] e_BSのみ=[12,14,15,16,18,21,22] f_BSのみ女性=[13] d_BSNBD=[9,17] g_アンクル=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] h_データトラフィック=[19,20,21,22] i_NS3連続禁止=[0,1,2,3,4,5,6,7,8,9,10,13,14,15,17,18,19,20,21,22] j_CとEのバランス気にしない=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] k_明けの後勤務最大1日=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] l_単勤最大日数1日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] m_単休最大日数1日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] n_6日連続勤務0日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] o_4連休OK=[0,9,11,12,13,14,15,16,17,18] p_NS単発0回=[11,12,16] q_シフト希望45日=[0,2,6,12,13,16,17,22] r_シフト希望6日以上=[9,19] s_BS勤務禁止=[18] t_3連休なくても良い=[] u_2単勤最大日数1日=[] v_2単勤最大日数2日=[] パターン制約適用しない=[23] w_シフト希望45日でない=[1,3,4,5,7,8,9,10,11,14,15,18,19,20,21] シフト希望6日以上でない=[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22] x_4連休OKでない=[1,2,3,4,5,6,7,8,10,19,20,21,22] y_3連休なくても良くない=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] CとEのバランス気にしなくない=[1,2,3,5,6,7,8,19,20] z_4連休NG=[1,3,4,5,7,8,10,20,21] ba_3連休1つ以上=[1,3,4,5,7,8,10,11,14,15,18,20,21] bb_CとEのバランス気にする=[1,3,5,7,8,20] bc_単勤最大日数1日=[1,3,4,5,7,8,10,11,14,15,18,20,21] bd_単勤最大日数2日=[1,3,4,5,7,8,10,11,14,15,18,20,21] be_単休最大日数1日=[1,3,4,5,7,8,10,11,14,15,18,20,21] bf_単休最大日数2日=[1,3,4,5,7,8,10,11,14,15,18,20,21] bg_2単勤最大日数1日=[] bh_2単勤最大日数2日=[] bi_明けの後勤務最大1日=[4,10,11,14,15,18,21] bj_明けの後勤務最大2日=[4,10,11,14,15,18,21] bk_6日連続勤務禁止=[1,3,4,5,7,8,10,11,14,15,18,20,21] bl_希望3日以下=[1,3,4,5,7,8,10,11,14,15,18,20,21] bm_NS3連続OK=[11,12,16] パターン制約適用=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] J=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] X=[3,9,17] Z=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 単宿=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 明勤=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 朝番=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 遅番=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] A=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] B=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] C=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] D=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] E=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] F=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] G=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] H=[0,1,2,3,4,5,6,7,8,10,11,19,20,23] a=[0,4,9,10,11,12,13,21,22] b=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] c=[0,4,9,10,11,12,13,21,22] d=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] e=[0,4,9,10,11,12,13,21,22] f=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] V=[3,5,9,17] W=[3,5,9,17] X=[3,9,17] Y=[3,5,17] g=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] h=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] i=[0,4,9,10,11,12,13,14,15,16,17,18,21,22] t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] #daycollection 今月=[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 日=[0,7,14,21,28,35] 月=[1,8,15,22,29] 火=[2,9,16,23,30] 水=[3,10,17,24,31] 木=[4,11,18,25,32] 金=[5,12,19,26,33] 土=[6,13,20,27,34] 全日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 祝=[22] NBD1人=[16,18,32,33] NB夜1人=[10,11,13,17] NB夜2人=[12] NB夜3人=[] NB遅1人=[5,6,9,10,15,22,25,26,27,29,34,35] NB遅2人=[23,24] NB遅3人=[11] NB朝1人=[8,9,10,17,18,19,20,31,32] NB朝2人=[14,15,16] NB朝3人=[] bn_MSの日=[] bo_DSの日=[26,27,28] bp_NSの日=[] 平日=[1,2,3,4,5,8,9,10,11,12,15,16,17,18,19,22,23,24,25,26,29,30,31,32,33] 週末=[0,7,14,21,28,35] 休日=[0,7,14,21,28,35] 稼働日=[1,2,3,4,5,6,8,9,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,29,30,31,32,33,34] 制約開始日一日前=[4] 制約開始日二日前=[3] 制約開始日三日前=[2] 制約開始日四日前=[1] 制約開始日五日前=[0] 制約開始日六日前=[] 制約開始日七日前=[] 制約開始日P1=[6] 制約開始日P2=[7] 制約開始日P3=[8] 制約開始日P4=[9] 制約開始日P5=[10] 制約開始日P6=[11] 第一週=[5,6,7,8,9,10,11] 第二週=[12,13,14,15,16,17,18] 第三週=[19,20,21,22,23,24,25] 第四週=[26,27,28,29,30,31,32] 第五週=[33,34,35] 第六週=[] 四週間=[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32] 制約開始日1日前から=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日2日前から=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日3日前から=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日4日前から=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日5日前から=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約開始日6日前から=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] 制約終了日六日前=[29] 制約終了日五日前=[30] 制約終了日四日前=[31] 制約終了日三日前=[32] 制約終了日二日前=[33] 制約終了日一日前=[34] 金土日=[0,5,7,12,14,19,21,26,28,33,35] 金土日月=[0,1,5,7,8,12,14,15,19,21,22,26,28,29,33,35] NBD0人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35] notNB夜1人=[0,1,2,3,4,5,6,7,8,9,12,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB夜2人=[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB夜3人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] NB夜0人=[5,6,7,8,9,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] bq_MSがない日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] br_DSがない日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,29,30,31,32,33,34,35] bs_NSがない日=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB朝1人=[0,1,2,3,4,5,6,7,11,12,13,14,15,16,21,22,23,24,25,26,27,28,29,30,33,34,35] notNB朝2人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] notNB朝3人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] NB朝0人=[] notNB遅1人=[0,1,2,3,4,7,8,11,12,13,14,16,17,18,19,20,21,23,24,28,30,31,32,33] notNB遅2人=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,25,26,27,28,29,30,31,32,33,34,35] notNB遅3人=[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35] NB遅0人=[] 第一週P3=[8,9,10,11,12,13,14] F10日=[5,6,7,8,9,10,11,12,13,14] F20日=[15,16,17,18,19,20,21,22,23,24] F30日=[25,26,27,28,29,30,31,32,33,34] F31日=[25,26,27,28,29,30,31,32,33,34,35] #shiftcollection 泊=[0,4] S=[0,1,3,4,5,6,7] #classcollection 全スタッフ属性=[全スタッフ] bt_地上波BSNBD=[a_地上波BS,b_地上波のみ,c_地上波NBD,d_BSNBD,e_BSのみ,f_BSのみ女性,d_BSNBD] アンクルデータトラフィック=[g_アンクル,h_データトラフィック] bu_NS3連続禁止属性=[i_NS3連続禁止] bv_CとEのバランス気にしない属性=[j_CとEのバランス気にしない] bw_明けの後勤務最大1日属性=[k_明けの後勤務最大1日] bx_単勤最大日数1日属性=[l_単勤最大日数1日] by_単休最大日数1日属性=[m_単休最大日数1日] bz_6日連続勤務0日属性=[n_6日連続勤務0日] ca_4連休OK属性=[o_4連休OK] cb_NS単発0回属性=[p_NS単発0回] シフト希望属性=[q_シフト希望45日,r_シフト希望6日以上] cc_BS勤務禁止属性=[s_BS勤務禁止] cd_3連休なくても良い属性=[t_3連休なくても良い] ce_2単勤最大日数1日属性=[u_2単勤最大日数1日] cf_2単勤最大日数2日属性=[v_2単勤最大日数2日] パターン制約=[パターン制約適用しない] #shiftdef shiftdef={'J':J,'X':X,'Z':Z,'t':t,'単宿':単宿,'明勤':明勤,'朝番':朝番,'遅番':遅番} #taskdef taskdef={'A':A,'B':B,'C':C,'D':D,'E':E,'F':F,'G':G,'H':H,'a':a,'b':b,'c':c,'d':d,'e':e,'f':f,'V':V,'W':W,'X':X,'Y':Y,'g':g,'h':h,'i':i,'t':t} #non_auto_tasks non_auto_tasks=['t'] #phase_list PH0=0 #task collections R={'A':A,'C':C} U={'g':g,'h':h,'i':i} #digited group #column_constraints A=(True,('今月',今月),'',PH0,('A',A),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) B=(True,('今月',今月),'',PH0,('B',B),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) C=(True,('今月',今月),'',PH0,('C',C),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) D=(True,('今月',今月),'',PH0,('D',D),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) E=(True,('今月',今月),'',PH0,('E',E),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) F=(True,('今月',今月),'',PH0,('F',F),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) G=(True,('今月',今月),'',PH0,('G',G),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) H=(True,('今月',今月),'',PH0,('H',H),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) a=(True,('今月',今月),'',PH0,('a',a),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) b=(True,('今月',今月),'',PH0,('b',b),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) c=(True,('今月',今月),'',PH0,('c',c),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) d=(True,('今月',今月),'',PH0,('d',d),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) e=(True,('今月',今月),'',PH0,('e',e),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) f=(True,('今月',今月),'',PH0,('f',f),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NBデスク1人=(True,('NBD1人',NBD1人),'',PH0,('X',X),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NBデスク0人=(True,('NBD0人',NBD0人),'',PH0,('X',X),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB夜0人=(True,('NB夜0人',NB夜0人),'',PH0,('Y',Y),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB夜1人=(True,('NB夜1人',NB夜1人),'',PH0,('Y',Y),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NB夜2人=(True,('NB夜2人',NB夜2人),'',PH0,('Y',Y),全スタッフ,1,2,2,-1.000000,-1.000000,0,100) NB夜3人=(True,('NB夜3人',NB夜3人),'',PH0,('Y',Y),全スタッフ,1,3,3,-1.000000,-1.000000,0,100) AA_MSあり=(True,('MS+の日',bn_MSの日),'',PH0,('g',g),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) AB_MSなし=(True,('MS+がない日',bq_MSがない日),'',PH0,('g',g),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) AC_DSあり=(True,('DS+の日',bo_DSの日),'',PH0,('h',h),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) AD_DSなし=(True,('DS+がない日',br_DSがない日),'',PH0,('h',h),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) AE_NSあり=(True,('NS+の日',bp_NSの日),'',PH0,('i',i),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) AF_NSなし=(True,('NS+がない日',bs_NSがない日),'',PH0,('i',i),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB朝0人=(True,('NB朝0人',NB朝0人),'',PH0,('W',W),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB朝1人=(True,('NB朝1人',NB朝1人),'',PH0,('W',W),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NB朝2人=(True,('NB朝2人',NB朝2人),'',PH0,('W',W),全スタッフ,1,2,2,-1.000000,-1.000000,0,100) NB朝3人=(True,('NB朝3人',NB朝3人),'',PH0,('W',W),全スタッフ,1,3,3,-1.000000,-1.000000,0,100) NB遅0人=(True,('NB遅0人',NB遅0人),'',PH0,('V',V),全スタッフ,1,0,-1,-1.000000,-1.000000,0,100) NB遅1人=(True,('NB遅1人',NB遅1人),'',PH0,('V',V),全スタッフ,1,1,1,-1.000000,-1.000000,0,100) NB遅2人=(True,('NB遅2人',NB遅2人),'',PH0,('V',V),全スタッフ,1,2,2,-1.000000,-1.000000,0,100) NB遅3人=(True,('NB遅3人',NB遅3人),'',PH0,('V',V),全スタッフ,1,3,3,-1.000000,-1.000000,0,100) 列制約グループ1フェーズ={'A':A,'B':B,'C':C,'D':D,'E':E,'F':F,'G':G,'H':H,'a':a,'b':b,'c':c,'d':d,'e':e,'f':f,'NBデスク1人':NBデスク1人,'NBデスク0人':NBデスク0人,'NB夜0人':NB夜0人,'NB夜1人':NB夜1人,'NB夜2人':NB夜2人,'NB夜3人':NB夜3人,'MS+あり':AA_MSあり,'MS+なし':AB_MSなし,'DS+あり':AC_DSあり,'DS+なし':AD_DSなし,'NS+あり':AE_NSあり,'NS+なし':AF_NSなし,'NB朝0人':NB朝0人,'NB朝1人':NB朝1人,'NB朝2人':NB朝2人,'NB朝3人':NB朝3人,'NB遅0人':NB遅0人,'NB遅1人':NB遅1人,'NB遅2人':NB遅2人,'NB遅3人':NB遅3人} column_constraints={'列制約グループ1フェーズ':列制約グループ1フェーズ}
ご覧のように、INVALID CHARは、スキップされます。そうすると同じ名前になってしまうものが出てしまうので、Prefixで別な名前にしています。 (元の名前が同じならば、同じ名前に変更されます。) ただし、Day集合名とColumn制約名が同じ場合があったので、制約名のマッピングは別にして実装しています。これは、よくありそうな事象であり、自然にその対策になります。いずれにしても、元の制約名は推定可能なので、このファイルを参照すれば、Pythonで書くのに障害にはなりません。 また、Column制約については、 チェックを外してもプロパティファイルを生成しています。(これは、少し複雑な事情によります。)GUIでは、チェックを外せば、Day集合記述がなくてもエラーとはなりませんが、Propertyファイル生成時は、エラーとなります。グループの適用を外せば、Propertyファイルは生成されません。 この一点だけ、ご注意頂ければ、任意のGUIをPythonプロパティ形式に落とせます。
これによりすぐにPython記述を始めることができます。Python記述が可能になれば、後述のように、任意制約のEnable/Disable、任意SolvingPrameterの変更、任意ソフトレベルのソフト制約適用・不適用、重み変更、許容エラー数変更が可能になります。なので、Pythonで制約を記述しなくても
プロジェクト全体に渡る制約のコントロールが可能となります。
以上は、全ロケールで適用となるので、プロパティファイルについては、(日本語のみならず)国際化完了です。 次回は、pythonでの制約コントロール方法について述べます。
0 件のコメント:
コメントを投稿