シフト勤務表で日勤者数を日毎に変えるには?
NoTaskVarのみのタスク勤務表にすることで、記述可能となります。
(1) フェーズ定義で、日勤をPH0にバインドします。
(2) タスク定義では、NoTaskVarのみとしオプションをチェックします。
(3) タスク予定基数制約で、NoTaskVarとグループ属性を指定し、日勤者数を記述します。
(4) フェーズ列制約グループを追加
(5) 列制約で、(3)を参照する制約を記述します。
フェーズ定義で、日勤をPH0にバインド
シフトを日勤として、右クリック「コア列追加」で、チェックします。これで、フェーズ数1のタスク勤務表になります。
タスク定義では、NoTaskVarのみとしオプションをチェック
下のようにタスクは、NoTaskVarを残し全て外します。また、オプションをチェックするのを忘れないでください。
タスク予定基数制約で、NoTaskVarとグループ属性を指定し、日勤者数を記述
タスク名は、NoTaskVarの一択です。グループ名は、制約するべきグループ集合を指定します。 下段が最小、上段が最大になります。これで、このラインの参照名が決まります。
フェーズ列制約グループを追加
列制約で、(3)を参照する制約を記述
(3)を参照します。下のグループ集合は、必ずしも、予定基数制約名と一致する必要はありません。ソルバが参照しているのは、下のグループ集合です。
予定基数制約のグループ名は、制約を区別するための名前を作る目的のために必要です。(ソルバは参照しません)
同一グループに対して、違うソフト制約レベルを割り当てたいときは?
老健勤務表 のように、風呂日とそれ以外で違うソフト制約レベルとしたい場合があります。
その場合は、同じグループ集合でも名前を分けるために、別名のグループ集合定義します。(プロジェクト老健2B)
プロジェクト
プロジェクトは、以下です。
ダウンロード
して、実装の参考にしてください。