A new formulation and solution for the nurse scheduling problem: A case study in Egypt - ScienceDirect
この論文の通りに実装してみました。
1.The planning horizon is one week, i.e., 7 days.
2. Each day has three types of shifts: morning shift (7 h) from
8:00 AM to 3:00 PM, afternoon shift (7 h) from 3:00 PM to
10:00 PM, and night shift (10 h) from 10:00 PM to 8:00
AM.
3. Saturday is the first day of each week.
4. The hospital administration is aiming to limit the nurses to
work between six and eight shifts a week.
5. The head nurses work only in the morning shifts
Phaseは、3フェーズで、
早番 7時間
遅番 7時間
夜勤 10時間
を定義します。
です。恐ろしいのは、これに残業がオプションで加わります。つまり、10+7で最長17時間勤務がある、ということ。日本より過酷な勤務をする国は、私が知る限り、ここだけです。(EUでは、そもそも10時間以上の連続勤務はあり得ない)
Each nurse takes at least one day off.
Each nurse takes at least two successive shifts off working one shift.
If a nurse is assigned to two consecutive shifts, then he/ she takes at least three
1シフト勤務なら、そのあと2連続以上のシフトインターバル、2シフト連続勤務なら、3連続以上のシフトインターバルにします。
法律上、週に56時間Maxなので、次のようにします。また、週1回の休みを制約します。
従来、ExclusiveCheckで、このフェーズ変数の組み合わせ集合は許していませんでしたが、
Primitive(単独Phaseタスク)同士は、許容する仕様変更を行いました。これにより、各フェーズ毎の時間加算が可能になりました。
主任は、早番だけです。
また、上記論文では、前週からの連続性については、言及されていませんが、考慮するべきでしょう。
解は、以下のように、週6シフトを超えた分がコスト超過とみなし、それを最小化する系となっています。
Gurobiで、1秒以下とのことでしたが、スケジュールナースAL3 で、4秒程度でした。
スタッフ数は、46人ですが、スケジューリング期間が1週間と短く小さいインスタンスです。一般に、小さいインスタンスではMIPソルバが有利です。
いつも思うのは、モデリング時間です。世の中にあるナーススケジューリング関係の論文は多分1万を超えていると思います。仮にソルバーが解く時間が1秒だったとしても、モデリング時間は、恐らく、専門家が記述して、今回のような小規模でもデバッグ検証で十数時間かかると思います。だとすると、人との比較は、十数時間+1秒 対 人力時間 であるべきだと思います。
ナーススケジューリング問題でアカデミックが抜けている視点は、モデリング時間とコンフリクト解析 です。人がモデリングする以上、どうしても間違いがあり、そこにデバッグの必要性が生じます。MIPソルバにしても、それに対して解析の手段を持ち合わせてはいません。ハードエラーに対する原因解析機構があるのとないのでは、デバッグ時間に雲泥の差が生じます。私が知る限りにおいて、ハードエラー解析機構を備えているのは数あるソルバーの中でもスケジュールナースのみです。
スケジュールナースなら、上記問題も15分あれば、モデリング可能です。