この数独では、シフトは1個、日勤のみ使っています。Dayを3つのフェーズに分けて、各フェーズには、9個のタスクのうち1個だけが入ります。Pythonでの記述は以下の通りです。
import sc3
for day in 全日: #列制約
for ph in range(3):
for タスク in 全タスク:
s=daydef[day]+' '+タスク
V=[]
for 人 in 全スタッフ:
V.append(sc3.GetTaskVar(人,day,ph,タスク))
sc3.AddHard(sc3.SeqLE(1,1,V),s)
for 人 in 全スタッフ:#行制約
for タスク in 全タスク:
V=[]
s=staffdef[人]+' '+タスク
for day in 全日:
for ph in range(3):
V.append(sc3.GetTaskVar(人,day,ph,タスク))
sc3.AddHard(sc3.SeqLE(1,1,V),s)
for 人 in スタッフブロックトップ: #ブロック制約
for day in 全日:
for タスク in 全タスク:
V=[]
s=staffdef[人]+daydef[day]+' '+タスク
for i in range(3):
for j in range(3):
V.append(sc3.GetTaskVar(人+i,day,j,タスク))
sc3.AddHard(sc3.SeqLE(1,1,V),s)

0 件のコメント:
コメントを投稿