【文献】
田川 聖治,連続世代モデルに基づく微分進化法の分散分析による比較研究,情報処理学会論文誌 論文誌トランザクション 平成21年度▲2▼ [CD−ROM],日本,社団法人情報処理学会,2010年 4月15日,第2巻 第3号,第1−13ページ
(58)【調査した分野】(Int.Cl.,DB名)
要員リストの要素となる要員として、スケジューリングの対象である複数の要員のうち、単位期間において最適化処理の対象とならない要員を初期条件として設定する設定部を更に備える
請求項1又は2に記載のスケジューリング装置。
複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備えて複数の要員のスケジューリングを行うスケジューリング装置として機能するコンピュータが、前記スケジューリングデータとして用いるデータを記録したコンピュータ読み取り可能な記録媒体であって、
前記データは、
単位期間毎の各要員の役割を規定した部分コードを複数有し、
各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、
さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、
前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものであり、
前記要員特定値は、前記処理部による前記最適化処理によって最適化され、
前記最適化処理における前記進化的アルゴリズムは、
前記部分コードと他の部分コードとの間での、両部分コードにおける同一順位の要素同士の交叉、又は
前記要員特定値が属する部分コードにおける順位において前記要員特定値がとり得る値の範囲内における前記要員特定値の突然変異である
ことを特徴とするデータを記録したコンピュータ読み取り可能な記録媒体。
【発明を実施するための形態】
【0020】
以下、本発明の好ましい実施形態について添付図面を参照しながら説明する。
[1.スケジューリング装置の構成]
図1に示すスケジューリング装置1は、複数の要員(看護師)の所定期間のスケジューリングを生成し、そのスケジュールを出力するめのものである。スケジューリング装置1は、複数の要員それぞれの役割を単位期間毎(日毎)に規定したスケジューリングデータを個体として取り扱う。
【0021】
図2は、複数の要員(スタッフ)の役割を、所定期間(
図2では14日)内の日毎に規定したスケジュール表の例を示している。
図2では、要員の役割として、勤務形態の種別(日勤、準夜勤、深夜勤、休日)が規定されている。
図2では、日勤は空欄で示し、準夜勤は「準」で示し、深夜勤は「深」で示し、休日は「休」で示した。なお、このスケジュール表をデータ化したスケジューリングデータの構造については、後述する。
【0022】
本実施形態のスケジューリング装置1は、個体であるスケジューリングデータを、様々な制約の下で最適化し最良解(最適解または準最適解)となるスケジューリングデータを求める。本実施形態では、最適化処理のためのアルゴリズムとして、DE(Differential Evolution;差分進化)を採用する。DEは、構成が簡単であり、パラメータが少なく、最適解への収束に優れ頑強であるという特徴を有する。
【0023】
スケジューリング装置1は、コンピュータをスケジューリング装置として機能させるためのコンピュータプログラムを、コンピュータにインストールして構成されている。後述するスケジューリング装置1の機能は、コンピュータプログラムがコンピュータによって実行されることで発揮される。コンピュータは、処理装置、記憶装置、入出力装置などを有するものであり、例えば、パーソナルコンピュータを利用できる。なお、コンピュータプログラムは、CD−ROMなどの記録媒体に格納して流通させることができる。
【0024】
図1は、スケジューリング装置1の機能ブロックを示している。スケジューリング装置1は、処理部10、記憶部20、初期条件設定部30、調整用インターフェース部40を備えている。
処理部10は、DEのアルゴリズムに従って、記憶部20に記憶されている個体群の世代交代を繰り返して、個体の最適化を行うものである。
処理部10は、初期個体群生成部11と、DE操作部12と、突然変異処理部13と、個体評価部14と、最良解更新部15と、を備えている。記憶部20は、個体群記憶21と、最良解記憶部22と、を備えている。
【0025】
初期個体群生成部11は、初期世代の個体群(例えば、30個の個体群)となるスケジュールデータ群を生成して、それらの個体群を個体群記憶部21に記憶させる。初期世代の個体群は、解の探索空間内においてランダムに決定して生成される。ただし、初期条件設定部30によって、希望休暇、会議、研修の日程など、変更不可の日程が初期条件として設定されると、その初期条件を満足するようにスケジュールデータが生成される。なお、スケジュールデータは、交叉処理が行われて世代交代が生じても、一日の必要要員数、より具体的には、日勤、準夜勤、深夜勤といった勤務形態毎に要求される要員数が常に満足されるよう構成されている。
【0026】
DE操作部12は、DEのアルゴリズムに従って、個体群記憶部21に記憶されている現行世代の個体から次世代の個体を生成し、次世代の個体群を個体群記憶部20に記憶させる。DEのアルゴリズムの詳細については後述する。
突然変異処理部は、個体群記憶部21に記憶されている個体について突然変異操作を行い、突然変異した個体を個体群記憶部21に記憶させる。突然変異を行うことで、解(個体)が局所解から脱出し易くなる。個体に対して突然変異を行うための条件及びその方法の詳細については後述する。
【0027】
個体評価部14は、個体群記憶部21に記憶されている個体それぞれの評価を行うものである。評価は、個体の最適解からの距離(ユークリッド距離)を求めることで行われる。
最良解更新部15は、世代交代によって得られた個体のいずれかの最適解までの距離が、最良解記憶部22に記憶されているそれまでの最良解の最適解までの距離よりも小さい場合には、最良解記憶部22に記憶されている解(個体)を、より距離の小さい個体で置き換えるためのものである。
【0028】
個体群記憶部21は、処理部10における処理の対象となる個体群(現行世代の個体群)を記憶するためのものである。個体群記憶部21には、初期個体群生成部11によって生成された個体群(初期世代の個体群)が記憶されるとともに、DE操作部12によって世代交代した個体群(次世代の個体群)が記憶される。また、突然変異処理部13によって突然変異処理された個体も個体群記憶部21に記憶される。
最良解記憶部22は、世代交代にともなって得られた過去の全個体のうち、最適解までの距離が最も小さい個体(最良解)を記憶するためのものである。世代交代を何度か繰り返した後に最良解記憶部22に記憶されている解(最適解又は準最適解)が、スケジューリング装置1の出力となる。
【0029】
初期条件設定部30は、初期世代の個体群が生成される際に、希望休暇、会議、研修の日程など、変更不可の日程を初期条件として設定するためのものである。初期条件は、ユーザが任意に設定することができる。
調整用インターフェース部40は、解の探索方向をユーザが調整するためのインターフェースである。解の探索方向をユーザが調整できるため、ユーザの満足度の高い解を発見することが可能となる。なお、初期条件設定部30及び調整用インターフェース部40については、後述する。
【0030】
[2.スケジューリング装置の処理]
図3は、上記スケジューリング装置1の処理の流れを示している。まず、初期個体群生成部11によって、所定数の初期個体の生成が行われる(ステップS1)。この際、初期条件設定部30によって設定された初期条件があれば、初期条件を満たす初期個体が生成される。
【0031】
続いて、個体評価部14が、個体群記憶部21に記憶されている各個体の評価を行う(ステップS2)。また、評価の結果、全個体の中において、最良解記憶部22に記憶されているそれまでの最良解の最適解までの距離よりも小さい距離を持つ個体が存在する場合、最良解更新部15は、最良解記憶部22に記憶されている解(個体)を、より距離の小さい個体で置き換える。
また、評価の結果、最適解が発見された場合(最適解までの距離=0の場合)、または、所定の終了条件(繰り返し回数が所定回数に達した、等)に至った場合には、スケジューリング装置1は処理を終了する(ステップS3)。
【0032】
ステップS3において処理終了とならなかった場合、DE操作部12は、個体群記憶部21に記憶されている個体群の世代交代をDEのアルゴリズムに従って行う(ステップS4)。また、突然変異処理部13は、個体群記憶部21に記憶されている個体群に対する突然変異が必要であるか否かの判断を行い(ステップS5)、突然変異が必要な場合には、個体群に対する突然変異操作を行う(ステップS6)。なお、突然変異操作は省略してもよい。
上記ステップS2〜S6までの処理は、ステップS3において処理終了と判断されるまで繰り返し実行される。
【0033】
[3.DE操作(DEによる世代交代)]
図4は、DEのアルゴリズムによって、現行世代の個体群を構成する複数の個体(np個の個体)から、次世代の個体群を構成する複数の個体(np個の個体)を生成する方法を示している。
【0034】
DE操作による世代交代は、基本的に、(1)複数の親個体(現行世代の複数の個体)から、子個体を生成する、(2)親と子を比較する、(3)優れている方を次世代の個体として選択する、という3ステップで実行される。
【0035】
[3.1 子個体の生成]
子個体uの生成のため、DE操作部12は、現行世代の複数の個体から、DE操作の対象となる一つの個体(対象親個体)x
iを選択するとともに、残りの現行世代の複数の個体から3つの個体x
1p,x
2p,x
3pをランダムに選択する。
【0036】
続いて、DE操作部12は、3つの個体x
1p,x
2p,x
3pを用いて、差分変異親個体vを生成する。
3つの個体x
1p,x
2p,x
3pそれぞれをベクトルとみなした場合、
図5にも示すように、差分変異親個体(差分変異親ベクトル)vは、ベースベクトルx
1pに対して、差分生成ベクトルx
2p,x
3p間の差分にスケーリング係数(scaling factor)を乗じたものを加えたものとなる。
【0037】
さらに、DE操作部12は、差分変異親個体vと対象親個体xとを用いて交叉操作を行って、子個体uを生成する。
交叉は、
図6に示すように指数関数的に減少する確率で遺伝子交換を行う交叉(exponential crossover)でもよいし、
図7に示すように、各要素ごとに独立に一定の確率C
Rで差分変異親の遺伝子を用いる交叉(binomial crossover)でもよい。
なお、
図6及び
図7では、対象親個体(ベクトル)x、子個体(ベクトル)u,差分変異親個体(ベクトル)vを構成する個々の遺伝子を、x
j,u
j,v
j(jは遺伝子座を示す番号。
図6及び
図7では、j=1〜12)で示した。
【0038】
図6に示す交叉(exponential crossover)では、(1)まず、交叉開始位置(Start point)となる遺伝子座jを決定する(
図6ではStart point=5)。
(2)次に、交叉開始位置から、順次、それぞれの遺伝子座(j=5,6,7,8,・・・)について、0から1の間の乱数値を発生させる。
図6では、遺伝子座jの乱数値をrand
jで示した。
(3)そして、交叉開始位置からrand
jが連続してC
R以下となる区間(
図6では、遺伝子座j=5〜9の区間)については、子個体uの遺伝子u
5〜u
9として、差分変異親個体の遺伝子v
5〜v
9を用いる。残りの区間(
図6では、遺伝子座j=1〜4及び10〜12)については、子個体uの遺伝子u
1〜u
4,u
10〜u
12として、対象親個体xの遺伝子x
1〜x
4,x
10〜x
12を用いる。以上の処理によって子個体uが生成される。
【0039】
図7に示す交叉(binomial crossover)では、図中に示す式に従って、子個体uの遺伝子u
jとして、対象親個体xの遺伝子x
jを用いるか、差分変異親個体vの遺伝子vjを用いるかを決定する。具体的には、まず、子個体uの各遺伝子(要素)u
j毎に、0〜1の間の乱数値rand
j[0,1]を求める。この乱数値rand
j[0,1]が、所定の確率C
R以下であれば、子個体uの遺伝子u
jとして、差分変異親個体v
jの遺伝子v
jを用い、そうでなければ、対象親個体の遺伝子x
jを用いる。
【0040】
なお、子個体uの遺伝子のうち、一つ(1次元)の遺伝子(要素)については、必ず差分変異親のものを用いることを保証するため、遺伝子座jが特定の値jrである場合には、乱数値rand
j[0,1]にかかわりなく、子個体uの遺伝子u
jとして、差分変異親個体v
jの遺伝子v
jが用いられる。
【0041】
DEでは、差分変異親を用いた交叉操作が行われるため、
図8に示すように、探索空間でみたときに、現行世代の親個体の集団が属する範囲よりも、子個体の集団が属する範囲の方が広くなる。つまり、DEでは、現行世代よりも広い範囲で解(個体)の探索を行えるため、局所解に陥りにくく、適切な解探索が行える。
そして、DEでは、
図9に示すように、世代交代を繰り返すと、個体間の差分が小さくなるため、個体集団の存在領域も徐々に収束していき、解の探索範囲が狭くなる。つまり、DEでは、世代交代を繰り返すと、大域探索から局所探索へシフトしていく。これにより、DEでは、局所解に陥ることを避けつつ最適解に近づくことが可能である。
【0042】
[3.2 親個体と子個体の比較及び次世代の選択]
DE操作部12は、現行世代の対象親個体x
iと、生成された子個体uと、を比較し、優れているほうの個体を、次世帯の親個体x
iとして選択する。DE操作部12は、個体群記憶部21に記憶されている現行世代の親個体xiを、選択された次世代の親個体に、置換する。
【0043】
DE操作部12は、個体x
i,u間の優劣を、複数の目的関数を用いて決定する。本実施形態では、次の3つの目的関数H
1,H
2,H
3を定義義する。これらの目的関数の値は、小さいほどよく、最適解であれば、H
1=0,H
2=0,H
3=0となる。
ただし、個体の優劣の判断に関しては、説明の簡略化のため、これらの目的関数のうち、2つの目的関数H
1,H
2を用いた場合について説明する。なお、目的関数H
1,H
2,H3の詳細については後述する。
【数1】
【0044】
次世代の個体x
iとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件の例(条件1)を、以下に示す。
【数2】
上記条件1において、H
1Cは生成された子個体についての目的関数H
1の値、H
1Pは親個体についての目的関数H
1の値、H
2Cは生成された子個体uについての目的関数H
2の値、H
2Pは親個体についての目的関数H
2の値である(下記条件2,3についても同様)。
上記条件1では、両目的関数H
1,H
2の双方について、対象親個体x
iよりも、子個体uの方が改善されていることが、子個体uが、次世代の個体として選択される条件となっている。この場合、両目的関数H
1,H
2を改善できる子個体uが生成される確率が低くなるため最適解発見までに時間がかかる。
【0045】
また、次世代の個体x
iとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件の他の例(条件2)を、以下に示す。
【数3】
上記条件2では、目的関数H
1,H
2のうち、いずれか一方の目的関数が親個体x
iよりも改善されていれば、子個体uが次世代として選択される。条件2の場合、実質的な世代交代が行われるための制約が緩和されるため、個体が進化し易く、個体集団の多様性が維持され易いというメリットがある。
【0046】
また、次世代の個体x
iとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件のさらに他の例(条件3)を、以下に示す。
【数4】
上記3では、2つの目的関数H
1,H
2それぞれに重みα,1−αを乗じたものの和を、個体の適応度とした上で、個体の適応度が、親個体よりも優れている場合に、子個体uが次世代として選択される。なお、個体の適応度は、小さいほど、優れている(最適解に近い)ことを示す。また、重みα,1−αは、各目的関数H
1,H
2それぞれの重要性の度合いを示しており、重要な目的関数ほど、重みを大きくすればよい。この重みは、調整用インターフェース部40によって、ユーザによって調整可能であるが、その詳細は、後述する。
【0047】
DE操作部12は、上記のようなDE操作は、現行世代の全個体(x
1〜x
np)を対象親個体x
iとして行う。これにより、個体群21に記憶されている全個体について、世代交代がなされる。
【0048】
[4.多目的最適化]
本実施形態のスケジューリング装置1によって解かれるスケジューリング問題は、多目的最適化問題である。多目的最適化問題とは、目的関数が複数存在し、各目的関数値をひとまとめにせずに扱う問題をいう。
図10に示すように、本実施形態では、最適化は、目的関数値H
1,H
2,H
3に基づく最適解までの距離(distance)が最小となる解(個体)を求めることである。なお、最適解は、H
1=0,H
2=0,H
3=0となり、距離=0となる。
【0049】
[4.1 NSPにおける評価関数]
以下、目的関数H
1,H
2,H
3の元になる評価関数を説明する。
下記表1に示すように、NSPでは、その性質から、6つの評価項目を挙げることができ、各評価項目に応じた評価関数F
1i,F
2i,F
3i,F
4i,G
1j,G
2jを定義する。
評価関数F
1i,F
2i,F
3i,F
4iは、看護師i個人に関する評価項目であり、評価関数G
1j,G
2jは、1日に関する評価項目である。
【表1】
【0050】
[4.1.1 勤務パターンの負荷度合いの軽減]
表1における第1の評価項目「勤務パターンの負荷度合いの軽減」については、下記のように定式化される。
【数5】
【0051】
上記式では、看護師iの勤務パターン評価値a
i,jの総和が、評価関数F
1iの値となる。上記式中の勤務パターン評価値を、下記表2のように定義する。
【表2】
【0052】
勤務パターンは、看護師iにおけるj日を含む連続する3日間の勤務形態の組み合わせである。表2において、「日」は、ある日の看護師の勤務形態が「日勤」であることを示し、「準」は、ある日の看護師の勤務形態が「準夜勤」であることを示し、「深」は、ある日の看護師の勤務形態が「深夜勤」であることを示し、「休」は、ある日の看護師の勤務形態が「休日」であることを示している。勤務パターンの評価値a
i,jは、勤務パターンに応じて、表2のように定義される。表2では、勤務負荷の少ない最優先パターンの評価値が最も小さく、勤務負荷の大きい禁止パターンの評価値が最も大きくなるようにして、勤務負荷が大きいほど制約条件が重くなるようにした。
【0053】
[4.1.2 必要日数の確保]
表1における第2の評価項目「必要日数の確保」については、下記のように定式化される。
【数6】
【0054】
上記式では、看護師iが1月に各勤務形態を行う必要日数の上下限に違反する日数が評価関数F
2iの値となる。ここで、必要日数とは、各看護師が1月に書く勤務形態を行う日数である。勤務形態毎の必要日数は、一般に、下記表3に示す通りになる。
【表3】
【0055】
[4.1.3 勤務日数間隔の均等化]
表1における第3の評価項目「勤務間隔の均等化」については、下記のように定式化される。
【数7】
【0056】
上記式では、各看護師iに割り付ける日数の上下限を違反する日数が、評価関数F
3iの値となる。例えば、休日は、評価対象期間h
kが5日間であり、休日を割り付ける上下限としては、評価対象期間の5日間において1〜5日となる。また、深夜勤は、評価対象期間h
kが7日であり、深夜勤を割り付ける上下限としては、評価対象期間の7日間において0〜3日となる。
【0057】
[4.1.4 禁止パターンの低減]
表1における第4の評価項目「禁止パターンの低減」については、下記のように定式化される。
【数8】
【0058】
上記式では、禁止パターンの回数が、評価関数F
4iの値となる。ここでは、禁止パターンとしては、2日間禁止パターンを用いる。2日禁止パターンとしては、例えば、看護師iの2日間の勤務形態の組み合わせが、「土日祝の日勤,深夜勤」、「研修,深夜勤」、「土日祝の日勤,土日祝の日勤」、又は「準夜勤,希望休暇」の組み合わせとなっている場合がある。
【0059】
[4.1.5 必要人数の確保]
表1における第5の評価項目の「必要人数の確保」に関し、ここでの必要人数とは、一日に各勤務形態で勤務する人数である。
【0061】
表4に示すように、例えば、準夜勤の必要人数は3人、深夜勤の必要人数は3人、平日の日勤の必要人数は11〜13人、土日祝の日勤の必要人数は3人である。一日に各勤務形態で勤務する人数の確保は、スケジューリングを行う上で最も重要な条件となる。本実施形態では、初期個体群生成部11によって生成される個体は、すべて、必要人数の確保がなされたものとなり、世代交代が行われても、必要人数が確保された状態が維持される。つまり、必要人数の確保に関する評価関数G
1jは、常に、G
1j=0である。世代交代が行われても必要人数が確保されることについては、後述する。
【0062】
[4.1.6 看護の質の維持]
表1における第6の評価項目の「看護の質の維持」については、下記のように定式化される。
【数9】
【0063】
看護の質の維持には、例えば、「深夜勤に新人は0〜1人で割り付ける」、「準夜勤にベテランは1〜2人で割り付ける」、「日勤にベテランは1〜2人で割り付ける」といった条件が必要とされる。上記式では、このような人数の上下限に違反する人数が、評価関数G
2jの値となる。
【0064】
[4.2 目的関数の定義]
目的関数H
1,H
2,H
3は、上記の6つの評価関数F
1i,F
2i,F
3i,F
4i,G
1j,G
2jのうち、常に評価関数値=0となるG
1jを除いた6つの評価関数F
1i,F
2i,F
3i,F
4i,G
2jによって定義される。
つまり、
H
1=F
1i+F
4i+F
3i
H
2=F
2i
H
3=G
2j
である。
【0065】
[4.3 個体の最適解からの距離]
個体評価部14は、各個体の最適解からの距離を、目的関数H
1,H
2,H
3を軸とするユークリッド空間における距離(ユークリッド距離)として算出することで、各個体の評価を行う。なお、目的関数H
1,H
2,H
3は、3つすべてを用いる必要はなく、2つでもよい。また、目的関数は、上記のものに限られず、スケジュール問題の性質に応じて適切に設定すればよい。
【0066】
[5.スケジューリングデータ]
以下、最適化処理の対象となるスケジューリングデータ(個体)のデータ構造を、定義する。本実施形態のスケジューリングデータは、
図2に示すような2次元のスケジュール表を、遺伝子配列に類似した1次元のデータ配列(遺伝子型のスケジューリングデータ)で表現される。
【0067】
図11に示すようにスケジューリングデータは、スケジューリングの対象となる所定期間内のスケジューリングの単位期間の数に応じた数の部分コードを複数連結して構成されている。
図2のスケジュール表は、スケジューリングの単位期間が「1日」であり、スケジューリングの対象となる所定期間が「30日」となっている。これに対応して、
図11のスケジューリングデータでは、各日に対応した部分コードが、30日分設けられている。
【0068】
各日の部分コードは、その部分コードに対応する日における、各要員(看護師)の役割(勤務形態)を規定した数値配列リスト(遺伝子コード)となっている。
この部分コードを構成する数値配列リストにおいては、リスト要素となる数値が、看護師を特定する看護師特定値(要員特定値)となっている。
【0069】
また、部分コードを構成する数値配列リストにおける要素の順位(遺伝子座)は、看護師の勤務形態を示している。
図11において、1日目の部分コードは、順位1〜順位11までを有しており、11個の看護師特定値によって11人の看護師の勤務形態を特定している。
具体的には、順位1〜順位5までは「日勤」を示しており、順位6〜順位8までは深夜勤を示しており、順位9〜順位11までは準夜勤を示している。なお、部分コードで特定されていない看護師は、その部分コードに対応する日において休日である。このような順位と勤務形態との対応は、世代交代が生じても不変である。
【0070】
図11では、看護師特定値={10,6,3,2,1}で特定される看護師が日勤であり、看護師特定値={5,5,3}で特定される看護師が深夜勤であり、看護師特定値={4,2,1}で特定される看護師が準夜勤であり、残りの看護師が休日である。
【0071】
各日の部分コードは、表1の第5の評価項目「必要人数の確保」が満たされるように形成されている。各日において各勤務形態で勤務する看護師の人数の確保は、業務を適切に遂行する上で必要不可欠である。
そこで、部分コードでは、各勤務形態において必要とされる人数に応じた数の要素数が確保されている。必要人数が、日勤では5人、深夜勤では3人、準夜勤3人であり、その日におけるトータルの必要人数が11人(最適化処理の対象となる要員の数)である場合、
図11のように、部分コードの総要素数は11個となり、そのうち、日勤の要素数として5個、深夜勤の要素数として3個、準夜勤の要素数として3個が確保される。
【0072】
なお、各勤務形態において必要とされる人数は、日によって異なることがあるため、部分コード毎に、各勤務形態に対応する要素数が異なっても良い。また、部分コード毎に、部分コード全体の要素数が異なっても良い。また、
図11の部分コードでは、休日である看護師の明示的な特定を省略しているが、休日である看護師を明示的に特定してもよい。
【0073】
部分コードにおける要員特定値(看護師特定値)は、順序表現で要員(看護師)を特定する。順序表現では、全要員を示す要員リスト(順序リスト)を用いて、要員を特定する。具体的には、要員として、a,b,c,d,e,fが存在し、全要員数が6名の場合を想定する。この場合、基本の要員リスト={a,b,c,d,e,f}となる。
そして、
図12(a)に示すように、ある1日において、日勤にa,c,eを割り付け、深夜勤にdを割り付け、準夜勤にfを割り付ける場合、部分コードの総要素数は、5個であり、部分コード={1,2,3,2,2}となる。
【0074】
図12(b)にも示すように、
図12(a)の部分コードにおいて、順位1の要員特定値(遺伝子コード)=1は、要員aを示している。この要員特定値=1は、順序リストである要員リスト(基本要員リスト)={a,b,c,d,e,f}における要員aの順序(位置)である「1」に対応したものである。
【0075】
部分コードにおいて順位2の要員特定値(遺伝子コード)=2は、要員cを示している。この要員特定値=2は、部分コードにおいて先行する順位=1の要員特定値によって特定された要員aを、基本要員リストから除外した要員リスト(第1の縮減要員リスト)={b,c,d,e,f}における要員cの順序(位置)である「2」に対応したものである。
【0076】
部分コードにおいて順位3の要員特定値(遺伝子コード)=3は、要員eを示している。この要員特定値=3は、部分コードにおいて先行する順位=1,2の要員特定値によって特定された要員a,cを、基本要員リストから除外した要員リスト(第2の縮減要員リスト)={b,d,e,f}における要員eの順序(位置)である「3」に対応したものである。
【0077】
部分コードにおいて順位4の要員特定値(遺伝子コード)=2は、要員dを示している。この要員特定値=2は、部分コードにおいて先行する順位=1,2,3の要員特定値によって特定された要員a,c,eを、基本要員リストから除外した要員リスト(第3の縮減要員リスト)={b,d,f}における要員dの順序(位置)である「2」に対応したものである。
【0078】
部分コードにおいて順位5の要員特定値(遺伝子コード)=2は、要員fを示している。この要員特定値=2は、部分コードにおいて先行する順位=1,2,3,4の要員特定値によって特定された要員a,c,e,dを、基本要員リストから除外した要員リスト(第4の縮減要員リスト)={b,f}における要員fの順序(位置)である「2」に対応したものである。
【0079】
総要員数をTとすると、部分コードにおいて、各順位jの要員特定値は、1からT−(j−1)の範囲の整数値をとる。例えば、上記のように総要員数T=6である場合、順位j=1の要員特定値は、1〜6の範囲の整数値をとり、順位j=2の要員特定値は、1〜5の範囲の整数値をとる。
【0080】
このような部分コードでは、遺伝的操作として交叉が行われた場合であっても、1日における必要人数の確保(第5の評価項目)という制約は、常に満たされる。例えば、
図13(a)に示すように、第1部分コードと第2部分コードとの間で交叉が行われても、部分コードの要素数が変動するわけではないので、交叉前の第1及び第2部分コードにおいて「必要人数の確保」の制約が満たされている以上、交叉後の第1及び第2部分コードにおいても制約が満たされた状態が維持される。
【0081】
一方、
図13(a)のように順序表現で要員を特定するのではなく、要員特定値として要員を直接的に特定する値を採用した場合を
図13(b)に示す。
図13(b)の第1部分コード及び第2部分コード間で交叉を行うと、交叉後の第1及び第2部分コードでは、同一の要員に複数の勤務形態が割り付けられた不適切な割り付けとなっており、結果的に「必要人数の確保」の制約が満たされなくなる。つまり、
図13(b)の第1及び第2部分コードは、致死遺伝子となる。
【0082】
これに対し、本実施形態では、第1部分コードと第2部分コード間で交叉を行っても、同一順位の要素間での交叉となるため、交叉後の第1及び第2部分コードにおいても、各順位の要員特定値は、順位に応じた数値範囲(1〜T−(j−1))内に収まったものとなる。したがって、交叉後の第1及び第2部分コードの各要員特定値は、要員を特定するための値として適正なものであることが保証される。したがって、本実施形態では、交叉を行っても致死遺伝子が生じない。
【0083】
また、部分コードに対して、遺伝的操作として突然変異が行われる場合には、突然変異後の要員特定値がとる範囲を、その要員特定値が属する部分コードにおける順位に応じた範囲(1〜T−(j−1))とすることで、突然変異後の要員特定値は、要員を特定するための値として適正なものであることが保証される。
【0084】
なお、初期個体群生成部11が初期個体としてのスケジュールデータを生成する場合において、初期条件設定部30によって、各要員の希望休暇の日、会議のある日、研修のある日が初期条件として設定された場合、その初期条件が満たされるように、スケジュールデータが生成される。例えば、ある要員が休暇を希望している日又は会議・研修がある日についての部分コードを生成する場合、その部分コードの生成に用いられる基本要員リストから、休暇を希望する要員及び会議又は研修がある要員が除外される。この結果、休暇を希望している要員は、その日の勤務を割り付けられることがなくなる。また、会議又は研修がある要員は、日勤などの通常の勤務形態が割り付けられることがなくなる。なお、評価関数を計算する場合、会議又は研修の勤務形態は、日勤とみなされる。
【0085】
本実施形態のスケジュールデータは、上記のような部分コードを複数個連結してなるものであるため、交叉や突然変異などをおこなっても、「必要人数の確保」の制約が満たされるという効果は、スケジュールデータについても生じる。
【0086】
[6.スケジューリングデータとDE]
一般的なDEは、各遺伝子座jにおける遺伝子コード(本実施形態では、要員特定値)の値として、実数値をとる。これに対して、本実施形態の要員特定値は、整数値しかとらない。
しかし、DE操作では、差分変異親個体を生成する際に、ベクトル差分を求めたりベクトル和を求めたりするため、その際に、差分変異親個体(スケジューリングデータ)の要員特定値が、実数となる可能性がある。実数値となった要員特定値は、小数点以下の切り捨て、切り上げ、又は四捨五入などにより、実数値に近い整数値に変換される。
【0087】
また、DE操作によって、差分変異親個体の要員特定値が適切な解探索範囲から外れる可能性もある。要員特定値は、その要員特定値の属する部分コードにおける順位に応じた範囲(1〜T−(j−1))の値しかとりえないが、DE操作によって、差分変異親の要員特定値が、当該範囲(1〜T−(j−1))を超えることもありえる。要員特定値が、当該範囲(1〜T−(j−1))を超えた場合には、当該範囲を超えないように、要員特定値が調整される。かかる調整は、例えば、当該範囲の下限(1)又は上限(T−(j−1))のうち、超えた値が近い方の値を要員特定値として採用することで行われる。
【0088】
[7.実験結果]
[7.1 実験結果1]
図14〜
図15は、本実施形態のスケジューリング装置1において、2つの目的関数H
1,H
2を用いた場合での実験結果を示している。
図14に示すように、本実施形態のスケジュール装置1は、評価回数が500000回を超えた時点(時間として10分程度)で、最適解を発見した。また、
図15は、個体群記憶部21に記憶されている世代交代中の個体群の分布(H
1,H
2を軸とするユークリッド空間における分布)を示している。
図15(a)は世代交代の1世代目であり、
図15(b)は5000世代目であり、
図15(c)は15000世代目を示している。
図15に示すように、世代交代の初期では、個体が広く分布しており探索範囲が広く大域探索を行っているのに対し、世代交代が進むと探索範囲が収束し、局所探索へシフトして行き、最終的に最適解が得られる。
【0089】
図16は、スケジューリング装置1が、最適解として得られた個体(スケジューリングデータ)を2次元のスケジュール表に変換して表示した結果を示している。
図16のスケジュール表は、H
1,H
2の制約を全て満たしている。なお、
図16のスケジュール表において、左側の数字(1〜23)は看護師を示す番号であり、上側の数字(1〜30)は、日付を示している。また、表中において、空欄は「日勤」を、「深」は「深夜勤」を、「準」は「準夜勤」を示している。
【0090】
[7.2 実験結果2]
図17及び
図18は、評価項目「勤務パターン負荷度合いの軽減」に対応する評価関数F
1iについて、表5に示す勤務パターンを採用した場合の実験結果2を示している。
【表5】
【0091】
表5では、表2に比べて、妥協パターンが追加されたものとなっている。この場合、目的関数H
1の改善が難しくなったため、
図17に示すように、H
2のみが0となる解(準最適解)に収束した。
図18は、得られた準最適解を2次元のスケジュール表に変換して表示した結果を示している。
図18のスケジュール表では、表5における妥協パターンが散見されるが、その他の制約は満たしたものとなっている。
【0092】
[7.3 実験結果3]
図19及び
図20は、本実施形態のスケジューリング装置1において、3つの目的関数H
1,H
2,H
3をすべて用いた場合での実験結果を示している。
図19に示すように、H
1,H
3については、0となったが、H
2については8となる準最適解が得られた。
図20は、得られた準最適解を2次元のスケジュール表に変換して表示した結果を示している。
【0093】
[7.4 実験結果4]
図21は、初期条件設定部30によって、各要員の希望休暇の日、会議のある日、研修のある日を初期条件として設定した場合に得られた解をスケジュール表に変換したものを示している。この場合は、最適解が得られた。なお、スケジュール表において、「希」は「希望休暇」を、「会」は「会議」を、「研」は「研修」を、示している。
【0094】
[8.調整用インターフェース部]
調整用インターフェース部40は、前述のように、解の探索方向をユーザが調整するためのインターフェースである。調整の対象としては、例えば、次世代の個体x
iとして生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件3における重みαが挙げられる。ユーザは、調整用インターフェース部40を介して、処理部10による最適化処理の前において、又は最適化処理中において随時、この重みαを調整することができる。αを調整することによって、目的関数H
1,H
2それぞれの重要性の度合いを調整することができる。
【0095】
αを調整すると、世代交代の際に、対象親個体x
iが子個体uに置換される条件が変化することになる。つまり、αを調整すると、
図22に示すように、重要性の度合いの大きい目的関数の値が改善される方向に探索空間を選択することになる。つまり、αが大きくなるように調整することでH
1を改善でき、1−αが大きくなるように調整することで、大きくすることでH
2を改善できる。
このように、ユーザが、調整用インターフェース部40を介して、探索の方向(どの制約を重視するか)を制御することで、ユーザの満足度の高い解を発見することができる。
【0096】
[9.突然変異]
一般的なDEでは、個体の要素が実数値であるのに対し、本実施形態では、個体の要素(要員特定値)として整数値が採用されている。このため、
図23に示すように、個体の同一の要素についての要員特定値が全て同じ値になり易い。このように、
図23のようになると、個体間の差分が生まれないため、局所解から脱出するのが困難となり、解を改善できなくなる。
【0097】
そこで、本実施形態では、突然変異操作によって、この問題を解決している。
図3のステップS5において示したように、突然変異処理部13は、DE操作による世代交代(ステップS4)の後、突然変異操作の必要性について判定する。突然変異の必要性は、個体群記憶部21に記憶されている全個体群の各要素について、同一の要素についての要員特定値が全て同じ値になっているか否かで判定してもよいが、要員特定値が全て同じ値になっているか否かにかかわり無く、所定の確率(突然変異率Pm)に応じて、突然変異の必要性を判定してもよい。
【0098】
要員特定値がすべて同じ値になっている場合、個体群記憶部21に記憶されている個体群の中から、1個体を選択し、個体間で同じ値になっている要員特定値を変化させる突然変異を行う(ステップS6)。なお、突然変異は、個体群の一部の1又は複数の個体に対して行っても良いし、全個体に対しておこなってもよい。
【0099】
突然変異は、突然変異後の要員特定値がとる範囲が、突然変異の対象である要員特定値が属する部分コードにおける順位に応じた範囲(1〜T−(j−1))となるように行われる。突然変異の方法としては、例えば、要員特定値をランダムで他の値に変更する方法(方法1)や、要員特定値の1増加又は1減少をランダムに選択する方法(方法2)がある。
【0100】
また、個体群記憶部21に記憶されている個体群のうち、部突然変異させる個体を選択する方法としては、全個体からランダムに選択する方法(ランダム選択法)や、
図24に示すように各個体のパレート解で個体をランク分けしたパレートランクが高い個体(評価が悪い個体)ほど高い確率で選ぶ方法(パレートランクルーレット選択)がある。
【0101】
図25は、3つの目的関数H
1,H
2,H
3で、個体数Np=40、スケーリング係数S=0.35,交叉確率CR=0.85、突然変異率Pm=0.01の条件下において、所定回数の世代交代を繰り返した後の最良解の最適化との差(H
1+H
2+H
3)を求めたものである。なお、
図25における最適解との差は、5試行の平均となっている。
図25によれば、突然変異対象の選び方としてランダム選択法を用い、突然変異の方法として方法1を用いた場合と、突然変異対象の選び方としてパレートランクルーレット選択法を用い、突然変異の方法として方法1を用いた場合と、の結果が良好であった。
【0102】
[10.スケジューリングデータの冗長性に関する考察]
スケジュール表(表現型)をコーディングしたスケジューリングデータ(遺伝子型)は、冗長性を持つ。
図26に示すように、3つの異なる複数のスケジューリングデータ(
図26では、部分コードの日勤部分だけを示した)が、同じ要員の組み合わせ{A,B,C}を示している。つまり、本実施形態のコーディングは、複数のスケジューリングデータ(遺伝子型)が一つのスケジュール表(表現型)に対応する多対一(冗長)写像コーディングとなっている。
【0103】
図27は、3つの目的関数H
1,H
2,H
3で、個体数Np=40、スケーリング係数S=0.35,交叉確率CR=0.85、突然変異率Pm=0.01の条件下において、突然変異対象の選び方としてランダム選択法を用い、突然変異の方法として方法1を用いた場合における、所定回数の世代交代を繰り返した後の最良解の最適化との差(H
1+H
2+H
3)を求めたものである。なお、
図27における最適解との差は、5試行の平均となっている。
【0104】
図27によれば、本実施形態のように多対一(冗長)写像コーディングとなっているスケジューリングデータの場合は、最適解との差が11であったのに対し、一つのスケジュール表に対して一つのスケジューリングデータだけが対応するように一対一写像とした場合は、最適解との差が17.4であった。
【0105】
かかる結果より、多対一(冗長)写像コーディングとなっている本実施形態のスケジューリングデータは、一対一写像コーディングに比べて、優れていることがわかる。
【0106】
なお、上記において開示した事項は、例示であって、本発明を限定するものではなく、様々な変形が可能である。
例えば、スケジューリング装置1は、ナーススケジューリングに限られず、他の業種における従業員のシフトスケジュールや、学校におけるゼミ等の発表スケジュールを調整するための装置としても利用することができる。
また、進化的アルゴリズムは、DEに限られず、GAなどの他の進化的アルゴリズムであってもよい。