この数独では、シフトは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 件のコメント:
コメントを投稿