シフト定義に業務開始時刻を追加
https://schedule-nurse.blogspot.com/2024/02/blog-post_9.html
FirstDay LastDayの仕様変更
https://schedule-nurse.blogspot.com/2024/02/firstday-lastday.html
FirstDay/LastDayの記述があるものとします。
変更前:FirstDay/LastDayが、空集合だと、あたかもなかったかのように動作します。(常にマッチします。)
Q.
●実現したい仕様
新人であるスタッフQが2月から夜勤のシフトが始まる。
夜勤は通常2名体制だが、スタッフQが初夜勤時は新人以外2名、新人1名の計3名で組みたい。
この3名の特別体制は月1回まで、それ以降は新人も含めた2名体制になる。
※初夜勤の日は仮で2/15(木)と設定し、スタッフQの2/14(水)までの勤務は日勤(-)または休み(×)の
いずれかのみに設定(予定入力上で設定済)
●ご教示頂きたいこと
・今回は仮で2/15(木)を特別体制の日に指定しましたが、
これを2/13~2/16のいずれかに設定、という形で幅をもたせることは可能ですか?
・私が勉強不足なため、Pythonによる制約までは対応できていません。一応、特別体制の日を指定すれば、上記の制約で対応はできているため、無理に複雑な制約を組み合わせる必要はないとも考えています。目的の実装のために多くの時間を割いてしまうのは、スケジュールナースのアプリを利用する上で本末転倒になってしまうため、簡便に実装できるのであれば設定したいという考えです。
Ans.
おっしゃる通りです。が、簡単ではありません。Pythonを使わずに実装することは可能ですが、リニアペア制約やマクロ等、最近の版で実装した部分の理解が必要となります。それらを駆使すれば、スマートに書けるので、是非挑戦して頂けたら嬉しいです。
■新人初回夜勤区間の設定
■列制約の変更
初回夜勤区間以外の区間を制約します。
■行制約の追加
初回夜勤区間の新人の夜勤回数をマクロで指定しています。
■ペア制約追加
A==B+offsetになります。新人者数==全夜勤者数-2です。
新人が1名時は、1=全夜勤者数-2
0名時は、0=全夜勤者数-2
となります。以上は、初回夜勤区間のみ作用するので、それ以外について、列制約で制約する必要があります。
■マクロ設定

キーポイントは、ペア制約にあります。しかし、他に重要なポイントととして、メンテしなくてもよい、ということがあります。
上のような多岐の制約に影響を及ぼす場合、大体時間が経つと、実装の中身を忘れてしまうのが常です。
ですから、「ここだけいじればいいんだ」 具体的には、新人初回夜勤区間だけ定義すればよい、
空集合時は、通常通り動く、次月、先月集合状態のままでも動く。
というのが理想的な実装になります。次回また入職者が入ってきたときに、そこだけを定義すればよい、他に何もメンテする必要がない。。。次回も楽ではないでしょうか。
→許可を頂き、制約FAQsにプロジェクトをアップしました。
新人初回夜勤区間は、新人を含めないで通常夜勤者数を確保したい (nurse-scheduling-software.com)
次のバージョンでは、下のように業務開始時刻が追加されます。
しかし、Pythonで、業務時間と、業務開始時刻は参照することが可能になります。
ルクセンブルグでの7日スライディングWindow中44時間の休みない休憩が必要という顧客要求を満たすために、搭載することにしました。(記述は、Python)
ShiftAggregate Operatorなしでエラーにならない → sanity check追加
Conflict Analysis →改善
Grey ->BlackになるBug → 修正
Solving Window右ペインコピー → 改善
https://schedule-nurse.blogspot.com/2024/02/python-code-generator.html
pythonでファイル操作は、ディレクトリを戻す →対策
https://schedule-nurse.blogspot.com/2024/02/python.html
マクロの浮動小数サポート
https://schedule-nurse.blogspot.com/2024/01/blog-post_30.html
スケジュールナースを使う場合、print出力は、求回右画面に出力されます。これをコピペすればよいのですが、以前バージョンの場合、全体のコピーになっていました。
最新バージョンではこれを改善し、選択した部分のコピーにしました。
変則2交代の原則は、長入明で、全て同じ人がアサインされることです。夜勤は、4人、長日勤は、5人だと、この原則を逸脱するような気がします。しかし、これも共通化する部分を作ることによって、この原則を貫きます。具体的には、夜勤4人、長日勤4人としてこれをコアとする制約を書きます。その上で、
1)1年生は、Max1人夜勤
2)長日勤単独は、1年生を含んで1人確保
とすれば、上記要求を満たすことになります。
このように、共通部は何か?をまず考え、それ以外の部分を次に考える、ということをすると良いと思います。