2025年7月8日火曜日

経験年数5年以下の組み合わせを禁止

import sc3
import itertools
import math

def 夜勤ペア禁止(list0,list1):
    for day in 全日:
        if  day<制約開始日:
            continue
        or_list0=[]
        or_list1=[]
        #sc3.print(daydef[day]+"夜勤ペア禁止しました。")
        for person in list0:
            v1=sc3.GetShiftVar(person,day,'入り')#
            sc3.print(staffdef[person]+' ')
            or_list0.append(v1)
        sc3.print('\n')
        for person in list1:
            v1=sc3.GetShiftVar(person,day,'入り')#
            sc3.print(staffdef[person]+' ')
            or_list1.append(v1)
        v1=sc3.Or(or_list0)
        v2=sc3.Or(or_list1)
        sc3.AddSoft(~(v1&v2),"夜勤ペア禁止",5)

        or_list0.clear()
        or_list1.clear()
        
        for person in list0:
            v1=sc3.GetShiftVar(person,day,'明け')#
            or_list0.append(v1)
        for person in list1:
            v1=sc3.GetShiftVar(person,day,'明け')#
            or_list1.append(v1)
        v1=sc3.Or(or_list0)
        v2=sc3.Or(or_list1)
        sc3.AddSoft(~(v1&v2),"夜勤ペア禁止",5)

        sc3.print(daydef[day]+"夜勤ペア禁止しました。\n")
def 休日日勤ペア禁止(list0,list1):
    for day in 今月休診日:
        or_list0=[]
        or_list1=[]
        #sc3.print(daydef[day]+"夜勤ペア禁止しました。")
        for person in list0:
            v1=sc3.GetShiftVar(person,day,'日勤')#
            or_list0.append(v1)
        for person in list1:
            v1=sc3.GetShiftVar(person,day,'日勤')#
            or_list1.append(v1)
        v1=sc3.Or(or_list0)
        v2=sc3.Or(or_list1)
        sc3.AddSoft(~(v1&v2),"休日日勤ペア禁止",5)
        sc3.print(daydef[day]+"休日日勤ペア禁止しました。\n")

def 夜勤人数は最大1人(slist):
    for day in 全日:
        if  day<制約開始日:
            continue
        list0=[]
        for person in slist:
            v1=sc3.GetShiftVar(person,day,'入り')#
            list0.append(v1)
        sc3.AddSoft(sc3.SeqError(0,1,1,list0),"夜勤人数は最大1人",5)

def 休日日勤人数は最大1人(slist):
    for day in 今月休診日:
        list0=[]
        for person in slist:
            v1=sc3.GetShiftVar(person,day,'日勤')#
            list0.append(v1)
        sc3.AddSoft(sc3.SeqError(0,1,1,list0),"休日日勤人数は最大1人",5)

def 合計年数未満の組み合わせを禁止する(years):#Mar302020
    print(str(years)+"年数未満の組み合わせを禁止します。")
    s=set() #set
    for person in 経験年数属性.keys():
        経験年数=経験年数属性[person]
        s.add(経験年数)
    for 経験年数 in s:
        if 経験年数 * 2 < years:#Mar302020 Self組み合わせ の総数和<=1に制約する
            slist=[]
            for person in 経験年数属性.keys():
                if 経験年数 == 経験年数属性[person]:
                    slist.append(person)
            夜勤人数は最大1人(slist)
            休日日勤人数は最大1人(slist)
                
    for v in itertools.combinations(s,2):
        if v[0]+v[1]=0:
            連休.append(D)
            D -=1
    #後方を探索する
    D=day+1
    while D<=制約終了日 and D in 休日:
        連休.append(D)
        D +=1
    #print(連休)
    連休.sort()
    print("連休",連休)
    return 連休#ソートした連休を返す


合計年数未満の組み合わせを禁止する(合計年数最小値) #Jul072025 マクロ引数に変更



経験年数をスタッフプロパティで設定し、Pythonでそれらを読み取り、指定合計年数最小値未満の全ての組み合わせを禁止しています。








合算年数の指定は、マクロにして、Pythonコードをいじらなくても良いようにしています。

ログ例です。Debug出力も兼ねています。
コンパイルの準備中
ソルバを呼び出し中です。
	制約をコンパイル中です。
	Python プロパティファイルの生成が終わりました。
5年数未満の組み合わせを禁止します。
経験年数1年2年
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-01夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-02夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-03夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-04夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-05夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-06夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-07夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-08夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-09夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-10夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-11夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-12夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-13夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-14夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-15夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-16夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-17夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-18夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-19夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-20夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-21夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-22夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-23夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-24夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-25夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-26夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-27夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-28夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-29夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-30夜勤ペア禁止しました。
2025-06-01休日日勤ペア禁止しました。
2025-06-07休日日勤ペア禁止しました。
2025-06-08休日日勤ペア禁止しました。
2025-06-14休日日勤ペア禁止しました。
2025-06-15休日日勤ペア禁止しました。
2025-06-21休日日勤ペア禁止しました。
2025-06-22休日日勤ペア禁止しました。
2025-06-28休日日勤ペア禁止しました。
2025-06-29休日日勤ペア禁止しました。
経験年数1年3年
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-01夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-02夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-03夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-04夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-05夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-06夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-07夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-08夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-09夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-10夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-11夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-12夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-13夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-14夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-15夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-16夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-17夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-18夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-19夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-20夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-21夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-22夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-23夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-24夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-25夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-26夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-27夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-28夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-29夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-30夜勤ペア禁止しました。
2025-06-01休日日勤ペア禁止しました。
2025-06-07休日日勤ペア禁止しました。
2025-06-08休日日勤ペア禁止しました。
2025-06-14休日日勤ペア禁止しました。
2025-06-15休日日勤ペア禁止しました。
2025-06-21休日日勤ペア禁止しました。
2025-06-22休日日勤ペア禁止しました。
2025-06-28休日日勤ペア禁止しました。
2025-06-29休日日勤ペア禁止しました。

0 件のコメント:

コメントを投稿