2023年9月28日木曜日

スケジュールナースでの制約設計の考え方

制約設計に携わる方々のためのガイドです。 

1)能力差を知る

対決! 勤務表作成名人 vs 最強エンジン (nurse-scheduling-software.com)

素の能力が違います。どんなに能力に長けていても、最後は、トレードオフとなります。しかし、人のそれと、スケジュールナースのそれとは、全くレベルの異なるものです。スケジュールナースユーザは、物凄く精緻な制約でのトレードオフを行いがちなのですが、初期の能力差を思い出してください。人間には、出来ない次元でのトレードオフになっていると思います。つまり、人間より良い勤務表という意味では、とっくに達成されています。そこに時間をかける意味があるかどうか?自問自答する必要があると思います。

スケジュールナース適用前の人力解の実力を把握しておくことは、以降機会がないと思うので、特に適用前に測定しておくことをお勧めします。

2)稼動時と制約設計時では、考え方が異なる

制約を設計するときは、しっかりと原因解析を行います。ハード制約違反が、ルールの設定ミスを教えてくれることもあるからです。しかし、稼動時は、エラー指摘に従い、入力の修正だけを行い、エラー解析はしません。解析自体が面倒でありスキルを要するので、一般の方が行うには、ハードルが高すぎます。

希望休み数が多い職場が良いとは言えない (nurse-scheduling-software.com)

予定ブランクでは、エラーがない、もしくは殆どない、ということが目指すべき状態です。スケジュールナースの能力を最大に発揮するためです。エラーがない、ということは、未だ余裕があることを意味します。つまり、解空間がまだ広い状態です。どれだけ広いかは、分かりませんが、余裕があることだけは確かです。で、ブランクでも既に余裕がない状態、つまり、エラーがある状態からのスタートは、解空間に余裕がないのですから、残された選択肢もあまりない、という状態からのスタートになってしまいます。

3)制約することは、解空間を狭める。効率の良い制約設計

制約することは、解空間を狭めます。全員の負荷をフラットにすることも解空間を狭めます。

制約は出来るだけ少ない方が良いのです。

例えば、多くの職場で共通にある要望は、夜勤後の2連休を出来るだけ増やす、ということです。これに関連してのユーザから要求を多々頂くのですが、却ってその達成を難しくする制約も含まれていることがあります。

https://schedule-nurse.blogspot.com/2023/09/blog-post_5.html

一般に、

■行パターンの長い制約

■==制約

■プリセプタプリセプティ・会議

は、重い制約となります。(計算リソース負荷が重い制約と、解空間を極端に狭める制約と2種類あります。計算リソースを食う制約を実装すると解空間はそれほど狭めていないはずなのに、求解性能が落ちます。ソフト制約も広くはこの類になります。上二つは、計算リソースを食う制約、最後の一つは、明らかに解空間を狭める制約です。)

また、ギチギチに負荷分散すれば、まともに解が出なくなります。負荷分散を適度に緩めつつ、2連休達成を阻害する制約を、実装しないようにします。制約が多くなれば、難しくなるからです。多くの細かい制約を実装し、達成することは、Primary制約、夜勤後の2連休の達成を難しくします。Primary要件を達成した上での「もしも可能ならば」制約なのか? それとも、Primary要件よりも優先すべきなのか、を意識するようにしましょう。(往々にしてあるのは、多くの細かな制約を実現しようとして、Primary制約の方の達成度が落ちるという事象です。)

ユーザ要求の全てを満たせなくても良しとしましょう。1)で見たように、既にスケジュールナースの解は、人のそれを遥かに上回る精度と品質を同時に達成しています。




0 件のコメント:

コメントを投稿