勤務表の作成例

このセクションでは、実際に使われている例で、勤務表の設計の仕方を解説します。
深準型の3交代ICU

仕様

  1. 深準型の3交代ICU
  2. 勤務はその月の1日から月末まで
  3. 祝休あり、公休数は、月により変動する。概ね、その月の土日数になる
  4. 日勤平日7名以上、土曜日7名、日曜日6名
  5. 深夜3名、準夜3名、いずれもベテランまたは中堅が二人以上入る
  6. 深深、準準、準日、休深、深日禁止
  7. 勤務は、最大5日連続まで。(少なくとも6日間の間に一回公休がはいる)
  8. 平日と土曜は、プール業務がある。プール業務とは、他部署への派遣、平日は3名、土曜は1名
  9. スキルは、ベテラン、中堅、若手の3種類、
  10. グループはなし
  11. 加算チームという枠が別にあり、その中で、毎日、深、準、日を常に1名以上
  12. リーダは日替わり、平準化が必要
  13. 看護師長および管理者は、夜勤なし
  14. 以下は希望仕様
  15. 希望休みが5日まで可
  16. 休みは連続休みが2回以上
  17. 日勤は、最大4日連続まで。必要なら年休を附加してもよい。
  18. 土日連続休みが1回以上
  19. 連続休みはその月内で平準化(できれば2週間間隔

スケジュール目標

  1. できるだけ個人の希望を通す
  2. できるだけ公平な負荷の分担(負荷の平準化)

シフトを定義する −入力 出力を明確にする

入力とは、下図の予定入力画面で、深夜、準夜、日勤,公休、学生指導、研修、外勤務、祝休、錬休、年休、スケジュール年休、プール勤務、リーダ等のラベルの事です。

出力とは、何か?

出力とは、ソフトが考えて割り振るシフトのことです。研修や、学生指導、錬休、年休は、ソフトが考えて割り振るものではなく、人間が予め予定として入力するものなので出力ではありません。(これらのシフトはスケジュールする余地はありません。)

また、同じ休みでも、祝日に休む場合は、公休ではなく祝休としてカウントする、というルールがある場合には、祝休というシフトと公休を分ける必要があります。
反対に、祝日であっても、祝休としてカウントする必要がないときは、祝休というシフトを定義してはいけません。
つまり、スケジュールルールが同じものは、同じシフトなのです。二つのシフト間で区別するルールがないときも、同じシフトになります。ルールが違うものは、違うシフトになります。


入出力割り当て表を書く

下図は、ソフトの入力、出力を定義を定義したもので、S,J...が内部的に用いるシフト名になります。このS,J..がソフトが考えて割り当てるシフト(スケジュールするシフト)になります。
シフト名Sは、深夜の深というラベルと合わせて定義されています。同様にJは、準というラベルと合わせて定義されています。このラベルが上のボタンに対応することになります。ラベルは、人間が読み易いように内部シフト名を言い換えしたものです。

学、研、外は、いずれもn というシフト名が割り当てられています。これは、「列方向日勤カウントはされない日勤務」 という括りでみると、ソフト的には同じシフトです。(逆に区別するルールがないので別の名前を割り当てることができないとも言えます) しかも、これらは、最初に予定入力として使用されるだけで、自動スケジュール割り当てされる対象ではありません。なので、このnというシフトは、出力ではありません。(自動割り当てされることのないシフトです)。

同様に、錬と年も、「公カウント、祝カウントされない休み」 という括りでみると、ソフト的には区別しようがありません。(区別するルールが存在しません。)なので、同じシフト名yとして定義することになるのです。

このように、コンピュータに入力するときには、そのシフトのルールが違うかどうかという観点でシフトを定義してください。
下図で言えば、入力は、ラベルのになります。出力は、名前列にあるシフトのうち、自動スケジュールしない、というチェックが入っていないものの集合になります
ソフトは、出力シフトのみ、考えて答えを割り振ろうとします。
この表が書けるということは、なにをソフトにやらせたいのか、明確になっているということです。逆にこの表が書けないとすると、欲しい結果は何なのか?自分でもよく分かっていないということではないかと思います。

入出力割り当て表

*ここは、ちょっとしたバリアなのですが、この表を書けたら、半分以上できたも同然です。頑張ってください。

プロパティ(属性)の検討

上記仕様から、下のようなプロパティ(属性構造を書き出しました。夜勤なし(看護師長)は、夜勤パターンがないので、夜勤ありとは、大きく異なります。対するスタッフは、様々なプロパティ(属性)を持ちます。プロパティを書き出す点で重要なのは、要素を全て書き出すということです。例えば、リーダという属性は、”リーダ資格がある”だけではなくて、その裏の”リーダ資格がない”の二つ面があります。このように物事には、全て表と裏があります。表だけではなく、裏も記述することが必要です。




プロパティ(属性)の書き出し

上の関係をそのまま記述すればOKです。
ここで、プールで実際に必要になるのは、プールの行き先ではなく、プールのあり/なしが必要なので、プールの行き先1,2,3をまとめて"プールあり"とグループの定義で指定しています。また、スキルも実際に使用するのは、ベテランまたは中堅である,べ中というプロパティを定義しています。


下は、各スタッフのプロパティ定義です。夜勤なしは、パターン制約へのリンクがありません。夜勤ありは、パターン制約への共通のリンク”夜勤継承”を持ちます。



”夜勤継承”というパターン制約に対するリンク先の中身は以下です。
これを見ると、夜勤継承のパターンの中身はなく、夜勤共通と、部品の一つであるリーダパターンを子どもに持つ事が分かります。



この親子関係を図にすると以下のようになります。


”夜勤共通”には、パターン制約が記述されています。また、部品として、夜勤パターンとブールパターンを持ちます。




夜勤パターンを見てみると、スタッフ属性の項目があることが判ります。ここで、各スタッフプロパティに対して制約を記述すればよい訳です。
なお、制約が違うのに、同じコメントがあることのは意図しています。解の表示のときに、同じ項目として表示させるためです。



プールに関するパターンです。プールなしについて記述しています。プール有りの場合は、列制約での記述になります。このように、表と裏の両面についてどこかで制約する必要があります。



最後は、リーダパターンです。リーダの資格有無(表と裏)について両面で記述しています。


このように、各プロパティで部品化を行う理由はメンテナンスし易いからです。各プロパティが毎月同じということはあまりないでしょう。この辺は自力で
設定する必要があります。
そのときに、このような形にすれば、見る範囲を限定でき、結果的に楽に変更が出来ます。

なお、スタッフ属性を記述する場合には、下で、マウスカーソル付近を右クリックするとメニューが出てきますので、新しい部品パターンをを作成で作成してください。



ラベルの追加

初期の予定入力画面です。
石黒さんの年休は、本当は、結婚休暇です。
そこでラベルを追加します。


結婚休暇は、スケジュールナース的には、"公"でも”祝”でもない休み(y)に属します。内部的には、これらは区別がありません。ラベルを追加するのは、見かけだけを変えるとになります.。スケジュール割り当て的には、何等影響がありません。


再び、予定入力編集を開くと”結”が追加されているので修正します。なお、全部を”結”にしてしまうと、「連続6日内に公が一回以上必要」という制約に違反してしまうので、土日は、公にします。



予定入力でのエラーの対処方法

部分的なハード制約化
以下の説明において、5日連続禁止にソフト制約レベルが記載されている場合には、クリアしてから始めてください。(説明の都合上)


この状態で求解すると、下のようにエラーが出ました。


確かに、上の入力を見ると山上は、5日連続日勤が入力されているので、制約に違反しています。しかし、本来欲しい仕様は、初期入力は、そのままとして、その他スケジュール割り当てする部分で5日連続日勤は避ける事です。つまり5日連続日勤不可の制約よりも、5日連続日勤入力の方を優先したい、このような場合は、ソフト制約を使います。入力の方をハード制約として、5日日勤禁止の方をソフト制約とすればよい訳です。入力の方は、特に設定しなければハード制約になっているので、制約の方を次のように変えます。



ソフト制約レベルとして4を設定しました。
これで、求解すると、次のようにエラーが出ました。


入力を見ると、確かに公休数8の所、公休が9になっているので、制約に違反した入力になっています。入力ミスは明らかですが、他にもエラーがあるかもしれません。そこで、入力全体をソフト制約化することで、(他の問題も含めて)問題を明らかにします。

予定編集入力のソフト制約化- ソフト制約を使いこなそう!

まず入力全体をソフト制約化します。



最下部右端までドラッグすると次の画面になります。ここでマウスを放して右クリックを行います。



メニューが出てくるので選択部をソフト制約化をクリックします。


すると、適用可能なレベルが出てきます。(出てこないレベルは既に使われているレベルです。)ここでは5を選択します。



5日勤連続の部分は 、上の「部分的なハード制約化」で検討したようにハード制約にします。5日連続部分は2箇所ありますが、最初の島は、上と同じように、
下の島は、CTRLキーを押しながら、ドラッグすることで選択できます。



この段階で求解します。
ここで、ソフト求解条件として、各ソフト制約はチェックしない状態で求解します。



すると、エラーが出なかったので、問題は、予定入力部にあるということが分かります。
逆に、予定入力なしでエラーが出ているのであれば、それは、制約そのもののエラーということになります。

それでは、予定制約のみオンにしてやってみましょう。



 にして、求解します。すると、下のような警告が出てきます。キャンセルを押します。


すると、下のようにエラーがでます。この意味するところは、スタッフ一人あたりの許容エラー数を最大1にした状態では、解は存在しない、ということです。
言い換えると、エラーはスタッフあたり1個以下では済まない、もっと多くあるということを意味しています。




1個で駄目なら、2個でやってみます。でも、駄目でした。言い換えると、エラーはスタッフあたり2個以下では済まない、もっと多くあるということを意味しています。


3個に設定して、初めて解がありました。求解状況から、その総数は5個であることが分かります。

解の画面で右クリック、予定入力と比較で、画像反転部が出てきます。高橋2箇所と降矢に3箇所エラーが出ていることが分かります。

<エラー箇所の意味>
エラー箇所は、そうしないと解が存在しない箇所です。どうしても、*全体の制約を満足するために、スタッフの希望予定を変更せざるを得ない、ならば、変更数を最小にする変更箇所と変更はなにか? という問いに対する答えを提示している、と取ってもよいです。「勝手に予定入力(スタッフ希望休み)を変えている。」ではなくて、そうしないと制約を満足しないのです。 今までのソフトウェアはそういった提示がなく、ただ解がないとか、この制約が満足しない、で終っていました。 しかしそれでは、なにをどうすればよいのか全く分かりませんせんね。「では制約を満足する最小の予定入力変更は何か?」に対して、スケジュールナースの答えがここにあります。看護師スタッフのリソース不足の今日、個人の希望や勤務体系の多様化・複雑化と相まって、制約は、複雑化することはあっても簡単化することはないでしょう。それに対してスタッフリソースを増やせないのならば、制約の過制約化は、多くの場面で避けられません。一般に過制約下では、ハード制約だけでは解がありません。これからは、何かを捨て何かを選ぶソフト制約を使いこなすことが、勤務表作りの要であると考えています。
*全体の制約:正確な文章ではないのですが、とりあえず今は"全体"という意味に捉えておきます。

降矢は、3個未満のエラーでは物理的に解が存在しないので、許容エラー数0個、1個、2個の求解では、解が存在しなかったのです。

他の解をみてると、高橋と降矢内のエラー箇所は変りますが、高橋と降矢にエラーがある(他の人にはエラーがない)ことには変わりありません。エラーが高橋と降矢に集中しているということは、高橋と降矢の入力自体に問題がある、と考えられます。


降矢の方のエラーは、公休数9のエラー(入力ミス)関連だと思われますが、高橋のエラーは何でしょうか?

ちょっと見ただけでは分かりません。そこで、高橋以外の入力を一時的に切り取ってやってみます。



この状態で求解してみます。高橋単独の予定のみとなったので、これでエラーがあれば、入力そのものに問題があるということです。



許容エラー数は0にしてみます。すると、解がありませんと出てきました。


エラー数を2個に増やしたところで、やっと解が見つかりました。つまり、高橋に関して、2箇所を変更しないと解がないということです。
このようにして、予定入力のソフト制約を駆使することで、解がない原因の解析をすることができます。単純に入力のミスか、あるいは、ナース側の戦略なのか?はさておき、現実的にどのようにすればよいかが分かるので、是非、このテクニックは掴んで欲しいと思います。



さて、切り取ったデータを元に戻すには、Undoをクリックします。


さらに戻すのを戻すには、Redoをクリックします。





メンテナンス 運用中に出てきた要望に対処する

仕様:

  1. 深夜の前は休みとしたい(現在は深夜の前は必ず日勤になる)人がいる。(個人対応)
  2. 準夜ができるのは、金土日だけ(個人対応)


仕様1の検討:

現在は、次の制約で、休み深夜を禁止しています。この制約は、すべての人に作用してしまうので、スタッフプロパティで切り替えられるようにします。
この制約は、すべての人に作用してしまうページ上にあるので削除します。


スタッフプロパティを追加します。(仕様2も、夜勤プロパティの要素として追加しています)


新たに 深夜の前パターンという名前の部品を作ります。
その中で、元の制約をコピーします。ただし、元の制約は、日深パターンというスタッフプロパティにします。このプロパティの人だけが、xSが禁止になります。
希望の休深パターンは、逆に日深パターンを禁止にします。MSのMは、日勤を一般化したもの(日勤、リーダ、プール、加算、研修等)です。



上で作った部品を夜勤共通パターンで呼び出します。


これにより部品の親子関係は次のようになります。





スタッフプロパティは、以下のようにしました。休深パターンを希望する人以外は、元の日深パターンになります。また、準夜金土日のみのスタッフも例えば以下のように設定します。このように毎月同じ制約であれば、あとの月はなにもしなくてよい訳です。

また、作った部品は使わなくてもよいですし、他のスタッフにも適用可能です。 (ただし、個別対応的な制約なので、適用スタッフが多いと破綻します。)

余談ですが、休深パターンは、準休深とすると正循環のパターンの一基本形となります。正循環勤務表についてはこちらで詳しく検討しています。 )

深夜の前パターンという部品を追加しましたが、スタッフ定義のページから呼び出す(リンク)のは、上図で、一番の親である、"夜勤継承"になります。

呼び出した中で、日深パターンと休深夜パターンをメニューで切り替えます。このようにしておくと、リンクを変更するだけでよいので管理が楽です。例えば、若手から中堅への格上げや、リーダなしから、リーダ資格までの格上げ等は、このスタッフプロパティの変更だけでよいので毎月のメンテナンスが楽です。


仕様2:準夜勤は金土日のみは、夜勤パターンという部品中に追加しました。

制約は、金土日以外の準夜を禁止にすればよいのですが、それだけでは不十分です。下のように他の制約も定義する必要があります。
 (例えば、Sは4-5回の範囲という制約を入れ忘れたとすると、S(深夜)の回数は無制限になってしまいます。)


なお、”金土日以外”は、以下で定義を追加しています。



[Prev] [Next] [Index] [Home]