(57)【要約】【課題】勤務表作成の際の修正に関して、作成者が修正したいと考える勤務状態を指示するだけで、その勤務状態の修正に付随して他の要素に設定された要素値を効果的に自動修正する。【解決手段】初期割付処理により作成された勤務表上において作成者が修正したい条件違反箇所を指定したとき、修正実行部１８は、その指定箇所に対応する条件違反を解消することを追加条件として追加条件記憶部８に登録すると共に、評価値計算部６が算出する評価値がなるべく小さくなるように勤務表マトリクスの各要素値を割付実行部１６に決定させ勤務表を作成させる。評価値計算部６は、勤務表作成処理部１０が作成した勤務表が、各要素へ要素値を割り付けるための割付条件と上記追加条件にどれだけ違反しているかを示す評価値を算出する。評価値には、追加条件の違反回数に応じて増加する追加ペナルティ値が含まれている。【選択図】　　　　図１
2004013487.tif 000002
【特許請求の範囲】
【請求項１】
入力された作成条件に基づいて各勤務者の勤務状況を表す２次元マトリクスを含む勤務表を作成する勤務表作成支援システムにおいて、
作成された勤務表を修正するために追加したい条件を入力指定する入力手段と、
前記入力手段による入力指定によって特定された追加条件を記憶する追加条件記憶手段と、
予め入力されている作成条件及び前記追加条件記憶手段に記憶されている追加条件に基づいて所定のアルゴリズムに従い２次元マトリクス上に各勤務区分を割り付ける割付処理を実行することによって勤務表を作成する勤務表作成処理手段と、
前記勤務表作成処理手段が勤務表を作成したときに設定されている作成条件及び追加条件に対する条件違反度を示す評価値を、追加条件に基づき定められる追加ペナルティ値を加味して計算する評価値計算手段と、
を有し、
前記勤務表作成処理手段は、前記入力手段から追加条件が入力指定されたとき、前記評価値計算手段が記憶されている追加条件の追加ペナルティ値を加味して計算した評価値に基づく評価が高くなるように勤務表を作成することを特徴とする勤務表作成支援システム。
【請求項２】
請求項１記載の勤務表作成支援システムにおいて、
前記勤務表作成処理手段は、勤務表を作成する際に、前記追加条件記憶手段に記憶されている追加条件の条件違反が解消するまで割付処理を反復して行い、
前記評価値計算手段は、前記勤務表作成処理手段による割付処理の反復実行過程において、その反復回数に応じた加重を課した追加ペナルティ値を再設定して評価値を計算することを特徴とする勤務表作成支援システム。
【請求項３】
請求項１記載の勤務表作成支援システムにおいて、
前記勤務表作成処理手段における割付処理の所定のアルゴリズムを変更可能にしたことを特徴とする勤務表作成支援システム。
【請求項４】
請求項１記載の勤務表作成支援システムにおいて、
前記評価値計算手段により計算される評価値に反映させる追加ペナルティ値の度合いを追加条件毎に設定可能にしたことを特徴とする勤務表作成支援システム。
【請求項５】
請求項１記載の勤務表作成支援システムにおいて、
条件違反に対する警告表示を行う警告表示手段を有し、
前記警告表示手段が作成条件に違反している旨を警告表示として表示したとき、その警告表示の中から前記入力手段により入力指定された条件違反を解消することを追加条件とすることを特徴とする勤務表作成支援システム。
【請求項６】
請求項５記載の勤務表作成支援システムにおいて、
前記警告表示手段は、条件違反に該当する勤務表における勤務状況部分を明示的に警告表示し、
表示された勤務表において条件違反に該当した勤務状況部分がわかるように前記警告表示手段が警告表示したとき、その警告表示の中から前記入力手段により入力指定された勤務状況部分に該当する条件違反を解消することを追加条件とすることを特徴とする勤務表作成支援システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、看護婦や警備員などの勤務表（勤務予定表）を作成する勤務表作成支援システム、特に、作成中の勤務表において作成者が指定した個所を自動的に修正し、新たな勤務表を提示することができる勤務表作成支援システムに関する。
【０００２】
【従来の技術】
病院においては、例えば各病棟ごとに看護婦の勤務表が作成される。その勤務表は、婦長等によって作成されるが、その作成に当たっては様々な制約条件を考慮しなければならない。すなわち、勤務表の作成者は、有給休暇などの各看護婦の勤務の希望、各種行事、資格や能力上の要請などの多くの条件を満足するよう作成する必要がある。勤務表で表されるスケジュールは、通常、勤務者と勤務日とによる２次元マトリックスで表現されるが、２次元マトリックス上の各要素には、縦方向及び横方向の他の要素（同じ勤務日の他の勤務者又は同一勤務者の他の勤務日）に設定されている要素値（すなわち日勤、夜勤、休み等の勤務区分）、更に各要素値の集計値を参照し、各制約条件に違反しないように調整しながら適切な要素値を割り付けなければならない。
【０００３】
しかし、全ての条件を満足する勤務表を最初から完璧に作成することは通常は困難である。従って、実際の婦長等が勤務表を作成するときは、勤務表をとりあえず完成させて、その勤務表に対して違反した条件を解消するように手作業で修正を加えていくようにしている。このように、従来においては、多くの条件を反映させた勤務表を作成するために多大な負担・労力を要しているのが現状である。
【０００４】
このような勤務表の作成に要する負担を軽減するために、勤務表をコンピュータが自動作成するための各種支援システムが提案されている。この種のシステムでは、一般に数理計画的手法あるいは知識工学的手法のいずれかを用いることが多いが、いずれにしても婦長等の作成者が考慮している諸条件を何らかのモデルによってコンピュータ内で表現する必要がある。例えば、特開平４−１５８６５号では、制約条件を知識ベースモデルによって表現し、最初に設定した知識ベースで自動作成したスケジュール表を見ながら、各制約条件の優先順位を変更の指針として作成者が手作業により知識ベースの改善を図り、次回以降の自動作成時により良い解を得ようとする提案がなされている。
【０００５】
【発明が解決しようとする課題】
しかしながら、勤務表を作成するための条件は非常に複雑であり、実用的な時間で条件を満たす勤務表を作成するのは困難である。従って、人間の考える条件をより反映させるために、実用的なシステムでは自動作成した勤務表に対して後から修正する機能が不可欠になる。前述した従来例においても、自動作成したスケジュール表においてその表の中の一つまたは複数の要素を、作成者が明示的に指定した別の値に変更することによりスケジュール表を修正していた。前述したように、スケジュール表や勤務表を作成するためには多くの制約条件が設定されている。勤務表の一要素値を変更することによっていずれかの制約条件違反は解消するかもしれないが、他の制約条件の違反が新たに発生する可能性もある。例えば、ある勤務日の夜勤勤務者が所定数に達していないという条件に違反しているためにＡさんの勤務区分を夜勤に変更すると、今度はＡさんの勤務状況を、夜勤は連続させないという条件や１か月の夜勤日数の所定数を超えさせないと言う条件に違反させてしまう可能性がある。更に、Ａさんの勤務についての違反を解消するためにＡさんの他の勤務日の夜勤を日勤に変更すると、その変更した勤務日の夜勤勤務者が所定数に達しなくなってしまう可能性がある。
【０００６】
すなわち、勤務表作成に関する制約条件の多くは、勤務表の複数の要素に関連しているため、一般に一つの要素の値を変更した場合には、付随して他の要素の値も同時に変更する必要が生じる場合が少なくない。このため、最初に決定した要素変更が妥当なものであったかどうかは、その要素変更に付随した他の要素変更を行ってみないとわからない。しかし、要素変更に付随してどのように変更すべきかは容易にわからない。また、変更する要素値の候補が複数存在する場合には、どの要素値を選択すればよいのかも容易に特定できない場合もある。
【０００７】
このため、勤務表作成者は、作成された勤務表において一つの「修正したい状態」を解消するためにさまざまな要素変更の試行錯誤を行う必要があり、これが勤務表作成者にとって大きな負担となり、満足できる勤務表を作成することは困難となっていた。
【０００８】
本発明は以上のような問題を解決するためになされたものであり、その目的は、勤務表作成の際の修正に関して、作成者が修正したいと考える勤務状態を指示するだけで、その勤務状態の修正に付随して他の要素に設定された要素値を効果的に自動修正することのできる勤務表作成支援システムを提供することにある。
【０００９】
【課題を解決するための手段】
以上のような目的を達成するために、本発明に係る勤務表作成支援システムは、入力された作成条件に基づいて各勤務者の勤務状況を表す２次元マトリクスを含む勤務表を作成する勤務表作成支援システムにおいて、作成された勤務表を修正するために追加したい条件を入力指定する入力手段と、前記入力手段による入力指定によって特定された追加条件を記憶する追加条件記憶手段と、予め入力されている作成条件及び前記追加条件記憶手段に記憶されている追加条件に基づいて所定のアルゴリズムに従い２次元マトリクス上に各勤務区分を割り付ける割付処理を実行することによって勤務表を作成する勤務表作成処理手段と、前記勤務表作成処理手段が勤務表を作成したときに設定されている作成条件及び追加条件に対する条件違反度を示す評価値を、追加条件に基づき定められる追加ペナルティ値を加味して計算する評価値計算手段とを有し、前記勤務表作成処理手段は、前記入力手段から追加条件が入力指定されたとき、前記評価値計算手段が記憶されている追加条件の追加ペナルティ値を加味して計算した評価値に基づく評価が高くなるように勤務表を作成することを特徴とする。
【００１０】
上記構成によれば、勤務表上にある条件違反の個所や、条件違反ではないが作成者が修正したいと考える状態などを入力手段から指示すると、その指示に従った上でなるべく最初の割付条件に合致するように勤務表を修正することができる。この際、勤務表作成者は、勤務表の個々の要素に対して要素値の変更操作を行う必要がなくなり、作成者の負担を大幅に軽減することができるとともに自らの意思を勤務表に反映させることができる。
【００１１】
また、前記勤務表作成処理手段は、勤務表を作成する際に、前記追加条件記憶手段に記憶されている追加条件の条件違反が解消するまで割付処理を反復して行い、前記評価値計算手段は、前記勤務表作成処理手段による割付処理の反復実行過程において、その反復回数に応じた加重を課した追加ペナルティ値を再設定して評価値を計算することを特徴とする。
【００１２】
また、前記勤務表作成処理手段における割付処理の所定のアルゴリズムを変更可能にしたことを特徴とする。
【００１３】
また、前記評価値計算手段により計算される評価値に反映させる追加ペナルティ値の度合いを追加条件毎に設定可能にしたことを特徴とする。
【００１４】
また、条件違反に対する警告表示を行う警告表示手段を有し、前記警告表示手段が作成条件に違反している旨を警告表示として表示したとき、その警告表示の中から前記入力手段により入力指定された条件違反を解消することを追加条件とすることを特徴とする。
【００１５】
更に、前記警告表示手段は、条件違反に該当する勤務表における勤務状況部分を明示的に警告表示し、表示された勤務表において条件違反に該当した勤務状況部分がわかるように前記警告表示手段が警告表示したとき、その警告表示の中から前記入力手段により入力指定された勤務状況部分に該当する条件違反を解消することを追加条件とすることを特徴とする。
【００１６】
この構成によれば、勤務表作成者が修正したいと考えるものに対して入力手段において警告表示の個所を指定した場合に、当該警告表示のもとになっている条件違反から追加条件を構成することができ、勤務表作成者が必要と考える追加条件入力をより簡便に行うことができる。
【００１７】
【発明の実施の形態】
以下、図面に基づいて、本発明の好適な実施の形態について説明する。
【００１８】
図１は、本発明に係る勤務表作成支援システムの一実施の形態を示した機能ブロック構成図である。本実施の形態における勤務表作成支援システムは、割付条件記述部２、入力部４、評価値計算部６、追加条件記憶部８、勤務表作成処理部１０、表示処理部１２及び勤務表保存部１４を有している。また、勤務表作成処理部１０には割付実行部１６及び修正実行部１８が、表示処理部１２には違反判定部２０、違反記憶部２２及び警告表示部２４が、それぞれ含まれている。
【００１９】
割付条件記述部２には、勤務表を作成するための作成条件、換言すると勤務表の２次元マトリクス上に勤務区分を割り付けるための割付条件が予め記憶されている。入力部４は、勤務表作成前にあるいは追加的に割付条件記述部２に記憶させる割付条件を入力し、設定する。また、勤務表を修正する際に追加する条件の入力、更に勤務表の２次元マトリクス（以下、「勤務表マトリクス」）に対する修正入力を直接受け付ける。追加条件記憶部８には、入力部４を介して勤務表作成者により入力指定された追加条件が記憶される。また、修正実行部１８で実行された修正試行回数が追加条件毎に記録される。評価値計算部６は、勤務表作成処理部１０が作成した勤務表が割付条件記述部２に設定登録されている割付条件と追加条件記憶部８に記憶されている追加条件にどれだけ違反しているか、その条件違反度を示す評価値を算出する。
【００２０】
勤務表作成処理部１０は、割付条件記述部２に設定登録されている割付条件と追加条件記憶部８に記憶されている追加条件に基づいて、所定規則に従い２次元マトリクス上に各勤務区分を割り付ける割付処理を実行することによって勤務表を作成する。勤務表作成処理部１０に含まれている割付実行部１６は、評価値計算部６から得られる評価値がなるべく小さくなるように勤務表マトリクスの各要素値を決定する。勤務表保存部１４は、割付処理された勤務表を記憶する。修正実行部１８は、入力部４からの指示や追加条件記憶部８に記憶されている追加条件に従って、勤務表マトリクス上の追加条件違反状態が解消されるように割付実行部１６を制御する。
【００２１】
表示処理部１２は、勤務表や違反した条件を表示するための手段である。表示処理部１２に含まれている違反判定部２０は、表示された勤務表における条件違反を検出し、違反記憶部２２に記憶する。警告表示部２４は、違反判定部２０により条件違反が検出されたときにその違反に対する警告表示を行う。
【００２２】
図２は、本実施の形態における勤務表作成処理部１０により作成され、表示処理部１２により表示される勤務表の一例を示した図である。本実施の形態における勤務表は、各勤務者の勤務状況を示す２次元マトリクス（勤務表マトリクス）を含んでいる。割付領域は、勤務表作成を行う所定期間（例えば１か月）にわたって各勤務者（職員）の勤務区分が割り付けられる領域であって、割付結果である勤務表が表示される。その左端には病棟に所属する職員名が列記され、その上端には日付が記載されている。図中の「日」、「準」、「深」、「休」、「有」、「振」、「特」、「代」は表示分類に従う出勤休暇の区分を示し、この例ではそれぞれ「日勤」、「準夜勤」、「深夜勤」、「休み」、「有給休暇」、「振替休暇」、「特別休暇」、「代休」を意味している。後述する自動割付を実行させると、生成された割付結果がこの領域に表示される。また、勤務表作成者がマウス、キーボード等の入力部４を用いて勤務を直接入力することも可能である。また、図中において左側に示されるハッチがかかった部分は、前月の最終週の勤務状況を表しており、例えば当月第１週の割付の勤務パターン条件を判断する際に必要に応じて参酌される。
【００２３】
横集計領域において、横方向には判断分類（勤務回数集計用）に従う出勤休暇の区分が示され、それに対応して縦方向に沿って、各職員ごとの勤務回数の集計欄がある。ここには勤務表の作成を行う期間全体に渡って、勤務の回数を集計した値が表示される。割付領域で勤務表作成者による入力や自動割付によって勤務が変更された場合、各集計値もリアルタイムに更新される。
【００２４】
実働集計領域においては、勤務表作成期間内における各職員ごとの実働時間の集計が表示される。割付領域で勤務表作成者による入力や自動割付によって勤務が変更された場合には、この集計値もリアルタイムに更新される。
【００２５】
縦集計領域において、縦方向には判断分類職員数（集計用）に従う出勤休暇の区分が示され、横方向に沿って各区分ごとの勤務者数が表示される。また、後述のように、下部のタブを選ぶことにより、職員の属性あるいはグループごとに集計を切り換えて表示することができる。割付領域において勤務表作成者による入力や自動割付によって勤務が変更された場合には、この集計値もリアルタイムに更新される。
【００２６】
上記の横集計表及び縦集計表においては、勤務表の基礎をなす表示分類とは異なる集計用の判断分類に従って集計が行われており、このため、勤務表作成者が従来頭の中で行っていた再計算を不要にでき、勤務表の集計やチェックをより簡単に行うことができるという利点がある。
【００２７】
図２に示されるように、本実施の形態における勤務表作成支援システムにおいては、勤務表及び各集計表において、割付条件に違反した個所が反転表示により警告表示され、どの部分が条件違反個所であるか容易に特定できる。この例では、各長円によって補充説明がなされているように、「勤務パターン条件違反」、「勤務間隔条件違反」、「職員組合せ条件違反」、「勤務供給条件違反」、「実働集計条件違反」が指摘されている。
【００２８】
更に、このシステムにおいて、警告表示があった個所にポインタを移動させてマウスクリックを行う、あるいは一定時間ポインタを停止させることにより、図示されるように、その警告内容を表示させることができる。図示の例では、矩形の吹き流し表示によって「「休」と「休」の間隔が７日です。」というメッセージが表示されている。よって、これらの機能を利用して、勤務表の作成をより容易化・迅速化できる。なお、図２では、違反の種類を長円で囲み示し、また、マウスカーソルで指示されている違反部分の違反内容（警告内容）を矩形の吹き流しで示しているが、これらの表示／非表示を切り替え可能としてもよい。
【００２９】
縦集計領域の下部には、上記のように、職員グループ名を表す幾つかのタブがあり、そのタブの選択によって特定グループに属する職員の集計表を表示可能である。ここで、図２は、「全体」のタブを選択した例であり、５日の全看護婦に対する準夜勤の人数が２名となっているため、勤務需要条件を満たしていないことを示している。なお、勤務区分の種類や分類、集計方法に関しては、本発明の要旨ではないため詳細な説明は省略するが、本願と同一出願人による特開２０００−９９５６９号公報に記載された内容をそのまま使用することができる。
【００３０】
ここで、本実施の形態における割付条件記述部２に登録される割付条件について例を挙げて説明する。本実施の形態では割付条件を、勤務需要条件、勤務供給条件、勤務パターン条件、勤務間隔条件、割付単位条件及び職員組み合わせ条件という種別に分類して扱っている。勤務需要条件というのは、１日の職員数の上限、下限、目標人数を職員の資格と勤務ごとに定めた条件であり、［例１］職員全員に対して日勤を下限１０名〜上限１２名とする（重み１００）、［例２］夜勤リーダー資格の職員に対して準夜勤務を下限１名とする（重み２００）などである。勤務供給条件というのは、所定期間（例えば　１ヶ月）内での各職員の勤務回数の上限、下限、目標回数の条件であり、［例１］職員Ａの１ヶ月間の準夜勤務を下限４回とする（重み５０）、［例２］各職員とも　１ヶ月間の休みを下限７回とする（重み３０）などである。勤務パターン条件というのは、一人の職員について着目した場合に、回避したいあるいは推奨したい勤務のならびを定めた条件であり、［例１］病棟の全職員について準夜深夜のならびを回避する（重み２０）、［例２］職員Ｃは、深夜深夜深夜のならびを回避する（重み１００）などである。勤務間隔条件というのは、一人の職員について着目した場合に、勤務と勤務の間隔の上限を定めた条件であり、［例］休みと休みの間隔は上限５日とする（重み１５０）などである。割付単位条件とうのは、職員がある日に行いたいまたは行いたくない勤務を定めた条件であり、［例１］職員Ｄの５月１日は準夜と深夜を回避する（重み５００）、［例２］職員Ｅの５月１０日は休みまたは日勤を推奨する（重み２００）などである。職員組み合わせ条件というのは、ある職員が同じ勤務を一緒に行いたいまたは行いたくない職員を定めた条件であり、［例１］職員Ｆは、準夜勤務で職員Ｇまたは職員Ｈとは組まない（重み７０）、［例２］職員Ｉは、日勤で職員Ｊまたは職員Ｋと組む（重み８０）などである。割付条件記述部２には、上記のように勤務表作成にあたって必要とされる割付条件が登録されるが、本実施の形態においては、各割付条件に対応させて重みを予め設定しておく。重みは、勤務表を作成する上での各割付条件の重要度を示す値であり、本実施の形態では大きい数の方が重要な条件となる。もちろん、小さい方を重要としてもよく、この場合は以降に詳述する評価値比較による評価の判断は逆になる。割付条件は、評価値計算部６及び違反判定部２０により利用される。なお、ここでは、代表的な割付条件を列挙したが、この例に限定されるものではなく、勤務表を作成する業種、職種、業務規模等によって適切な条件の種類や重みを設定すればよい。
【００３１】
次に、本実施の形態における動作について説明する。まず、図３に示したフローチャートを用いて、最初に初期割付を行い、その結果を修正することにより勤務表を作成する基本的な処理の全体の流れについて説明する。なお、割付処理に必要な割付条件は上記の通り割付条件記述部２に予め登録されているものとする。
【００３２】
ステップ１００における初期割付処理では、割付実行部１６が評価値計算部６から得られる評価値がなるべく小さくなるよう勤務表マトリクスの要素値を決定する。初期割付では、まだ追加条件が設定されていないので、評価値計算部６は、割付条件記述部２に設定されている割付条件を用いて勤務表の評価値を決定する。なお、割付実行部１６及び評価値計算部６における処理の詳細については後述する。
【００３３】
ステップ２００における表示処理では、表示処理部１２が上記初期割付処理によって作成された勤務表を画面表示する。この際、違反判定部２０は、割付条件記述部２の割付条件を用いて作成された勤務表に条件違反を検出したとき、その違反に該当する割付条件及びその違反内容を違反記憶部２２に書き込む。そして、警告表示部２４は、違反記憶部２２に書き込まれた条件違反を通知するために警告表示する。
【００３４】
続いて、ステップ３００における分岐では、入力部４から追加条件となる入力があったかどうかが判断される。あった場合には次に述べる修正割付が行われる。入力がない場合には、ステップ４００においてにおいて勤務表の作成が完了したかどうかが判断され、完了していない場合には表示処理以降の工程が繰り返し実行される。
【００３５】
ステップ５００における修正割付処理では、修正実行部１８がまず入力部４からの入力に基づいて追加条件を構成し、追加条件記憶部８に登録する。追加条件記憶部８の内容例を図７に示す。その後、修正実行部１８では割付実行部１６を利用して、追加条件記憶部８に記録された追加条件に従って勤務表マトリクスを修正していく。修正実行部１８における処理の詳細は後で説明する。修正割付処理が終了すると、再び表示処理に戻って同様の工程を繰り返す。
【００３６】
本実施の形態における勤務表作成処理の全体の流れは、以上の通りであるが、以下に各処理について詳述する。まず最初に、初期割付処理（ステップ１００）について説明する。
【００３７】
本実施の形態における初期割付処理というのは、割付実行部１６により実行され、予め入力されている作成条件に基づいて所定規則に従い２次元マトリクス上に各勤務区分をはじめて割り付ける処理である。なお、修正割付処理（ステップ５００）においても同様に２次元マトリクス上に各勤務区分を割り付ける処理を実行するが、修正割付処理では追加条件を考慮するため、割付処理において追加条件を考慮しないで実行される割付処理を、ここでは特に初期割付処理と呼ぶこととする。もちろん、初期割付処理の際には追加条件記憶部８に追加条件は記憶されていない。
【００３８】
初期割付処理において、割付実行部１６は、まず勤務表マトリクスの空の要素に対して適当な要素値（勤務区分）を初期解として割り当てる。初期解の決め方の例としては、勤務表マトリクスの全要素に同じ勤務　（例えば休みなど）を割り当てる、あるいは、全ての要素の勤務をランダムに割り当てる、などの方法がある。次に、このように決定した初期解から所定のアルゴリズム、例えば山登り法、整数計画法、遺伝的アルゴリズム、シミュレーテッド・アニーリングなどの手法を用いて勤務表マトリクスの要素の値を変更する。いずれのアルゴリズムを用いる場合でも、要素の値を変更する際にはその時の勤務表マトリクスをもとに評価値計算部６で算出される評価値がなるべく小さくなるようにする。各アルゴリズムにおいて、それ以上ペナルティ値の小さい勤務表が得られなくなったり、反復回数や経過時間が既定値に達した場合に割付処理が終了となる。以下、初期割付の具体的な処理の流れを図４に示したフローチャートを用いて説明する。なお、ここでは、アルゴリズムとしては要素値のランダムな変更に基づく山登り法を用いて説明する。
【００３９】
割付実行部１６は、まず、反復回数を示すカウンタの値を０に初期化した後（ステップ１０１）、勤務表マトリクスに、休み、日勤、準夜等の勤務区分を割り当てる（ステップ１０２）。このときの割り当てる勤務区分は、初期値としてランダムに割り当てればよい。なお、本実施の形態では、初期値をランダムに定める例を示したが、何らかの規則に従って定めたり、全てを一様な値にするなどの方法を用いてよい。
【００４０】
続いて、割付実行部１６は、初期値の割り当てられた勤務表マトリクスに対する評価値を、評価値計算部６に算出させる（ステップ１０３）。算出した評価値は、変更前評価値として記録しておく（ステップ１０４）。なお、評価値算出処理の詳細については、追って説明する。次に、割付実行部１６は、勤務表マトリクス中のいくつかの要素の値をランダムに変更する（ステップ１０５）。なお、ここではランダムに変更する例を示したが、何らかの基準に従って規則的に変更する、等の方法を用いてもよい。割付実行部１６は、このように変更した勤務表マトリクスに対する評価値を評価値計算部６に改めて算出させ（ステップ１０６）、変更後評価値として記録する（ステップ１０７）。
【００４１】
ここで、変更後評価値が変更前評価値よりも小さい場合には、先に実施した勤務表マトリクスにおける要素値の変更により勤務表が改善されたとみなすことができる。このときには、変更後評価値を次の変更前評価値として記録しておく（ステップ１０８，１０９）。一方、逆に変更後評価値が変更前評価値以上であった場合には、先の変更により勤務表が改善されなかったので、先のマトリクス要素の変更を元に戻す（ステップ１０８，１１０）。
【００４２】
続いて、反復回数のカウンタの値を１加算する（ステップ１１１）。ここで、反復回数が予め設定した規定回数　（例えば１万回）を超えた場合には、処理を終了する（ステップ１１２）。また、経過時間が一定時間を超過した場合にも処理を終了する（ステップ１１３）。なお、初期割付処理の終了条件として、ここでは反復回数、経過時間の２種類を例示したが、これ以外にもある一定回数の反復において一度も勤務表の改善が見られなかった場合に終了する、等の基準により処理を終了させてもよい。上記終了条件に抵触しない場合には、ステップ１０５に戻って処理を繰り返す。
【００４３】
次に、表示処理（ステップ２００）について説明する。なお、本実施の形態において作成し、表示する勤務表に関しては、図２を用いて前述したが、勤務表の作成、表示自体は本発明の要旨ではないため説明を省略する。
【００４４】
表示処理部１２が上記初期割付処理によって作成された勤務表を画面表示する際、違反判定部２０は、割付条件記述部２が持っている割付条件と勤務表保存部１４に記憶されている勤務表とから、勤務表中の割付条件違反の有無やその発生位置を検出し、違反記憶部２２に格納することは前述したとおりである。この格納される違反を例示すると、例えば、勤務需要条件に関しては、「夜勤リーダー資格の職員に対して準夜勤務を下限１名とする」という割付条件に対して「５月４日に、夜勤リーダー資格の社員に対して準夜勤務が１名未満」という違反が考えられる。勤務供給条件に関しては、「職員Ａの１ヶ月間の準夜勤務を下限４回とする」という割付条件に対して「職員Ａの１ヶ月間の準夜勤務が４回未満」という違反が考えられる。勤務パターン条件に関しては、「病棟の全職員について準夜深夜のならびを回避する」という割付条件に対して「職員Ｂの５月１０日から１１日にかけて、準夜深夜の並びがある」という違反が考えられる。割付単位条件に関しては、「職員Ａの５月１日は準夜と深夜を回避する」という割付条件に対して「職員Ａの５月１日に深夜が割り付けられている」という違反が考えられる。
【００４５】
条件違反の発生位置というのは、勤務者と勤務日とが交差した要素で特定されるが、必ずしも勤務表マトリクス中の単一の要素を示すとは限らず、条件の種類に応じてある特定の１日あるいは期間を示す場合もあり、また、ある特定の勤務者あるいは複数の勤務者を示す場合もある。違反判定部２０が検出した条件違反は、以下の情報の組として違反記憶部２２に登録される。
【００４６】
勤務需要条件違反…勤務需要条件、日付、資格により限定される職員のグループ、勤務
勤務供給条件違反…勤務供給条件、職員、日付
勤務パターン条件違反…勤務パターン条件、職員、勤務パターン条件違反の先頭日、最終日
勤務間隔条件違反…勤務間隔条件、職員、勤務間隔条件違反の先頭日、最終日
割付単位条件違反…割付単位条件、職員、日付
職員組み合わせ条件違反…職員組み合わせ条件、日付、勤務、職員
違反記憶部２２に記憶された条件違反は、警告表示部２４において警告表示に用いたり、修正実行部１８で勤務表マトリクスの修正を行う際に使用される。
【００４７】
警告表示部２４は、違反記憶部２２に条件違反が書き込まれると、その条件違反を通知するために警告表示する。この表示の一例を図２に示した。図２に示した勤務表における警告表示例では反転表示で図示したが、表示色を変えるなどしてもよい。この例のように条件違反に該当する勤務状況部分の表示を違反していない部分と異ならせることによりその違反箇所を一目瞭然に特定することができる。
【００４８】
図５には、その他の警告表示例を示した。この例では、違反内容をテキストによるリスト形式で表示している。このうち、図５（ａ）では、個々の条件違反を、図２が表上に示しているのに対し、テキスト文字にてメッセージとして示した。条件違反した個々の勤務状況部分に対応させているので、リストされているメッセージ数が条件違反数に等しい。これに対し、図５（ｂ）は、割付条件に対して違反した内容をテキストによるリスト形式で表示する。つまり、図５（ａ）で表示される条件違反を違反の元となった割付条件毎にまとめて表示する。このように、初期割付を行った後にも割付条件に対する違反が生じている場合があるが、警告表示部２４を設けたことで勤務表作成者にその違反内容を認識させることができる。なお、図２及び図５に示した警告表示は、勤務表作成者による操作に応じて切替え式に、あるいは全ての表示／非表示が制御される。
【００４９】
次に、本実施の形態の特徴である修正割付処理（ステップ５００）について図６に示したフローチャートを用いて説明する。
本実施の形態における修正割付処理というのは、主に修正実行部１８により実行され、予め入力されている作成条件及び追加条件記憶部８に記憶されている追加条件に基づいて所定規則に従い２次元マトリクス上に各勤務区分を割り付けることにより追加条件違反状態の解消を図るために実施される処理である。
【００５０】
まず、修正実行部１８は、勤務表作成者が入力部４で入力した追加条件を、追加条件記憶部８に登録する（ステップ５０１）。ここで、入力部４を用いた追加条件の入力処理について説明する。
【００５１】
初期割付処理により作成された勤務表は、図２に例示したように表示処理部１２により画面表示される。初期割付処理後には、条件違反が発生することが多い。ここで、勤務表作成者が表示された勤務表上の警告表示されている個所にマウスポインタを移動させてクリックすると、その位置の情報は修正実行部１８に伝えられる。修正実行部１８は、そのクリック位置に対応する割付条件違反を違反記憶部２２から抽出し、その割付条件違反を解消することを追加条件として新規に登録するかどうかを判定する。新規に登録しようとする追加条件が追加条件記憶部８に記録されていなければ登録する。
【００５２】
また、図２に示した勤務表上で入力指定しなくても図５に示したリストの中から指定してもよい。図５（ａ）からの指定は、個々の条件違反を選択する点で図２からの指定と実質的に同じであるが、図５（ｂ）の場合、リストされた違反内容に該当する勤務状況部分が複数存在することもありうる。図５（ｂ）の例に基づくと、準夜−深夜の回避勤務パターンが割り付けられた勤務者が複数（例えば、ＡさんとＢさん）存在する可能性がある。このような場合、修正実行部１８は、Ａさんの割付条件違反とＢさんの割付条件違反とに分解して追加条件記憶部８に登録する。換言すると、準夜−深夜の回避勤務パターン違反という条件違反を一斉に解消したい場合には、図２又は図５（ａ）の形式による警告表示からではなく図５（ｂ）の形式による警告表示から追加条件を入力指定すればよい。このように、本実施の形態では、警告表示に対応した割付条件違反を解消するための追加条件の入力を行うことができる。
【００５３】
本実施の形態では、マウスクリックにより修正割付処理が自動的に開始されるように設定しているので、勤務表作成者は、表示された勤務表のある箇所でマウスクリックすると、その箇所の違反が解消されるように要素値が変更された勤務表の修正版が自動的に作成されることになる。つまり、詳細は後述するが、勤務表作成者は、条件違反を解消したい部分をクリック操作さえすれば、その箇所の変更値を入力する必要がなく、また、他の要素の要素値との関係を意識しなくてもよいので、勤務表の修正を自己の意思を反映させて極めて容易に行うことができる。
【００５４】
なお、本実施の形態では、マウスクリックにより修正割付処理が自動的に開始されるように設定しているので、図２又は図５（ａ）による警告表示の場合は、追加条件を一つずつしか入力指定することはできないが、例えばマウスクリックにより複数の条件選択を選択操作し、別途設けた確定ボタンをマウスクリックすることにより修正割付処理が起動されるようにすれば、図５（ｂ）と同様に複数の追加条件を一度に指定することができる。
【００５５】
また、本実施の形態では、原則、条件違反した箇所を選択入力するようにしているが、付加機能として違反していない箇所を入力指定することもできる。例えば、夜勤の上限が９回のとき、Ａさんの夜勤数は８回であり違反してはいないが、当該月の夜勤数を変更したいときにはＡさんの８回と表示された夜勤数をクリックし、表示されたリストから「増加」、「減少」のいずれかを選択するようにしてもよい。修正割付処理により９回という上限を超えた要素値が割り付けられることはないので、９又は７以下に減らすことができる。このように、違反していない勤務状況部分や集計値部分を指定して勤務表の修正を行うことも可能である。なお、本実施の形態では、勤務表上でクリックが行われると、対応する位置情報が修正実行部１８に送られて、それをもとに違反記憶部２２の割付条件違反が検索されるが、対応する割付条件違反が存在しない場合は、修正実行部１８により「指示された位置の要素値が現在の要素値にならないようにする」という追加条件が自動生成され、追加条件記憶部８に登録される。
【００５６】
図６に戻り、修正実行部１８は、上記のようにして勤務作成者に入力指定された追加条件を追加条件記憶部８に登録するが（ステップ５０１）、このとき、追加条件記憶部８には、同時にその追加条件に対する修正試行回数が初期値０として記憶される。この値はこれから述べる修正実行部１８内の処理で使われる。追加条件記憶部８に登録された追加条件の例を図７に示す。システムの開始直後、追加条件記憶部８は空であるが、修正実行部１８により追加条件と修正試行回数を組として累積的に登録されていく。追加条件記憶部８の内容は、追加条件の発生に伴って累積的に増えていくが、ある一定条件の下で削除される（ステップ５１７）。また、登録数が閾値を超えたら古い追加条件を自動削除する、などの方法によってその蓄積量を制限することもできる。また、作成者からの指示等によって追加条件記憶部８を空に戻す手段を設けてもよい。
【００５７】
次に、修正実行部１８は、追加条件記憶部８に登録された追加条件のうち、現在の勤務表マトリクスにおいて追加条件違反状態になっている追加条件を選択する（ステップ５０２）。本実施の形態では、基本的にステップ５１７でのみ登録された追加条件を削除するようにしている。従って、要素値を変更する処理（ステップ５０８）を含むステップ５０８〜５１６の繰り返し処理により追加条件違反が解消したとしても、その追加条件は追加条件記憶部８から削除されずに追加条件違反状態になっていない追加条件として残存する。なお、追加条件違反状態になっているかいないかは、追加条件記憶部８に登録されている各追加条件と作成されている勤務表とを付き合わせて毎回ステップ５１８において確認する。追加条件違反状態の追加条件が複数存在する場合は、そのうち一つの追加条件を自動選択する（ステップ５０２）。選択方法としては、ランダムに選択、最新に登録されたものを選択、最も先に登録されたもの（最も古いもの）を選択、試行回数の最も少ないものを選択、などの方法が考えられるが、いずれの方法を用いてもよい。なお、修正割付処理の開始時には、直前に勤務表作成者により指定された追加条件しか登録されていないはずなので、その追加条件が無条件に選択される。
【００５８】
続いて、修正実行部１８は、選択した追加条件に対応する修正試行回数に１を加える（ステップ５０３）。ここで、修正試行回数があらかじめ定めた規定回数を超過していない場合は（ステップ５０４）、割付実行部１６により、作成された勤務表マトリクスに対する評価値を小さくするように要素値の変更を行う。なお、以降の例では初期割付処理の場合と同様に山登り法によるアルゴリズムを例にとって説明するが、ここでも他のアルゴリズム、例えば整数計画法、遺伝的アルゴリズム、シミュレーテッド・アニーリングなどの方法を用いてもよい。また、ここで用いるアルゴリズムには、初期割付処理時と別のアルゴリズムを用いてもよい。
【００５９】
まず、反復回数を記録するカウンタを０に初期化する（ステップ５０５）。次に、現在の勤務表マトリクスに対する評価値を、評価値計算部６によって算出する（ステップ５０６）。ここでは、追加条件記憶部８に追加条件が登録されているため、評価値計算部６においては追加条件に対応する追加ペナルティ値も含めた評価値が計算される。すなわち、同じ勤務表に対する評価値でも、修正割付の場合　（追加条件記憶部８に追加条件がある場合）と修正割付でない場合　（追加条件記憶部が空の場合）では値が異なる。なお、評価値の算出処理の詳細については追って説明する。ここで算出した評価値は変更前評価値として記録しておく（ステップ５０７）。
【００６０】
次に、勤務表マトリクス中のいくつかの要素の値を変更する（ステップ５０８）。ここでの変更方法は、初期割付の場合と同じでも異なっていてもよい。例えば、初期割付処理と同様にランダムに変更することもできるが、同一日の２名の職員の勤務を交換する、などの具体的な変更方法を１乃至複数切り替えて用いてもよい。もちろん、この方法では　１日ごとの勤務数は変更されなくなるので、この方法は初期割付の結果で　１日の勤務数の条件が満たされている場合のみ用いるべきであるが、そのような条件下ではランダムに変更するよりもより効率良く探索を行うことができる。ここで変更した勤務表マトリクスに対する評価値を評価値計算部６によって算出し（ステップ５０９）、ここで算出した評価値は変更後評価値として記録する（ステップ５１０）。
【００６１】
ここで、変更後評価値が変更前評価値よりも小さい場合には、先に実施した勤務表マトリクスにおける要素値の変更により勤務表が改善されたとみなすことができる。このときには、変更後評価値を次の変更前評価値として記録しておく（ステップ５１１，５１２）。一方、逆に変更後評価値が変更前評価値以上であった場合には、先の変更により勤務表が改善されなかったので、先のマトリクス要素の変更を元に戻す（ステップ５１１，５１３）。
【００６２】
次に、反復回数のカウンタの値を１加算する（ステップ５１４）。ここで、反復回数が予め設定した規定回数　（例えば１万回）を超えていない場合（ステップ５１５）、かつ経過時間が一定時間を超過していない場合（ステップ５１６）、ステップ５０８に戻る。一方、反復回数が予め設定した規定回数　（例えば１万回）を超えた場合（ステップ５１５）、あるいは経過時間が一定時間を超過した場合（ステップ５１６）、次に追加条件記憶部８に登録されている追加条件の条件違反が全て解消しているか判断する（ステップ５１８）。解消していれば、勤務作成者に指定された追加条件は勤務表に全て反映できたことになるので修正割付処理を終了する。解消されていなければ、ステップ５０２に戻って解消されていない条件違反が解消するまで処理を反復して行う。追加条件が全て解消したかどうか、すなわち追加条件違反状態になっているかいないかは、追加条件記憶部８に登録されている各追加条件と作成されている勤務表とを付き合わせて判定する。なお、ステップ５０８〜５１６の反復を終了させる条件として、本実施の形態では反復回数、経過時間の２種類を例示したが、これ以外にもある一定回数の反復において一度も勤務表の改善が見られなかった場合に終了する、等の基準により反復を終了してもよい。
【００６３】
ここで、本実施の形態において特徴的な評価値計算部６が算出する評価値及び評価値の算出方法について詳述する。
【００６４】
評価値計算部６は、割付処理において割付条件記述部２の割付条件と追加条件記憶部８の追加条件から勤務表マトリクスの勤務表に対する評価値を算出する。本実施の形態における評価値は、以下の評価関数Ｅ（ｘ）により求める。
【００６５】
Ｅ（ｘ）＝ｆ（ｘ）＋ｐ（ｘ）　　　　　　　・・・（１）
ここで、ｘは勤務表マトリクス中の勤務表を示す。ｆ（ｘ）は目的関数であり、勤務表ｘが割付条件記述部２に記録されている割付条件にどの程度違反しているかを示すペナルティ値を求めるための関数である。ｐ（ｘ）は追加ペナルティ関数であり、勤務表ｘが追加条件記憶部８に登録されている追加条件にどの程度違反しているかを示す追加ペナルティ値を求める関数である。つまり、評価関数により得られる評価値は、作成条件及び追加条件に対する条件違反度を示す値であるということができる。なお、ｐ（ｘ）は、勤務表ｘに対する追加条件に対応して評価値を増加させる効果のある項であり、必ずしも上記式に限定されるものではない。すなわち、目的関数ｆ、追加ペナルティ関数ｐの値が増加した場合に評価関数Ｅの値も増加するような形式であればどのようなものでもよい。そのような関数としては、例えば、
Ｅ（ｘ）＝ｆ（ｘ）×（１＋ｋ・ｐ（ｘ））
のようなものがある。但し、この場合はｐ（ｘ）≧０となるようｐを定める。ｋは正定数である。以下、各関数ｆ、ｐについて説明する。
【００６６】
割付条件の違反度を示す目的関数ｆ（ｘ）は、次のように定義される。
【００６７】
【数１】
2004013487.tif 000003
ここで、ｆｔｙｐｅ（ｘ）は、割付条件の種類ごとに、勤務表ｘに対する割付条件違反のペナルティ値を求める関数である。ペナルティ値の計算方法の例を以下に示す。
【００６８】
まず、勤務パターン条件のペナルティ値の計算方法としては、例えば「病棟の全職員について準夜−深夜のならびを回避する（重み１００）」という条件があるとき、勤務表中に準夜−深夜の並びになっている個所が５個所あるならば、５×１００＝５００をペナルティ値とすることができる。
【００６９】
また、勤務供給条件として、「職員Ａの１ヶ月間の準夜勤務を下限４回とする（重み５０）」という条件があるとき、勤務表中の職員Ａの準夜勤務の回数合計が２回ならば、職員Ａの準夜勤務は条件で指定された回数を２回下回っているので、この勤務供給条件に対するペナルティ値は、２×５０＝１００となる。
【００７０】
ここでは、勤務パターン条件と勤務供給条件におけるペナルティ値の計算方法の一例を述べたが、他の条件についても条件に違反する度合いが大きいほど大きな値を与えるような計算方法を定めて計算を行ってよい。
【００７１】
なお、上記の勤務パターン条件、勤務供給条件についても計算方法は上記以外の方法も考えられる。例えば、勤務供給条件のペナルティ値の計算を例にとれば、下限の条件で指定された回数（４回）を下回った量（２回）の二乗に対して重みを掛けた値をペナルティ値とする（ペナルティ値は、２２×５０＝２００となる）方法などが考えられる。
【００７２】
一方、追加条件の違反度を示す追加ペナルティ関数ｐ（ｘ）は、以下のように定義される。
【００７３】
【数２】
2004013487.tif 000004
ここで、ｐｉ（ｘ）は勤務表ｘに対する追加条件ｉに対する追加条件ペナルティ値を求める関数である。この関数の一例を示すと以下のようになる。
【００７４】
【数３】
2004013487.tif 000005
ここで、αは追加条件を評価値に反映させる度合いを示す定数、ｔｉは追加条件ｉの修正試行回数、ｇｉ（ｘ）は勤務表ｘに対する追加条件違反の度合いを示す関数である。
【００７５】
初期割付処理のときには、追加条件はまだ入力されていないので、追加条件記憶部８には追加条件が存在しない。つまり、いかなる勤務表ｘに対してもｐ（ｘ）＝０となる。一方、追加条件記憶部８に追加条件が登録されている場合には、それらの追加条件のうち追加条件違反状態のものに対して追加ペナルティ値が計算される。ここでの追加ペナルティ値の計算方法は、目的関数の場合と同様、追加条件に違反している度合いが大きいほど大きな値をとるような方法であればよい。もちろん、目的関数と同様の計算方法を使用してもよい。
【００７６】
ここで、αの値は、修正試行回数の増加に伴ってその追加条件に対するペナルティ値が他の割付条件のペナルティ値に近づくような値を適当に定めればよい。例えば、割付条件の強さの平均の１／１０程度にすればよい。但し、この値に限定するものではなく、例えば、前回の反復の際に得られた勤務表の評価値に基づいて決めることも可能である。
【００７７】
また、追加条件ごとに異なるαの値を設定することもできる。例えば、違反した割付条件が追加条件となっている場合、その割付条件の重みを基準に設定（例えば、対応割付条件の重み値の１／１０）とすれば、各追加条件のαの値は、対応する割付条件の重み値によって異なってくる。また、割付条件とは独立させて、αの値をどの追加条件の違反を優先的に解消させるかという優先度として用いることもできる。
【００７８】
ここで、評価値算出の一例として、図７に示すような３種類の追加条件が追加条件記憶部８に登録されているとき、図２に示す勤務表に対するペナルティ値の計算方法の例を以下に示す。なお、α＝１０とする。
【００７９】
勤務表は、追加条件「職員「加藤」の２日〜３日の準夜−深夜の並びを回避する」に違反している。よって、この追加条件は追加条件違反状態である。この追加条件に対する違反の度合いｇｉ（ｘ）は、違反が発生している場合は１、していない場合は０の値を取るとすると、この場合はｇｉ（ｘ）＝１となる。また、修正試行回数ｔｉ＝１なので、この追加条件に対する追加条件ペナルティ値は、ｐｉ（ｘ）＝１０・１・１＝１０となる。それ以外の２つの追加条件は、図で示された勤務表ではすでに解消されている。従って、各追加条件ペナルティ値は０となる。これより、全ての追加条件に対する追加ペナルティ関数の値はｐ（ｘ）＝１０＋０＋０＝１０となる。
【００８０】
追加ペナルティ関数により得られる追加ペナルティ値ｐ（ｘ）は、上記式から明らかなように、追加条件違反状態の追加条件が存在するとき、各ｐｉ（ｘ）に修正試行回数ｔｉを乗算して算出される。従って、割付処理を繰り返し行っているのにもかかわらず追加条件違反状態が解消されない状態が継続すると、追加ペナルティ値ｐ（ｘ）は増加していく。修正試行回数ｔｉは、全ての条件違反が解消されていなければ処理の繰り返しにより図６のステップ５０３で加算される値なので、違反状態である追加条件の違反度合いを示すパラメータの１つであるということができる。一方、目的関数により得られるペナルティ値ｆ（ｘ）は、修正試行回数（反復回数）に依存しない。すなわち、割付処理が繰り返し行われると、評価値に対する追加ペナルティ値が占める割合が大きくなり、これに伴い評価値自体も大きくなってしまう。本実施の形態における割付実行部１６は、評価値計算部６から得られる評価値がなるべく小さくなるように勤務表マトリクスの各要素値を決定するので、結果的に割付条件に対する違反より追加条件、すなわち勤務作成者により入力指定された条件の違反を優先的に解消するように作用する。ステップ５０２において追加条件違反状態の追加条件が複数存在する場合、修正実行部１８は、そのうち一つの追加条件を自動選択するが、いずれの追加条件を選択しても、その選択された追加条件の修正試行回数が１加算されるので、各追加条件の追加条件ペナルティ値ｐｉ（ｘ）の総和により得られる追加ペナルティ値ｐ（ｘ）は大きくなる。従って、修正実行部１８が修正試行回数を加算することになる追加条件をランダムに選択しても問題はない。
【００８１】
また、修正割付処理においてマトリクスの要素値変更処理（ステップ５０８）が繰り返し行われることによって、条件違反状態でなくなった追加条件も条件違反状態となってしまう可能性もある。しかしながら、このような場合も、割付実行部１６は、修正試行回数を増やし（ステップ５１８，５０３）、マトリクスの要素値変更処理（ステップ５０８）を改めて行うことにより復活した条件違反を再度解消するように作用する。
【００８２】
修正実行部１８では、評価値計算部６から得られる評価値がなるべく小さくなるように勤務表マトリクスの各要素値を決定する手法として山登り法等の所定のアルゴリズムを用いているが、たとえこのようなアルゴリズムを用いたとしても、特定の状況下では、割付処理を繰り返し行っても評価値を小さくできない可能性がある。そこで、本実施の形態では、ステップ５０３で選択した追加条件の修正試行回数が予め設定した規定回数を超過した場合には（ステップ５０４）、その追加条件に従った勤務表の変更はできないものとみなして、選択した追加条件を追加条件記憶部８から削除する（ステップ５１７）。追加条件を削除した後、その他に条件違反状態の追加条件が存在しなければ、修正割付処理を終了し、解消されていなければ、ステップ５０２に戻って解消されていない条件違反が解消するまで処理を反復して行う（ステップ５１８）。
【００８３】
また、本実施の形態では、修正割付処理の途中で所定のアルゴリズムを変更できるようにした。すなわち、山登り法等採用しているアルゴリズムで評価値を小さくする際に限界に達しても、整数計画法等他のアルゴリズムに変更することにより、評価値を小さくできる可能性があるからである。このアルゴリズムの変更は、勤務表作成者からの指示に従い変更するようにしてもよいし、所定回数以上反復しても評価値が小さくならないときに、修正実行部１８が自動的に変更するようにしてもよい。
【００８４】
なお、本実施の形態では、評価値の小さい方が改善され評価の高い勤務表が得られるものとして説明した。つまり、評価値計算部６から得られる評価値がなるべく小さくなるように勤務表マトリクスの各要素値を決定するようにしたので、条件違反しているときにはペナルティ値を加算するようにした。しかし、この大小関係を逆にしてもよいことは言うまでもない。
【００８５】
以下、本実施の形態における勤務表の作成処理について具体例をあげて説明する。ここでは、具体的な処理の例として、図８で示す前提のもとに、実際に修正を行う過程の例を図９，１２に示す。この例では、修正割付の過程を端的に示すために、職員４名、４日間の勤務表を例として用いた。
【００８６】
図９（ａ）には、初期割付処理により作成され、表示された勤務表が示されている（図３のステップ１００，２００）。この勤務表では、職員Ｂの勤務状況が割付条件のうち「深夜−深夜の並びを回避する（重み９０）」という勤務パターン条件に違反している。この違反箇所は反転表示されているので、作成者は、修正すべき勤務状況を容易に認識できる。作成者は、その違反箇所をクリック操作することで修正指示を入力する（図３のステップ３００）。この操作に応じて修正割付処理（図３のステップ５００）が開始される。
【００８７】
修正割付処理では、作成者により入力指定された箇所に対応する割付条件を追加条件として追加条件記憶部８に登録する（図６のステップ５０１）。この初期登録時での修正試行回数は、図９（ｂ）に示すように０である。しかしながら、追加条件はこの時点では１つのみなので、この追加条件が選択されることにより（図６のステップ５０２）、その追加条件の修正試行回数はすぐに加算され１になる（図６のステップ５０３）。図９（ｃ）は、図９（ａ）を転記した図であるが、目的関数ｆ（ｘ）の値は上記式（２）に従い９０、追加ペナルティ関数ｐ（ｘ）の値はα＝１０とすると上記式（３），（４）に従い１０となるので、この勤務表における評価値、すなわち評価関数Ｅ（ｘ）の値は上記式（１）に従い９０＋１０＝１００となる（図６のステップ５０６）。
【００８８】
ここで、図８に示した割付時の勤務表マトリクスの変更方法に従い、図６のステップ５０８〜５１６を繰り返し行うことで勤務表マトリクスの要素値を変更する。この処理では、評価値の小さい勤務表になるように要素値を変更するが、この例では、評価値の小さい勤務表へ変更できず、初期割付により作成した勤務表がそのまま残る。この結果を示した例が図９（ｄ）になる。
【００８９】
上記処理では、所定回数又は所定時間、勤務表マトリクスの要素値の変更を繰り返したにもかかわらず追加条件が解消できなかったので（図６のステップ５１５，５１６，５１８）、図６のステップ５０２に戻る。ここで、追加条件記憶部８に登録されている追加条件は１つのみなので、その追加条件が再度選択され、その修正試行回数は更に１加算され２になる（図６のステップ５０３）。
【００９０】
そして、図９（ｄ）に示した勤務表における評価値が計算されることになる（図６のステップ５０６）。この勤務表における目的関数値は９０と変わらないが、追加ペナルティ値は修正試行回数が２となったことで２０となる。よって、この勤務表における評価値は上記式（１）に従い９０＋２０＝１１０となる。このように、同じ勤務表であっても処理の繰り返しに伴い追加ペナルティ値が増えることにより評価値が大きくなる。
【００９１】
ここで、上記と同様に、図６のステップ５０８〜５１６を繰り返し行うことで勤務表マトリクスの要素値を変更する。ここでの処理では、図８に示した割付時の勤務表マトリクスの変更方法に従い、図１０（ｅ）に示した矢印のように職員Ｂと職員Ｃの２日の勤務状況を入れ替えてみたとする（図６のステップ５０８）。入れ替えた後の勤務表を図１０（ｆ）に示す。この入れ替えにより追加条件は解消されるが、今度は職員Ｃの勤務状況が割付条件のうち「休み−深夜の並びを回避する（重み１００）」という４番目の勤務パターン条件に違反することになる。この変更した勤務表における目的関数値は１００と増えるが、追加ペナルティ値は違反している追加条件がないので０となる。これにより、変更後の勤務表における評価値は上記式（１）に従い１００＋０＝１００となる（図６のステップ５０９）。従って、変更後の評価値の方が小さくなるので、この勤務表を記憶する（図６のステップ５１２）。
【００９２】
更に、図６のステップ５０８に戻り、図８に示した割付時の勤務表マトリクスの変更方法に従い、今度は図１０（ｆ）に示した矢印のように職員Ｂと職員Ｃの１日の勤務状況を入れ替えてみたとする。入れ替えた後の勤務表を図１０（ｇ）に示す。この入れ替えにより違反する割付条件はなくなり、かつ追加条件もない。すなわち、変更後の勤務表における目的関数値、追加ペナルティ値共に０となり、この結果、変更後の勤務表における評価値は上記式（１）に従い０となる（図６のステップ５０９）。従って、変更後の評価値の方が小さくなるので、この勤務表を記憶する（図６のステップ５１２）。
【００９３】
更に、図６のステップ５０８に戻り、勤務マトリクスの要素値を変更し、その変更前後の評価値を比較しても評価値０の勤務表を改善することはできない。そして、所定回数又は所定時間経過後、図６のステップ５１８において追加条件が全て解消されていることが確認されると、修正割付処理は終了する。この修正割付処理において作成される勤務表を図１０（ｈ）に示す。なお、図１０（ｈ）は図１０（ｇ）を転記した図である。
【００９４】
このようにして作成された勤務表が画面表示されると（図３のステップ２００）、作成者は、反転表示部分がないことによりこの勤務表はいずれの割付条件にも違反していないことを認識できる。この勤務表でよければ、作成者は、修正指示を入力せずに勤務表作成処理を終了させる（図３のステップ５００）。なお、前述したように、本実施の形態では、違反箇所がなくても割り付けられた内容を変更したければ、該当する箇所をクリックすることで変更することは可能である。
【００９５】
本来、この程度のサイズの勤務表であれば、初期割付だけで十分に良い勤務表が得られる可能性が高く、後から修正する必要性は少ない。しかし、実際に用いられる大きい勤務表では、初期割付で得られた勤務表に対して何らかの修正が必要となることは最初に説明した通りである。ここで例示する処理は、サイズが大きい勤務表に対してもそのまま使用できるものであり、修正過程の説明を平易に行うために、その方法を小さいサイズの勤務表において説明するものである。また、割付処理における所定のアルゴリズムとして、勤務表マトリクスの変更方法に「職員順、日付順に同一日の２名の職員の勤務を交換する」という方法を例として用いた。修正実行部１８の説明でも述べたように、ここで用いるアルゴリズムは初期割付で用いるアルゴリズムとは別のものであってもよい。
【００９６】
最後に、本実施の形態における勤務表作成支援システムに対するユーザインタフェイスを確認すると、勤務表作成者は、本システムを起動して勤務表を作成する。ここで作成され表示される勤務表というのは、初期割付処理により作成された勤務表であり、前述したように通常は条件違反が発生している。ここで、勤務表作成者は、警告表示を参照するなどして解消したいと考える条件違反箇所をマウスクリックにより指定する。マウスクリックする箇所を具体的に言えば、勤務表上における反転表示部分あるいは図５に示した警告メッセージである。もちろん、違反していない部分も指定可能であることは前述したとおりである。このマウスクリックに応じて修正割付処理が実行される。この結果、修正された勤務表が表示される。修正後もまだ条件違反が残っているなどの理由で更に勤務表を修正したい場合、勤務表作成者は、上記と同様にその修正箇所をマウスクリックにより指定する。このような作成された勤務表に対し修正箇所をマウスクリックにより指定することで勤務表を改善することができる。
【００９７】
以上のように、本実施の形態によれば、勤務表作成の際の修正に関して、勤務表作成者により入力指定された要素の要素値を効果的に自動修正することができるので、勤務表作成者は、修正したいと考える勤務状況部分を指定するだけでよく、効果的に勤務表を修正することができる。
【００９８】
なお、本実施の形態は、条件違反等により変更すべき要素値を自動的に修正することで勤務表作成者にかかる負担を軽減するものである。しかし、勤務表作成者による要素値の設定を否定するものではなく、従来と同様に各要素に所望の要素値を手動により入力設定できるようにしてもよい。また、本実施の形態では、条件違反を解消するために勤務表マトリクスの要素値変更をランダムに行っている（図６のステップ５０８）。つまり、各要素値は条件違反の有無に関係なく直前の勤務表と異なる場合がある。このため、勤務表作成者が手動で設定した要素値も割付処理の反復で変更されてしまう可能性がある。これを避けるには、割付条件に対する重みを設定変更できる機能を設けておき、要素値を変更させたくない要素に対する重みを極めて大きい値に設定しておけば、評価値が小さくなるように勤務表マトリクスを作成する割付実行部１６は、その要素値が変更するような勤務表マトリクスを採用しない（図６のステップ５１１，５１３）。なお、勤務表作成者により手動で要素値が入力設定されたときは、その要素値を割付条件に自動登録し、その際に設定する重みを極めて大きい値に設定するよう自動処理するようにしてもよい。
【００９９】
また、上記実施の形態においては、看護婦の勤務表の作成支援システムを実現するものであったが、本発明はこれに限定されず、例えば警備員、パイロット、タクシードライバーなどの交代制の勤務形態をもつ職種の勤務表作成にあたっても同様に適用可能である。
【０１００】
【発明の効果】
本発明によれば、勤務表作成者は勤務表の修正を行う場合に、修正したいと考える個所を指示するだけでよく、修正に際してその個所の値をどんな値に変更すべきか、またその変更に伴って他の個所を派生的にどのように変更する必要があるかについて指示する必要がないため、勤務表修正の負担を大幅に軽減することができる。また、修正したい違反に対して追加ペナルティ値を与えるので、修正指示に伴う勤務表の変更箇所を少なく抑えることができ、勤務表作成者は、修正を視覚的に理解し易く、徐々に満足する勤務表に導くことができる。また、修正したい状態に対してペナルティ値を与えることで評価値を計算し勤務表の修正を行うため、その修正には最初に勤務表を自動作成するためのアルゴリズムをそのまま用いることもでき、その場合には修正に特化したルールを用意する必要がないというメリットがある。
【０１０１】
また、割付処理を反復して行う際に、割付処理の反復回数に応じた加重を課して追加ペナルティ値を再設定して評価値を計算するようにしたので、追加条件違反を優先的に解消する勤務表を作成することができる。
【０１０２】
また、割付処理を繰り返し行っても評価値を小さくできなくなったときに、採用しているアルゴリズムを他のアルゴリズムに変更できるようにしたので、評価値がより小さくなる改善された勤務表を作成することができる可能性がある。
【０１０３】
また、評価値計算手段により計算される評価値に反映させる追加ペナルティ値の度合いを追加条件毎に設定できるようにしたので、違反を解消させたい追加条件に優先度を持たせることができる。
【図面の簡単な説明】
【図１】本発明に係る勤務表作成支援システムの一実施の形態を示した機能ブロック構成図である。
【図２】本実施の形態において作成される勤務表の一例を示した図である。
【図３】本実施の形態における勤務表作成処理の全体の流れを示したフローチャートである。
【図４】本実施の形態における初期割付処理を示したフローチャートである。
【図５】本実施の形態における警告表示例を示した図である。
【図６】本実施の形態における修正割付処理を示したフローチャートである。
【図７】本実施の形態における追加条件記憶部に登録される追加条件の例を示した図である。
【図８】本実施の形態における修正割付処理を説明するための前提条件を示した図である。
【図９】図８に示した前提条件に基づく修正割付処理による勤務表の遷移を示した図である。
【図１０】図９に続く勤務表の遷移を示した図である。
【符号の説明】
２　割付条件記述部、４　入力部、６　評価値計算部、８　追加条件記憶部、１０　勤務表作成処理部、１２　表示処理部、１４　勤務表保存部、１６　割付実行部、１８　修正実行部、２０　違反判定部、２２　違反記憶部、２４　警告表示部。
【図１】
2004013487.tif 000006
【図２】
2004013487.tif 000007
【図３】
2004013487.tif 000008
【図４】
2004013487.tif 000009
【図５】
2004013487.tif 000010
【図６】
2004013487.tif 000011
【図７】
2004013487.tif 000012
【図８】
2004013487.tif 000013
【図９】
2004013487.tif 000014
【図１０】
2004013487.tif 000015