2024年2月11日日曜日

FirstDay LastDayの仕様変更

 FirstDay/LastDayの記述があるものとします。

変更前:FirstDay/LastDayが、空集合だと、あたかもなかったかのように動作します。(常にマッチします。)


変更後:FirstDay/LastDayが空集合ならマッチしません。

変更の理由は、たまたま空集合を記述する機会があり、思うように動作しませんでした。(変更後の方が実装であると思い込んでいました)ところが、初期の設計仕様を見ると、上のようになっていました。直感的にも、下の方が良いのではないか?と思い修正しました。

2024年2月10日土曜日

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

 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

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


■マクロ設定



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

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


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


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


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

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


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


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


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


2024年2月9日金曜日

シフト定義に業務開始時刻を追加

 次のバージョンでは、下のように業務開始時刻が追加されます。


内部的には、何の作用もしません。記述もオプションです。

しかし、Pythonで、業務時間と、業務開始時刻は参照することが可能になります。

ルクセンブルグでの7日スライディングWindow中44時間の休みない休憩が必要という顧客要求を満たすために、搭載することにしました。(記述は、Python)

How do you implement 44 hours of rest *consecutively* within 7 days period? (nurse-scheduling-software.com)

2024年2月8日木曜日

Feb042024BUILD 内容

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


2024年2月7日水曜日

Python Code Generator

 スケジュールナースを使う場合、print出力は、求回右画面に出力されます。これをコピペすればよいのですが、以前バージョンの場合、全体のコピーになっていました。


最新バージョンではこれを改善し、選択した部分のコピーにしました。

これにより、生成コードをコピペ出来るようになりました。


2024年2月6日火曜日

夜勤は4人だが、1年生が働く夜勤は5人体制にしたい,長日勤は5人体制(1年生含んでOK)にしたい。

 変則2交代の原則は、長入明で、全て同じ人がアサインされることです。夜勤は、4人、長日勤は、5人だと、この原則を逸脱するような気がします。しかし、これも共通化する部分を作ることによって、この原則を貫きます。具体的には、夜勤4人、長日勤4人としてこれをコアとする制約を書きます。その上で、

1)1年生は、Max1人夜勤

2)長日勤単独は、1年生を含んで1人確保

とすれば、上記要求を満たすことになります。

このように、共通部は何か?をまず考え、それ以外の部分を次に考える、ということをすると良いと思います。