2024年3月6日水曜日

週当たりの勤務数について

 Q. Aさんは日曜始まりの1週間に4日勤務の条件があります。スケジュールナースのブログを見てPython制約でできるのを読みましたが、どのように解決したらよいか分からない状況です。自分なりに行制約の「Aさん」のタブに制約をしてみましたが何か間違っているような。。。。Python制約なら便利そうなのですが。。



Ans.
良いと思います。解もちゃんと4回づつになっていました。上のように、マウスホイールボタンを押して、各集合が意図通りになっていることを確認すると間違いなく制約できます。



端数の第5週は手入力にしてもよいでしょう。

別解は、以下をご覧ください。

「日曜日始まりの一週間」を先月からの1週間も見て継続する場合のやり方です。

表示開始日が6日間に限定した場合の話ですが、Pythonを使わなくても可能です。

先月が6日分あるとすると、以下の色部分に最初の日曜日がどのパターンにも一個だけ含まれます。

これを利用して、次のように曜日集合を構築出来ます。


最初の日曜日の定義です。
日曜日の第一週集合です。
同様にして第2週も定義できます。
第5週の定義です。月によっては第6週まで必要です。


これで、必要な曜日集合が定義できました。

定義した集合を用いて制約します。


<端数の処理>

第5・第6週は、端数になる可能性があります。そのためマクロを定義します。

次は、マクロの値をマウスホイールボタンを押して確認しました。第5週の値は、1になっていることが分かります。ちゃんと端数処理されていることが分かります。(第6週の値は0になっていました。)

マクロの記述です。
Cは、集合要素を数える関数です。

切り捨て処理を0桁目で行う処理です。rounddown(X,1)だと小数点第一まで出ますが整数でしか処理できないので、0を指定しています。従来floorを使用していましたが、間違いでした。この例のようにrounddown/roundupが正しい切り捨て、切り上げ処理になります。


注意:

残念ながら自動で次月も自動計算するように出来ていないので、その月毎、マクロの設定を押す必要があります。次のリリースで改善予定です。

→BUILDMAR072024で改善しました。

https://www.nurse-scheduling-software.com/japanese/constraints_faqs/chapter35/

0 件のコメント:

コメントを投稿