子育て中のスタッフは土休みの日のどちらかを休みにしたい

一方で、

■明け後の休みは、2連休という要求
■土日連休1回は欲しい

という要求もあり、全てを満たすことは、難しいかもしれません、という状況を想定します。

まず、制約についてですが、
土日のどちらか休み → 土日もどちらも休みでないを禁止

にすれば、GUIで記述できます。

どちらか →OR →AND 休み → ~(~休み) → ~(休みでない)

昔、習ったド・モルガンの法則という奴です。

A|B=~(~A&~B)

~(~A&~B)は、~A&~Bを禁止というスケジュールナースの禁止制約で記述出来ます。

ところで、前述の事情もあり、全部の土日は、難しいかもしれない、であれば、 何らかの違反回数以下を子育て中の全員に保証できる数字X以下に設定する、が現実的ではないかと思われます。

具体的には、X回の違反までは許容する。しかしX+1回は、ペナルティが発生する、という風にします。

試行錯誤の結果、以下のように今回のプロジェクトは、1回の違反は、ペナルティとしない実装としました。



スタッフプロパティシート

次のように、土日のどちらかを休みとした場合(子育て中),土日連休は諦めてもらうこととしました。 その代わりに、今回のプロジェクトの場合、子育て中の全員が1回の許容となり、残りの3土日については、子育て中のスタッフ全員が土日のどちらかが休みとすることができました。

もし、どの土日も。どちらかは必ず休みたいとするスタッフがいたとしたら、さらに、夜勤後の2連休の重要度をそのスタッフだけ下げて、この制約を上げれば、達成できると思います。
そこまでの記述までは、今回行いませんが、そういうプロパティを設けて一般化することは出来ます。
いずれにせよ、スタッフの個別事情に配慮しつつ、全体としての公平感は維持する必要がありますから、その施設・病棟での公平ルールとは何か?を常に意識しながら、制約を書くことは重要であると思います。



プロジェクト

プロジェクトは、以下です。

ダウンロード して、実装の参考にしてください。