2020年4月18日土曜日

ソフトエラーの対処方法

サポート事例から。
夜勤2人のところ、夜勤3人の箇所(黄色)があります。Why? 

エラーには、必ず理由があります。ソルバーは、目的関数値(重みペナルティの総和)が最小となるように作用します。そうなる原因は、必ずあります。

原因を調べるために、該当制約を見ます。
制約タイプは、ソフトスタッフ数最大最小になっています。この制約タイプは、
最大:ソフトレベル1
最小:ソフトレベル7
となっています。レベル7は、優先度最強、レベル1は、優先度最小です。つまり、2人より上回る側(最大)の優先度は、もっとも低いレベルになっています。大体、制約による結果というのは、両方の側のせめぎありによる戦いあるいは妥協の産物です。一方の側だけの制約というのは殆どありません。ある現象が出たら、そう至らしめる何かがあるはずです。

一方、行制約を見ると
個人ごとに夜勤回数設定が違うために、色々な制約が並んでいますが、大方ソフトレベルは6になっています。しかも、最小回数を規定しているので、夜勤回数最小指定は、日々の夜勤スタッフ数を上げる側に作用します。

まとめると
列制約最大規定       2人 ソフトレベル1 2人を上回る側にペナルティ重み
行制約夜勤回数最小規定 X人 ソフトレベル6 最小回数を下回る側にペナルティ重み
が発生することになります。この重みは、


具体的に重みは、列制約:1で10、行制約:6で1000の重みが与えられています。
各スタッフの最小夜勤回数を守る方が、夜勤スタッフ数2を破るよりペナルティがが少なく手済みます。ソルバーは、ペナルティ和が最小になる方を躊躇無く選択します。つまり、今回の現象は、優先度の違いによるものです。

不思議なのは、今までこの制約でやってきて、この現象は出たことはありません。なぜ、今月だけ、出たのでしょうか?
実は、今月から不足していたスタッフが充足したそうです。結果、人余りの方向に生じたということです。

解決策は、ソフト制約レベルは、最大最小共レベル7にすることです。
制約タイプを通常タイプに変更することで、最大最小ともレベル7に作用します。

修正後は、上記のように2人になりました。別な解決方法としては、行制約の最小人数を調整することでも可能ですが、クライアントの意図として、上記制約の方が適切である、ということです。

初期の制約設定は、私が勝手に設定したものですが、何ヶ月かやっていると上記のような細かい
調整が必要な箇所が出てきます。最低3ヶ月の期間を頂いているのは、このようにブラシュアップする期間が必要な為です。

以上の操作動画は、次です。
https://www.nurse-scheduling-software.com/publications/video/address_soft_error.AVI




0 件のコメント:

コメントを投稿