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休日日勤ペア禁止しました。