2. 3交代特定28日週休8日とは別に月毎の勤務表設計例

28日サイクルで週休8回は、決まっています。基点は、今年の場合3月17日でそのサイクルは未来永劫続きます。それとは無関係に勤務表は月単位(1−31日)で勤務表を作る例です。大変、ややこしいのですね。

しかし、どのような月でも、下のように先月28日と今月28日に分解できます。



前の方の28日を先月28日、後ろの方の28日を今月28日として、それぞれ休み8回に制約すればよいことが分かります。この28日は、月毎にズレて行きますので、毎月、定義し直す必要があります。このようにすると、28日の約2倍の日数の勤務表を作ることになります。しかし、先月の勤務は既に過去のものなので、予定値として入力することになりますから、計算機は考える必要はありません。また、来月の分の勤務まで決定してしまうことになりますが、実際に使うのは、今月分だけで来月は
来月部の今月解は使用していません。

来月の分まで考えるのは、一見無駄のような気がしますが、今月内の休みが、平均的に分布していないと、来月の勤務表で8回をキープ出来なくなる恐れが生じます。上図の通り28日単位で予め考えておけば、少なくとも1解の存在保証は得られることになります。 (28日は、例えば、14日でも良いのかもしれませんが、少なくとも1解が存在する、という保証は得られなくなってしまいます。) ナーススケジューリング問題の場合、局所部の別解というのは殆どないので、広い範囲で見ておいた方が、よりフレキシブルに解を得られやすいと考えられます。 また、頑張ればよいのは計算機の側で、人間側は、月によらず、常に28日単位で考え易いという利点もあります。

1 制約仕様

コア制約と希望制約に分けて記述します。
かなり細かな制約になっています。

○コア制約

●三交代、逆循環(日勤→深夜→準夜)あり
●勤務者29名(師長1、日勤のみ4、新人2、それ以外22)
●師長は病棟夜勤せず
●A,Bの2チーム制(A13、B14名) 、平日、土日とも各チーム必ず3人以上
●救急日(月の半分程度、土日も救急日あり)は1名の遅出勤務あり(師長・副師長を除く)
●新人は2人、平日日勤のみ(6月から夜勤あり)
●育児時短勤務者4人(土日も勤務可、日勤のみで遅出などもなし)
●夜勤は3人、A,B各チーム一人以上
●一月の夜勤回数は8回までだが、9回もあり
●特定の28日間の間での週休は8回。土日連休は必ず1回、それ以外(平日込み)でも連休が必ず1回以上あり。
●日勤の翌日の深夜勤務あり、深夜勤務の翌日の準夜勤務あり。
●「準夜→休み→日勤→深夜」なし、「深夜→準夜→準夜」なし
●「準夜→準夜」あり、「日勤→深夜→日勤」あり。そのあとは必ず休み。  
●連続勤務は5日まで
●祝は土日扱い=>
祝日がある場合、そこで休む人は祝日休み扱いで4週8休の週休とは別扱い、日勤の人は代休を別の日にあてがい、そこも週休とは別扱いになる

●副師長は救急外来夜勤(準夜、深夜)もあり。副師長はBチームメンバーとしても勤務する。救急夜勤も夜勤回数に含める。救急外来夜勤は副師長のみで、指定日だけの勤務

●夜勤メンバーには、両チーム通じて一人以上中堅クラス(4年目以上)以上を置く
●「5年目以上を各勤務(日勤・夜勤)で各チーム1名以上入れる」
●副師長は救急外来の夜勤あり、病棟とは別勤務(その日の病棟は、副師長とは別に3人の夜勤者が必要)

●病棟の日勤者は,最低でも両チーム通じて平日8名(A、B四人ずつ)、土日6名(三人ずつ)以上は必要です.
 そのうち,リーダーができる人(5年目以上)が各チーム一人必要です。
●いずれの7日間のうちにも準夜・深夜合わせて3つまで
●夜勤なしスタッフも28日で8休が原則です。このスタッフは土日勤務もあります。なお、夜勤なしスタッフは全員リーダーが出来ませんが、新人でもありません。



2日目


日勤 遅出 準夜 深夜 休み
1日目 日勤 ×
遅出 × × ×
準夜 × × ×
深夜 ×
休み ×

例:1日目遅出なら、2日目(翌日)は準夜・休みのみOK、それ以外はNG
遅出→準夜○
遅出→日勤×


※準夜の次の休みは4つまで(特定28日間の期間内で)


3日以上の禁止パターンは次の通り

準夜→休み→休み→深夜×
準夜→休み→日勤→深夜×
3連休まで○、4連休以上×
6連勤以上は×
夜勤3連続以上は×

○希望制約

○夜勤(準夜、深夜)回数は平準化
○リーダー回数は平準化->リーダー業務は前日に勤務者が決めるようなので、ソフト上ではリーダー業務としては決めない
○休み希望は最大3日までとなっていますが、実際にはそれ以上希望しているスタッフもいる

○個別制約



2 制約設計

2.1 シフトの割付

勤務の種類に名前をつけていきます。(WとXは使えません。日本語は使えます。) 
マニュアルで入力するのみで、自動割付をしない勤務シフト(年休等)については、自動スケジュールしない にチェックします。

救急外来深夜準夜については、指定日に指定の人が行うことになっているので、自動スケジュールの必要はありません。単に予定として書き込むだけなので、
自動スケジュールしない にチェックします。 すけじゅーるど年休は、年休をスケジュールする用途に使いますが、現在はリザーブ的な意味で入れてあります。

小文字のsとjは、深夜と準夜を一般化した定義です。外来深夜であっても個人の夜勤数としては、カウントする必要があるので、このような定義にしてパターン定義のところで、これを呼び出しています。小文字のaは、夜勤を一般化したものです。



2.2 自動スケジュール用のありえる勤務シフトを列挙する


夜勤なしの人は、公休と日勤のみで成るという記述です。


夜勤ありの人は、様々なシフトが入る可能性があります。





2.3 グループを定義する

上のコア仕様から下のように定義しました。



2.4 スタッフプロパティ


スタッフプロパティです。5年目以上は、リーダ可能、4年目の人は、中堅というプロパティを設定します。副看護師長は、遅出が無いのでチェックしません。

2.5 28日制約

週休の部分の制約です。今月の週休日と、先月の週休日は、カレンダで定義した曜日集合です。(後述)今月の週休数、前月の週休数は、マクロで最初のページに定義していますが、常に8です。



2.6 パターン制約


勤務回数の平準化は、最大・最小を指定することで実現しています。スタッフ人数が増減するとこの値は、適切でない場合があります。具体的には、
[スタッフを増やしたら/減らしたら解が無くなってしまった] はこの辺の記述が関係していることが多いです。
夜勤に関しては、28日ルールではなく、月毎です。今回の場合来月に跨って解を求めているために、なにも指定していないと来月まで含んだ回数の定義になってしまいます。これを抑えるために、カレンダで、「今月」を定義しています。(後述)

難しいのは、7日以内で4回夜勤してはいけないという部分です。外部制約を使えば、正確にそのように記述できますが、加算は重いので、可能であればパターンで記述した方がよいです。コア仕様の表△部は、好ましくない勤務ですので、ソフト制約で定義します。 いわば、「解が無い」というエラーの逃げ道を用意してあげる訳です。 

パターンで気をつけないといけないのは、開始日です。パターン長に応じて開始日がシフトしていることにご注意ください。
最長で7日のパターンを定義しているので、28日ルールには関係なく、前月末6日のデータが必要になります。



2.7 列制約

コア仕様に従って、記述します。



2.8 曜日集合の定義

月毎に変る曜日集合は、、カレンダで設定します。設定の仕方は、こちらをご参照ください。
設定の確認は、カレンダを出しておいて、メモ または、曜日の名前をクリックすると出ます。二月に跨る場合には、メモが、先月、曜日の名前が今月 になります。



メモをクリックしているので前月が出ます。


曜日の名前 列をクリックしているので、今月部の表示になります。


2.9 求解


解が求まりました。このデータを次月に移動させるために、スケジュール期間を変更します。

2.10 スケジュール期間の変更


次月を作成するために、スケジュール開始日、終了日、表示スタート日を下のように変更します。 表示スタート日は、スケジュール開始日・終了日を変えると、default値に置き換わりますので注意してください。

2.11 解を予定入力に送る



入力部に先月データが来ました。今月分は不要なのでカットします。(青色選択部)



先月分のデータだけが残りました。


今月固有の定義を変更します。



2.12 求解して保存して終了


名前をつけて保存します。


3.追加仕様
3.1希望を入力するときに,「日勤以外」とか,「日勤以外・休み以外」を同時に入力する

 下図を参照してください。シフトは、全部で12種類定義しています。深夜以外というのは、深夜を除いた残り11種類の集合を定義すればよいのです。
ただ、11種類を入力するのは面倒です。深夜以外という場合、深夜はSと定義しているので、単に否定の意味の!Sとした定義を作ればよいです。

このとき、L=!S=J|N|Y|H|D|M|n|y|h|e|f;
になります。

同様に、日勤以外は、!Nになります。

複合タイプの「日勤休み以外」は、日勤Nまたは、休みYを除いた集合を定義すればよいことになります。ただし、単に休みと言っても公休、祝休、代休..等ありますので、厳密に欲しい集合を選んでください。

Note:グループ名、1文字の使っていない文字を使用してください。


後は、色、ラベルを入力して完成です。コメントは任意です。




定義したラベルが、予定入力のページに出現します。希望日のところに*入力すればOKです。

*Note:ありえないシフトをスタッフに入力しないようにしてください。(例えば、日勤休みしかないスタッフに 日勤休み以外 のラベルを貼り付けないようにしてください。)