スケジューリング装置、コンピュータプログラム、及びデータ
【課題】複数の看護師のスケジュール全体を一つの個体として扱いつつも、致死遺伝子となるスケジュールの発生を防止する。
【解決手段】本発明のスケジューリング装置では、スケジューリングデータを複数個記憶する記憶部20と、スケジューリングデータを最適化する最適化処理を行う処理部10と、を備えている。前記スケジューリングデータは、日毎の各看護師の勤務形態を規定した部分コードを複数有している。部分コードは、要素として看護師特定値を有しており、要素の順位が看護師の勤務形態を示している。看護師特定値は、要員リストに基づく順序表現で表されている。
【解決手段】本発明のスケジューリング装置では、スケジューリングデータを複数個記憶する記憶部20と、スケジューリングデータを最適化する最適化処理を行う処理部10と、を備えている。前記スケジューリングデータは、日毎の各看護師の勤務形態を規定した部分コードを複数有している。部分コードは、要素として看護師特定値を有しており、要素の順位が看護師の勤務形態を示している。看護師特定値は、要員リストに基づく順序表現で表されている。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、スケジューリング装置、コンピュータプログラム、及びデータに関するものである。
【背景技術】
【0002】
従来より、所定の集団に属する各要員のスケジュールを最適化するスケジューリング問題が、一般に知られている。スケジューリング問題として代表的なものに、ナーススケジューリング問題(Nurse Scheduling Problem;NSP)がある。NSPでは、要員は看護師であり、一定期間(例えば、1月間)における各日の看護師の勤務形態(日勤、準夜勤、深夜勤、休日)を示すスケジュール表を最適化する問題となる。
【0003】
スケジューリング問題を、遺伝的アルゴリズムに代表される進化的アルゴリズム用いて解く試みが、従来より行われている。例えば、特許文献1には、NSPなどのスケジューリング問題を、遺伝的アルゴリズム(Genetic Algorithm;GA)を用いて解決するスケジューリング方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2005−149148号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明者らは、スケジューリング問題における最適解(準最適解)を効率的に求めるために、Differential Evolution(DE)とよばれる最適化方法を用いるという着想を得た。DEは、GAと同様に進化的アルゴリズムである。DEでは、(1)探索空間内にランダムに複数の初期個体(解)を生成しておく、(2)すべての個体を評価する、(3)親個体から新しい解(子個体)を生成する(4)子個体が親より優れていれば親個体を削除して子個体を残す、という4つの工程を有する。
DEでは、(2)〜(4)を繰り返すことで、複数の個体(個体群)の世代交代を生じさせて個体を進化させることで解を探索する。
【0006】
ここで、スケジューリング問題にDEやGAを適用する場合、個体をどのように表現(コーディング)するかが問題となる。スケジューリング問題において、最適化したいのは、複数の要員の所定期間内のスケジュール表である。したがって、一つのスケジュール表を一つの個体とすることが考えられる。
しかし、スケジュール表に対応する個体同士において交叉の操作を行うと、致死遺伝子が生じ易いという問題がある。
【0007】
例えば、スケジューリング問題において、重要な制約として、役割毎の「必要人数の確保」が挙げられる。NSPの場合、各日において、日勤、準夜勤、深夜勤という勤務形態(役割)毎に必要とされる人数が予め決まっている。ところが、各日において勤務形態ごとの必要人数が確保できているスケジュール表であっても、そのスケジュール表自体を個体とすると、交叉が行われることにより、必要人数が確保できなくなり、致死遺伝子となる可能性がある。
【0008】
特許文献1では、致死遺伝子の発生を防止するため、要員全員のスケジュールではなく、要員一名のスケジュールを一つの個体とし、個体の集合で一つのスケジュール表を構成し、個体間で交叉等の遺伝的操作を行う共存型GAが記載されている。
しかし、DEでは、そのアルゴリズム上、一つのスケジュール表を一つの個体とすることが望ましい。したがって、DEを適用する上では、共存型GAのように要員一名のスケジュールを一つの個体とするのではなく、複数要員のスケジュール全体を一つの個体とすべきである。
【0009】
そこで、本発明は、複数要員のスケジュール全体を一つの個体として扱いつつも、致死遺伝子となるスケジュール(個体)の発生を防止することを目的とする。
【課題を解決するための手段】
【0010】
(1)本発明は、複数の要員のスケジューリングを行うスケジューリング装置であって、複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備え、前記スケジューリングデータは、単位期間毎の各要員の役割を規定した部分コードを複数有して構成され、各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、ことを特徴とするスケジューリング装置である。
【0011】
(2)前記進化的アルゴリズムとしては、交叉の操作が行われるアルゴリズムを採用するのが好適である。
【0012】
(3)より具体的には、前記進化的アルゴリズムは、Differential Evolutionが好適である。
【0013】
(4)前記処理部は、前記スケジューリングデータに対して突然変異の操作を行う突然変異処理部を備えるのが好ましい。
【0014】
(5)要員リストの要素となる要員として、スケジューリングの対象である複数の要員のうち、単位期間において最適化処理の対象とならない要員を初期条件として設定する設定部を更に備えるのが好ましい。
【0015】
(6)個体の優劣の決定に用いられる複数の目的関数それぞれの重要性の度合いをユーザが調整するためのインターフェース部を更に備え、前記処理部は、親個体と、親個体から進化的アルゴリズムに従って得られた子個体と、を比較して、優れた個体を次世代の個体として選択するよう構成されているとともに、個体間の優劣を複数の目的関数に基づいて決定するよう構成され、さらに、前記処理部は、個体の優劣を前記複数の目的関数に基づいて決定する際に、インターフェース部を介して調整された前記度合いに応じた重みを、前記複数の目的関数の値に乗じた上で、個体間の優劣を決定するのが好ましい。
【0016】
(7)他の観点からみた本発明は、コンピュータを、前記(1)〜(6)のいずれか1項に記載のスケジューリング装置として機能させるためのコンピュータプログラムである。
【0017】
(8)さらに他の観点からみた本発明は、複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備えて複数の要員のスケジューリングを行うスケジューリング装置として機能するコンピュータが、前記スケジューリングデータとして用いるデータであって、単位期間毎の各要員の役割を規定した部分コードを複数有し、各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、ことを特徴とするデータである。
【発明の効果】
【0018】
本発明によれば、複数要員のスケジュール全体を一つの個体として扱いつつも、致死遺伝子となるスケジュール(個体)の発生を防止することができる。
【図面の簡単な説明】
【0019】
【図1】スケジューリング装置の機能ブロック図である。
【図2】スケジュール表の例を示す図である。
【図3】スケジューリング装置のスケジューリング処理を示すフローチャートである。
【図4】DE操作を示す概念図である。
【図5】DE操作によって生成される差分変異親ベクトルの説明図である。
【図6】交叉(exponential crossover)の説明図である。
【図7】交叉(binomial crossover)の説明図である。
【図8】探索空間における親個体及び子個体の分布を示す図である。
【図9】世代交代に伴う解探索範囲の変遷を示す図である。
【図10】最適解との距離に関する説明図である。
【図11】スケジューリングデータのデータ構造図である。
【図12】スケジューリングデータの要員特定値の解釈の仕方の説明図である。
【図13】(a)は順序表現の要員特定値を採用した場合の交叉を示し、(b)は要員を直接的に特定した要員特定値を採用した場合の交叉を示す図である。
【図14】実験結果1を示すグラフである。
【図15】実験結果1における解探索範囲の変遷を示す図である。
【図16】実験結果1における最適解に対応するスケジュール表である。
【図17】実験結果2での個体群の解探索空間における配置を示す図である。
【図18】実験結果2における準最適解に対応するスケジュール表である。
【図19】実験結果3での個体群の解探索空間における配置を示す図である。
【図20】実験結果3における準最適解に対応するスケジュール表である。
【図21】実験結果4における最適解に対応するスケジュール表である。
【図22】重みを調整することによる探索方向の制御の様子を示す図である。
【図23】DEにおける問題点の説明図である。
【図24】パレートランクルーレット選択の説明図である。
【図25】突然変異方法の比較結果を示す表である。
【図26】スケジューリングデータの冗長性の説明図である。
【図27】コーディング方法の比較結果を示す表である。
【発明を実施するための形態】
【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操作の対象となる一つの個体(対象親個体)xiを選択するとともに、残りの現行世代の複数の個体から3つの個体x1p,x2p,x3pをランダムに選択する。
【0036】
続いて、DE操作部12は、3つの個体x1p,x2p,x3pを用いて、差分変異親個体vを生成する。
3つの個体x1p,x2p,x3pそれぞれをベクトルとみなした場合、図5にも示すように、差分変異親個体(差分変異親ベクトル)vは、ベースベクトルx1pに対して、差分生成ベクトルx2p,x3p間の差分にスケーリング係数(scaling factor)を乗じたものを加えたものとなる。
【0037】
さらに、DE操作部12は、差分変異親個体vと対象親個体xとを用いて交叉操作を行って、子個体uを生成する。
交叉は、図6に示すように指数関数的に減少する確率で遺伝子交換を行う交叉(exponential crossover)でもよいし、図7に示すように、各要素ごとに独立に一定の確率CRで差分変異親の遺伝子を用いる交叉(binomial crossover)でもよい。
なお、図6及び図7では、対象親個体(ベクトル)x、子個体(ベクトル)u,差分変異親個体(ベクトル)vを構成する個々の遺伝子を、xj,uj,vj(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の乱数値をrandjで示した。
(3)そして、交叉開始位置からrandjが連続してCR以下となる区間(図6では、遺伝子座j=5〜9の区間)については、子個体uの遺伝子u5〜u9として、差分変異親個体の遺伝子v5〜v9を用いる。残りの区間(図6では、遺伝子座j=1〜4及び10〜12)については、子個体uの遺伝子u1〜u4,u10〜u12として、対象親個体xの遺伝子x1〜x4,x10〜x12を用いる。以上の処理によって子個体uが生成される。
【0039】
図7に示す交叉(binomial crossover)では、図中に示す式に従って、子個体uの遺伝子ujとして、対象親個体xの遺伝子xjを用いるか、差分変異親個体vの遺伝子vjを用いるかを決定する。具体的には、まず、子個体uの各遺伝子(要素)uj毎に、0〜1の間の乱数値randj[0,1]を求める。この乱数値randj[0,1]が、所定の確率CR以下であれば、子個体uの遺伝子ujとして、差分変異親個体vjの遺伝子vjを用い、そうでなければ、対象親個体の遺伝子xjを用いる。
【0040】
なお、子個体uの遺伝子のうち、一つ(1次元)の遺伝子(要素)については、必ず差分変異親のものを用いることを保証するため、遺伝子座jが特定の値jrである場合には、乱数値randj[0,1]にかかわりなく、子個体uの遺伝子ujとして、差分変異親個体vjの遺伝子vjが用いられる。
【0041】
DEでは、差分変異親を用いた交叉操作が行われるため、図8に示すように、探索空間でみたときに、現行世代の親個体の集団が属する範囲よりも、子個体の集団が属する範囲の方が広くなる。つまり、DEでは、現行世代よりも広い範囲で解(個体)の探索を行えるため、局所解に陥りにくく、適切な解探索が行える。
そして、DEでは、図9に示すように、世代交代を繰り返すと、個体間の差分が小さくなるため、個体集団の存在領域も徐々に収束していき、解の探索範囲が狭くなる。つまり、DEでは、世代交代を繰り返すと、大域探索から局所探索へシフトしていく。これにより、DEでは、局所解に陥ることを避けつつ最適解に近づくことが可能である。
【0042】
[3.2 親個体と子個体の比較及び次世代の選択]
DE操作部12は、現行世代の対象親個体xiと、生成された子個体uと、を比較し、優れているほうの個体を、次世帯の親個体xiとして選択する。DE操作部12は、個体群記憶部21に記憶されている現行世代の親個体xiを、選択された次世代の親個体に、置換する。
【0043】
DE操作部12は、個体xi,u間の優劣を、複数の目的関数を用いて決定する。本実施形態では、次の3つの目的関数H1,H2,H3を定義義する。これらの目的関数の値は、小さいほどよく、最適解であれば、H1=0,H2=0,H3=0となる。
ただし、個体の優劣の判断に関しては、説明の簡略化のため、これらの目的関数のうち、2つの目的関数H1,H2を用いた場合について説明する。なお、目的関数H1,H2,H3の詳細については後述する。
【数1】
【0044】
次世代の個体xiとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件の例(条件1)を、以下に示す。
【数2】
上記条件1において、H1Cは生成された子個体についての目的関数H1の値、H1Pは親個体についての目的関数H1の値、H2Cは生成された子個体uについての目的関数H2の値、H2Pは親個体についての目的関数H2の値である(下記条件2,3についても同様)。
上記条件1では、両目的関数H1,H2の双方について、対象親個体xiよりも、子個体uの方が改善されていることが、子個体uが、次世代の個体として選択される条件となっている。この場合、両目的関数H1,H2を改善できる子個体uが生成される確率が低くなるため最適解発見までに時間がかかる。
【0045】
また、次世代の個体xiとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件の他の例(条件2)を、以下に示す。
【数3】
上記条件2では、目的関数H1,H2のうち、いずれか一方の目的関数が親個体xiよりも改善されていれば、子個体uが次世代として選択される。条件2の場合、実質的な世代交代が行われるための制約が緩和されるため、個体が進化し易く、個体集団の多様性が維持され易いというメリットがある。
【0046】
また、次世代の個体xiとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件のさらに他の例(条件3)を、以下に示す。
【数4】
上記3では、2つの目的関数H1,H2それぞれに重みα,1−αを乗じたものの和を、個体の適応度とした上で、個体の適応度が、親個体よりも優れている場合に、子個体uが次世代として選択される。なお、個体の適応度は、小さいほど、優れている(最適解に近い)ことを示す。また、重みα,1−αは、各目的関数H1,H2それぞれの重要性の度合いを示しており、重要な目的関数ほど、重みを大きくすればよい。この重みは、調整用インターフェース部40によって、ユーザによって調整可能であるが、その詳細は、後述する。
【0047】
DE操作部12は、上記のようなDE操作は、現行世代の全個体(x1〜xnp)を対象親個体xiとして行う。これにより、個体群21に記憶されている全個体について、世代交代がなされる。
【0048】
[4.多目的最適化]
本実施形態のスケジューリング装置1によって解かれるスケジューリング問題は、多目的最適化問題である。多目的最適化問題とは、目的関数が複数存在し、各目的関数値をひとまとめにせずに扱う問題をいう。
図10に示すように、本実施形態では、最適化は、目的関数値H1,H2,H3に基づく最適解までの距離(distance)が最小となる解(個体)を求めることである。なお、最適解は、H1=0,H2=0,H3=0となり、距離=0となる。
【0049】
[4.1 NSPにおける評価関数]
以下、目的関数H1,H2,H3の元になる評価関数を説明する。
下記表1に示すように、NSPでは、その性質から、6つの評価項目を挙げることができ、各評価項目に応じた評価関数F1i,F2i,F3i,F4i,G1j,G2jを定義する。
評価関数F1i,F2i,F3i,F4iは、看護師i個人に関する評価項目であり、評価関数G1j,G2jは、1日に関する評価項目である。
【表1】
【0050】
[4.1.1 勤務パターンの負荷度合いの軽減]
表1における第1の評価項目「勤務パターンの負荷度合いの軽減」については、下記のように定式化される。
【数5】
【0051】
上記式では、看護師iの勤務パターン評価値ai,jの総和が、評価関数F1iの値となる。上記式中の勤務パターン評価値を、下記表2のように定義する。
【表2】
【0052】
勤務パターンは、看護師iにおけるj日を含む連続する3日間の勤務形態の組み合わせである。表2において、「日」は、ある日の看護師の勤務形態が「日勤」であることを示し、「準」は、ある日の看護師の勤務形態が「準夜勤」であることを示し、「深」は、ある日の看護師の勤務形態が「深夜勤」であることを示し、「休」は、ある日の看護師の勤務形態が「休日」であることを示している。勤務パターンの評価値ai,jは、勤務パターンに応じて、表2のように定義される。表2では、勤務負荷の少ない最優先パターンの評価値が最も小さく、勤務負荷の大きい禁止パターンの評価値が最も大きくなるようにして、勤務負荷が大きいほど制約条件が重くなるようにした。
【0053】
[4.1.2 必要日数の確保]
表1における第2の評価項目「必要日数の確保」については、下記のように定式化される。
【数6】
【0054】
上記式では、看護師iが1月に各勤務形態を行う必要日数の上下限に違反する日数が評価関数F2iの値となる。ここで、必要日数とは、各看護師が1月に書く勤務形態を行う日数である。勤務形態毎の必要日数は、一般に、下記表3に示す通りになる。
【表3】
【0055】
[4.1.3 勤務日数間隔の均等化]
表1における第3の評価項目「勤務間隔の均等化」については、下記のように定式化される。
【数7】
【0056】
上記式では、各看護師iに割り付ける日数の上下限を違反する日数が、評価関数F3iの値となる。例えば、休日は、評価対象期間hkが5日間であり、休日を割り付ける上下限としては、評価対象期間の5日間において1〜5日となる。また、深夜勤は、評価対象期間hkが7日であり、深夜勤を割り付ける上下限としては、評価対象期間の7日間において0〜3日となる。
【0057】
[4.1.4 禁止パターンの低減]
表1における第4の評価項目「禁止パターンの低減」については、下記のように定式化される。
【数8】
【0058】
上記式では、禁止パターンの回数が、評価関数F4iの値となる。ここでは、禁止パターンとしては、2日間禁止パターンを用いる。2日禁止パターンとしては、例えば、看護師iの2日間の勤務形態の組み合わせが、「土日祝の日勤,深夜勤」、「研修,深夜勤」、「土日祝の日勤,土日祝の日勤」、又は「準夜勤,希望休暇」の組み合わせとなっている場合がある。
【0059】
[4.1.5 必要人数の確保]
表1における第5の評価項目の「必要人数の確保」に関し、ここでの必要人数とは、一日に各勤務形態で勤務する人数である。
【0060】
【表4】
【0061】
表4に示すように、例えば、準夜勤の必要人数は3人、深夜勤の必要人数は3人、平日の日勤の必要人数は11〜13人、土日祝の日勤の必要人数は3人である。一日に各勤務形態で勤務する人数の確保は、スケジューリングを行う上で最も重要な条件となる。本実施形態では、初期個体群生成部11によって生成される個体は、すべて、必要人数の確保がなされたものとなり、世代交代が行われても、必要人数が確保された状態が維持される。つまり、必要人数の確保に関する評価関数G1jは、常に、G1j=0である。世代交代が行われても必要人数が確保されることについては、後述する。
【0062】
[4.1.6 看護の質の維持]
表1における第6の評価項目の「看護の質の維持」については、下記のように定式化される。
【数9】
【0063】
看護の質の維持には、例えば、「深夜勤に新人は0〜1人で割り付ける」、「準夜勤にベテランは1〜2人で割り付ける」、「日勤にベテランは1〜2人で割り付ける」といった条件が必要とされる。上記式では、このような人数の上下限に違反する人数が、評価関数G2jの値となる。
【0064】
[4.2 目的関数の定義]
目的関数H1,H2,H3は、上記の6つの評価関数F1i,F2i,F3i,F4i,G1j,G2jのうち、常に評価関数値=0となるG1jを除いた6つの評価関数F1i,F2i,F3i,F4i,G2jによって定義される。
つまり、
H1=F1i+F4i+F3i
H2=F2i
H3=G2j
である。
【0065】
[4.3 個体の最適解からの距離]
個体評価部14は、各個体の最適解からの距離を、目的関数H1,H2,H3を軸とするユークリッド空間における距離(ユークリッド距離)として算出することで、各個体の評価を行う。なお、目的関数H1,H2,H3は、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つの目的関数H1,H2を用いた場合での実験結果を示している。図14に示すように、本実施形態のスケジュール装置1は、評価回数が500000回を超えた時点(時間として10分程度)で、最適解を発見した。また、図15は、個体群記憶部21に記憶されている世代交代中の個体群の分布(H1,H2を軸とするユークリッド空間における分布)を示している。図15(a)は世代交代の1世代目であり、図15(b)は5000世代目であり、図15(c)は15000世代目を示している。図15に示すように、世代交代の初期では、個体が広く分布しており探索範囲が広く大域探索を行っているのに対し、世代交代が進むと探索範囲が収束し、局所探索へシフトして行き、最終的に最適解が得られる。
【0089】
図16は、スケジューリング装置1が、最適解として得られた個体(スケジューリングデータ)を2次元のスケジュール表に変換して表示した結果を示している。図16のスケジュール表は、H1,H2の制約を全て満たしている。なお、図16のスケジュール表において、左側の数字(1〜23)は看護師を示す番号であり、上側の数字(1〜30)は、日付を示している。また、表中において、空欄は「日勤」を、「深」は「深夜勤」を、「準」は「準夜勤」を示している。
【0090】
[7.2 実験結果2]
図17及び図18は、評価項目「勤務パターン負荷度合いの軽減」に対応する評価関数F1iについて、表5に示す勤務パターンを採用した場合の実験結果2を示している。
【表5】
【0091】
表5では、表2に比べて、妥協パターンが追加されたものとなっている。この場合、目的関数H1の改善が難しくなったため、図17に示すように、H2のみが0となる解(準最適解)に収束した。
図18は、得られた準最適解を2次元のスケジュール表に変換して表示した結果を示している。図18のスケジュール表では、表5における妥協パターンが散見されるが、その他の制約は満たしたものとなっている。
【0092】
[7.3 実験結果3]
図19及び図20は、本実施形態のスケジューリング装置1において、3つの目的関数H1,H2,H3をすべて用いた場合での実験結果を示している。図19に示すように、H1,H3については、0となったが、H2については8となる準最適解が得られた。図20は、得られた準最適解を2次元のスケジュール表に変換して表示した結果を示している。
【0093】
[7.4 実験結果4]
図21は、初期条件設定部30によって、各要員の希望休暇の日、会議のある日、研修のある日を初期条件として設定した場合に得られた解をスケジュール表に変換したものを示している。この場合は、最適解が得られた。なお、スケジュール表において、「希」は「希望休暇」を、「会」は「会議」を、「研」は「研修」を、示している。
【0094】
[8.調整用インターフェース部]
調整用インターフェース部40は、前述のように、解の探索方向をユーザが調整するためのインターフェースである。調整の対象としては、例えば、次世代の個体xiとして生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件3における重みαが挙げられる。ユーザは、調整用インターフェース部40を介して、処理部10による最適化処理の前において、又は最適化処理中において随時、この重みαを調整することができる。αを調整することによって、目的関数H1,H2それぞれの重要性の度合いを調整することができる。
【0095】
αを調整すると、世代交代の際に、対象親個体xiが子個体uに置換される条件が変化することになる。つまり、αを調整すると、図22に示すように、重要性の度合いの大きい目的関数の値が改善される方向に探索空間を選択することになる。つまり、αが大きくなるように調整することでH1を改善でき、1−αが大きくなるように調整することで、大きくすることでH2を改善できる。
このように、ユーザが、調整用インターフェース部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つの目的関数H1,H2,H3で、個体数Np=40、スケーリング係数S=0.35,交叉確率CR=0.85、突然変異率Pm=0.01の条件下において、所定回数の世代交代を繰り返した後の最良解の最適化との差(H1+H2+H3)を求めたものである。なお、図25における最適解との差は、5試行の平均となっている。
図25によれば、突然変異対象の選び方としてランダム選択法を用い、突然変異の方法として方法1を用いた場合と、突然変異対象の選び方としてパレートランクルーレット選択法を用い、突然変異の方法として方法1を用いた場合と、の結果が良好であった。
【0102】
[10.スケジューリングデータの冗長性に関する考察]
スケジュール表(表現型)をコーディングしたスケジューリングデータ(遺伝子型)は、冗長性を持つ。図26に示すように、3つの異なる複数のスケジューリングデータ(図26では、部分コードの日勤部分だけを示した)が、同じ要員の組み合わせ{A,B,C}を示している。つまり、本実施形態のコーディングは、複数のスケジューリングデータ(遺伝子型)が一つのスケジュール表(表現型)に対応する多対一(冗長)写像コーディングとなっている。
【0103】
図27は、3つの目的関数H1,H2,H3で、個体数Np=40、スケーリング係数S=0.35,交叉確率CR=0.85、突然変異率Pm=0.01の条件下において、突然変異対象の選び方としてランダム選択法を用い、突然変異の方法として方法1を用いた場合における、所定回数の世代交代を繰り返した後の最良解の最適化との差(H1+H2+H3)を求めたものである。なお、図27における最適解との差は、5試行の平均となっている。
【0104】
図27によれば、本実施形態のように多対一(冗長)写像コーディングとなっているスケジューリングデータの場合は、最適解との差が11であったのに対し、一つのスケジュール表に対して一つのスケジューリングデータだけが対応するように一対一写像とした場合は、最適解との差が17.4であった。
【0105】
かかる結果より、多対一(冗長)写像コーディングとなっている本実施形態のスケジューリングデータは、一対一写像コーディングに比べて、優れていることがわかる。
【0106】
なお、上記において開示した事項は、例示であって、本発明を限定するものではなく、様々な変形が可能である。
例えば、スケジューリング装置1は、ナーススケジューリングに限られず、他の業種における従業員のシフトスケジュールや、学校におけるゼミ等の発表スケジュールを調整するための装置としても利用することができる。
また、進化的アルゴリズムは、DEに限られず、GAなどの他の進化的アルゴリズムであってもよい。
【符号の説明】
【0107】
1 スケジューリング装置
10 処理部
11 初期個体群生成部
12 DE操作部
13 突然変異処理部
14 個体評価部
15 最良解更新部
20 記憶部
21 個体群記憶部
22 最良解記憶部
【技術分野】
【0001】
本発明は、スケジューリング装置、コンピュータプログラム、及びデータに関するものである。
【背景技術】
【0002】
従来より、所定の集団に属する各要員のスケジュールを最適化するスケジューリング問題が、一般に知られている。スケジューリング問題として代表的なものに、ナーススケジューリング問題(Nurse Scheduling Problem;NSP)がある。NSPでは、要員は看護師であり、一定期間(例えば、1月間)における各日の看護師の勤務形態(日勤、準夜勤、深夜勤、休日)を示すスケジュール表を最適化する問題となる。
【0003】
スケジューリング問題を、遺伝的アルゴリズムに代表される進化的アルゴリズム用いて解く試みが、従来より行われている。例えば、特許文献1には、NSPなどのスケジューリング問題を、遺伝的アルゴリズム(Genetic Algorithm;GA)を用いて解決するスケジューリング方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2005−149148号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明者らは、スケジューリング問題における最適解(準最適解)を効率的に求めるために、Differential Evolution(DE)とよばれる最適化方法を用いるという着想を得た。DEは、GAと同様に進化的アルゴリズムである。DEでは、(1)探索空間内にランダムに複数の初期個体(解)を生成しておく、(2)すべての個体を評価する、(3)親個体から新しい解(子個体)を生成する(4)子個体が親より優れていれば親個体を削除して子個体を残す、という4つの工程を有する。
DEでは、(2)〜(4)を繰り返すことで、複数の個体(個体群)の世代交代を生じさせて個体を進化させることで解を探索する。
【0006】
ここで、スケジューリング問題にDEやGAを適用する場合、個体をどのように表現(コーディング)するかが問題となる。スケジューリング問題において、最適化したいのは、複数の要員の所定期間内のスケジュール表である。したがって、一つのスケジュール表を一つの個体とすることが考えられる。
しかし、スケジュール表に対応する個体同士において交叉の操作を行うと、致死遺伝子が生じ易いという問題がある。
【0007】
例えば、スケジューリング問題において、重要な制約として、役割毎の「必要人数の確保」が挙げられる。NSPの場合、各日において、日勤、準夜勤、深夜勤という勤務形態(役割)毎に必要とされる人数が予め決まっている。ところが、各日において勤務形態ごとの必要人数が確保できているスケジュール表であっても、そのスケジュール表自体を個体とすると、交叉が行われることにより、必要人数が確保できなくなり、致死遺伝子となる可能性がある。
【0008】
特許文献1では、致死遺伝子の発生を防止するため、要員全員のスケジュールではなく、要員一名のスケジュールを一つの個体とし、個体の集合で一つのスケジュール表を構成し、個体間で交叉等の遺伝的操作を行う共存型GAが記載されている。
しかし、DEでは、そのアルゴリズム上、一つのスケジュール表を一つの個体とすることが望ましい。したがって、DEを適用する上では、共存型GAのように要員一名のスケジュールを一つの個体とするのではなく、複数要員のスケジュール全体を一つの個体とすべきである。
【0009】
そこで、本発明は、複数要員のスケジュール全体を一つの個体として扱いつつも、致死遺伝子となるスケジュール(個体)の発生を防止することを目的とする。
【課題を解決するための手段】
【0010】
(1)本発明は、複数の要員のスケジューリングを行うスケジューリング装置であって、複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備え、前記スケジューリングデータは、単位期間毎の各要員の役割を規定した部分コードを複数有して構成され、各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、ことを特徴とするスケジューリング装置である。
【0011】
(2)前記進化的アルゴリズムとしては、交叉の操作が行われるアルゴリズムを採用するのが好適である。
【0012】
(3)より具体的には、前記進化的アルゴリズムは、Differential Evolutionが好適である。
【0013】
(4)前記処理部は、前記スケジューリングデータに対して突然変異の操作を行う突然変異処理部を備えるのが好ましい。
【0014】
(5)要員リストの要素となる要員として、スケジューリングの対象である複数の要員のうち、単位期間において最適化処理の対象とならない要員を初期条件として設定する設定部を更に備えるのが好ましい。
【0015】
(6)個体の優劣の決定に用いられる複数の目的関数それぞれの重要性の度合いをユーザが調整するためのインターフェース部を更に備え、前記処理部は、親個体と、親個体から進化的アルゴリズムに従って得られた子個体と、を比較して、優れた個体を次世代の個体として選択するよう構成されているとともに、個体間の優劣を複数の目的関数に基づいて決定するよう構成され、さらに、前記処理部は、個体の優劣を前記複数の目的関数に基づいて決定する際に、インターフェース部を介して調整された前記度合いに応じた重みを、前記複数の目的関数の値に乗じた上で、個体間の優劣を決定するのが好ましい。
【0016】
(7)他の観点からみた本発明は、コンピュータを、前記(1)〜(6)のいずれか1項に記載のスケジューリング装置として機能させるためのコンピュータプログラムである。
【0017】
(8)さらに他の観点からみた本発明は、複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備えて複数の要員のスケジューリングを行うスケジューリング装置として機能するコンピュータが、前記スケジューリングデータとして用いるデータであって、単位期間毎の各要員の役割を規定した部分コードを複数有し、各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、ことを特徴とするデータである。
【発明の効果】
【0018】
本発明によれば、複数要員のスケジュール全体を一つの個体として扱いつつも、致死遺伝子となるスケジュール(個体)の発生を防止することができる。
【図面の簡単な説明】
【0019】
【図1】スケジューリング装置の機能ブロック図である。
【図2】スケジュール表の例を示す図である。
【図3】スケジューリング装置のスケジューリング処理を示すフローチャートである。
【図4】DE操作を示す概念図である。
【図5】DE操作によって生成される差分変異親ベクトルの説明図である。
【図6】交叉(exponential crossover)の説明図である。
【図7】交叉(binomial crossover)の説明図である。
【図8】探索空間における親個体及び子個体の分布を示す図である。
【図9】世代交代に伴う解探索範囲の変遷を示す図である。
【図10】最適解との距離に関する説明図である。
【図11】スケジューリングデータのデータ構造図である。
【図12】スケジューリングデータの要員特定値の解釈の仕方の説明図である。
【図13】(a)は順序表現の要員特定値を採用した場合の交叉を示し、(b)は要員を直接的に特定した要員特定値を採用した場合の交叉を示す図である。
【図14】実験結果1を示すグラフである。
【図15】実験結果1における解探索範囲の変遷を示す図である。
【図16】実験結果1における最適解に対応するスケジュール表である。
【図17】実験結果2での個体群の解探索空間における配置を示す図である。
【図18】実験結果2における準最適解に対応するスケジュール表である。
【図19】実験結果3での個体群の解探索空間における配置を示す図である。
【図20】実験結果3における準最適解に対応するスケジュール表である。
【図21】実験結果4における最適解に対応するスケジュール表である。
【図22】重みを調整することによる探索方向の制御の様子を示す図である。
【図23】DEにおける問題点の説明図である。
【図24】パレートランクルーレット選択の説明図である。
【図25】突然変異方法の比較結果を示す表である。
【図26】スケジューリングデータの冗長性の説明図である。
【図27】コーディング方法の比較結果を示す表である。
【発明を実施するための形態】
【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操作の対象となる一つの個体(対象親個体)xiを選択するとともに、残りの現行世代の複数の個体から3つの個体x1p,x2p,x3pをランダムに選択する。
【0036】
続いて、DE操作部12は、3つの個体x1p,x2p,x3pを用いて、差分変異親個体vを生成する。
3つの個体x1p,x2p,x3pそれぞれをベクトルとみなした場合、図5にも示すように、差分変異親個体(差分変異親ベクトル)vは、ベースベクトルx1pに対して、差分生成ベクトルx2p,x3p間の差分にスケーリング係数(scaling factor)を乗じたものを加えたものとなる。
【0037】
さらに、DE操作部12は、差分変異親個体vと対象親個体xとを用いて交叉操作を行って、子個体uを生成する。
交叉は、図6に示すように指数関数的に減少する確率で遺伝子交換を行う交叉(exponential crossover)でもよいし、図7に示すように、各要素ごとに独立に一定の確率CRで差分変異親の遺伝子を用いる交叉(binomial crossover)でもよい。
なお、図6及び図7では、対象親個体(ベクトル)x、子個体(ベクトル)u,差分変異親個体(ベクトル)vを構成する個々の遺伝子を、xj,uj,vj(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の乱数値をrandjで示した。
(3)そして、交叉開始位置からrandjが連続してCR以下となる区間(図6では、遺伝子座j=5〜9の区間)については、子個体uの遺伝子u5〜u9として、差分変異親個体の遺伝子v5〜v9を用いる。残りの区間(図6では、遺伝子座j=1〜4及び10〜12)については、子個体uの遺伝子u1〜u4,u10〜u12として、対象親個体xの遺伝子x1〜x4,x10〜x12を用いる。以上の処理によって子個体uが生成される。
【0039】
図7に示す交叉(binomial crossover)では、図中に示す式に従って、子個体uの遺伝子ujとして、対象親個体xの遺伝子xjを用いるか、差分変異親個体vの遺伝子vjを用いるかを決定する。具体的には、まず、子個体uの各遺伝子(要素)uj毎に、0〜1の間の乱数値randj[0,1]を求める。この乱数値randj[0,1]が、所定の確率CR以下であれば、子個体uの遺伝子ujとして、差分変異親個体vjの遺伝子vjを用い、そうでなければ、対象親個体の遺伝子xjを用いる。
【0040】
なお、子個体uの遺伝子のうち、一つ(1次元)の遺伝子(要素)については、必ず差分変異親のものを用いることを保証するため、遺伝子座jが特定の値jrである場合には、乱数値randj[0,1]にかかわりなく、子個体uの遺伝子ujとして、差分変異親個体vjの遺伝子vjが用いられる。
【0041】
DEでは、差分変異親を用いた交叉操作が行われるため、図8に示すように、探索空間でみたときに、現行世代の親個体の集団が属する範囲よりも、子個体の集団が属する範囲の方が広くなる。つまり、DEでは、現行世代よりも広い範囲で解(個体)の探索を行えるため、局所解に陥りにくく、適切な解探索が行える。
そして、DEでは、図9に示すように、世代交代を繰り返すと、個体間の差分が小さくなるため、個体集団の存在領域も徐々に収束していき、解の探索範囲が狭くなる。つまり、DEでは、世代交代を繰り返すと、大域探索から局所探索へシフトしていく。これにより、DEでは、局所解に陥ることを避けつつ最適解に近づくことが可能である。
【0042】
[3.2 親個体と子個体の比較及び次世代の選択]
DE操作部12は、現行世代の対象親個体xiと、生成された子個体uと、を比較し、優れているほうの個体を、次世帯の親個体xiとして選択する。DE操作部12は、個体群記憶部21に記憶されている現行世代の親個体xiを、選択された次世代の親個体に、置換する。
【0043】
DE操作部12は、個体xi,u間の優劣を、複数の目的関数を用いて決定する。本実施形態では、次の3つの目的関数H1,H2,H3を定義義する。これらの目的関数の値は、小さいほどよく、最適解であれば、H1=0,H2=0,H3=0となる。
ただし、個体の優劣の判断に関しては、説明の簡略化のため、これらの目的関数のうち、2つの目的関数H1,H2を用いた場合について説明する。なお、目的関数H1,H2,H3の詳細については後述する。
【数1】
【0044】
次世代の個体xiとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件の例(条件1)を、以下に示す。
【数2】
上記条件1において、H1Cは生成された子個体についての目的関数H1の値、H1Pは親個体についての目的関数H1の値、H2Cは生成された子個体uについての目的関数H2の値、H2Pは親個体についての目的関数H2の値である(下記条件2,3についても同様)。
上記条件1では、両目的関数H1,H2の双方について、対象親個体xiよりも、子個体uの方が改善されていることが、子個体uが、次世代の個体として選択される条件となっている。この場合、両目的関数H1,H2を改善できる子個体uが生成される確率が低くなるため最適解発見までに時間がかかる。
【0045】
また、次世代の個体xiとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件の他の例(条件2)を、以下に示す。
【数3】
上記条件2では、目的関数H1,H2のうち、いずれか一方の目的関数が親個体xiよりも改善されていれば、子個体uが次世代として選択される。条件2の場合、実質的な世代交代が行われるための制約が緩和されるため、個体が進化し易く、個体集団の多様性が維持され易いというメリットがある。
【0046】
また、次世代の個体xiとして、生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件のさらに他の例(条件3)を、以下に示す。
【数4】
上記3では、2つの目的関数H1,H2それぞれに重みα,1−αを乗じたものの和を、個体の適応度とした上で、個体の適応度が、親個体よりも優れている場合に、子個体uが次世代として選択される。なお、個体の適応度は、小さいほど、優れている(最適解に近い)ことを示す。また、重みα,1−αは、各目的関数H1,H2それぞれの重要性の度合いを示しており、重要な目的関数ほど、重みを大きくすればよい。この重みは、調整用インターフェース部40によって、ユーザによって調整可能であるが、その詳細は、後述する。
【0047】
DE操作部12は、上記のようなDE操作は、現行世代の全個体(x1〜xnp)を対象親個体xiとして行う。これにより、個体群21に記憶されている全個体について、世代交代がなされる。
【0048】
[4.多目的最適化]
本実施形態のスケジューリング装置1によって解かれるスケジューリング問題は、多目的最適化問題である。多目的最適化問題とは、目的関数が複数存在し、各目的関数値をひとまとめにせずに扱う問題をいう。
図10に示すように、本実施形態では、最適化は、目的関数値H1,H2,H3に基づく最適解までの距離(distance)が最小となる解(個体)を求めることである。なお、最適解は、H1=0,H2=0,H3=0となり、距離=0となる。
【0049】
[4.1 NSPにおける評価関数]
以下、目的関数H1,H2,H3の元になる評価関数を説明する。
下記表1に示すように、NSPでは、その性質から、6つの評価項目を挙げることができ、各評価項目に応じた評価関数F1i,F2i,F3i,F4i,G1j,G2jを定義する。
評価関数F1i,F2i,F3i,F4iは、看護師i個人に関する評価項目であり、評価関数G1j,G2jは、1日に関する評価項目である。
【表1】
【0050】
[4.1.1 勤務パターンの負荷度合いの軽減]
表1における第1の評価項目「勤務パターンの負荷度合いの軽減」については、下記のように定式化される。
【数5】
【0051】
上記式では、看護師iの勤務パターン評価値ai,jの総和が、評価関数F1iの値となる。上記式中の勤務パターン評価値を、下記表2のように定義する。
【表2】
【0052】
勤務パターンは、看護師iにおけるj日を含む連続する3日間の勤務形態の組み合わせである。表2において、「日」は、ある日の看護師の勤務形態が「日勤」であることを示し、「準」は、ある日の看護師の勤務形態が「準夜勤」であることを示し、「深」は、ある日の看護師の勤務形態が「深夜勤」であることを示し、「休」は、ある日の看護師の勤務形態が「休日」であることを示している。勤務パターンの評価値ai,jは、勤務パターンに応じて、表2のように定義される。表2では、勤務負荷の少ない最優先パターンの評価値が最も小さく、勤務負荷の大きい禁止パターンの評価値が最も大きくなるようにして、勤務負荷が大きいほど制約条件が重くなるようにした。
【0053】
[4.1.2 必要日数の確保]
表1における第2の評価項目「必要日数の確保」については、下記のように定式化される。
【数6】
【0054】
上記式では、看護師iが1月に各勤務形態を行う必要日数の上下限に違反する日数が評価関数F2iの値となる。ここで、必要日数とは、各看護師が1月に書く勤務形態を行う日数である。勤務形態毎の必要日数は、一般に、下記表3に示す通りになる。
【表3】
【0055】
[4.1.3 勤務日数間隔の均等化]
表1における第3の評価項目「勤務間隔の均等化」については、下記のように定式化される。
【数7】
【0056】
上記式では、各看護師iに割り付ける日数の上下限を違反する日数が、評価関数F3iの値となる。例えば、休日は、評価対象期間hkが5日間であり、休日を割り付ける上下限としては、評価対象期間の5日間において1〜5日となる。また、深夜勤は、評価対象期間hkが7日であり、深夜勤を割り付ける上下限としては、評価対象期間の7日間において0〜3日となる。
【0057】
[4.1.4 禁止パターンの低減]
表1における第4の評価項目「禁止パターンの低減」については、下記のように定式化される。
【数8】
【0058】
上記式では、禁止パターンの回数が、評価関数F4iの値となる。ここでは、禁止パターンとしては、2日間禁止パターンを用いる。2日禁止パターンとしては、例えば、看護師iの2日間の勤務形態の組み合わせが、「土日祝の日勤,深夜勤」、「研修,深夜勤」、「土日祝の日勤,土日祝の日勤」、又は「準夜勤,希望休暇」の組み合わせとなっている場合がある。
【0059】
[4.1.5 必要人数の確保]
表1における第5の評価項目の「必要人数の確保」に関し、ここでの必要人数とは、一日に各勤務形態で勤務する人数である。
【0060】
【表4】
【0061】
表4に示すように、例えば、準夜勤の必要人数は3人、深夜勤の必要人数は3人、平日の日勤の必要人数は11〜13人、土日祝の日勤の必要人数は3人である。一日に各勤務形態で勤務する人数の確保は、スケジューリングを行う上で最も重要な条件となる。本実施形態では、初期個体群生成部11によって生成される個体は、すべて、必要人数の確保がなされたものとなり、世代交代が行われても、必要人数が確保された状態が維持される。つまり、必要人数の確保に関する評価関数G1jは、常に、G1j=0である。世代交代が行われても必要人数が確保されることについては、後述する。
【0062】
[4.1.6 看護の質の維持]
表1における第6の評価項目の「看護の質の維持」については、下記のように定式化される。
【数9】
【0063】
看護の質の維持には、例えば、「深夜勤に新人は0〜1人で割り付ける」、「準夜勤にベテランは1〜2人で割り付ける」、「日勤にベテランは1〜2人で割り付ける」といった条件が必要とされる。上記式では、このような人数の上下限に違反する人数が、評価関数G2jの値となる。
【0064】
[4.2 目的関数の定義]
目的関数H1,H2,H3は、上記の6つの評価関数F1i,F2i,F3i,F4i,G1j,G2jのうち、常に評価関数値=0となるG1jを除いた6つの評価関数F1i,F2i,F3i,F4i,G2jによって定義される。
つまり、
H1=F1i+F4i+F3i
H2=F2i
H3=G2j
である。
【0065】
[4.3 個体の最適解からの距離]
個体評価部14は、各個体の最適解からの距離を、目的関数H1,H2,H3を軸とするユークリッド空間における距離(ユークリッド距離)として算出することで、各個体の評価を行う。なお、目的関数H1,H2,H3は、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つの目的関数H1,H2を用いた場合での実験結果を示している。図14に示すように、本実施形態のスケジュール装置1は、評価回数が500000回を超えた時点(時間として10分程度)で、最適解を発見した。また、図15は、個体群記憶部21に記憶されている世代交代中の個体群の分布(H1,H2を軸とするユークリッド空間における分布)を示している。図15(a)は世代交代の1世代目であり、図15(b)は5000世代目であり、図15(c)は15000世代目を示している。図15に示すように、世代交代の初期では、個体が広く分布しており探索範囲が広く大域探索を行っているのに対し、世代交代が進むと探索範囲が収束し、局所探索へシフトして行き、最終的に最適解が得られる。
【0089】
図16は、スケジューリング装置1が、最適解として得られた個体(スケジューリングデータ)を2次元のスケジュール表に変換して表示した結果を示している。図16のスケジュール表は、H1,H2の制約を全て満たしている。なお、図16のスケジュール表において、左側の数字(1〜23)は看護師を示す番号であり、上側の数字(1〜30)は、日付を示している。また、表中において、空欄は「日勤」を、「深」は「深夜勤」を、「準」は「準夜勤」を示している。
【0090】
[7.2 実験結果2]
図17及び図18は、評価項目「勤務パターン負荷度合いの軽減」に対応する評価関数F1iについて、表5に示す勤務パターンを採用した場合の実験結果2を示している。
【表5】
【0091】
表5では、表2に比べて、妥協パターンが追加されたものとなっている。この場合、目的関数H1の改善が難しくなったため、図17に示すように、H2のみが0となる解(準最適解)に収束した。
図18は、得られた準最適解を2次元のスケジュール表に変換して表示した結果を示している。図18のスケジュール表では、表5における妥協パターンが散見されるが、その他の制約は満たしたものとなっている。
【0092】
[7.3 実験結果3]
図19及び図20は、本実施形態のスケジューリング装置1において、3つの目的関数H1,H2,H3をすべて用いた場合での実験結果を示している。図19に示すように、H1,H3については、0となったが、H2については8となる準最適解が得られた。図20は、得られた準最適解を2次元のスケジュール表に変換して表示した結果を示している。
【0093】
[7.4 実験結果4]
図21は、初期条件設定部30によって、各要員の希望休暇の日、会議のある日、研修のある日を初期条件として設定した場合に得られた解をスケジュール表に変換したものを示している。この場合は、最適解が得られた。なお、スケジュール表において、「希」は「希望休暇」を、「会」は「会議」を、「研」は「研修」を、示している。
【0094】
[8.調整用インターフェース部]
調整用インターフェース部40は、前述のように、解の探索方向をユーザが調整するためのインターフェースである。調整の対象としては、例えば、次世代の個体xiとして生成された子個体uが選択される場合(実質的な世代交代が生じる場合)の条件3における重みαが挙げられる。ユーザは、調整用インターフェース部40を介して、処理部10による最適化処理の前において、又は最適化処理中において随時、この重みαを調整することができる。αを調整することによって、目的関数H1,H2それぞれの重要性の度合いを調整することができる。
【0095】
αを調整すると、世代交代の際に、対象親個体xiが子個体uに置換される条件が変化することになる。つまり、αを調整すると、図22に示すように、重要性の度合いの大きい目的関数の値が改善される方向に探索空間を選択することになる。つまり、αが大きくなるように調整することでH1を改善でき、1−αが大きくなるように調整することで、大きくすることでH2を改善できる。
このように、ユーザが、調整用インターフェース部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つの目的関数H1,H2,H3で、個体数Np=40、スケーリング係数S=0.35,交叉確率CR=0.85、突然変異率Pm=0.01の条件下において、所定回数の世代交代を繰り返した後の最良解の最適化との差(H1+H2+H3)を求めたものである。なお、図25における最適解との差は、5試行の平均となっている。
図25によれば、突然変異対象の選び方としてランダム選択法を用い、突然変異の方法として方法1を用いた場合と、突然変異対象の選び方としてパレートランクルーレット選択法を用い、突然変異の方法として方法1を用いた場合と、の結果が良好であった。
【0102】
[10.スケジューリングデータの冗長性に関する考察]
スケジュール表(表現型)をコーディングしたスケジューリングデータ(遺伝子型)は、冗長性を持つ。図26に示すように、3つの異なる複数のスケジューリングデータ(図26では、部分コードの日勤部分だけを示した)が、同じ要員の組み合わせ{A,B,C}を示している。つまり、本実施形態のコーディングは、複数のスケジューリングデータ(遺伝子型)が一つのスケジュール表(表現型)に対応する多対一(冗長)写像コーディングとなっている。
【0103】
図27は、3つの目的関数H1,H2,H3で、個体数Np=40、スケーリング係数S=0.35,交叉確率CR=0.85、突然変異率Pm=0.01の条件下において、突然変異対象の選び方としてランダム選択法を用い、突然変異の方法として方法1を用いた場合における、所定回数の世代交代を繰り返した後の最良解の最適化との差(H1+H2+H3)を求めたものである。なお、図27における最適解との差は、5試行の平均となっている。
【0104】
図27によれば、本実施形態のように多対一(冗長)写像コーディングとなっているスケジューリングデータの場合は、最適解との差が11であったのに対し、一つのスケジュール表に対して一つのスケジューリングデータだけが対応するように一対一写像とした場合は、最適解との差が17.4であった。
【0105】
かかる結果より、多対一(冗長)写像コーディングとなっている本実施形態のスケジューリングデータは、一対一写像コーディングに比べて、優れていることがわかる。
【0106】
なお、上記において開示した事項は、例示であって、本発明を限定するものではなく、様々な変形が可能である。
例えば、スケジューリング装置1は、ナーススケジューリングに限られず、他の業種における従業員のシフトスケジュールや、学校におけるゼミ等の発表スケジュールを調整するための装置としても利用することができる。
また、進化的アルゴリズムは、DEに限られず、GAなどの他の進化的アルゴリズムであってもよい。
【符号の説明】
【0107】
1 スケジューリング装置
10 処理部
11 初期個体群生成部
12 DE操作部
13 突然変異処理部
14 個体評価部
15 最良解更新部
20 記憶部
21 個体群記憶部
22 最良解記憶部
【特許請求の範囲】
【請求項1】
複数の要員のスケジューリングを行うスケジューリング装置であって、
複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、
前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、
を備え、
前記スケジューリングデータは、
単位期間毎の各要員の役割を規定した部分コードを複数有して構成され、
各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、
さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、
前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、
ことを特徴とするスケジューリング装置。
【請求項2】
前記進化的アルゴリズムは、交叉の操作が行われるアルゴリズムである
請求項1記載のスケジューリング装置。
【請求項3】
前記進化的アルゴリズムは、Differential Evolutionである
請求項1又は2記載のスケジューリング装置。
【請求項4】
前記処理部は、前記スケジューリングデータに対して突然変異の操作を行う突然変異処理部を備える
請求項1〜3のいずれか1項に記載のスケジューリング装置。
【請求項5】
要員リストの要素となる要員として、スケジューリングの対象である複数の要員のうち、単位期間において最適化処理の対象とならない要員を初期条件として設定する設定部を更に備える
請求項1〜4のいずれか1項に記載のスケジューリング装置。
【請求項6】
個体の優劣の決定に用いられる複数の目的関数それぞれの重要性の度合いをユーザが調整するためのインターフェース部を更に備え、
前記処理部は、親個体と、親個体から進化的アルゴリズムに従って得られた子個体と、を比較して、優れた個体を次世代の個体として選択するよう構成されているとともに、個体間の優劣を複数の目的関数に基づいて決定するよう構成され、
さらに、前記処理部は、個体の優劣を前記複数の目的関数に基づいて決定する際に、インターフェース部を介して調整された前記度合いに応じた重みを、前記複数の目的関数の値に乗じた上で、個体間の優劣を決定する
請求項1〜5のいずれか1項に記載のスケジューリング装置。
【請求項7】
コンピュータを、請求項1〜6のいずれか1項に記載のスケジューリング装置として機能させるためのコンピュータプログラム。
【請求項8】
複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備えて複数の要員のスケジューリングを行うスケジューリング装置として機能するコンピュータが、前記スケジューリングデータとして用いるデータであって、
単位期間毎の各要員の役割を規定した部分コードを複数有し、
各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、
さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、
前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、
ことを特徴とするデータ。
【請求項1】
複数の要員のスケジューリングを行うスケジューリング装置であって、
複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、
前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、
を備え、
前記スケジューリングデータは、
単位期間毎の各要員の役割を規定した部分コードを複数有して構成され、
各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、
さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、
前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、
ことを特徴とするスケジューリング装置。
【請求項2】
前記進化的アルゴリズムは、交叉の操作が行われるアルゴリズムである
請求項1記載のスケジューリング装置。
【請求項3】
前記進化的アルゴリズムは、Differential Evolutionである
請求項1又は2記載のスケジューリング装置。
【請求項4】
前記処理部は、前記スケジューリングデータに対して突然変異の操作を行う突然変異処理部を備える
請求項1〜3のいずれか1項に記載のスケジューリング装置。
【請求項5】
要員リストの要素となる要員として、スケジューリングの対象である複数の要員のうち、単位期間において最適化処理の対象とならない要員を初期条件として設定する設定部を更に備える
請求項1〜4のいずれか1項に記載のスケジューリング装置。
【請求項6】
個体の優劣の決定に用いられる複数の目的関数それぞれの重要性の度合いをユーザが調整するためのインターフェース部を更に備え、
前記処理部は、親個体と、親個体から進化的アルゴリズムに従って得られた子個体と、を比較して、優れた個体を次世代の個体として選択するよう構成されているとともに、個体間の優劣を複数の目的関数に基づいて決定するよう構成され、
さらに、前記処理部は、個体の優劣を前記複数の目的関数に基づいて決定する際に、インターフェース部を介して調整された前記度合いに応じた重みを、前記複数の目的関数の値に乗じた上で、個体間の優劣を決定する
請求項1〜5のいずれか1項に記載のスケジューリング装置。
【請求項7】
コンピュータを、請求項1〜6のいずれか1項に記載のスケジューリング装置として機能させるためのコンピュータプログラム。
【請求項8】
複数の要員それぞれの役割を所定の期間内において単位期間毎に規定したスケジューリングデータを複数個記憶する記憶部と、前記記憶部に記憶されたスケジューリングデータを親個体とする世代交代を、進化的アルゴリズムに従って繰り返させることで、前記記憶部に記憶されたスケジューリングデータを最適化する最適化処理を行う処理部と、を備えて複数の要員のスケジューリングを行うスケジューリング装置として機能するコンピュータが、前記スケジューリングデータとして用いるデータであって、
単位期間毎の各要員の役割を規定した部分コードを複数有し、
各単位期間に対応する前記部分コードは、当該単位期間において最適化処理の対象となる要員の数に対応した数の要素を有するリストとして構成され、
さらに前記部分コードは、当該部分コードの各要素が要員を特定する要員特定値となっているとともに、当該部分コードの要素の順位が要員の役割を示しており、
前記部分コードの要員特定値は、前記複数の要員のうち、前記部分コードにおいて先行する順位の要員特定値によって特定された要員を除外した要員リストにおける順位によって、要員を特定するものである、
ことを特徴とするデータ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図11】
【図12】
【図13】
【図24】
【図26】
【図8】
【図9】
【図10】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図25】
【図27】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図11】
【図12】
【図13】
【図24】
【図26】
【図8】
【図9】
【図10】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図25】
【図27】
【公開番号】特開2012−64031(P2012−64031A)
【公開日】平成24年3月29日(2012.3.29)
【国際特許分類】
【出願番号】特願2010−208417(P2010−208417)
【出願日】平成22年9月16日(2010.9.16)
【出願人】(593006630)学校法人立命館 (359)
【公開日】平成24年3月29日(2012.3.29)
【国際特許分類】
【出願日】平成22年9月16日(2010.9.16)
【出願人】(593006630)学校法人立命館 (359)
[ Back to top ]