Q.
行制約グループ1の7行目で6連続勤務禁止の制約をしているのですが、求解するとxxの先月29日から今月3日まで6連続勤務となってしまいます。
解決方法をお願いします
Ans.
パターン最初の曜日タイプの指定を外してください。
「パターン最初の曜日タイプ」がブランクだとすると、7日パターンの場合、
先月部から制約されます。これがあるべき姿です。Q.
行制約グループ1の7行目で6連続勤務禁止の制約をしているのですが、求解するとxxの先月29日から今月3日まで6連続勤務となってしまいます。
解決方法をお願いします
Ans.
パターン最初の曜日タイプの指定を外してください。
「パターン最初の曜日タイプ」がブランクだとすると、7日パターンの場合、
先月部から制約されます。これがあるべき姿です。Q. Aさんは日曜始まりの1週間に4日勤務の条件があります。スケジュールナースのブログを見てPython制約でできるのを読みましたが、どのように解決したらよいか分からない状況です。自分なりに行制約の「Aさん」のタブに制約をしてみましたが何か間違っているような。。。。Python制約なら便利そうなのですが。。
「日曜日始まりの一週間」を先月からの1週間も見て継続する場合のやり方です。
表示開始日が6日間に限定した場合の話ですが、Pythonを使わなくても可能です。
先月が6日分あるとすると、以下の色部分に最初の日曜日がどのパターンにも一個だけ含まれます。
これを利用して、次のように曜日集合を構築出来ます。これで、必要な曜日集合が定義できました。
定義した集合を用いて制約します。
<端数の処理>
第5・第6週は、端数になる可能性があります。そのためマクロを定義します。
次は、マクロの値をマウスホイールボタンを押して確認しました。第5週の値は、1になっていることが分かります。ちゃんと端数処理されていることが分かります。(第6週の値は0になっていました。)
マクロの記述です。注意:
残念ながら自動で次月も自動計算するように出来ていないので、その月毎、マクロの設定を押す必要があります。次のリリースで改善予定です。
→BUILDMAR072024で改善しました。
https://www.nurse-scheduling-software.com/japanese/constraints_faqs/chapter35/
最近のサポート経験から、
看護系ではハード制約で躓く傾向がある、
介護系では、リソースのないところでどうやって人員を捻りだすか?
について、各々トレニンーグが必要との想いを抱くようになりました。
そこで、上記異なる二つの目的を一つのトレーニングプロジェクトにしてみました。目標となる解を示してあります。この解に準じた解を引き出せるようならスケジュールナース有段者、と言えるのではないかと思います。普段のシフト形態とは異なるかもしれませんが、シフトには依存しないように書いたので、どなた様も挑戦して頂きたいと思います。制約そのものを弄ることなく、ハード制約とソフト制約、スタッフプロパティ設定・重みだけで、全く違った解になる醍醐味を味わっていただけます。
schedule_nurse_practical_training.pdf (nurse-scheduling-software.com)
ツールチップの改善
https://schedule-nurse.blogspot.com/2024/02/blog-post_13.html
フェーズ変数集合の仕様変更
https://schedule-nurse.blogspot.com/2024/03/blog-post.html
マークソフト予定入力
https://schedule-nurse.blogspot.com/2024/02/excel_29.html
Conflict解析
Rowフェーズモード、表示位置バグ修正
クラッシュ改善
この論文の通りに実装してみました。
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連続以上のシフトインターバルにします。
Gurobiで、1秒以下とのことでしたが、スケジュールナースAL3 で、4秒程度でした。
スタッフ数は、46人ですが、スケジューリング期間が1週間と短く小さいインスタンスです。一般に、小さいインスタンスではMIPソルバが有利です。
いつも思うのは、モデリング時間です。世の中にあるナーススケジューリング関係の論文は多分1万を超えていると思います。仮にソルバーが解く時間が1秒だったとしても、モデリング時間は、恐らく、専門家が記述して、今回のような小規模でもデバッグ検証で十数時間かかると思います。だとすると、人との比較は、十数時間+1秒 対 人力時間 であるべきだと思います。
ナーススケジューリング問題でアカデミックが抜けている視点は、モデリング時間とコンフリクト解析 です。人がモデリングする以上、どうしても間違いがあり、そこにデバッグの必要性が生じます。MIPソルバにしても、それに対して解析の手段を持ち合わせてはいません。ハードエラーに対する原因解析機構があるのとないのでは、デバッグ時間に雲泥の差が生じます。私が知る限りにおいて、ハードエラー解析機構を備えているのは数あるソルバーの中でもスケジュールナースのみです。
スケジュールナースなら、上記問題も15分あれば、モデリング可能です。