2019年12月17日火曜日

pythonの変数を日本語化の実装その2


実装後による結果です。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 件のコメント:

コメントを投稿