(57)【特許請求の範囲】
【請求項１】
クリティカルパス取得部と最少人数取得部と最少分散取得部と出力部とを有し、複数のタスクを人員に割り当てるスケジューリング装置が行うスケジューリング方法であって、
前記クリティカルパス取得部が、人員による各タスクの人員ごとに異なる処理時間を各人員に対応付けて示す人別タスク処理時間情報を用いて、先行制約がある前記複数のタスクを処理する処理時間が最も短いクリティカルパスを取得することで、スケジュール長が最も短いスケジュールである第１の条件を満たすスケジュールを求めるクリティカルパス取得工程と、
前記最少人数取得部が、前記人別タスク処理時間情報を用いて、前記処理時間が最も短いクリティカルパスに従って前記複数のタスクを割り当てる前記人員の数が最小となるスケジュールを取得することで、前記第１の条件を満たすスケジュールのうち、タスクを割り当てる人数を最小化する第２の条件を満たすスケジュールを求める最少人数取得工程と、
前記最少分散取得部が、前記人別タスク処理時間情報を用いて、前記人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得することで、前記第２の条件を満たすスケジュールにおいて、各々の人員の総タスク処理時間の分散を最小化する第３の条件を満たすスケジュールを求める最少分散取得工程と、
前記出力部が、前記最少分散取得工程で取得したスケジュールを前記複数のタスクに対するスケジュールとして出力する出力工程と、
を含み、
前記第１から第３の条件の優先度は、前記第１の条件が最も高く設定され、前記第２の条件が前記第１の条件よりも低く設定され、前記第３の条件が前記第２の条件よりも低く設定されており、
前記クリティカルパス取得工程は、
前記人別タスク処理時間情報を用いて、各タスクの処理時間が最も短い人員を前記複数のタスクにおける各タスクに割り当てる割当工程と、
前記複数のタスクを前記先行制約に対応させた木構造に変換する変換工程と、
前記木構造を基に前記人員と前記タスクの処理時間との対応関係を求めて、該求めた対応関係において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断工程と、
前記判断工程において、一人の人員に同一時間に異なるタスクが重複して割り当てられていないと判断された場合には、前記対応関係を前記処理時間が最も短いクリティカルパスとして出力する工程と、
前記判断工程において、一人の人員に同一時間に異なるタスクが重複して割り当てられていると判断された場合には、前記重複したタスクのうちクリティカルパス外のタスクを含むノードを切り取り、前記重複したタスクのうちの他方のタスクの下に付けた木構造を生成し、前記判断工程に戻る工程と、
を含むことを特徴とするスケジューリング方法。
【請求項２】
前記最少人数取得工程では、前記人別タスク処理時間情報を用いて、前記処理時間が最も短いクリティカルパスに従って前記複数のタスクを前記人員に割り当てる割当処理を繰り返すことにより、前記割当処理により割り当てた前記人員の数が最小となるスケジュールを取得することを特徴とする請求項１に記載のスケジューリング方法。 
【請求項３】
前記最少分散取得工程では、前記人別タスク処理時間情報を用いて、前記処理時間が最も短いクリティカルパスに従って前記複数のタスクを前記人員に割り当てるとともに各人員の総タスク処理時間の分散を演算する演算処理を繰り返すことにより、前記演算処理により演算した各人員の総タスク処理時間の分散が最小となるスケジュールを取得することを特徴とする請求項１または２に記載のスケジューリング方法。 
【請求項４】
複数のタスクを人員に割り当てるスケジューリング装置であって、
人員による各タスクの人員ごとに異なる処理時間を各人員に対応付けて示す人別タスク処理時間情報を用いて、先行制約がある複数のタスクを処理する処理時間が最も短いクリティカルパスを取得することで、スケジュール長が最も短いスケジュールである第１の条件を満たすスケジュールを求めるクリティカルパス取得部と、
前記人別タスク処理時間情報を用いて、前記処理時間が最も短いクリティカルパスに従って前記複数のタスクを割り当てる前記人員の数が最小となるスケジュールを取得することで、前記第１の条件を満たすスケジュールのうち、タスクを割り当てる人数を最小化する第２の条件を満たすスケジュールを求める最少人数取得部と、
前記人別タスク処理時間情報を用いて、前記人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得することで、前記第２の条件を満たすスケジュールにおいて、各々の人員の総タスク処理時間の分散を最小化する第３の条件を満たすスケジュールを求める最少分散取得部と、
前記最少分散取得部が取得したスケジュールを前記複数のタスクに対するスケジュールとして出力する出力部と、
を有し、
前記第１から第３の条件の優先度は、前記第１の条件が最も高く設定され、前記第２の条件が前記第１の条件よりも低く設定され、前記第３の条件が前記第２の条件よりも低く設定されており、
前記クリティカルパス取得部は、
前記人別タスク処理時間情報を用いて、各タスクの処理時間が最も短い人員を前記複数のタスクにおける各タスクに割り当てる割当処理と、
前記複数のタスクを前記先行制約に対応させた木構造に変換する変換処理と、
前記木構造を基に前記人員と前記タスクの処理時間との対応関係を求め、前記求めた対応関係において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断処理と、
前記判断処理において、一人の人員に同一時間に異なるタスクが重複して割り当てられていないと判断された場合には、前記対応関係を前記処理時間が最も短いクリティカルパスとして出力する処理と、
前記判断処理において、一人の人員に同一時間に異なるタスクが重複して割り当てられていると判断した場合には、前記重複したタスクのうちクリティカルパス外のタスクを含むノードを切り取り、前記重複したタスクのうちの他方のタスクの下に付けた木構造を生成し、前記判断処理に戻る処理と、
を実行することを特徴とするスケジューリング装置。
【請求項５】
コンピュータに、複数のタスクを人員に割り当てるスケジューリング方法を実行させるスケジューリングプログラムであって、
コンピュータに、
人員による各タスクの人員ごとに異なる処理時間を各人員に対応付けて示す人別タスク処理時間情報を用いて、先行制約がある複数のタスクを処理する処理時間が最も短いクリティカルパスを取得することで、スケジュール長が最も短いスケジュールである第１の条件を満たすスケジュールを求めるクリティカルパス取得ステップと、
前記人別タスク処理時間情報を用いて、前記処理時間が最も短いクリティカルパスに従って前記複数のタスクを割り当てる前記人員の数が最小となるスケジュールを取得することで、前記第１の条件を満たすスケジュールのうち、タスクを割り当てる人数を最小化する第２の条件を満たすスケジュールを求める最少人数取得ステップと、
前記人別タスク処理時間情報を用いて、前記人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得することで、前記第２の条件を満たすスケジュールにおいて、各々の人員の総タスク処理時間の分散を最小化する第３の条件を満たすスケジュールを求める最少分散取得ステップと、
前記最少分散取得ステップで取得したスケジュールを前記複数のタスクに対するスケジュールとして出力する出力ステップと、
を実行させ、
前記第１から第３の条件の優先度は、前記第１の条件が最も高く設定され、前記第２の条件が前記第１の条件よりも低く設定され、前記第３の条件が前記第２の条件よりも低く設定されており、
前記クリティカルパス取得ステップは、
前記人別タスク処理時間情報を用いて、各タスクの処理時間が最も短い人員を前記複数のタスクにおける各タスクに割り当てる割当ステップと、
前記複数のタスクを前記先行制約に対応させた木構造に変換する変換ステップと、
前記木構造を基に前記人員と前記タスクの処理時間との対応関係を求めて、該求めた対応関係において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断ステップと、
前記判断ステップにおいて、一人の人員に同一時間に異なるタスクが重複して割り当てられていないと判断された場合には、前記対応関係を前記処理時間が最も短いクリティカルパスとして出力するステップと、
前記判断ステップにおいて、一人の人員に同一時間に異なるタスクが重複して割り当てられていると判断された場合には、前記重複したタスクのうちクリティカルパス外のタスクを含むノードを切り取り、前記重複したタスクのうちの他方のタスクの下に付けた木構造を生成し、前記判断ステップに戻るステップと、
を含むことを特徴とするスケジューリングプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューリング方法、スケジューリング装置及びスケジューリングプログラムに関する。
【背景技術】
【０００２】
ＥＭＳ（Element  Management  System）とは、ネットワーク機器を直接監視制御するためのシステムである。運用者及び保守者は、大規模なネットワークのエレメント群を、ＥＭＳを介して一元管理することによって、ＯＰＥＸ（Operating  Expense：運営費）、ＣＡＰＥＸ（Capital  Expenditure：設備投資に関する資本的支出）の削減と障害発生時の迅速な復旧作業をサポートすることが可能になる。このようなシステムを実現するに当たり、各種管理機能、各種検索機能等の複数の機能群に対応させて各種のソフトウェアを開発する必要がある。このソフトウェアの開発手法として、ウォーターフォール型、アジャイル型、複合型等のさまざまな手法が存在する。ここで、ＥＭＳのような大規模かつ複雑なシステムの開発では、ウォーターフォール型を採用する場合が多い。
【０００３】
このウォーターフォール型開発では、各タスクを誰に割り当てるか、各工程の割り当て人数をどのようにするか、どのくらいの開発期間を要するか等の課題が生じる。処理時間の決まった各々のタスクを誰に割り当てると、期間を最短にしつつ最少の人数でＥＭＳ開発が行えるか、というモデルの場合、マルチプロセッサスケジューリング問題に帰着できる。このマルチプロセッサスケジューリング問題は、ＮＰ困難問題であることが知られており、ヒューリスティック解法を用いた問題解決手法が提案されている（例えば、特許文献１，２参照）。
【０００４】
特許文献１，２には、製品の製造作業に対する人員数及び作業工程割当を算出する作業割当プログラムや作業人員配置支援方法が記載されている。このような作業割当プログラムや作業人員配置支援方法では、例えば、非特許文献１，２に記載のアルゴリズムを用いて算出処理を行っている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−５２７６号公報
【特許文献２】特開２００８−４０５３号公報
【非特許文献】
【０００６】
【非特許文献１】黄  来国,  “遺伝的アルゴリズムを用いた負荷平準化問題の研究：組立ラインシステムとマルチプロセッサシステムを例として”，  ［平成２８年５月１７日検索，インターネット＜ＵＲＬ：https://dspace.wul.waseda.ac.jp/dspace/handle/2065/34848＞］
【非特許文献２】飛田  高雄,  “マルチプロセッサスケジューリングアルゴリズムの性能評価に関する研究”，  ［平成２８年５月１７日検索，インターネット＜ＵＲＬ：http://jairo.nii.ac.jp/0069/00006552＞］
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ここで、従来の技術では、タスク処理を実行する各人員の能力は等しいものとし、タスクの処理時間を固定したモデルを採用していた。しかしながら、現実問題では各人員の能力差が存在するため、各タスクの処理時間は可変値となる。このため、従来技術が採用するモデルでは、ソフトウェアの開発において最適なスケジューリングを行うことは難しいという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、各人員の能力差を考慮した新たな人員資源割当モデルを提案し、開発における最適な人員資源の割当を可能にするスケジューリング方法、スケジューリング装置及びスケジューリングプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明に係るスケジューリング方法は、複数のタスクを人員に割り当てるスケジューリング装置が行うスケジューリング方法であって、人員による各タスクの処理時間を人員ごとに示す人別タスク処理時間情報を用いて、先行制約がある複数のタスクを処理する処理時間が最も短いクリティカルパスを取得する工程と、人別タスク処理時間情報を基に、処理時間が最も短いクリティカルパスに従って複数のタスクを割り当てる人員の数が最小となるスケジュールを取得する工程と、人別タスク処理時間情報を基に、人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得する工程と、分散が最小となるスケジュールを複数のタスクに対するスケジュールとして出力する工程と、を含んだことを特徴とする。
【発明の効果】
【００１０】
本発明によれば、各人員の能力差を考慮した新たな人員資源割当モデルを提案することで、開発における最適な人員資源の割当を可能にした。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施の形態に係るスケジューリング装置の構成の一例を説明するための図である。
【図２】図２は、図１に示すタスク情報の一例を示す図である。
【図３】図３は、図１に示す人別タスク処理時間情報の一例を示す図である。
【図４】図４は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図５】図５は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図６】図６は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図７】図７は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図８】図８は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図９】図９は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図１０】図１０は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図１１】図１１は、図１に示すクリティカルパス取得部の処理を説明する図である。
【図１２】図１２は、スケジュール表の一例を示す図である。
【図１３】図１３は、図１に示す人別タスク処理時間情報の他の例を示す図である。
【図１４】図１４は、図１に示すタスク情報の他の例を示す図である。
【図１５】図１５は、最早時間と最遅時間との一例を示す図である。
【図１６】図１６は、スケジュール表の一例である。
【図１７】図１７は、図１に示す最少分散取得部の処理を説明するための図である。
【図１８】図１８は、本実施の形態に係るスケジューリング処理の処理手順を示すフローチャートである。
【図１９】図１９は、図１８に示すクリティカルパス取得処理の処理手順を示すフローチャートである。
【図２０】図２０は、図１８に示す最少人数取得処理の処理手順を示すフローチャートである。
【図２１】図２１は、図１８に示す最少分散取得処理の処理手順を示すフローチャートである。
【図２２】図２２は、スケジュール表の一例を示す図である。
【図２３】図２３は、スケジュール表の一例を示す図である。
【図２４】図２４は、スケジュール表の一例を示す図である。
【図２５】図２５は、図１に示すスケジューリング装置が出力したスケジュール表の一例を示す図である。
【図２６】図２６は、プログラムが実行されることにより、スケジューリング装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【００１３】
［実施の形態］
まず、実施の形態に係るスケジューリング装置について、スケジューリング装置の概略構成及びスケジューリング装置における処理の流れ及び具体例を説明する。本実施の形態に係るスケジューリング装置は、ソフトウェアを開発するにあたって、各人員の能力差を考慮した新たな人員資源割当モデルを用いて、処理対象のタスクに対して人員資源の割り当て（スケジューリング）を実行する。なお、処理対象のタスクは、ソフトウェア開発工程における処理単位である。
【００１４】
［スケジューリング装置の構成］
まず、図１を参照して、実施の形態に係るスケジューリング装置の構成について説明する。図１は、本発明の実施の形態に係るスケジューリング装置の構成の一例を説明するための図である。図１に示すように、実施の形態１に係るスケジューリング装置１０は、入力部１１、記憶部１２、制御部１３及び出力部１４を有する。
【００１５】
入力部１１は、キーボード、マウス、タッチパネル、音声入力デバイス等の入力デバイスによって構成される。また、入力部１１は、他の装置との間で、各種情報を送受信する通信インターフェースであってもよい。
【００１６】
記憶部１２は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置によって実現され、スケジューリング装置１０を動作させる処理プログラムや、処理プログラムの実行中に使用されるデータなどが記憶される。記憶部１２は、タスク情報１２一人員情報１２２及び人別タスク処理時間情報１２３を記憶する。
【００１７】
タスク情報１２１は、処理対象の複数のタスクと、該複数のタスクの先行制約とを示す情報である。図２は、タスク情報１２１の一例を示す図である。タスク情報１２１は、例えば、５つのタスクが処理対象である場合には、図２に示すように、この５つのタスクの識別情報（Ｊ１〜Ｊ５）と、タスクＪ１〜Ｊ５における先行制約とを表す先行グラフＲ１である。タスクの処理順序は、矢印に示すように予め決められている。図２の例では、まず、タスクＪ１が最初に処理される。そして、タスクＪ１からタスクＪ２，Ｊ３に向かう各矢印に示すように、タスクＪ１の次に処理を行うタスクは、タスクＪ２またはタスクＪ３のいずれかである。
【００１８】
人員情報１２２は、タスクを処理する各人員の識別情報を示す情報である。人別タスク処理時間情報１２３は、人員による各タスクの処理時間を人員ごとに示す情報である。図３は、人別タスク処理時間情報１２３の一例を示す図である。タスクＪ１〜Ｊ５が処理対象であり、２名の人員（人）Ｈ１，Ｈ２でこのタスクＪ１〜Ｊ５を処理する場合、人別タスク処理時間情報１２３は、例えば図３に示すように、タスクＪ１〜Ｊ５の処理時間を、各人Ｈ１，Ｈ２に応じてそれぞれ対応付けたテーブルＰ１を含む。
【００１９】
制御部１３は、各種の処理手順などを規定したプログラム及び所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。例えば、制御部１３は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路である。制御部１３は、スケジューリング部１３１を有する。スケジューリング部１３１は、処理対象である複数のタスクを人員に割り当てたスケジュールを作成する機能を有し、クリティカルパス取得部１３２、最少人数取得部１３３及び最少分散取得部１３４を有する。
【００２０】
クリティカルパス取得部１３２は、人別タスク処理時間情報１２３を用いて、先行制約がある複数のタスクを処理する処理時間が最も短いクリティカルパスを取得する。なお、クリティカルパスは、例えば、ソフトウェア開発を進める上で、全体スケジュールを決定する一連の連なりである。
【００２１】
具体的には、まず、クリティカルパス取得部１３２は、各タスクの処理時間が最も短い人員を各タスクに割り当てる。そして、クリティカルパス取得部１３２は、複数のタスクを先行制約に対応させた木構造に変換した後に、該変換した木構造の各ノードに活動時間を記録し、各タスクまでのクリティカルパスを記録する。続いて、クリティカルパス取得部１３２は、このクリティカルパスを記録された木構造を基に人員とタスクの処理時間との対応関係を求める処理を行う。クリティカルパス取得部１３２は、これらの処理を繰り返すことにより、一人の人員に同一時間に異なるタスクが重複して割り当てられていない対応関係を求める。そして、クリティカルパス取得部１３２は、該求めた対応関係を、処理時間が最も短いクリティカルパスとして取得する。
【００２２】
最少人数取得部１３３は、人別タスク処理時間情報１２３を基に、処理時間が最も短いクリティカルパスに従って複数のタスクを割り当てる人員の数が最小となるスケジュールを取得する。具体的には、最少人数取得部１３３は、人別タスク処理時間情報１２３を用い、処理時間が最も短いクリティカルパスに従って複数のタスクを人員に割り当てる割当処理を繰り返すことにより、割当処理により割り当てた人員の数が最小となるスケジュールを取得する。
【００２３】
最少分散取得部１３４は、人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得する。具体的には、最少分散取得部１３４は、人別タスク処理時間情報１２３を用い、処理時間が最も短いクリティカルパスに従って複数のタスクを人員に割り当てるとともに各人員の総タスク処理時間の分散を演算する演算処理を繰り返すことにより、演算処理により演算した各人員の総タスク処理時間の分散が最小となるスケジュールを取得する。
【００２４】
出力部１４は、例えば、液晶ディスプレイやプリンタ等であって、サービスの実行の管理に関する各種情報を出力する。出力部１４は、最少分散取得部１３４が取得した分散が最小となるスケジュールを、複数のタスクに対するスケジュールとして出力する。
【００２５】
［スケジューリング部の処理の概要］
続いて、スケジューリング部１３１が行う処理の概要を説明する。スケジューリング部１３１は、先行制約を有するｍ個のタスクＪ＝｛Ｊ１，Ｊ２〜Ｊｍ｝を、能力差のあるｎ人の人員で並列処理するために、各タスクを人員にどのように割り当て、どのような順序で実行するかを決定する解を求める機能を有する。
【００２６】
以下では、このタスクの人員への割り当てをスケジュールと表し、あるスケジュールにおいて、タスクの処理を開始してから全タスクの処理が終了するまでにかかる時間をスケジュール長Ｌｅｎ（Ｓ）と表す。また、一般に、あるタスク集合Ｊのｎ人の割り当て方は複数考えられ、これら全ての割り当て方の集合をＳとする。また、ある人員ＨｊがタスクＪｉの処理に要する処理時間をＴｉｊとする。そして、そのタスクの処理の有無をＷｉｊで表す。Ｗｉｊは、このタスクを処理する場合には１であり、このタスクを処理しない場合には０である。
【００２７】
スケジューリング部１３１は、以下の第１〜第３の条件を満たす解を、本実施の形態において採用するモデルにおける最終解とする。まず、第１の条件は、スケジュール長が最も短いスケジュールＳであることである。すなわち、（１）式で示される条件である。
【００２８】
【数１】
0006649180.tif 000002
【００２９】
続いて、第２の条件は、第１の条件を満たすスケジュールのうち、タスクを割り当てる人数が最小化することである。すなわち、（２）式で示される条件である。
【００３０】
【数２】
0006649180.tif 000003
【００３１】
そして、第３の条件は、第２の条件を満たすスケジュールにおいて、各々の人員の総タスク処理時間の分散を最小化することである。すなわち、（３）式で示される条件である。
【００３２】
【数３】
0006649180.tif 000004
【００３３】
この第１〜第３の条件のうち、第１の条件＞第２の条件＞第３の条件の順で優先度が高く設定されている。スケジューリング部１３１では、クリティカルパス取得部１３２が、人別タスク処理時間情報１２３を用いて、先行制約がある処理対象の複数のタスクに対して、第１の条件を満たすスケジュールを求める。そして、最少人数取得部１３３は、人別タスク処理時間情報１２３を用いて、処理時間が最も短いクリティカルパスに従い、第２の条件を満たすスケジュールを求める。続いて、最少分散取得部１３４は、人員の数が最小となるスケジュールであって、第３の条件を満たすスケジュールを求め、処理対象の複数のタスクに対するスケジュールとして出力する。そこで、まず、クリティカルパス取得部１３２の処理について具体的に説明する。
【００３４】
［クリティカルパス取得部の処理］
そこで、クリティカルパス取得部１３２の処理について説明する。クリティカルパス取得部１３２は、以下の処理を行うことによって、人別タスク処理時間情報１２３を用いて、先行制約がある処理対象の複数のタスクに対して、第１の条件を満たすスケジュールを求める。
【００３５】
まず、クリティカルパス取得部１３２は、各タスクの処理時間が最も短い人員を各タスクに割り当てる割当処理を行う。続いて、クリティカルパス取得部１３２は、複数のタスクを先行制約に対応させた木構造に変換する変換処理を行う。そして、クリティカルパス取得部１３２は、割当処理における割り当て内容を基に、木構造の各ノードに活動時間を記録する時間記録処理を行う。続いて、クリティカルパス取得部１３２は、変換処理において変換された木構造に各タスクまでのクリティカルパスを記録する処理を行うクリティカルパス記録処理を行う。
【００３６】
そして、クリティカルパス取得部１３２は、クリティカルパス記録処理においてクリティカルパスを記録された木構造を基に人員とタスクの処理時間との対応関係を求めて、該求めた対応関係において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断処理を行う。続いて、クリティカルパス取得部１３２は、判断処理において、一人の人員に同一時間に異なるタスクが重複して割り当てられていないと判断された場合には、対応関係を処理時間が最も短いクリティカルパスとして出力する。
【００３７】
一方、クリティカルパス取得部１３２は、判断処理において、一人の人員に同一時間に異なるタスクが割り当てられていると判断された場合には、重複したタスクのうちクリティカルパス外のタスクを含むノードを切り取り、重複したタスクのうちの他方のタスクの下に付けた木構造を新たに生成し、時間記録処理に戻る処理を行う。
【００３８】
例えば、図２に示す先行グラフＲ１を処理対象のタスクとし、処理人員をＨ１，Ｈ２とし、図３に示すテーブルＰ１を人別タスク処理時間情報１２３として用いる場合を例に、クリティカルパス取得部１３２の処理について説明する。図４〜図１１は、クリティカルパス取得部１３２が、処理時間が最も短いクリティカルパスを取得するまでの処理を説明する図である。
【００３９】
まず、クリティカルパス取得部１３２は、各タスクが最短時間で処理されるように、各タスクの処理時間が最も短い人員を各タスクに割り当てる割当処理を行う。具体的には、図４に示すように、クリティカルパス取得部１３２は、タスクＪ１〜Ｊ５の右側に、それぞれのタスクの処理時間が最も短い人員の識別情報と、その処理時間とを記録した先行グラフＲ１´を作成する。クリティカルパス取得部１３２は、例えば、タスクＪ１については、領域Ｐａに示すように、タスクＪ１の処理時間が、人員Ｈ２よりも短い人員Ｈ１を記録し、さらに、この人員Ｈ１のタスクＪ１の処理時間「１」を記録する。クリティカルパス取得部１３２は、他のタスクＪ２〜Ｊ５についても、それぞれのタスクの処理時間が最も短い人員の識別情報と、その処理時間とを記録する。
【００４０】
次に、クリティカルパス取得部１３２は、複数のタスクを先行制約に対応させた木構造に変換する変換処理を行う。具体的には、クリティカルパス取得部１３２は、図２に示す先行グラフＲ１の先行制約に従って、各タスクＪ２〜Ｊ５を、Ｊ２，Ｊ４、Ｊ５のノードと、Ｊ３，Ｊ５のノードとに分け、先頭のタスクＪ１に各ノードを繋げた木構造Ｔ１（図５参照）を生成する。
【００４１】
そして、クリティカルパス取得部１３２は、先行グラフＲ１´と木構造Ｔ１とを基に、木構造Ｔ１の各ノードに活動時間を記録する時間記録工程を行う。具体的には、クリティカルパス取得部１３２は、図６の領域Ｗａに示すように、例えば、タスクＪ１については、人員Ｈ１が時間「０〜１」活動することを記録する。また、クリティカルパス取得部１３２は、タスクＪ２については、タスクＪ１を処理する人員Ｈ１が最も短い期間で処理できるため、領域Ｗｂに示すように、タスクＪ１に対する活動時間後の時間「１〜２」を記録する。一方、クリティカルパス取得部１３２は、タスクＪ３についても、タスクＪ１を処理する人員Ｈ１が最も短い期間で処理できるため、領域Ｗｃに示すように、タスクＪ１に対する活動時間後の時間「１〜２」を記録する。このように、クリティカルパス取得部１３２は、順次、各タスクＪ１〜Ｊ５について、各ノードの処理人員と、その活動時間とを記録し、木構造Ｔ１´を生成する。
【００４２】
そして、クリティカルパス取得部１３２は、木構造Ｔ１´に各タスクまでのクリティカルパスを記録するクリティカルパス記録処理を行う。クリティカルパス取得部１３２は、例えば、図７の矢印Ｃ１１，Ｃ１２，Ｃ１３に示すパスをクリティカルパスとして記録する。
【００４３】
続いて、クリティカルパス取得部１３２は、クリティカルパス記録処理においてクリティカルパスを記録された木構造を基に人員とタスクの処理時間との対応関係を求める。そして、クリティカルパス取得部１３２は、この求めた対応関係において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断処理を行う。例えば、クリティカルパス取得部１３２は、図６の木構造Ｔ１´にしたがい、図７のクリティカルパスが経路となるように、各人員Ｈ１，Ｈ２に各タスクＪ１〜Ｊ５を割り当てた場合、図８に示すスケジュール表Ｋ１を求めることができる。そして、クリティカルパス取得部１３２は、この求めたスケジュール表Ｋ１において、人員Ｈ１，Ｈ２ごとに、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断処理を行う。
【００４４】
そして、クリティカルパス取得部１３２は、判断処理において、一人の人員に同一時間に異なるタスクが割り当てられていると判断した場合には、重複したタスクのうちクリティカルパス外のタスクを含むノードを切り取り、重複したタスクの他方のタスクの下に付けた木構造を生成し、時間記録工程に戻る。
【００４５】
具体的には、図７及び図８に示すように、人員Ｈ１に、同一の時間「２」に、異なるタスクＪ２，Ｊ３が割り当てられている場合である（図７の矢印Ｙ１参照）。この場合には、クリティカルパス取得部１３２は、重複したタスクＪ２，Ｊ３のうちクリティカルパス外のタスクＪ３を含むノードＮ１（図７参照）を切り取り、図９に示すように、切り取ったノードＮ１を、タスクＪ３と重複したタスクＪ２の下に付けた木構造Ｔ２を生成する。そして、クリティカルパス取得部１３２は、この木構造Ｔ２について、前述の時間記録処理、クリティカルパス処理、判断処理を行う。
【００４６】
すなわち、クリティカルパス取得部１３２は、木構造Ｔ２について、タスクＪ３について、タスクＪ１，Ｊ２を処理する人員Ｈ１が最も短い期間で処理できるため、領域Ｗｄに示すように、タスクＪ２に対する活動時間後の時間「２〜３」を記録する。そして、クリティカルパス取得部１３２は、次のタスクＪ５について、人員Ｈ１が最も短い期間で処理できるため、タスクＪ３に対する活動時間後の時間「３〜４」を記録して、木構造Ｔ２´を生成する。
【００４７】
続いて、クリティカルパス取得部１３２は、木構造Ｔ２´に各タスクまでのクリティカルパスＣ１４，Ｃ１５を新たに記録するクリティカルパス記録処理を行う。そして、クリティカルパス取得部１３２は、図１０の木構造Ｔ２´にしたがい、図１０のクリティカルパスが経路となるように、各人員Ｈ１，Ｈ２に各タスクＪ１〜Ｊ５を割り当てて、図１１に示すスケジュール表Ｋ２を求める。そして、クリティカルパス取得部１３２は、この求めた対応関係において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する判断処理を行う。
【００４８】
続いて、クリティカルパス取得部１３２は、判断処理において、一人の人員に同一時間に異なるタスクが重複して割り当てられていないと判断された場合には、対応関係を処理時間が最も短いクリティカルパスとして、最少人数取得部１３３に出力する。例えば、図１１に示すスケジュール表Ｋ２は、一人の人員に同一時間に異なるタスクが重複して割り当てられていないため、クリティカルパス取得部１３２は、このスケジュール表Ｋ２を処理時間が最も短いクリティカルパスとして、最少人数取得部１３３に出力する。
【００４９】
ここで、例えば、図３に示すテーブルＰ１を基に、人が作成したスケジュール表を図１２に示す。この図１２に示すスケジュール表Ｋｐでは、総タスク処理時間が「５」である。これに対して、クリティカルパス取得部１３２が作成したスケジュール表Ｋ２（図１１参照）では、総タスク処理時間が「４」である。すなわち、クリティカルパス取得部１３２は、前述の第１の条件を満たすスケジュール長が最も短いスケジュールＳを出力することができる。
【００５０】
なお、クリティカルパス取得部１３２は、資源制約がない場合には、ＰＥＲＴ（Program  Evaluation  and  Review  Technique）法を用いてクリティカルパスを求める。そこで、ＰＥＲＴ法を用いた場合について簡単に説明する。図１３は、人別タスク処理時間情報１２３の他の例を示す図である。図１４は、タスク情報１２１の他の例を示す図である。図１５は、ＰＥＲＴ法を用いた場合の最早時間と最遅時間との一例を示す図である。図１６は、スケジュール表の一例である。
【００５１】
例えば、タスクＪ１〜Ｊ８に対する処理人員をＨ１〜Ｈ６とし、図１３に示すテーブルＰ３を人別タスク処理時間情報１２３とし、図１４に示す先行グラフＲ３を処理対象のタスクに関するタスク情報１２１とした場合を例に説明する。この場合には、クリティカルパス取得部１３２は、テーブルＰ３（図１３参照）を基に、各タスクの最短処理時間をタスクの処理時間とし、先行グラフＲ３（図１４参照）の各タスクの右側に、最短処理時間と、このタスクを処理する人員の識別情報とを記録する。そして、クリティカルパス取得部１３２は、ＰＥＲＴ法を用いて、テーブルＰ３を基にテーブルＴａ（図１５参照）に示すような、各タスク開始までの最早時間と最遅時間とを求めて、クリティカルパスを求める。
【００５２】
この場合、例えば、クリティカルパスは、図１４の矢印Ｃ３１〜Ｃ３４に示すように、タスクＪ１，Ｊ３，Ｊ４，Ｊ６，Ｊ８の順の処理経路となる。そして、クリティカルパス取得部１３２は、図１６に示すスケジュール表Ｋ３１を作成する。このスケジュール表Ｋ３１の総タスク処理時間は「７」である。
【００５３】
［最少人数取得部の処理］
次に、図１６を参照して、最少人数取得部１３３の処理について説明する。例えば、図１６の左側に示すスケジュール表Ｋ３１が、処理時間が最も短いクリティカルパスに対応する第１の初期解としてクリティカルパス取得部１３２から入力された場合を例に説明する。なお、最少人数取得部１３３は、クリティカルパス取得部１３２から処理時間が最も短いクリティカルパスが入力された場合には、入力されたクリティカルパスから順次各タスクをスケジュール表に記録する処理を行えばよい。
【００５４】
最少人数取得部１３３は、テーブルＰ３を用いて、このスケジュール表Ｋ３１を基に、クリティカルパスの中で他に割り当てが可能なタスクを探索し、さらに、クリティカルパス以外でタスクの入れ替えが可能なタスクを探索する。言い換えると、最少人数取得部１３３は、テーブルＰ３を参照し、第１の初期解であるスケジュール表Ｋ３１に対し、他に割り当てが可能なタスクを探索する。例えば、スケジュール表Ｋ３１では、処理時間「３」で人員Ｈ１が処理するタスクＪ５（領域Ｗ１参照）を、矢印Ｙ３のように、同じ処理時間「３」で処理できる人員Ｈ２（領域Ｗ２参照）に入れ替えが可能である。これによって得られたスケジュール表Ｋ３２は、スケジュール表Ｋ３１での割り当て人数「５人」よりも少ない「４人」となる。
【００５５】
このため、最少人数取得部１３３は、このスケジュール表Ｋ３２を新たな第１の初期解とする。そして、最少人数取得部１３３は、テーブルＰ３を用いて、このスケジュール表Ｋ３２のうち、クリティカルパスの中で他の割り当てが可能なタスクを探索し、クリティカルパス以外でタスクの入れ替えが可能なタスクを探索する処理を行い、割り当て人数を求めて、第１の初期解であるスケジュール表Ｋ３２の割り当て人数との大小を比較する。
【００５６】
このように、最少人数取得部１３３は、人別タスク処理時間情報１２３を用い、処理時間が最も短いクリティカルパスに従って複数のタスクを人員に割り当てる割当処理を繰り返すことにより、割当処理により割り当てた人員の数が最小となるスケジュールを取得する。これによって、最少人数取得部１３３は、前述の第２の条件を満たす、タスクを割り当てる人数が最小化したスケジュールを、第２の初期解として、最小分散取得部１３４に出力することができる。なお、最少人数取得部１３３は、この割り当て処理を、予め定めた所定回数以上繰り返す。
【００５７】
［最少分散取得部の処理］
次に、図１７を参照して、最少分散取得部１３４の処理について説明する。図１７は、最少分散取得部１３４の処理を説明するための図である。例えば、図１７の左側に示すスケジュール表Ｋ３２が、割り当てた人員の数が最小となるスケジュールに対応する第２の初期解として最少人数取得部１３３から入力された場合を例に説明する。
【００５８】
まず、最少分散取得部１３４は、テーブルＰ３を用いて、第２の初期解であるスケジュール表Ｋ３２について、各人員の総タスク処理時間の分散値を演算する。この場合、図１７のスケジュール表Ｋ３２の下方に示すように、スケジュール表Ｋ３２の各人員の総タスク処理時間の分散値は「０．６９」である。そして、最少分散取得部１３４は、テーブルＰ３を用いて、クリティカルパスの中で他の割り当てが可能なタスクを探索する。続いて、最少分散取得部１３４は、テーブルＰ３を用いて、クリティカルパス以外でタスクの入れ替えが可能なタスクを探索する。
【００５９】
例えば、最少分散取得部１３４は、スケジュール表Ｋ３２について、処理時間「１」で人員Ｈ６が処理するタスクＪ３（領域Ｗ３参照）及びタスクＪ２（領域Ｗ４参照）を、矢印Ｙ４のように、人員Ｈ６がタスクＪ２を時間「２」で処理するように入れ替える（領域Ｗ５参照）。そして、最少分散取得部１３４は、タスクＪ３を、人員Ｈ６と同じ時間「１」で処理できる人員Ｈ３（領域Ｗ６参照）に割り当てる。これによって得られたスケジュール表Ｋ３３について、最少分散取得部１３４は、各人員の総タスク処理時間の分散値を演算する。この場合、スケジュール表Ｋ３３に対し、分散値「０．１９」が求まる。したがって、スケジュール表Ｋ３３に対する分散値は、第２の初期解であるスケジュール表Ｋ３２に対する分散値よりも小さい。
【００６０】
このため、最少分散取得部１３４は、このスケジュール表Ｋ３３を新たな第２の初期解とする。そして、最少人数取得部１３３は、テーブルＰ３を用いて、このスケジュール表Ｋ３３のうち、クリティカルパスの中で他の割り当てが可能なタスクを探索し、クリティカルパス以外でタスクの入れ替えが可能なタスクを探索する処理を行い、各人員の総タスク処理時間の分散値を求めて、第２の初期解であるスケジュール表Ｋ３２の割り当て人数との大小を比較する。
【００６１】
このように、最少分散取得部１３４は、人別タスク処理時間情報１２３を用い、処理時間が最も短いクリティカルパスに従って複数のタスクを人員に割り当てるとともに各人員の総タスク処理時間の分散を演算する演算処理を繰り返すことにより、演算処理により演算した各人員の総タスク処理時間が最小となるスケジュールを取得する。これによって、最少分散取得部１３４は、前述の第３の条件を満たす、各々の人員の総タスク処理時間の分散を最小化したスケジュールを出力することができる。
【００６２】
したがって、スケジューリング装置１０は、各人員の能力差を考慮しながら、処理時間が最も短いクリティカルパスに従い、最少の人数であって、かつ、各人員の総タスク処理時間が最小となるスケジュールを出力することができる。このように、本実施の形態では、各人員の能力差を考慮した新たな人員資源割当モデルを提案し、開発における最適な人員資源の割り当てを可能にした。
【００６３】
［スケジューリング装置の処理の処理手順］
次に、図１８を参照して、スケジューリング装置１０が実行するスケジューリング処理の処理手順について説明する。図１８は、本実施の形態に係るスケジューリング処理の処理手順を示すフローチャートである。
【００６４】
図１８に示すように、スケジューリング装置１０には、まず、入力部１１を介して、処理対象となるタスクの先行制約を含むタスク情報１２１、処理者である人員についての人員情報１２２及び人別タスク処理時間情報１２３とが入力される（ステップＳ１）。
【００６５】
続いて、クリティカルパス取得部１３２は、人別タスク処理時間情報１２３を用いて、処理対象の複数のタスクを処理する処理時間が最も短いクリティカルパスを取得するクリティカルパス取得処理を行う（ステップＳ２）。そして、最少人数取得部１３３は、人別タスク処理時間情報１２３を基に、処理時間が最も短いクリティカルパスに従って複数のタスクを割り当てる人員の数が最小となるスケジュールを取得する最少人数取得処理を行う（ステップＳ３）。続いて、最少分散取得部１３４は、人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得する最少分散取得処理を行う（ステップＳ４）。そして、出力部１４は、分散が最小となるスケジュール表を、処理対象である複数のタスクに対するスケジュールとして出力する出力処理を行う（ステップＳ５）。
【００６６】
［クリティカルパス取得処理の処理手順］
図１９は、図１８に示すクリティカルパス取得処理（ステップＳ２）の処理手順を示すフローチャートである。
【００６７】
図１９に示すように、クリティカルパス取得部１３２は、まず、各タスクが最短時間で処理されるように、各タスクの処理時間が最も短い人員を各タスクに割り当てる割当処理を行う（ステップＳ１１）。そして、クリティカルパス取得部１３２は、処理対象の複数のタスクを、先行制約に対応させた木構造に変換する変換処理を行う（ステップＳ１２）。続いて、クリティカルパス取得部１３２は、先行制約と、割当処理における割り当て内容を基に、木構造の各ノードに活動時間を記録する時間記録処理を行う（ステップＳ１３）。そして、クリティカルパス取得部１３２は、変換処理において変換された木構造に各タスクまでのクリティカルパスを記録する処理を行うクリティカルパス記録処理を行う（ステップＳ１４）。
【００６８】
そして、クリティカルパス取得部１３２は、クリティカルパス記録処理においてクリティカルパスを記録された木構造を基に人員とタスクの処理時間との対応させたスケジュール表を作成する（ステップＳ１５）。続いて、クリティカルパス取得部１３２は、この求めたスケジュール表において、一人の人員に同一時間に異なるタスクが重複して割り当てられているか否かを判断する（ステップＳ１６）。
【００６９】
クリティカルパス取得部１３２は、一人の人員に同一時間に異なるタスクが割り当てられていると判断した場合（ステップＳ１６：Ｙｅｓ）、重複したタスクのうちクリティカルパス外のタスクを含むノードを切り取り、重複したタスクのうちの他方のタスクの下に付けた木構造を生成する（ステップＳ１７）。そして、クリティカルパス取得部１３２は、ステップＳ１３に戻り、生成した木構造に対して、各ノードへの活動時間の記録を行う。
【００７０】
一方、クリティカルパス取得部１３２は、一人の人員に同一時間に異なるタスクが重複して割り当てられていないと判断した場合（ステップＳ１６：Ｎｏ）、このスケジュール表を、処理時間が最も短いクリティカルパスとして最少人数取得部１３３に出力する（ステップＳ１８）。最少人数取得部１３３は、このスケジュール表を、第１の初期解として用いる。
【００７１】
［最少人数取得処理の処理手順］
図２０は、図１８に示す最少人数取得処理（ステップＳ３）の処理手順を示すフローチャートである。
【００７２】
図２０に示すように、最少人数取得部１３３は、第１の初期解であるスケジュール表が入力される（ステップＳ２１）と、人別タスク処理時間情報１２３を参照して、第１の初期解であるスケジュール表を基に、他に割り当てが可能なタスクを探索する（ステップＳ２２）。最少人数取得部１３３は、探索によって得られたスケジュール表における割り当て人数は、第１の初期解の割り当て人数よりも少ないか否かを判断する（ステップＳ２３）。
【００７３】
最少人数取得部１３３は、探索によって得られたスケジュール表における割り当て人数は、第１の初期解の割り当て人数よりも少ないと判断した場合（ステップＳ２３：Ｙｅｓ）、探索によって得られたスケジュール表を新しい第１の初期解とする（ステップＳ２４）。そして、最少人数取得部１３３は、ステップＳ２２に進み、他に割り当てが可能なタスクを探索する。
【００７４】
これに対し、最少人数取得部１３３は、探索によって得られたスケジュール表における割り当て人数は、第１の初期解の割り当て人数よりも多いと判断した場合（ステップＳ２３：Ｎｏ）、探索回数ｍが、予め定められた最少回数Ｍ未満であるか否かを判断する（ステップＳ２５）。最少人数取得部１３３は、探索回数ｍが最少回数Ｍ未満であると判断した場合（ステップＳ２５：Ｙｅｓ）、第１の初期解を維持する（ステップＳ２６）。そして、ステップＳ２２に進み、他に割り当てが可能なタスクを探索する。
【００７５】
一方、最少人数取得部１３３は、探索回数ｍが最少回数Ｍ以上であると判断した場合（ステップＳ２５：Ｎｏ）、第１の初期解に対応するスケジュール表を、割り当てる人員の数が最小となるスケジュール表であるとして最少分散取得部１３４に出力する（ステップＳ２７）。最少分散取得部１３４は、このスケジュール表を、第２の初期解として用いる。
【００７６】
［最少分散取得処理の処理手順］
図２１は、図１８に示す最少分散取得処理（ステップＳ４）の処理手順を示すフローチャートである。
【００７７】
図２１に示すように、最少分散取得部１３４は、第２の初期解であるスケジュール表が入力される（ステップＳ３１）と、第２の初期解であるスケジュール表について、各人員の総タスク処理時間の分散値を演算する（ステップＳ３２）。そして、最少分散取得部１３４は、人別タスク処理時間情報１２３を参照して、第２の初期解であるスケジュール表を基に、他に割り当てが可能なタスクを探索する（ステップＳ３３）。最少分散取得部１３４は、探索によって得られたスケジュール表（探索解）について、各人員の総タスク処理時間の分散値を演算する（ステップＳ３４）。そして、最少分散取得部１３４は、探索解の分散は、第２の初期解の分散より小さいか否かを判断する（ステップＳ３５）。
【００７８】
最少分散取得部１３４は、探索解の分散は、第２の初期解の分散より小さいと判断した場合（ステップＳ３５：Ｙｅｓ）、探索解のスケジュール表を新しい第２の初期解とする（ステップＳ３６）。そして、最少分散取得部１３４は、ステップＳ３３に進み、他に割り当てが可能なタスクを探索する。
【００７９】
これに対し、最少分散取得部１３４は、探索解の分散は、第２の初期解の分散よりも大きいと判断した場合（ステップＳ３５：Ｎｏ）、探索回数ｎが、予め定められた最少回数Ｎ未満であるか否かを判断する（ステップＳ３７）。最少分散取得部１３４は、探索回数ｎが最少回数Ｎ未満であると判断した場合（ステップＳ３７：Ｙｅｓ）、第２の初期解を維持する（ステップＳ３８）。そして、ステップＳ３３に進み、他に割り当てが可能なタスクを探索する。
【００８０】
一方、最少分散取得部１３４は、探索回数ｎが最少回数Ｎ以上であると判断した場合（ステップＳ３７：Ｎｏ）、第２の初期解に対応するスケジュール表を、最終解として、出力部１４に出力する（ステップＳ３９）。出力部１４は、最終解に対応するスケジュール表を、処理対象である複数のタスクに対するスケジュールとして出力する。
【００８１】
［実施の形態の効果］
このように、本実施の形態では、人別タスク処理時間情報を用いて、先行制約がある複数のタスクを処理する処理時間が最も短いクリティカルパスを取得する。続いて、本実施の形態では、処理時間が最も短いクリティカルパスに従って複数のタスクを割り当てる人員の数が最小となるスケジュールであって、各人員の総タスク処理時間の分散が最小となるスケジュールを取得するモデルを提案する。この各人員の能力差を考慮した新たな人員資源割当モデルを提案することによって、処理時間が最も短いクリティカルパスに従い、最少の人数であって、かつ、各人員の総タスク処理時間が最小となるスケジュールを出力することができる。
【００８２】
実際に、図２２〜図２５を参照して、説明する。図２２〜図２５は、図１３に示すテーブルＰ３及び図１４に示す先行グラフＲ３に対して割り当てを行ったスケジュール表の一例を示す図である。このうち、図２２〜２４に示すスケジュール表Ｋ３０〜Ｋ３２は、従来のスケジュール表の一例であり、図２５に示すスケジュール表Ｋ３３は、スケジューリング装置１０が出力したスケジュール表である。
【００８３】
例えば、従来のスケジュール表Ｋ３０は、総タスク処理時間が「１０」であるためスケジュール長が長く、割り当て人数が「６人」と多く、さらに、分散値が「４．４０」であるため稼働（各人員の処理負担）に偏りがあった。また、従来のスケジュール表Ｋ３１は、総タスク処理時間を「７」まで減らしているものの、割り当て人数が多く、分散値が「１．０４」と稼働も偏っている。そして、従来のスケジュール表Ｋ３２は、割り当て人数を「４人」まで減らしているものの、分散値が「０．６９」であるため稼働の偏りが解消できていない。
【００８４】
これに対し、本実施の形態において、人別タスク処理時間情報１２３を用い、先行制約がある複数のタスクを処理する処理時間が最も短いクリティカルパス（第１の条件）を取得する。そして、本実施の形態では、人別タスク処理時間情報１２３を用い、処理時間が最も短いクリティカルパスに従って複数のタスクを割り当てる人員の数が最小となるスケジュール（第２の条件）であって各人員の総タスク処理時間の分散が最小となるスケジュール（第３の条件）を取得する。このため、本実施の形態では、スケジュール表Ｋ３０〜Ｋ３２と比較して、総タスク処理時間が「７」と短く、割り当て人数が「４人」と少なく、さらに、分散値が「０．１９」であるため稼働の偏りを解消したスケジュール表Ｋ３３を取得することができる。
【００８５】
そして、本実施の形態では、第１〜第３の条件のうち、第１の条件＞第２の条件＞第３の条件の順で優先度が高く設定されている。すなわち、この優先度にしたがって、クリティカルパス取得処理、最少人数取得処理、最少分散取得処理を段階的に行うことによって、膨大な現実解の中から、局所探索を行い、最終解であるスケジュールを取得している。したがって、本実施の形態では、各人員の能力差を考慮した場合であっても、総当たりでスケジュールを探索するのではなく、局所探索を行っているため、短時間で精度の高い解（スケジュール）を取得することができる。
【００８６】
また、本実施の形態では、クリティカルパスを求めるための処理として、人別タスク処理時間情報１２３を用いるとともに、木構造を利用した新しい処理内容を提案している。すなわち、本実施の形態では、各人員の能力差を勘案した新たなクリティカルパス取得方法を提案している。さらに、本実施の形態では、人別タスク処理時間情報１２３を用いて、処理時間が最も短いクリティカルパスに従い複数のタスクを割り当てる人員の数の最小化と、各人員の総タスク処理時間の分散の最小化とを満たすスケジュールを求めている。したがって、本実施の形態によれば、人員資源の適正配置と総タスク処理時間の短縮化を実現したスケジュールを取得することができる。
【００８７】
このように、本実施の形態では、各人員の能力差を考慮した新たな人員資源割当モデルを具体的に提案し、ソフトウェアの開発における最適な人員資源の割り当てを可能にするという効果を奏する。
【００８８】
［他の実施の形態］
［システム構成等］
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部又は任意の一部が、ＣＰＵ及び当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８９】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部又は一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００９０】
［プログラム］
図２６は、プログラムが実行されることにより、スケジューリング装置１０が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【００９１】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【００９２】
ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、スケジューリング装置１０の各処理を規定するプログラムは、コンピュータ１０００により実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、スケジューリング装置１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤ（Solid  State  Drive）により代替されてもよい。
【００９３】
また、上述した実施の形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【００９４】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３及びプログラムデータ１０９４は、ネットワーク（ＬＡＮ、ＷＡＮ等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３及びプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【００９５】
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施の形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施の形態に基づいて当業者等によりなされる他の実施形態、実施例及び運用技術等は全て本発明の範疇に含まれる。
【符号の説明】
【００９６】
１０  スケジューリング装置
１１  入力部
１２  記憶部
１３  制御部
１４  出力部
１３１  スケジューリング部
１３２  クリティカルパス取得部
１３３  最少人数取得部
１３４  最少分散取得部
【図１】
0006649180.tif 000005
【図２】
0006649180.tif 000006
【図３】
0006649180.tif 000007
【図４】
0006649180.tif 000008
【図５】
0006649180.tif 000009
【図６】
0006649180.tif 000010
【図７】
0006649180.tif 000011
【図８】
0006649180.tif 000012
【図９】
0006649180.tif 000013
【図１０】
0006649180.tif 000014
【図１１】
0006649180.tif 000015
【図１２】
0006649180.tif 000016
【図１３】
0006649180.tif 000017
【図１４】
0006649180.tif 000018
【図１５】
0006649180.tif 000019
【図１６】
0006649180.tif 000020
【図１７】
0006649180.tif 000021
【図１８】
0006649180.tif 000022
【図１９】
0006649180.tif 000023
【図２０】
0006649180.tif 000024
【図２１】
0006649180.tif 000025
【図２２】
0006649180.tif 000026
【図２３】
0006649180.tif 000027
【図２４】
0006649180.tif 000028
【図２５】
0006649180.tif 000029
【図２６】
0006649180.tif 000030