2014年4月14日月曜日

年休消化の制約

5月は31日あり、かつ休みが多いので年休消化するには良い月です。そこで、年休消化する制約を考えてみましょう。スタッフがある程度取ってくれた方が後の月の勤務計画表の作成が楽という動機がブラックな制約ですが、最終的にはそれが皆の幸せにつながると信じてやる事にしましょう。

年休というのは、通常勤務希望として初期設定されますが、今回の年休消化は、他の制約を優先し満たして上で取得可能なら取得する という制約になります。つまり、通常の年休とは、性質の異なる年休です。通常の年休は、静的に決まっているのに対して、初期設定としては決まっていない動的に変わる年休、スケジュールする年休なので、シフトのラベルを変える必要があるということが分かります。

このスケジュールする年休のラベルを”す”と現すことにします。左がそのシフトの設定になります。制約内での名前を小文字のh、ラベルを”す”にします。休みに関係するグループxの仲間としてhも加えます。












下は

下は上の制約を入れる前の結果です。






今月の年休数というマクロを作成し1に設定して求解すると
問題なく求まります。この段階ではエラー0(ie.全看護師スタッフが年休を取得可能)なので、3秒で求まりました。
 
 
次に、今月の年休数を2に設定すると、下のような結果になりました。ご覧のように、全スタッフが年休を取得できている訳ではありません。その理由は、日勤者数にあります。スタッフに年休を与えるということは、その分日勤スタッフ数が減少します。際限なく年休を与えるができないのは、日勤者数制約が有るためです。この場合12人以上の制約を与えています。下のペインを見ると全日12人になっています。つまり、これ以上年休を与える余裕がないところまでスケジュールナースは頑張ったという事です。
(一番最初の日勤者数の違いを比較してみるとよく分かると思います。)
 
この制約をハード制約とすると「解がありません」になりますが、ソフト制約を指定することによって、エラー数を最小化するところまで自動的に求めてくれます。今回の求解時間は、看護師勤務表作成ソフトスケジュールナースで、79秒でした。

0 件のコメント:

コメントを投稿