昼勤務シフトプログラム
(勤務可能時間表)

夜勤務シフトはこちら→

<目的関数> 差を最小にする
MIN Z1X+Z2X+Z3X+Z4X+Z5X+Z6X+Z7X 


<制約式>
ST

上限・下限人数の制約
  各勤務シフトに入力されている上限・下限人数内にパートナーを収めるための制約。
T1x-Z1x<=4
T1x+Z1x>=4

T2x-Z2x<=3
T2x+Z2x>=3

T3x-Z3x<=4
T3x+Z3x>=4

T4x-Z4x<=4
T4x+Z4x>=4

T5x-Z5x<=5
T5x+Z5x>=4

T6x-Z6x<=4
T6x+Z6x>=3

T7x-Z7x<=4
T7x+Z7x>=4



縦計算制約
  
各勤務シフトのパートナー人数を求める制約。
a1x+b1x+c1x+i1x+j1x-T1x=0
a2x+b2x+c2x+d2x+j2x-T2x=0
a3x+b3x+c3x+d3x+j3x-T3x=0
a4x+b4x+c4x+d4x+i4x+j4x-T4x=0
a5x+b5x+d5x+i5x-T5x=0
a6x+b6x+d6x+i6x-T6x=0
a7x+b7x+c7x+d7x+i7x+j7x-T7x=0


勤務可能シフトの制約
  各パートナーから集めた勤務可能時間表から可能勤務シフトと公休希望日数を制約式にしたもの。
a1x+a2x+a3x+a4x+a5x+a6x+a7x<=5

b1x+b2x+b3x+b4x+b5x+b6x+b7x<=5
b1x+b2x>=1
b2x+b3x>=1
b3x+b4x>=1
b4x+b5x>=1
b5x+b6x>=1
b6x+b7x>=1

c5x+c6x=0

d1x=0
d2x+d3x+d4x+d5x+d6x+d7x<=5

i2x+i3x=0

j5x+j6x=0



担当別制約
  庶務の仕事は電話交換以外に出納室・採用教育・POSの3担当に分けられている。そのため上限・下限人員以外に担当人員確保を以下の制約でおこなう。
a1x+b1x>=1             ex. →1日のxシフトではa・bが一人以上必ず出勤(出納)。
b1x+c1x>=1
                 →1日のxシフトではb・cが一人以上必ず出勤(採教)。
a1x+b1x+c1x>=2
              →1日のxシフトではa・b・cが二人以上必ず出勤。
i1x+j1x>=1
                   →1日のxシフトではi・jが一人以上必ず出勤(POS)。

a2x+b2x>=1
b2x+c2x>=1
a2x+b2x+c2x>=2
i2x+j2x>=1

a3x+b3x>=1
b3x+c3x>=1
a3x+b3x+c3x>=2
i3x+j3x>=1

a4x+b4x>=1
b4x+c4x>=1
a4x+b4x+c4x>=2
i4x+j4x>=1

a5x+b5x>=1
b5x+c5x>=1
a5x+b5x+c5x>=2
i5x+j5x>=1

a6x+b6x>=1
b6x+c6x>=1
a6x+b6x+c6x>=2
i6x+j6x>=1

a7x+b7x>=1
b7x+c7x>=1
a7x+b7x+c7x>=2
i7x+j7x>=1

end

各変数をそれぞれ 0/1で表示させる命令
INTEGER a1x                  
INTEGER a2x
INTEGER a3x
INTEGER a4x
INTEGER a5x
INTEGER a6x
INTEGER a7x

INTEGER b1x
INTEGER b2x
INTEGER b3x
INTEGER b4x
INTEGER b5x
INTEGER b6x
INTEGER b7x

INTEGER c1x
INTEGER c2x
INTEGER c3x
INTEGER c4x
INTEGER c7x

INTEGER d2x
INTEGER d3x
INTEGER d4x
INTEGER d5x
INTEGER d6x
INTEGER d7x

INTEGER i1x
INTEGER i4x
INTEGER i5x
INTEGER i6x
INTEGER i7x

INTEGER j1x
INTEGER j2x
INTEGER j3x
INTEGER j4x
INTEGER j7x