夜勤2人のところ、夜勤3人の箇所(黄色)があります。Why?
エラーには、必ず理由があります。ソルバーは、目的関数値(重みペナルティの総和)が最小となるように作用します。そうなる原因は、必ずあります。
原因を調べるために、該当制約を見ます。
制約タイプは、ソフトスタッフ数最大最小になっています。この制約タイプは、
最大:ソフトレベル1
最小:ソフトレベル7
となっています。レベル7は、優先度最強、レベル1は、優先度最小です。つまり、2人より上回る側(最大)の優先度は、もっとも低いレベルになっています。大体、制約による結果というのは、両方の側のせめぎありによる戦いあるいは妥協の産物です。一方の側だけの制約というのは殆どありません。ある現象が出たら、そう至らしめる何かがあるはずです。
一方、行制約を見ると
個人ごとに夜勤回数設定が違うために、色々な制約が並んでいますが、大方ソフトレベルは6になっています。しかも、最小回数を規定しているので、夜勤回数最小指定は、日々の夜勤スタッフ数を上げる側に作用します。
まとめると
列制約最大規定 2人 ソフトレベル1 2人を上回る側にペナルティ重み
行制約夜勤回数最小規定 X人 ソフトレベル6 最小回数を下回る側にペナルティ重み
が発生することになります。この重みは、
各スタッフの最小夜勤回数を守る方が、夜勤スタッフ数2を破るよりペナルティがが少なく手済みます。ソルバーは、ペナルティ和が最小になる方を躊躇無く選択します。つまり、今回の現象は、優先度の違いによるものです。
不思議なのは、今までこの制約でやってきて、この現象は出たことはありません。なぜ、今月だけ、出たのでしょうか?
実は、今月から不足していたスタッフが充足したそうです。結果、人余りの方向に生じたということです。
解決策は、ソフト制約レベルは、最大最小共レベル7にすることです。
制約タイプを通常タイプに変更することで、最大最小ともレベル7に作用します。
修正後は、上記のように2人になりました。別な解決方法としては、行制約の最小人数を調整することでも可能ですが、クライアントの意図として、上記制約の方が適切である、ということです。
初期の制約設定は、私が勝手に設定したものですが、何ヶ月かやっていると上記のような細かい
調整が必要な箇所が出てきます。最低3ヶ月の期間を頂いているのは、このようにブラシュアップする期間が必要な為です。
以上の操作動画は、次です。
https://www.nurse-scheduling-software.com/publications/video/address_soft_error.AVI
0 件のコメント:
コメントを投稿