2024年2月10日土曜日

新人初回夜勤区間は、新人を含めないで通常夜勤者数を確保したい

 Q.

●実現したい仕様

新人であるスタッフQ2月から夜勤のシフトが始まる。

夜勤は通常2名体制だが、スタッフQが初夜勤時は新人以外2名、新人1名の計3名で組みたい

この3名の特別体制は月1回まで、それ以降は新人も含めた2名体制になる。


※初夜勤の日は仮で2/15()と設定し、スタッフQ2/14()までの勤務は日勤(-)または休み(×)

いずれかのみに設定(予定入力上で設定済)


●ご教示頂きたいこと 

・今回は仮で2/15()を特別体制の日に指定しましたが、

これを2/132/16のいずれかに設定、という形で幅をもたせることは可能ですか?

 

・私が勉強不足なため、Pythonによる制約までは対応できていません。一応、特別体制の日を指定すれば、上記の制約で対応はできているため、無理に複雑な制約を組み合わせる必要はないとも考えています。目的の実装のために多くの時間を割いてしまうのは、スケジュールナースのアプリを利用する上で本末転倒になってしまうため、簡便に実装できるのであれば設定したいという考えです。


Ans.

おっしゃる通りです。が、簡単ではありません。Pythonを使わずに実装することは可能ですが、リニアペア制約やマクロ等、最近の版で実装した部分の理解が必要となります。それらを駆使すれば、スマートに書けるので、是非挑戦して頂けたら嬉しいです。


■新人初回夜勤区間の設定








■列制約の変更

初回夜勤区間以外の区間を制約します。



■行制約の追加

初回夜勤区間の新人の夜勤回数をマクロで指定しています。


■ペア制約追加

A==B+offsetになります。新人者数==全夜勤者数-2です。

新人が1名時は、1=全夜勤者数-2

0名時は、0=全夜勤者数-2

となります。以上は、初回夜勤区間のみ作用するので、それ以外について、列制約で制約する必要があります。


■マクロ設定



初回夜勤区間の日数を数えて、空集合なら0、それ以外は、設定値D3にしています。
これは、空集合時は、行制約を制約しないようにするためです。

また、余裕があったら実装のメモや、制約設計者から使用者へのメッセージや使用法等、書いておくと吉です。


キーポイントは、ペア制約にあります。しかし、他に重要なポイントととして、メンテしなくてもよい、ということがあります。


上のような多岐の制約に影響を及ぼす場合、大体時間が経つと、実装の中身を忘れてしまうのが常です。


ですから、「ここだけいじればいいんだ」 具体的には、新人初回夜勤区間だけ定義すればよい、

空集合時は、通常通り動く、次月、先月集合状態のままでも動く。


というのが理想的な実装になります。次回また入職者が入ってきたときに、そこだけを定義すればよい、他に何もメンテする必要がない。。。次回も楽ではないでしょうか。


→許可を頂き、制約FAQsにプロジェクトをアップしました。


新人初回夜勤区間は、新人を含めないで通常夜勤者数を確保したい (nurse-scheduling-software.com)


0 件のコメント:

コメントを投稿