(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024004403
(43)【公開日】2024-01-16
(54)【発明の名称】スケジューリング方法およびスケジューリングプログラム
(51)【国際特許分類】
G06Q 10/06 20230101AFI20240109BHJP
【FI】
G06Q10/06
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2022104055
(22)【出願日】2022-06-28
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】舟久保 利昭
【テーマコード(参考)】
5L049
【Fターム(参考)】
5L049AA13
(57)【要約】
【課題】各手術の開始時刻を調整する際、全ての手術における開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整する。
【解決手段】サーバ1は、タスクの開始時刻を決定するスケジューリング方法であって、所定のルールに従い、所定の期間に予定される全てのタスクの優先順位を決定する。サーバ1は、優先順位が高い順に、当該優先順位に対応するタスクを選択する。サーバ1は、選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
タスクの開始時刻を決定するスケジューリング方法であって、
所定のルールに従い、所定の期間に予定される複数のタスクの優先順位を決定し、
優先順位が高い順に、当該優先順位に対応するタスクを選択し、
選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する
処理をコンピュータが実行することを特徴とするスケジューリング方法。
【請求項2】
前記開始時刻を決定する処理は、決定された各タスクの優先順位のうち最も高い優先順位のタスクの開始時刻を、予め定められたタスクの開始予定時刻に決定する、
ことを特徴とする請求項1に記載のスケジューリング方法。
【請求項3】
前記開始時刻を決定する処理は、最も高い優先順位より低い優先順位のタスクについて、既に開始時刻が決定された他のタスクとの間で、タスクを実施する際に用いられるリソースの競合が発生せず、且つ、予め定められた開始予定時刻との差が最小となるように開始時刻を決定する
ことを特徴とする請求項2に記載のスケジューリング方法。
【請求項4】
前記開始時刻を決定する処理は、第一のタスクの開始時刻を決定する際に、前記第一のタスクより低い優先順位のタスクのみの情報を参照して開始時刻を決定する
ことを特徴とする請求項3に記載のスケジューリング方法。
【請求項5】
タスクの開始時刻を決定するスケジューリング方法であって、
所定のルールに従い、所定の期間に予定される複数のタスクの優先順位を決定し、
優先順位が高い順に、当該優先順位に対応するタスクを選択し、
選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する
処理をコンピュータに実行させることを特徴とするスケジューリングプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、スケジューリング方法などに関する。
【背景技術】
【0002】
近年、同日に複数の手術を行う際の手術計画が効率よく調整されることが要求されている。かかる要求に対して、作業効率を向上できるシステムが開示されている(特許文献1参照)かかるシステムでは、振分けルール情報の各要素と各患者の患者情報とを比較し、各患者の手術順を並び替え、振分けルール情報の要素の優先順位を比較し、優先順位の高い要素に応じて各患者の手術順を並び替える。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、各手術に優先度が定められ、各手術には、予定の開始時刻が予め定められている場合がある。かかる場合には、各手術の開始時刻を調整する際、全ての手術における開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整するのは難しいという問題がある。例えば、従来技術は、振分けルール情報の要素の優先順位に基づいて、各患者の手術の開始時刻を調整する。ところが、従来技術は、患者の手術の開始予定時刻に関する概念がないため、全ての手術における開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整することができない。
【0005】
本発明は、1つの側面では、各手術の開始時刻を調整する際、全ての手術における開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整することを目的とする。
【課題を解決するための手段】
【0006】
1つの態様では、スケジューリング方法は、タスクの開始時刻を決定するスケジューリング方法であって、所定のルールに従い、所定の期間に予定される複数のタスクの優先順位を決定し、優先順位が高い順に、当該優先順位に対応するタスクを選択し、選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する、処理をコンピュータが実行する。
【発明の効果】
【0007】
1実施態様によれば、各手術の開始時刻を調整する際、全手術における開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整できる。
【図面の簡単な説明】
【0008】
【
図1】
図1は、実施例に係るスケジューリングシステムの機能構成の一例を示すブロック図である。
【
図2】
図2は、実施例に係る入力データ格納DBの一例を示す図である。
【
図3】
図3は、実施例に係る調整結果格納DBの一例を示す図である。
【
図4】
図4は、実施例に係るスケジューリングの流れを示す図である。
【
図5】
図5は、実施例に係るスケジューリングの調整結果を示す図である。
【
図6】
図6は、実施例に係るスケジューリング処理のフローチャートの一例を示す図である。
【
図7】
図7は、実施例に係る初期化処理のフローチャートの一例を示す図である。
【
図8】
図8は、スケジューリングプログラムを実行するコンピュータの一例を示す図である。
【
図9】
図9は、ルールを用いたスケジューリング処理のフローチャートの参考例を示す図である。
【
図10】
図10は、ルールを用いたスケジューリングの参考例を示す図である。
【発明を実施するための形態】
【0009】
以下に、本願の開示するスケジューリング方法およびスケジューリングプログラムの実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【0010】
まず、病院では、事前予約時に開始時間および終了時間を希望して入力される手術に対して、予約締め切り後に手術室や使用機器、担当スタッフを調整する作業は、多大な時間を要する。作業時には、例えば、手術室の部屋数、看護師および医師などのスタッフの人数や、残業時間帯の考慮などの制約条件を考慮しながら調整する作業が行われる。制約条件の一例として、<1>各手術には必ず看護師が2人必要、<2>各手術には必ず部屋が1室必要、<3>手術cはスキルAを持つ看護師が1人必ず必要、<4>各リソース(例えば医師や看護師)は同時間帯にタスクに対し1件しか参加できないがある。
【0011】
制約条件を考慮しながら調整するために、制約条件を当てはめた数理最適化の技術を用いた調整作業の自動化が図られている。数理最適化の技術には、例えば、線形計画問題で解を導出する最適化問題の手法が挙げられる。
【0012】
ところが、制約条件を当てはめた最適化問題を用いても、制約が厳しすぎて解が存在せず、調整作業がうまくいかない場合がある。そこで、制約条件を変えずに入力情報となるタスクの時間調整(スケジューリング)を実施することを考える。制約条件を変えずにルールの優先度を考慮しながら入力情報となるタスクの時間調整を実施するスケジューリング処理のフローチャートを、
図9を参照しながら説明する。
【0013】
図9は、ルールを用いたスケジューリング処理のフローチャートの参考例を示す図である。
図9では、ルールとして、基本ルール、特殊ルール、公平ルールが存在するとする。基本ルールは、スケジューリングするための基本的なルールであり、ユーザが任意で設定してもよいルールである。特殊ルールは、現場に特化した特殊なルールであり、現場が任意で設定してもよいルールである。公平ルールは、一度定めたスケジュールを移動する際の移動回数を公平にするルールである。基本ルールの一例として、「開始予定時刻が早いタスクを優先する」や「所要時間が短いタスクを優先する」が挙げられる。特殊ルールの一例として、「スタッフが多忙のため基本的に調整不可とする」が挙げられる。公平ルールの一例として、「タスクの移動最大回数をN回とする」が挙げられる。そして、ルールの優先順位は、原則として、特殊ルール、公平ルール、基本ルールの順とする。また、制約条件は、予め定義されているとする。制約条件の一例として、「<1>各手術には必ず医師、患者が各1人必要であること」、「<2>各リソースは同時間帯のタスクに対して1件しか参加できないこと」が挙げられる。
【0014】
このような前提条件の下、スケジューリング処理は、入力データを読み込む(ステップS81)。入力データは、開始予定時間、執刀医、患者などが入力された手術の予定に関する情報を示すデータ群である。手術は、タスクの一例である。スケジューリング処理は、読み込んだ入力データの中から、スケジューリングの割当を行う対象のタスク群を抽出する(ステップS82)。
【0015】
スケジューリング処理は、抽出したタスク群の制約条件違反をチェックする(ステップS83)。スケジューリング処理は、違反を検知したか否かを判定する(ステップS84)。違反を検知したと判定した場合には(ステップS84;Yes)、スケジューリング処理は、ステップS86~ステップS92に基づき、違反したタスク群の情報の調整を実施する(ステップS85)。ここでいう情報の調整とは、タスクの開始時間の調整のことをいう。
【0016】
スケジューリング処理は、抽出したタスク群に特殊ルールに合致するタスクが存在するか否かを判定する(ステップS86)。抽出したタスク群に特殊ルールに合致するタスクが存在すると判定した場合には(ステップS86;Yes)、スケジューリング処理は、特殊ルールに従って、特殊ルールに合致するタスクを、スケジュールを固定する固定タスクに決定する(ステップS87)。そして、スケジューリング処理は、ステップS91に移行する。
【0017】
一方、抽出したタスク群に特殊ルールに合致するタスクが存在しないと判定した場合には(ステップS86;No)、スケジューリング処理は、全ての違反したタスク群の移動回数が最大であるか否かを判定する(ステップS88)。全ての違反したタスク群の移動回数が最大でないと判定した場合には(ステップS88;No)、スケジューリング処理は、公平ルールに従って、スケジュールを固定する固定タスクを決定する(ステップS90)。例えば、スケジューリング処理は、移動回数が大きいタスクを固定タスクとして決定する。そして、スケジューリング処理は、ステップS91に移行する。
【0018】
一方、全ての違反したタスク群の移動回数が最大であると判定した場合には(ステップS88;Yes)、スケジューリング処理は、基本ルールに従って、スケジュールを固定する固定タスクを決定する(ステップS89)。例えば、基本ルールが、「開始予定時刻が早いタスクを優先する」である場合には、スケジューリング処理は、全ての違反したタスク群の中で開始予定時刻が早いタスクを、固定タスクとして決定する。そして、スケジューリング処理は、ステップS91に移行する。
【0019】
ステップS91において、スケジューリング処理は、固定タスク以外のタスクの開始時間を調整(移動)する(ステップS91)。そして、スケジューリング処理は、調整したタスクの移動回数をインクリメントする(ステップS92)。そして、スケジューリング処理は、ステップS85に戻る。そして、ステップS85において、スケジューリング処理は、調整したタスク群の制約条件の違反をチェックすべく、ステップS83に移行する。
【0020】
ステップS84において、スケジューリング処理は、違反を検知しなかったと判定した場合には(ステップS84;No)、スケジューリング処理は、全てのタスクを割り当てたか否かを判定する(ステップS93)。全てのタスクを割り当てていないと判定した場合には(ステップS93;No)、スケジューリング処理は、次の対象のタスクを抽出すべく、ステップS82に移行する。
【0021】
一方、全てのタスクを割り当てたと判定した場合には(ステップS93;Yes)、ルールを用いたスケジューリング処理は、終了する。
【0022】
ここで、ルールを用いたスケジューリングの参考例を、
図10を参照して説明する。
図10は、ルールを用いたスケジューリングの参考例を示す図である。ここでは、基本ルールは、「開始予定時刻が早いタスクを優先する」、次に「所要時間が短いタスクを優先する」であるとする。特殊ルールは、定義されていないとする。公平ルールは、「タスクの移動最大回数をN回とする」であるとする。そして、ルールの優先順位は、原則として、特殊ルール、公平ルール、基本ルールの順とする。また、制約条件は、「<1>各手術には必ず医師、患者が各1人必要であること」、「<2>各リソースは同時間帯のタスクに対して1件しか参加できないこと」であるとする。ここでいうリソースとは、医師や患者のことをいい、医師には、S1、S2が含まれ、患者には、P1、P2が含まれるとする。
【0023】
このような前提条件の下、表a0は、手術の開始予定時刻が予め記録されたタスク群である。表a0に含まれる各行は、各入力データである。スケジューリング処理は、かかるタスク群の手術の時間調整(スケジューリング)を実施する。
【0024】
スケジューリング処理は、表a0の中から、スケジューリングの割当を行う対象のタスク群「Ope1」,「Ope2」、「Ope3」、「Ope4」を抽出する。スケジューリング処理は、抽出したタスク群の制約条件違反をチェックする。ここでは、表a0を参照すると、「Ope1」、「Ope2」、「Ope3」が、制約条件の<2>について、リソースとしての「S1」が「9:00~10:00」の時間帯に重複している。そこで、スケジューリング処理は、「Ope1」、「Ope2」、「Ope3」の制約条件違反を検知する。
【0025】
特殊ルールについては、定義されていない。公平ルールについては、違反したタスク群「Ope1」、「Ope2」、「Ope3」の移動回数は、全て「0」である。したがって、スケジューリング処理は、「開始予定時刻が早いタスクを優先する」という基本ルールに従って、開始予定時刻が最も早い「Ope1」を固定タスクとして決定する。そして、スケジューリング処理は、固定タスク以外のタスクの開始時間を調整する。ここでは、スケジューリング処理は、「Ope2」と「Ope3」の開始時間をそれぞれ「Ope1」の後ろへ移動する(符号a11参照)。すなわち、スケジューリング処理は、「Ope2」について、開始時間を「10:00」に、終了時間を「12:00」に移動する。同様に、スケジューリング処理は、「Ope3」について、開始時間を「10:00」に、終了時間を「13:00」に移動する。そして、スケジューリング処理は、調整したタスクの移動回数をインクリメントする。ここでは、スケジューリング処理は、「Ope2」と「Ope3」の移動回数を「1」に設定する(符号a12参照)。
【0026】
スケジューリング処理は、タスク群の制約条件違反をチェックする。ここでは、表a1を参照すると、「Ope2」、「Ope3」、「Ope4」が、制約条件の<2>について、リソースとしての「P1」が「10:00~11:00」の時間帯に重複している。そこで、スケジューリング処理は、「Ope3」、「Ope4」の制約条件違反を検知する。
【0027】
特殊ルールについては、定義されていない。公平ルールについては、違反したタスク群「Ope3」の移動回数は「1」であり、「Ope4」の移動回数は「0」である。したがって、スケジューリング処理は、移動回数が大きい「Ope3」を固定タスクとして決定し、移動回数が小さい「Ope4」の開始時間を「Ope3」の後ろへ移動する(符号a21参照)。すなわち、スケジューリング処理は、「Ope4」について、開始時間を「13:00」に、終了時間を「14:00」に移動する。そして、スケジューリング処理は、調整したタスクの移動回数をインクリメントする。ここでは、スケジューリング処理は、「Ope4」の移動回数を「1」に設定する(符号a22参照)。
【0028】
スケジューリング処理は、タスク群の制約条件違反をチェックする。ここでは、表a2を参照すると、「Ope2」、「Ope3」が、制約条件の<2>について、リソースとしての「S1」が「10:00~12:00」の時間帯に重複している。そこで、スケジューリング処理は、「Ope2」、「Ope3」の制約条件違反を検知する。
【0029】
特殊ルールについては、定義されていない。公平ルールについては、違反したタスク群「Ope2」、「Ope3」の移動回数は、全て「1」である。したがって、スケジューリング処理は、「所要時間が短いタスクを優先する」という基本ルールに従って、所用時間が短いタスク「Ope2」を固定タスクとして決定する。そして、スケジューリング処理は、固定タスク以外のタスクの開始時間を調整する。ここでは、スケジューリング処理は、「Ope3」の開始時間を「Ope1」および「Ope2」の後ろへ移動する(符号a31参照)。すなわち、スケジューリング処理は、「Ope3」について、開始時間を「12:00」に、終了時間を「15:00」に移動する。そして、スケジューリング処理は、調整したタスクの移動回数をインクリメントする。ここでは、スケジューリング処理は、「Ope3」の移動回数を「2」に設定する(符号a32参照)。
【0030】
スケジューリング処理は、タスク群の制約条件違反をチェックする。ここでは、表a3を参照すると、「Ope3」、「Ope4」が、制約条件の<2>について、リソースとしての「P1」が「13:00~14:00」の時間帯に重複している。そこで、スケジューリング処理は、「Ope3」、「Ope4」の制約条件違反を検知する。
【0031】
特殊ルールについては、定義されていない。公平ルールについては、違反したタスク群「Ope3」の移動回数は「2」であり、「Ope4」の移動回数は「1」である。したがって、スケジューリング処理は、移動回数が大きい「Ope3」を固定タスクとして決定し、移動回数が小さい「Ope4」の開始時間を「Ope3」の後ろへ移動する(符号a41参照)。すなわち、スケジューリング処理は、「Ope4」について、開始時間を「15:00」に、終了時間を「16:00」に移動する。そして、スケジューリング処理は、調整したタスクの移動回数をインクリメントする。ここでは、スケジューリング処理は、「Ope4」の移動回数を「2」に設定する(符号a42参照)。
【0032】
スケジューリング処理は、タスク群の制約条件違反をチェックする。ここでは、スケジューリング処理は、全てのタスク群について、違反を検知しないので、スケジューリングを終了する。
【0033】
ここで、スケジューリング処理は、予定では「10:00~11:00」であった「Ope4」を5時間後方の「15:00~16:00」に移動した。ところが、「Ope4」は、予定通り「10:00~11:00」というより良い解が存在する。しかしながら、複数のタスク間で複数のリソースが複雑に重複するような入力データでは、参考例で示したルールを用いたスケジューリングのアルゴリズムを実施しても、良い解が見つけられない。
【0034】
参考例で示したスケジューリング処理の問題について、
図11を参照して説明する。
図11は、参考例の問題を示す図である。
図11上図には、参考例で示したスケジューリング処理が、タスクとしての手術について、予定された開始終了時間を調整した後のスケジュールが表わされている。破線で示す矩形が予定としての開始終了時間である。かかる矩形の中には、執刀医および患者を示すリソースが表わされている。実線で示す矩形が調整後の開始終了時間である。かかる矩形の中にも、予定と同様に、リソースが表わされている。
【0035】
これに対して、
図11下図には、見つけたい解が、表わされている。破線で示す矩形が予定としての開始終了時間であり、上図と同様である。かかる矩形の中には、その手術に必要な執刀医および患者を示すリソースが表わされている。実線で示す矩形が見つけたい解を示す開始終了時間である。かかる矩形の中にも、予定と同様に、リソースが表わされている。
【0036】
参考例で示すスケジューリング処理は、予定では「10:00~11:00」であった「Ope4」を5時間後方の「15:00~16:00」に移動している。ところが、「Ope4」は、他のタスクとリソースが重複しないので、予定通り「10:00~11:00」というより良い解が存在する。しかしながら、複数のタスク間で複数のリソースが複雑に重複するような入力データでは、参考例で示したルールを用いたスケジューリングのアルゴリズムを実施しても、良い解を見つけられないという問題がある。
【0037】
そこで、良い解を見つけるために、発明者は、不要に遅い時間に調整されたタスクを再調整することで、より早い時間での実施可能性を探ることを考えた。すなわち、ルールに基づき優先度の低いタスクは、他のタスク同士の調整結果の影響も受けながら、遅い時間に調整され得る。しかしながら、優先度の低いタスクが、全てのタスクとリソース(執刀医や患者)の競合が発生する場合ばかりではない。例えば、優先度の近いタスクとの競合により遅い時間に調整されたタスクが、実はより高い優先度の高いタスクとは競合しない場合がある。一例として、
図9の符号a4で示した「Ope4」は優先度の近いタスク「Ope3」との競合により遅い時間に調整されたが、実はより高い優先度の高いタスク「Ope1」および「Ope2」とは競合しない。つまり、参考例で示したスケジューリング処理のアルゴリズムでは、このようなより良い解を見逃す場合がある。そこで、発明者は、遅い時間に調整されたタスクを再調整することで、競合の無い隙間に収まるであろうと考えた。なお、再調整は、優先度の低いタスク同士の競合により無駄な調整が発生しないように、優先度の高いタスクから順に行われるようにすれば良い。
【0038】
さらに、発明者は、優先度の高いタスクが優先度の低いタスクとの競合によって調整されることはないことに思い当たった。そうであれば、優先度の高いタスクから順番に、開始時刻を決定すれば良いし、あるタスクの開始時刻を決める調整に、当該タスクより優先度の低いタスクとの競合を考慮する必要はないことに、発明者は思い至った。
【0039】
そこで、実施例では、優先順位の高いタスクから順にタスクの開始時刻を決定するスケジューリング方法について説明する。
【実施例0040】
図1は、実施例に係るスケジューリングシステムの機能構成の一例を示すブロック図である。
図1に示すように、スケジューリングシステム9は、サーバ1と、端末3とを有する。サーバ1は、対象日に予定されている全てのタスクの優先順位を決定し、優先順位が高いタスクから順にタスクの開始時刻を決定する。端末3は、サーバ1に対して、予定されている全てのタスクのスケジュールの調整を依頼する。なお、実施例では、タスクは、病院で実施される手術のことをいうものとする。但し、タスクは、病院で実施される手術に限定されず、リソースを必要とするタスクであって開始時刻を決定するタスクであれば良い。
【0041】
端末3は、依頼部31と、表示部32とを有する。依頼部31は、サーバ1に対して、タスクのスケジュールの調整を依頼する。表示部32は、サーバ1から調整結果を受け取り、調整結果を表示する。
【0042】
サーバ1は、制御部10と、記憶部20とを有する。制御部10は、受信部11と、初期化処理部12と、調整部13とを有する。記憶部20は、入力データ格納DB(DataBase)21と、調整結果格納DB22とを有する。なお、初期化処理部12は、決定部の一例である。調整部13は、選択部および調整部の一例である。
【0043】
入力データ格納DB21は、入力データを格納する。ここでいう入力データとは、患者の手術に対し、事前に予定の開始時間、終了時間、担当スタッフなどが入力されたデータのことをいう。入力データは、執刀医や看護師などによって入力される。なお、入力データには、リソースとして手術を実施するために必要な使用機器が含まれていても良い。
【0044】
ここで、入力データ格納DB21の一例を、
図2を参照して説明する。
図2は、実施例に係る入力データ格納DBの一例を示す図である。
図2に示すように、入力データ格納DB21は、タスク名、開始時間、終了時間、作業時間、執刀医、予約時間および変更回数を対応付けて記憶する。タスク名は、手術を識別する名前である。開始時間は、開始予定時間である。終了時間は、終了予定時間である。作業時間は、手術に要する時間である。執刀医は、担当スタッフとして執刀する医師の名前である。予約時間は、タスクを予約した時間である。変更回数は、タスクの予約を変更した回数である。
【0045】
一例として、タスク名が「Ope2」である場合に、開始時刻として「9:45」、終了時刻として「11:45」、作業時間として「120分」、執刀医として「doctor1」、予約時間として「・・・」、変更回数として「0」が記憶されている。
【0046】
調整結果格納DB22は、調整結果を格納する。なお、調整結果格納DB22は、後述する調整部13によって格納される。
【0047】
ここで、調整結果格納DB22の一例を、
図3を参照して説明する。
図3は、実施例に係る調整結果格納DBの一例を示す図である。
図3に示すように、調整結果格納DB22は、タスク名、開始時間、終了時間、作業時間、執刀医、予約時間および割当てを対応付けて記憶する。タスク名は、手術を識別する名前である。開始時間は、調整後の開始時間である。終了時間は、調整後の終了時間である。作業時間は、手術に要する時間である。執刀医は、担当スタッフとして執刀する医師の名前である。予約時間は、タスクを予約した時間である。割当ては、割り当てられた、手術室、作業機器、執刀医以外のスタッフに関する情報である。
【0048】
一例として、タスク名が「Ope2」である場合に、開始時間として「10:00」、終了時間として「12:00」、作業時間として「120」、執刀医として「doctor1」、割当てとして「roomC,toolE,staffF」が記憶されている。
【0049】
受信部11は、端末3からタスクのスケジュールの調整依頼を受信する。受信部11は、スケジュールの調整依頼を調整部13に出力する。そして、受信部11は、調整部13によって調整された調整結果を端末3に表示させる。
【0050】
初期化処理部12は、所定のルールに従い、対象日に予定されている全てのタスクの優先順位を決定する。所定のルールは、予め定められていれば良い。所定のルールの一例として、「開始予定時刻が早いタスクを優先する」や「所要時間が短いタスクを優先する」が挙げられる。また、所定のルールには、例えばスタッフが多忙であるとかスタッフの残業時間が超過であるなどの理由でタスクを調整できない場合を想定して、「調整不可のタスクを優先する」があっても良い。なお、初期化処理部12は、人手で初期化処理を行っても良い。
【0051】
調整部13は、優先順位が高い順に、対象日に予定されている全てのタスクの開始時間を調整する。なお、タスクの開始時間を調整する際、予定されている開始時間より前にはずらさないものとする。例えば、調整部13は、受信部11からスケジュールの調整依頼を受け付けると、入力データ格納DB21に格納された入力データに対するタスクの優先順位を初期化処理部12に決定させる。そして、調整部13は、優先順位が高い順に、当該優先順位に対応するタスクを選択する。そして、調整部13は、選択したタスクが最も優先順位が高いタスクである場合には、タスクの開始時間を、予め定められた開始予定時間に割り当てる、そして、調整部13は、選択したタスクが最も優先順位が高いタスクでない場合には、以下の処理を行う。調整部13は、選択したタスクと、既に開始時間が割り当てられた他のタスクとの競合が発生せず、且つ選択したタスクの予め定められた開始予定時間との差が最小となるように、選択したタスクの開始時間を割り当てる。すなわち、調整部13は、優先順位nのタスクについては、既に開始時間が決定された優先順位n(1以上の整数)未満のタスクとの重複チェックを行い、当初の予定に最も近い時間に開始時間を調整する。重複チェックは、優先順位nのタスクと優先順位n未満のタスクとのチェックのみを行い、他のタスク間同士のチェックを行わない。なお、ここでいう重複チェックは、予め定められた制約条件を満たすか否かのチェックのことをいう。ここでいう優先順位nについて、優先順位が高い程、nが小さい数字であることを意味する。
【0052】
また、調整部13は、全てのタスクの開始時間を調整すると、調整結果を調整結果格納DB22に格納する。
【0053】
[スケジューリングの流れ]
ここで、実施例に係るスケジューリングの流れを、
図4を参照して説明する。
図4は、実施例に係るスケジューリングの流れを示す図である。ここでは、制約条件は、「<1>各手術には必ず医師、患者が各1人必要であること」、「<2>各リソースは同時間帯のタスクに対して1件しか参加できないこと」であるとする。ここでいうリソースとは、医師や患者のことをいい、医師には、S1、S2が含まれ、患者には、P1、P2が含まれるとする。
【0054】
このような前提条件の下、表t0には、対象日に予定されている全ての手術の開始予定時刻が予め記録されたタスク群である。表t0に含まれる各行は、各入力データに対応する。なお、初期化処理部12は、所定のルールに従い、対象日に予定されている全てのタスクの優先順位を決定したものとする。表t0には、タスクに対応させて優先順位が設定されている。
【0055】
調整部13は、優先順位が最も高いタスクである「Ope1」について、開始時間および終了時間を、無条件に開始予定時刻「9:00」および終了予定時間「10:00」に決定する(符号t01参照)。
【0056】
続いて、調整部13は、次に優先順位が高いタスクを選択する。ここでは、優先順位が「2」のタスク「Ope2」が選択される。そして、調整部13は、優先順位「2」のタスク「Ope2」については、既に開始時間が決定された優先順位「2」未満のタスクとの重複チェックを行う。すなわち、調整部13は、制約条件を満たすか否かのチェックを行う。ここでは、優先順位「2」のタスク「Ope2」は、優先順位「1」のタスク「Ope1」との関係で、制約条件の<2>について、リソースとしての執刀医「S1」が「9:00~10:00」で重複している。そこで、調整部13は、優先順位「2」のタスク「Ope2」について、当初の予定に最も近い時間に開始時間を調整する。ここでは、調整部13は、「Ope2」の開始時間を「Ope1」の後ろへ移動する(符号t02参照)。すなわち、調整部13は、「Ope2」について、開始時間を「10:00」に、終了時間を「12:00」に移動する。
【0057】
続いて、調整部13は、次に優先順位が高いタスクを選択する。ここでは、優先順位が「3」のタスク「Ope3」が選択される。そして、調整部13は、優先順位「3」のタスク「Ope3」については、既に開始時間が決定された優先順位「3」未満のタスクとの重複チェックを行う。すなわち、調整部13は、制約条件を満たすか否かのチェックを行う。ここでは、優先順位「3」のタスク「Ope3」は、優先順位「1」のタスク「Ope1」との関係で、制約条件の<2>について、リソースとしての執刀医「S1」が「9:00~10:00」で重複している。そこで、調整部13は、優先順位「3」のタスク「Ope3」について、当初の予定に最も近い時間に開始時間を調整する。ここでは、調整部13は、「Ope3」の開始時間を「Ope1」の後ろへ移動する(符号t03参照)。すなわち、調整部13は、「Ope3」について、開始時間を「10:00」に、終了時間を「13:00」に移動する。
【0058】
さらに、調整部13は、優先順位「3」のタスク「Ope3」については、既に開始時間が決定された優先順位「3」未満のタスクとの重複チェックを行う。すなわち、調整部13は、制約条件を満たすか否かのチェックを行う。ここでは、優先順位「3」のタスク「Ope3」は、優先順位「2」のタスク「Ope2」との関係で、制約条件の<2>について、リソースとしての執刀医「S1」が「10:00~12:00」で重複している。そこで、調整部13は、優先順位「3」のタスク「Ope3」について、当初の予定に最も近い時間に開始時間を調整する。ここでは、調整部13は、「Ope3」の開始時間を「Ope2」の後ろへ移動する(符号t04参照)。すなわち、調整部13は、「Ope3」について、開始時間を「12:00」に、終了時間を「15:00」に移動する。
【0059】
続いて、調整部13は、次に優先順位が高いタスクを選択する。ここでは、優先順位が「4」のタスク「Ope4」が選択される。そして、調整部13は、優先順位「4」のタスク「Ope4」については、既に開始時間が決定された優先順位「4」未満のタスクとの重複チェックを行う。すなわち、調整部13は、制約条件を満たすか否かのチェックを行う。ここでは、優先順位「4」のタスク「Ope4」は、優先順位「4」未満のタスクと重複しない。したがって、調整部13は、開始予定時間のまま、開始時間を「10:00」、終了時間を「11:00」で確定する。
【0060】
これにより、調整部13は、優先順位の高いタスクから順番に開始時刻を決定し、あるタスクの開始時刻を調整する際に、当該タスクより優先順位の低いタスクとの重複チェックをしないようにする。この結果、調整部13は、優先順位の低いタスク同士の重複により発生する無駄な調整を抑制できる。また、調整部13は、各タスクの開始時刻を調整する際、全タスクにおける開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整できる。
【0061】
図5は、実施例に係るスケジューリングの調整結果を示す図である。
図5上図には、実施例に係るスケジューリングの調整結果が表わされている。
図5下図には、参考例に係るスケジューリングの調整結果が表わされている。参考例に係るスケジューリングでは、「Ope4」が、当初の予定の5時間後方に割当てられている。これに対して、実施例に係るスケジューリングでは、「Ope4」が、当初の予定通り「10:00~11:00」に割当てられている。つまり、実施例に係るスケジューリングは、優先順位の高いタスクから順番に当初の開始予定時刻と、調整後の開始時刻との差を最小にするように開始時刻を決定する。そして、実施例に係るスケジューリングは、あるタスクの開始時刻を調整する際に、当該タスクより優先順位の低いタスクとの重複チェックをしないようにする。これにより、実施例に係るスケジューリングは、当初の開始予定時刻と調整後の開始時刻との差を最小にできる。すなわち、実施例に係るスケジューリングは、各タスクの開始時刻を調整する際、全タスクにおける開始予定時刻と開始時刻との差を優先度の高い順で小さくするように調整できる。
【0062】
[スケジューリング処理のフローチャート]
図6は、実施例に係るスケジューリング処理のフローチャートの一例を示す図である。なお、制約条件は、「<1>各手術には必ず医師、患者が各1人必要であること」、「<2>各リソースは同時間帯のタスクに対して1件しか参加できないこと」であるとする。
【0063】
受信部11が、端末3からスケジュールの調整依頼を受信したとする。すると、調整部13は、入力データ格納DB21から入力データを読み込む(ステップS11)。調整部13は、初期化処理部12に初期化処理をさせる(ステップS12)。初期化処理は、例えば、全タスクの優先順位を決定し、優先順位が最も高いタスクの時間を予定通りに決定する処理である。なお、初期化処理のフローチャートは、後述する。
【0064】
初期化処理が完了すると、調整部13は、優先順位n以下のタスクを抽出する(ステップS13)。調整部13は、抽出したタスクの制約条件違反をチェックする(ステップS14)。すなわち、調整部13は、優先順位nのタスクについては、既に開始時間が決定された優先順位n(1以上の整数)未満のタスクと制約条件が満たされているか否かを示す重複チェックを行う。つまり、制約条件違反チェックは、優先順位nのタスクと優先順位n未満のタスクとのチェックのみを行い、他のタスク間同士のチェックを行わない。
【0065】
そして、調整部13は、違反を検知したか否かを判定する(ステップS15)。違反を検知したと判定した場合には(ステップS15;Yes)、調整部13は、違反したタスク群の情報調整を実施する(ステップS16)。すなわち、調整部13は、優先順位nのタスクの開始時間を当初の予定と最短になるように調整する(ステップS17)。そして、調整部13は、さらに、制約条件違反チェックをすべく、ステップS14に移行する。
【0066】
一方、違反を検知しなかったと判定した場合には(ステップS15;No)、調整部13は、優先順位nを1加算する(ステップS18)。そして、調整部13は、優先順位nが優先順位の最大値N(全タスク数)より大きいか否かを判定する(ステップS19)。優先順位nが優先順位の最大値Nより大きくないと判定した場合には(ステップS19;No)、調整部13は、新たな優先順位nの調整をすべく、ステップS13に移行する。
【0067】
一方、優先順位nが優先順位の最大値Nより大きいと判定した場合には(ステップS19;Yes)、調整部13は、調整結果を調整結果格納DB22に格納し、スケジューリング処理を終了する。
【0068】
図7は、実施例に係る初期化処理のフローチャートの一例を示す図である。
図7に示すように、初期化処理部12は、変数Nに全タスク数を設定するとともに、変数nに「2」を設定する(ステップS21)。初期化処理部12は、所定のルールに従い、入力データ格納DB21に記憶された全タスクの優先順位を決定する(ステップS22)。例えば、初期化処理部12は、全タスクの優先順位について、「1」を最も高い優先順位として、数字が大きくなる程優先順位が低くなるように決定する。
【0069】
そして、初期化処理部12は、優先順位「1」のタスクの開始時間および終了時間を予定通りに決定する(ステップS23)。そして、初期化処理部12は、初期化処理を終了する。
【0070】
[実施例の効果]
上記実施例によれば、サーバ1は、所定のルールに従い、対象日に予定される全てのタスクの優先順位を決定する。サーバ1は、優先順位が高い順に、当該優先順位に対応するタスクを選択する。サーバ1は、選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する。かかる構成によれば、サーバ1は、タスクをこなすリソースの無駄な待ち時間を減少することができる。また、サーバ1は、各タスクの開始時刻を調整する際、全タスクにおける開始予定時刻と開始時刻との差を優先順位の高い順で小さくするように調整できる。
【0071】
また、上記実施例によれば、サーバ1は、決定された各タスクの優先順位のうち最も高い優先順位のタスクの開始時刻を、予め定められたタスクの開始予定時刻に決定する。かかる構成によれば、サーバ1は、最も高い優先順位のタスクの開始時刻を、開始予定時刻と同じ時刻に調整できる。
【0072】
また、上記実施例によれば、サーバ1は、最も高い優先順位より低い優先順位のタスクについて、以下のように開始時刻を決定する。すなわち、サーバ1は、既に開始時刻が決定された他のタスクとの間で、タスクを実施する際に用いられるリソースの競合が発生せず、且つ、予め定められた開始予定時刻との差が最小となるように開始時刻を決定する。かかる構成によれば、サーバ1は、優先順位が「2」以下のタスクにおける開始予定時刻と開始時刻との差を優先順位の高い順で小さくするように調整できる。
【0073】
また、上記実施例によれば、サーバ1は、第1のタスクの開始時刻を決定する際に、前記第1のタスクより低い優先順位のタスクのみの情報を参照して開始時刻を決定する。かかる構成によれば、サーバ1は、優先順位がnのタスクより優先順位が低いタスク同士の競合の結果により発生する無駄な調整を抑制できる。また、サーバ1は、優先順位がnのタスクより優先順位が低いタスクとの競合を考慮する必要が無く、スケジューリングのアルゴリズムをシンプルに構成できる。
【0074】
[その他]
なお、上記実施例では、サーバ1は、端末3からタスクのスケジュールの調整依頼を受信したタイミングで、スケジュールの調整を行うと説明した。しかしながら、サーバ1は、これに限定されず、例えば、予め定められた期日になったタイミングで、スケジュールの調整を行うようにしても良い。これにより、サーバ1は、スケジュールの調整を柔軟に行うことができる。
【0075】
また、上記実施例では、図示したサーバ1の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、サーバ1の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、初期化処理部12と調整部13とを1つの機能部に統合しても良い。また、記憶部20をサーバ1の外部装置としてネットワーク経由で接続するようにしても良い。さらに、制御部10および記憶部20をクラウド上に置き、利用者は端末3などからネットワークを介して当該クラウドに接続して、制御部10により実行される処理を利用することも可能である。このようにすることで、本発明の処理をサービスとして提供することができるようになる。
【0076】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、
図1に示したサーバ1と同様の機能を実現するスケジューリングプログラムを実行するコンピュータの一例を説明する。
図8は、スケジューリングプログラムを実行するコンピュータの一例を示す図である。
【0077】
図8に示すように、コンピュータ200は、各種演算処理を実行するCPU(Central Processing Unit)203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信I/F(Interface)217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD(Hard Disk Drive)205を有する。そして、メモリ201、CPU203、HDD205、表示装置209、ドライブ装置213、入力装置215、通信I/F217は、バス219で接続されている。
【0078】
ドライブ装置213は、例えばリムーバブルディスク211用の装置である。HDD205は、スケジューリングプログラム205aおよびスケジューリング処理関連情報205bを記憶する。通信I/F217は、ネットワークと装置内部とのインターフェースを司り、他のコンピュータからのデータの入出力を制御する。通信I/F217には、例えば、モデムやLANアダプタなどを採用することができる。
【0079】
表示装置209は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する表示装置である。表示装置209は、例えば、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどを採用することができる。
【0080】
CPU203は、スケジューリングプログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスはサーバ1の各機能部に対応する。スケジューリング処理関連情報205bには、例えば、入力データ格納DB21、調整結果格納DB22が含まれる。そして、例えばリムーバブルディスク211が、スケジューリングプログラム205aなどの各情報を記憶する。
【0081】
なお、スケジューリングプログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらからスケジューリングプログラム205aを読み出して実行するようにしても良い。
【0082】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0083】
(付記1)タスクの開始時刻を決定するスケジューリング方法であって、
所定のルールに従い、所定の期間に予定される複数のタスクの優先順位を決定し、
優先順位が高い順に、当該優先順位に対応するタスクを選択し、
選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する
処理をコンピュータが実行することを特徴とするスケジューリング方法。
【0084】
(付記2)前記開始時刻を決定する処理は、決定された各タスクの優先順位のうち最も高い優先順位のタスクの開始時刻を、予め定められたタスクの開始予定時刻に決定する
ことを特徴とする付記1に記載のスケジューリング方法。
【0085】
(付記3)前記開始時刻を決定する処理は、最も高い優先順位より低い優先順位のタスクについて、既に開始時刻が決定された他のタスクとの間で、タスクを実施する際に用いられるリソースの競合が発生せず、且つ、予め定められた開始予定時刻との差が最小となるように開始時刻を決定する
ことを特徴とする付記2に記載のスケジューリング方法。
【0086】
(付記4)前記開始時刻を決定する処理は、第一のタスクの開始時刻を決定する際に、前記第一のタスクより低い優先順位のタスクのみの情報を参照して開始時刻を決定する
ことを特徴とする付記3に記載のスケジューリング方法。
【0087】
(付記5)タスクの開始時刻を決定するスケジューリングプログラムであって、
タスクの開始時刻を決定するスケジューリング方法であって、
所定のルールに従い、所定の期間に予定される複数のタスクの優先順位を決定し、
優先順位が高い順に、当該優先順位に対応するタスクを選択し、
選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する
処理をコンピュータに実行させることを特徴とするスケジューリングプログラム。
【0088】
(付記6)タスクの開始時刻を決定する情報処理装置であって、
所定のルールに従い、所定の期間に予定される複数のタスクの優先順位を決定する決定部と、
優先順位が高い順に、当該優先順位に対応するタスクを選択する選択部と、
選択したタスクについて、既に開始時刻が決定された他のタスクとの競合が発生せず、且つ予め定められた開始予定時刻との差が最小となるように開始時刻を決定する調整部と、
を有することを特徴とする情報処理装置。