2026年6月17日水曜日

Q.明け翌日が会議日であるなら日勤、それ以外は休みとなるようにしたい

 Q以下に記述してみましたが、

期待通りに動きません

Ans.

まずは、明けの後、「日勤または休み」を記述します。

シフト集合は、以下で記述します。


これで、明けの後に、「休み」または「日勤」に限定しました。

次に「明けの後の休みパターン」で会議日を禁止します。


これだけでは、明けのあと、会議日以外では、休みになるか日勤になるか特定されません。

そこで、次を追加します。

これを言葉で言うと
■「明けの後の日勤パターン」は、明けの翌日が職員会議日以外では禁止
となります。
ここで、「職員会議ではない」は、以下の最後行のように「でない」演算子を「職員会議」に適用して作成しました。



これで、題意の設定が完了しました。



ちょっと難しかったと思います。一般には、次の順序で考えると良いでしょう。

1)まず、あり得る状態を制約(1/2行目→明けの後のあり得ない状態を排除する) 

2)1)状態のなかで、さらに細かいところを詰めていく(制約していく 3/4行目、全ケースを網羅する)

結果的に全ケースを網羅している、ことに気づかれたでしょうか? 最初から全ケースを網羅しようとすると、考えること自体が面倒になってしまいますが、このように一行一行、パターン作成→解確認 で確認しながら作成するやり方もアリです。制約を言葉にしながら進むことがポイントです。

他に、
■通常パターンをソフト制約にして、
■イレギュラーを予定でハード制約する、
方が実装は簡単かとは思います。あまり美しくはないですがこれもアリです。


0 件のコメント:

コメントを投稿