前日同じチームに日勤者がいるようにするには、どういう風に制約すればよいでしょうか?

GUIでは書けません。Pythonによる記述になります。
ポータブルなコードですので、移植は容易です。



チーム編成

次のようにA・Bチームにより構成されているとします。



前日と同じ日勤者がいると、前日の状況を掴んでいるスタッフがいるというメリットがあります。

この制約をオフにするには、ソフト制約レベル4として実装されているので、言語 制約:4 のチェックをオフにします。


この制約なしでは、次のように、前日と同じ日勤者がいない状態が、数日観測されます。
前日と同じ日勤者がいない可能性が高いのは、日曜日です。

以下で、「前日日勤者がいません」と表示されているのは、求解した後のポストオペレーションになります。 詳しくは、Pythonポスト処理 をご参照ください。


 _____________________________________
|           |           |             |
|   Weight  |   Errors  |    Cost     |
|___________|___________|_____________|
|           |           |             |
|        10 |         0 |           0 |
|         5 |         0 |           0 |
|         3 |         0 |           0 |
|         2 |         0 |           0 |
|         1 |         0 |           0 |
|___________|___________|_____________|
|                       |             |
|         Total         |           0 |
|_______________________|_____________|
	*********UB=0(0)  12.857(cpu sec)
o 0(0)
解探索が終了しました。 14 (秒)
解が得られました。
ポスト処理を実行します。ソルバを呼び出し中です。
前日日勤者がいることをチェックします
********前日勤務者がいません。 2020-07-01 Aグループ
Aグループ 前日勤務者= 中田拓実 2020-07-02
Aグループ 前日勤務者= 高橋真央 2020-07-02
Aグループ 前日勤務者= 友安美琴 2020-07-02
Aグループ 前日勤務者= 降矢悠司 2020-07-02
Aグループ 前日勤務者= 藤本春佳 2020-07-02
Aグループ 前日勤務者= 永田慎治 2020-07-02
Aグループ 前日勤務者= 山田伸明 2020-07-02
Aグループ 前日勤務者= 高橋真央 2020-07-03
Aグループ 前日勤務者= 降矢悠司 2020-07-03
Aグループ 前日勤務者= 藤本春佳 2020-07-03
Aグループ 前日勤務者= 永田慎治 2020-07-03
Aグループ 前日勤務者= 山田伸明 2020-07-03
Aグループ 前日勤務者= 渡邊夏希 2020-07-04
Aグループ 前日勤務者= 渡邊夏希 2020-07-05
Aグループ 前日勤務者= 花房秀明 2020-07-05
Aグループ 前日勤務者= 髙田実歩 2020-07-06
Aグループ 前日勤務者= 花房秀明 2020-07-06
Aグループ 前日勤務者= 友安美琴 2020-07-07
Aグループ 前日勤務者= 横山加奈 2020-07-07
Aグループ 前日勤務者= 髙田実歩 2020-07-07
Aグループ 前日勤務者= 永田慎治 2020-07-07
Aグループ 前日勤務者= 藤本春佳 2020-07-08
Aグループ 前日勤務者= 永田慎治 2020-07-08
Aグループ 前日勤務者= 山田伸明 2020-07-08
Aグループ 前日勤務者= 中田拓実 2020-07-09
Aグループ 前日勤務者= 永田慎治 2020-07-09
Aグループ 前日勤務者= 花房秀明 2020-07-09
Aグループ 前日勤務者= 山田伸明 2020-07-09
Aグループ 前日勤務者= 中田拓実 2020-07-10
Aグループ 前日勤務者= 渡邊夏希 2020-07-10
Aグループ 前日勤務者= 山田伸明 2020-07-10
Aグループ 前日勤務者= 高橋真央 2020-07-11
Aグループ 前日勤務者= 渡邊夏希 2020-07-11
Aグループ 前日勤務者= 高橋真央 2020-07-12
Aグループ 前日勤務者= 髙田実歩 2020-07-12
********前日勤務者がいません。 2020-07-13 Aグループ
Aグループ 前日勤務者= 友安美琴 2020-07-14
Aグループ 前日勤務者= 横山加奈 2020-07-14
Aグループ 前日勤務者= 中田拓実 2020-07-15
Aグループ 前日勤務者= 友安美琴 2020-07-15
Aグループ 前日勤務者= 藤本春佳 2020-07-15
Aグループ 前日勤務者= 花房秀明 2020-07-15
Aグループ 前日勤務者= 中田拓実 2020-07-16
Aグループ 前日勤務者= 渡邊夏希 2020-07-16
Aグループ 前日勤務者= 藤本春佳 2020-07-16
Aグループ 前日勤務者= 花房秀明 2020-07-16
Aグループ 前日勤務者= 中田拓実 2020-07-17
Aグループ 前日勤務者= 渡邊夏希 2020-07-17
Aグループ 前日勤務者= 藤本春佳 2020-07-17
Aグループ 前日勤務者= 花房秀明 2020-07-17
Aグループ 前日勤務者= 降矢悠司 2020-07-18
Aグループ 前日勤務者= 降矢悠司 2020-07-19
Aグループ 前日勤務者= 横山加奈 2020-07-19
Aグループ 前日勤務者= 横山加奈 2020-07-20
Aグループ 前日勤務者= 山田伸明 2020-07-20
Aグループ 前日勤務者= 友安美琴 2020-07-21
Aグループ 前日勤務者= 永田慎治 2020-07-21
Aグループ 前日勤務者= 山田伸明 2020-07-21
Aグループ 前日勤務者= 友安美琴 2020-07-22
Aグループ 前日勤務者= 渡邊夏希 2020-07-22
Aグループ 前日勤務者= 永田慎治 2020-07-22
Aグループ 前日勤務者= 中田拓実 2020-07-23
********前日勤務者がいません。 2020-07-24 Aグループ
********前日勤務者がいません。 2020-07-25 Aグループ
Aグループ 前日勤務者= 髙田実歩 2020-07-26
Aグループ 前日勤務者= 永田慎治 2020-07-27
Aグループ 前日勤務者= 永田慎治 2020-07-28
Aグループ 前日勤務者= 山田伸明 2020-07-28
Aグループ 前日勤務者= 横山加奈 2020-07-29
Aグループ 前日勤務者= 髙田実歩 2020-07-29
Aグループ 前日勤務者= 藤本春佳 2020-07-29
Aグループ 前日勤務者= 山田伸明 2020-07-29
Aグループ 前日勤務者= 高橋真央 2020-07-30
Aグループ 前日勤務者= 降矢悠司 2020-07-30
Aグループ 前日勤務者= 横山加奈 2020-07-30
Aグループ 前日勤務者= 髙田実歩 2020-07-30
Aグループ 前日勤務者= 藤本春佳 2020-07-30
Aグループ 前日勤務者= 高橋真央 2020-07-31
Aグループ 前日勤務者= 降矢悠司 2020-07-31
Aグループ 前日勤務者= 横山加奈 2020-07-31
Aグループ 前日勤務者= 渡邊夏希 2020-07-31
Aグループ 前日勤務者= 髙田実歩 2020-07-31
Aグループ 前日勤務者= 花房秀明 2020-07-31
********前日勤務者がいません。 2020-07-01 Bグループ
Bグループ 前日勤務者= 徳重駿介 2020-07-02
Bグループ 前日勤務者= 水越智哉 2020-07-02
Bグループ 前日勤務者= 杉村青空 2020-07-02
Bグループ 前日勤務者= 西尾貴宏 2020-07-02
Bグループ 前日勤務者= 木口瞳子 2020-07-02
Bグループ 前日勤務者= 水野真吾 2020-07-02
Bグループ 前日勤務者= 徳重駿介 2020-07-03
Bグループ 前日勤務者= 水越智哉 2020-07-03
Bグループ 前日勤務者= 木口瞳子 2020-07-03
Bグループ 前日勤務者= 水野真吾 2020-07-03
Bグループ 前日勤務者= 藤本望 2020-07-04
Bグループ 前日勤務者= 木口瞳子 2020-07-04
Bグループ 前日勤務者= 松田瑠美 2020-07-04
Bグループ 前日勤務者= 藤本望 2020-07-05
Bグループ 前日勤務者= 松田瑠美 2020-07-05
********前日勤務者がいません。 2020-07-06 Bグループ
Bグループ 前日勤務者= 山上恵実 2020-07-07
Bグループ 前日勤務者= 杉村青空 2020-07-07
Bグループ 前日勤務者= 木口瞳子 2020-07-07
Bグループ 前日勤務者= 石嶺利樹 2020-07-07
Bグループ 前日勤務者= 山上恵実 2020-07-08
Bグループ 前日勤務者= 徳重駿介 2020-07-08
Bグループ 前日勤務者= 杉村青空 2020-07-08
Bグループ 前日勤務者= 上道啓太 2020-07-08
Bグループ 前日勤務者= 水野真吾 2020-07-08
Bグループ 前日勤務者= 石嶺利樹 2020-07-08
Bグループ 前日勤務者= 水越智哉 2020-07-09
Bグループ 前日勤務者= 上道啓太 2020-07-09
Bグループ 前日勤務者= 水野真吾 2020-07-09
Bグループ 前日勤務者= 水越智哉 2020-07-10
Bグループ 前日勤務者= 藤本望 2020-07-10
Bグループ 前日勤務者= 西尾貴宏 2020-07-10
Bグループ 前日勤務者= 上道啓太 2020-07-10
Bグループ 前日勤務者= 松田瑠美 2020-07-10
Bグループ 前日勤務者= 水野真吾 2020-07-10
Bグループ 前日勤務者= 山上恵実 2020-07-11
Bグループ 前日勤務者= 長坂有里子 2020-07-11
********前日勤務者がいません。 2020-07-12 Bグループ
Bグループ 前日勤務者= 石嶺利樹 2020-07-13
Bグループ 前日勤務者= 徳重駿介 2020-07-14
Bグループ 前日勤務者= 長坂有里子 2020-07-14
Bグループ 前日勤務者= 木口瞳子 2020-07-14
Bグループ 前日勤務者= 上道啓太 2020-07-14
Bグループ 前日勤務者= 水野真吾 2020-07-14
Bグループ 前日勤務者= 石嶺利樹 2020-07-14
Bグループ 前日勤務者= 徳重駿介 2020-07-15
Bグループ 前日勤務者= 長坂有里子 2020-07-15
Bグループ 前日勤務者= 安達由佳 2020-07-15
Bグループ 前日勤務者= 上道啓太 2020-07-15
Bグループ 前日勤務者= 石嶺利樹 2020-07-15
Bグループ 前日勤務者= 山上恵実 2020-07-16
Bグループ 前日勤務者= 長坂有里子 2020-07-16
Bグループ 前日勤務者= 安達由佳 2020-07-16
Bグループ 前日勤務者= 山上恵実 2020-07-17
Bグループ 前日勤務者= 水越智哉 2020-07-17
Bグループ 前日勤務者= 藤本望 2020-07-17
Bグループ 前日勤務者= 松田瑠美 2020-07-17
Bグループ 前日勤務者= 水野真吾 2020-07-17
Bグループ 前日勤務者= 西尾貴宏 2020-07-18
Bグループ 前日勤務者= 松田瑠美 2020-07-18
Bグループ 前日勤務者= 長坂有里子 2020-07-19
Bグループ 前日勤務者= 西尾貴宏 2020-07-19
Bグループ 前日勤務者= 上道啓太 2020-07-20
Bグループ 前日勤務者= 徳重駿介 2020-07-21
Bグループ 前日勤務者= 杉村青空 2020-07-21
Bグループ 前日勤務者= 藤本望 2020-07-21
Bグループ 前日勤務者= 安達由佳 2020-07-21
Bグループ 前日勤務者= 木口瞳子 2020-07-21
Bグループ 前日勤務者= 山上恵実 2020-07-22
Bグループ 前日勤務者= 杉村青空 2020-07-22
Bグループ 前日勤務者= 長坂有里子 2020-07-22
Bグループ 前日勤務者= 藤本望 2020-07-22
Bグループ 前日勤務者= 安達由佳 2020-07-22
Bグループ 前日勤務者= 木口瞳子 2020-07-22
Bグループ 前日勤務者= 水野真吾 2020-07-22
Bグループ 前日勤務者= 山上恵実 2020-07-23
Bグループ 前日勤務者= 杉村青空 2020-07-23
Bグループ 前日勤務者= 長坂有里子 2020-07-23
********前日勤務者がいません。 2020-07-24 Bグループ
********前日勤務者がいません。 2020-07-25 Bグループ
********前日勤務者がいません。 2020-07-26 Bグループ
Bグループ 前日勤務者= 藤本望 2020-07-27
Bグループ 前日勤務者= 木口瞳子 2020-07-27
Bグループ 前日勤務者= 杉村青空 2020-07-28
Bグループ 前日勤務者= 長坂有里子 2020-07-28
Bグループ 前日勤務者= 藤本望 2020-07-28
Bグループ 前日勤務者= 安達由佳 2020-07-28
Bグループ 前日勤務者= 木口瞳子 2020-07-28
Bグループ 前日勤務者= 松田瑠美 2020-07-28
Bグループ 前日勤務者= 杉村青空 2020-07-29
Bグループ 前日勤務者= 長坂有里子 2020-07-29
Bグループ 前日勤務者= 安達由佳 2020-07-29
Bグループ 前日勤務者= 松田瑠美 2020-07-29
Bグループ 前日勤務者= 石嶺利樹 2020-07-29
Bグループ 前日勤務者= 山上恵実 2020-07-30
Bグループ 前日勤務者= 徳重駿介 2020-07-30
Bグループ 前日勤務者= 長坂有里子 2020-07-30
Bグループ 前日勤務者= 西尾貴宏 2020-07-30
Bグループ 前日勤務者= 松田瑠美 2020-07-30
Bグループ 前日勤務者= 石嶺利樹 2020-07-30
Bグループ 前日勤務者= 山上恵実 2020-07-31
Bグループ 前日勤務者= 徳重駿介 2020-07-31
Bグループ 前日勤務者= 水越智哉 2020-07-31
Bグループ 前日勤務者= 西尾貴宏 2020-07-31
Bグループ 前日勤務者= 石嶺利樹 2020-07-31
ポスト処理を終了しました。 1 (秒)

Pythonコード


import sc3


def 前日日勤者がいること(shift):
    print('前日'+shift+'者がいることを制約します')
    for gr in グループ:
        for day in 今月:
            vlist=[]
            for person in gr:
                v1=sc3.GetShiftVar(person,day-1,shift)
                v0=sc3.GetShiftVar(person,day,shift)
                v01=v1&v0
                vlist.append(v01)
            s='前日'+shift+daydef[day]
            sc3.AddSoft(sc3.Or(vlist),s,4)
def get_group(gr):
    if gr==Aグループ:
        return 'Aグループ';
    else:
        return 'Bグループ'

def post_main():
    shift='日勤'
    print('前日'+shift+'者がいることをチェックします')
    
    for gr in グループ:
        for day in 今月:
            b=False
            for person in gr:
                v1=shift_solution[person][day-1]
                v0=shift_solution[person][day]
                v01=False
                if v1==shift and v0==shift:
                    b=True
                    print(get_group(gr)+' 前日勤務者=',staffdef[person],daydef[day])
            if not b:
                print("********前日勤務者がいません。",daydef[day],get_group(gr))


前日日勤者がいること('日勤')

プロジェクト

プロジェクトは、以下です。なお、このプロジェクトは、アルゴリズム3,4は動作しません。予めご了承ください。

ダウンロード して、実装の参考にしてください。