2019年12月4日水曜日

数独 Python Task版の実装

現在、チュートリアルで、タスク記述例の作成を行っています。
この数独では、シフトは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 件のコメント:

コメントを投稿