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)
0 件のコメント:
コメントを投稿