上は、下のソースによる解です。月曜日に公休を割り当てる制約になっています。「全スタッフ」と「月」は、「ソース全体」の中で定義されています。
import sc3
for person in 全スタッフ:
for day in 月:
v=sc3.GetShiftVar(person,day,'公休')
s=staffdef[person]+' '+ daydef[day]+ ' 公休設定しました。'
print(s)
sc3.AddHard(v,s)
全スタッフ
GUIでは、「グループ定義」で定義されています。
月
GUIでは、「定義済み曜日」の中で定義されています。
sc3.GetShiftVar(person,day,‘シフト名’)
■スケジュールナースの各シフトは、OneHot エンコーディングされています。
各人、各日にシフト数だけのバイナリ変数があります。
つまり、1になるシフトは、各人、各日あたり1個以上、1個以下です。
■ユーザは、任意のシフト変数を上の書式で、取り出すことが出来ます。
ここで、person/dayは、ゼロベースインデックス変数
シフトは、インデックス変数または、ストリングです。
■sc3は、py thonに組み込んであるスケジュールナースのライブラリ名です。スケジュールナースの独自命令は、全てsc3 .xx となります。
■import sc3が呼び出す前に記述されている必要があります。
sc3.AddHard(v,string)
ハード制約を追加する関数です。
vは、GetShiftVarで取得したシフトVariable、またはsc3サポート制約関数または、And/Or/Not/SeqExpr/SeqCompの出力変数になります。
vは、各スタッフ月曜日の公休という変数になります。AddHardは、これが成立(true)になるように動作します。
stringは、解がないときの解析で使用します。(矛盾する原因の列挙で使用します。)