IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立ソリューションズの特許一覧

<>
  • 特開-情報処理装置、及び情報処理方法 図1
  • 特開-情報処理装置、及び情報処理方法 図2
  • 特開-情報処理装置、及び情報処理方法 図3
  • 特開-情報処理装置、及び情報処理方法 図4
  • 特開-情報処理装置、及び情報処理方法 図5
  • 特開-情報処理装置、及び情報処理方法 図6
  • 特開-情報処理装置、及び情報処理方法 図7
  • 特開-情報処理装置、及び情報処理方法 図8
  • 特開-情報処理装置、及び情報処理方法 図9
  • 特開-情報処理装置、及び情報処理方法 図10
  • 特開-情報処理装置、及び情報処理方法 図11
  • 特開-情報処理装置、及び情報処理方法 図12
  • 特開-情報処理装置、及び情報処理方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024165214
(43)【公開日】2024-11-28
(54)【発明の名称】情報処理装置、及び情報処理方法
(51)【国際特許分類】
   G06N 99/00 20190101AFI20241121BHJP
   G06N 5/01 20230101ALI20241121BHJP
   G06N 7/01 20230101ALI20241121BHJP
【FI】
G06N99/00 180
G06N5/01
G06N7/01
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023081155
(22)【出願日】2023-05-17
(71)【出願人】
【識別番号】000233055
【氏名又は名称】株式会社日立ソリューションズ
(74)【代理人】
【識別番号】110000350
【氏名又は名称】ポレール弁理士法人
(72)【発明者】
【氏名】長谷川 顕登
(72)【発明者】
【氏名】杉田 悠介
(57)【要約】
【課題】複数の目的関数から成る大規模な組合せ最適化問題の求解が可能な、情報処理装置及び情報処理方法を提供する。
【解決手段】計算機を用いて、複数の目的関数項から成る組合せ最適化問題を処理する情報処理装置であって、第1段階として、複数の目的関数項のうち重要度の高い目的関数項に対する最適化処理を実行する組合せ最適化部と、組合せ最適化部で得られた暫定解を参照して、定義する変数の個数を削減する変数定義部の処理を行い、第2段階として、重要度の比較的低い目的関数項も加味した目的関数項に対する最適化処理を実行する組合せ最適化部と、指定された判定基準で最適化処理を終了するかを判定する最適化結果判定部の処理を行い、最適化処理を再実行する場合には、変数を定義する際の条件を更新して、前記第2段階の最適化処理を繰り返し実行することを特徴とする情報処理装置。
【選択図】図6
【特許請求の範囲】
【請求項1】
計算機を用いて、複数の目的関数項から成る組合せ最適化問題を処理する情報処理装置であって、
第1段階として、複数の目的関数項のうち重要度の高い目的関数項に対する最適化処理を実行する組合せ最適化部と、前記組合せ最適化部で得られた暫定解を参照して、定義する変数の個数を削減する変数定義部の処理を行い、
第2段階として、重要度の比較的低い目的関数項も加味した目的関数項に対する最適化処理を実行する前記組合せ最適化部と、指定された判定基準で最適化処理を終了するかを判定する最適化結果判定部の処理を行い、
最適化処理を再実行する場合には、変数を定義する際の条件を更新して、前記第2段階の最適化処理を繰り返し実行することを特徴とする情報処理装置。
【請求項2】
請求項1に記載の情報処理装置であって、
ユーザが事前に指定した各目的関数項の重要度に応じて、重要度の高い目的関数項と重要度の低い目的関数項に別け、第1段階と第2段階の最適化処理において、前記組合せ最適化部が最適化の対象とする目的関数項を選択することを特徴とする情報処理装置。
【請求項3】
請求項1に記載の情報処理装置であって、
最適化処理に用いる数理最適化手法は別々でよく、それぞれの数理最適化手法を実行するためのプログラム、および、組合せ最適化装置を備えることを特徴とする情報処理装置。
【請求項4】
請求項3に記載の情報処理装置であって、
第1段階と第2段階の各最適化処理段階で使用する数理最適化手法に対応して、各々の手法に合わせて、組合せ最適化問題を定式化する定式化生成部と、その定式化を記憶する記憶部を備えることを特徴とする情報処理装置。
【請求項5】
請求項1に記載の情報処理装置であって、
第1段階の最適化処理を実行する前に、第1段階および2段階で用いる数理最適化手法とは異なる、ルールベースの手法により、実行可能な暫定解を取得することを特徴とする情報処理装置。
【請求項6】
請求項1に記載の情報処理装置であって、
第1段階および2段階の最適化処理段階において、既に取得した暫定解を初期解として使用することを特徴とする情報処理装置。
【請求項7】
請求項1に記載の情報処理装置であって、
定義する変数の個数を削減する際には、事前に取得した実行可能な暫定解から得られる情報と、組合せ最適化問題に課された制約条件とから、解析的に値が決定できる変数については、変数を定義せずに枝刈りする、変数定義部を備えることを特徴とする情報処理装置。
【請求項8】
請求項1に記載の情報処理装置であって、
定義する変数の個数を削減する際には、事前に取得した実行可能な暫定解から得られる情報と、各目的関数項に対する重要度とを参照することで、一部の変数を定義せずに枝刈りする、変数定義部を備えることを特徴とする情報処理装置。
【請求項9】
請求項5に記載の情報処理装置であって、
第1段階および第2段階の最適化処理に先立って、前記実行可能な暫定解を参照することで、変数の枝刈りを実行し、最適化処理結果と、制約条件、目的関数項の重要度に応じて、変数の枝刈りに利用する条件を変更して、最適化処理を繰り返し実行することを特徴とする情報処理装置。
【請求項10】
計算機を用いて、複数の目的関数項から成る組合せ最適化問題を処理する情報処理方法であって、
第1段階として、複数の目的関数項のうち重要度の高い目的関数項に対する最適化処理を実行するとともに、前記最適化処理で得られた暫定解を参照して、定義する変数の個数を削減する処理を行い、
第2段階として、重要度の比較的低い目的関数項も加味した目的関数項に対する最適化処理を実行するとともに、指定された判定基準で最適化処理を終了するかを判定する処理を行い、
最適化処理を再実行する場合には、変数を定義する際の条件を更新して、前記第2段階の最適化処理を繰り返し実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、及び情報処理方法に関する。
【背景技術】
【0002】
組合せ最適化問題においては、複数の目的関数の下で最適解を求めなければならない場合がある。こうした多目的最適化においては、各目的関数間で重要度が異なり、特に重要な目的関数と、比較的重要度の低い目的関数に分類できる。そこで、特に重要な目的関数を確実に最適化すると同時に、重要度の比較的低い目的関数の影響も反映させた最適化を行うことが重要である。しかし、大規模な組合せ最適化問題では上記は困難である。
【0003】
例えば、資源制約付きスケジューリング問題では、最重要な目的関数としてメイクスパン(作業期間)の最小化を設定する場合が多いが、それに加えて、使用する資源の削減や、使用する資源量の平準化等も付加的な目的関数になる場合がある。こういった場合には、メイクスパンを厳密に最小化しつつ、その他の目的関数も加味した最適化が求められる。特に、対象とする問題が大規模で、かつ、メイクスパン以外に2次式で表現される目的関数がある場合、規模が大きいが故に2次式を1次式に変形しての線形計画ソルバによる最適化は困難であり、イジングマシンのような2次式の最適化に適した手法の活用が望まれる。
【0004】
上記した組合せ最適化問題の処理に関して特許文献1には、「資源制約付きスケジューリング問題においてメイクスパン最小解の近似解を高い精度で短時間に求める手法を提供する。」、「制約違反解と制約充足解と近似解を繰り返し求める最適化装置は、前回の制約違反解の終了時刻である第1の終了時刻と前回の制約充足解の終了時刻である第2の終了時刻との間に最適化対象終了時刻を指定してメタヒューリスティックな手法により近似解を求める最適化処理部と、近似解が制約に違反しているか制約を充足しているかを判定する最適化結果判定部と、最適化結果判定部による判定結果に基づいて、近似解が制約に違反している場合には近似解の終了時刻により第1の終了時刻を更新し、近似解が制約を充足している場合には近似解の終了時刻により第2の終了時刻を更新する解更新部を含み、第1の終了時刻及び第2の終了時刻を更新しながら近似解を繰り返し求めることを特徴とする。」と記載されている。
【0005】
また非特許文献1には、イジングマシンを用いたジョブショップスケジューリング問題の求解に関して記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2021-190019号公報
【非特許文献】
【0007】
【非特許文献1】D.Shimada、T.Shibuya and T.Shibasaki、A Decomposition Method for Makespan Minimization in Job-Shop Scheduling Problem Using Ising Machine、 2021 IEEE 8th International Conference on Industrial Engineering and Applications (ICIEA)、Chengdu、China、2021、pp.307-314
【発明の概要】
【発明が解決しようとする課題】
【0008】
特許文献1では、イジングマシンによるシミュレーテッドアニーリングのような、メタヒューリスティックな手法を用いて、資源制約付きスケジューリング問題におけるメイクスパンの上限値を変化させながら、制約違反解と制約充足解を繰り返し求めることで、メイクスパンの最小化を行っている。
【0009】
しかし、この手法では、メイクスパンの最小値を得るのに必要な繰り返し回数が未知であり、場合によっては極端に多くなる恐れがある。また、メタヒューリスティックな手法を用いているために、得られた解のメイクスパンが厳密に最小である保証はない。
【0010】
また非特許文献1では、資源制約付きスケジューリングにおいて、メイクスパンの代わりに各作業の終了時刻の総和をイジングマシンで最小化し、メイクスパン最小化問題の近似解の探索を行っている。
【0011】
しかし、作業終了時刻の総和が同じだとしても、ある作業の完了時刻だけが他の作業よりも極端に遅い場合と、全ての作業が同程度の時刻に完了する場合とで、メイクスパンが異なり得ることからも分かるように、この方法では必ずしもメイクスパンが最小化されるとは限らない。
【0012】
以上のように、イジングマシンでは、最重要なメイクスパンを厳密に最小化することには課題がある上、その他の付加的な目的関数の最適化は考慮できていない。
【0013】
本発明は、こうした背景に鑑みてなされたもので、上記で例示した資源制約付きスケジューリング問題に限らず、複数の目的関数から成る大規模な組合せ最適化問題の求解が可能な、情報処理装置及び情報処理方法の提供を目的とする。
【課題を解決するための手段】
【0014】
上記課題を解決するために、本発明においては「計算機を用いて、複数の目的関数項から成る組合せ最適化問題を処理する情報処理装置であって、第1段階として、複数の目的関数項のうち重要度の高い目的関数項に対する最適化処理を実行する組合せ最適化部と、組合せ最適化部で得られた暫定解を参照して、定義する変数の個数を削減する変数定義部の処理を行い、第2段階として、重要度の比較的低い目的関数項も加味した目的関数項に対する最適化処理を実行する組合せ最適化部と、指定された判定基準で最適化処理を終了するかを判定する最適化結果判定部の処理を行い、最適化処理を再実行する場合には、変数を定義する際の条件を更新して、前記第2段階の最適化処理を繰り返し実行することを特徴とする情報処理装置。」としたものである。
【0015】
また本発明においては「計算機を用いて、複数の目的関数項から成る組合せ最適化問題を処理する情報処理方法であって、第1段階として、複数の目的関数項のうち重要度の高い目的関数項に対する最適化処理を実行するとともに、最適化処理で得られた暫定解を参照して、定義する変数の個数を削減する処理を行い、第2段階として、重要度の比較的低い目的関数項も加味した目的関数項に対する最適化処理を実行するとともに、指定された判定基準で最適化処理を終了するかを判定する処理を行い、最適化処理を再実行する場合には、変数を定義する際の条件を更新して、前記第2段階の最適化処理を繰り返し実行することを特徴とする情報処理方法。」としたものである。
【発明の効果】
【0016】
本発明によれば、大規模な組合せ最適化問題でも、重要な最適化指標を厳密に最適化すると共に、他の最適化指標も加味できる。上記した以外の課題、構成および効果は、以下の発明を実施するための形態の説明により明らかにされる。
【図面の簡単な説明】
【0017】
図1】情報処理装置の概略的なハードウェア構成の一例を示すブロック図。
図2】情報処理装置が備える主な機能構成の一例を示すブロック図。
図3】最適化方法の手順の一例を示すフローチャート。
図4】作業の順序指定の一例を示すフローチャート。
図5】各作業に対する各会社の作業日数を示す表の一例を示す図。
図6】最適化方法の手順の一例を示すフローチャート。
図7】ルールベースで作成した作業計画の一例を示す図。
図8】最小総日数での計画作成を条件として混合整数計画ソルバで求めた作業計画の一例を示す図。
図9】最小総日数での計画作成を条件としてイジングマシンで求めた作業計画の一例を示す図。
図10】最大許容総日数23日の条件の下、混合整数計画ソルバで求めた作業計画の一例を示す図。
図11】最大許容総日数24日の条件の下、混合整数計画ソルバで求めた作業計画の一例を示す図。
図12】最大許容総日数24日の条件の下、イジングマシンで求めた作業計画の一例を示す図。
図13】最大許容総日数26日の条件の下、イジングマシンで求めた作業計画の一例を示す図。
【発明を実施するための形態】
【0018】
以下、本発明の実施例について図面に基づいて詳細に説明する。尚、以下の説明において、同一の又は類似する構成に共通の符号を付して重複した説明を省略することがある。また同一あるいは同様の機能を有する要素が複数ある場合に同一の符号に異なる添字を付して説明することがある。また複数の要素を区別する必要がない場合は添字を省略して説明することがある。
【0019】
本発明に係る最適化問題の求解処理は、多くの場面に適用可能であるが、以下の説明事例においては各作業を担当する人員・会社・機械等の資源が決まっており、各作業への資源の割り当てと開始時間を決定するような、資源制約付きスケジューリング問題を考える。一例として、各作業の順序関係に制約がある場合を想定する。
【0020】
このようなスケジューリング問題においては、全体の作業が完了する時刻の最小化が最重要の目的となる場合がある。ただし、作業に携わる人員をなるべく削減することや、同一担当者による作業はなるべく連続で実行すること、担当者間での作業量を平準化すること等、実際の作業計画作成の現場においては、作業完了時刻の最小化に加えて様々な指標を考慮した最適化が要求される。
【0021】
そこで、本発明の実施例として、全体の作業完了時刻を重視しつつも、その他の項目も考慮したスケジュールの作成例を示す。本開示で記載する実施例は、作業完了時刻の最小化を重視する場合に限らず、総費用の最小化や、利益最大化等を重視しながら、その他の相対的に重要度の低い項目も最適化する場合等にも、適用可能である。
【実施例0022】
図1は、作業計画最適化を実行する情報処理装置のハードウェア構成の一例である。図1に示す情報処理装置100は、プロセッサ101、主記憶装置102、補助記憶装置103、入力装置104、出力装置105、通信装置106、一つ以上の組合せ最適化装置107、及びこれらの装置を通信可能に接続するシステムバス108を含んで構成されている。
【0023】
情報処理装置100は、例えば、その一部又は全部がクラウドシステム(Cloud System)により提供されるクラウドサーバ(Cloud Server)のような仮想的な情報処理資源を用いて実現されるものであってもよい。また情報処理装置100は、例えば、互いに協調して動作する、通信可能に接続された複数の情報処理装置によって実現されるものであってもよい。
【0024】
プロセッサ101は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)を用いて構成されている。主記憶装置102は、プログラムやデータを記憶する装置であり、例えば、ROM(Read Only Memory)(SRAM(Static Random Access Memory)、NVRAM(Non Volatile RAM)、マスクROM(Mask Read Only Memory)、PROM(Programmable ROM)等)、RAM(Random Access Memory)(DRAM(Dynamic Random Access Memory)等)等である。補助記憶装置103は、ハードディスクドライブ(Hard Disk Drive)、フラッシュメモリ(Flash Memory)、SSD(Solid State Drive)、光学式記憶装置(CD(Compact Disc)、DVD(Digital Versatile Disc)等)等である。補助記憶装置103に格納されているプログラムやデータは、随時、主記憶装置102に読み込まれる。
【0025】
入力装置104は、ユーザから情報の入力を受け付けるユーザインタフェイスであり、例えば、キーボード、マウス、カードリーダ、タッチパネル等である。出力装置105は、ユーザに情報を提供するユーザインタフェイスであり、例えば、各種情報を可視化する表示装置(LCD(Liquid Crystal Display)、グラフィックカード等)や音声出力装置(スピーカ)、印字装置等である。通信装置106は、他の装置と通信する通信インタフェイスであり、例えば、NIC(Network Interface Card)、無線通信モジュール、USB(Universal Serial Interface)モジュール、シリアル通信モジュール等である。
【0026】
組合せ最適化装置107は、入力された組合せ最適化問題を求解する装置である。組合せ最適化装置107は、例えば、シミュレーテッド・アニーリング等の、メタヒューリスティックアルゴリズムを実行するように専用に設計された専用ハードウェアであってもよく、イジングモデルとして表現された最適化問題の解探索を実行する専用ハードウェアであってもよい。但し専用の組合せ最適化装置107を設けることなく、汎用計算用のプロセッサ101が、組合せ最適化装置として機能することにより、組合せ最適化問題の求解を実行してもよい。
【0027】
組合せ最適化装置107は、例えば、GPU(Graphics Processing Unit)のように、情報処理装置10に装着する拡張カードの形態を取るものであってもよい。組合せ最適化装置107は、例えば、CMOS(Complementary Metal Oxide Semiconductor)回路、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)等のハードウェアによって構成されてもよい。組合せ最適化装置107は、制御装置、記憶装置、システムバス5に接続するためのインタフェイス等を含み、システムバス108を介してプロセッサ101との間でコマンドや情報の送受を行う。組合せ最適化装置107は、例えば、通信線を介して他の組合せ最適化装置107と通信可能に接続され、他の組合せ最適化装置107と協調して動作するものであってもよい。
【0028】
図2は、情報処理装置100が備える主な機能構成(ソフトウェア構成)を示している。図2に示す情報処理装置100は、問題データ取得部111、定式化生成部112、変数定義部113、目的関数設定部114、組合せ最適化部115、最適化結果判定部116、解出力部117、記憶部DBを備える。
【0029】
これらの機能は、プロセッサ101が、主記憶装置102に格納されているプログラムを読み出して実行することにより、もしくは、組合せ最適化装置107が備えるハードウェアにより実現される。尚、情報処理装置100は、上記の機能に加えて、例えば、オペレーティングシステム、ファイルシステム、デバイスドライバ、DBMS(DataBase Management System)等の他の機能を備えていてもよい。
【0030】
記憶部DBは、問題データ記憶部DB1、定式化データ記憶部DB2、変数データ記憶部DB3、暫定解記憶部DB4、および演算プログラム記憶部DB5を備え、これらを主記憶装置102又は補助記憶装置103に構成する。
【0031】
問題データ取得部111は、資源制約付きスケジューリング問題を設定するために外部から入力された情報を、記憶部DBの問題データ記憶部DB1に問題データD1として格納する。外部から入力される情報(問題データD1)は、各作業の順序関係や、各作業に対する各資源の情報、各作業に対する所要時間の情報、最適化の目的関数として設定する項目、各目的関数項の重要度に関する情報等を含む。外部からの情報入力は、例えば、ユーザがユーザインタフェイス(入力装置、出力装置、通信装置等)を介して実行する。
【0032】
定式化生成部112は、問題データ記憶部DB1に格納された問題データ情報D1から、資源制約付きスケジューリング問題を組合せ最適化問題として数理表現(定式化)し、記憶部DBの定式化データ記憶部DB2に定式化データD2として格納する。変数定義部113は、問題データ記憶部DB1に格納された問題データ情報D1と、定式化データ記憶部DB2に格納された定式化データD2を参照して、資源制約付きスケジューリング問題を解くための変数を定義し、変数データ記憶部DB3に変数データD3として格納する。
【0033】
目的関数設定部114は、問題データ記憶部DB1に格納された各目的関数の重要度に関する問題データ情報D1から、最適化の対象とする目的関数を決定し、組合せ最適化部115に最適化対象として選択した目的関数を送信する。
【0034】
組合せ最適化部115は、変数データ記憶部DB3に格納された変数データD3を用いて、定式化データ記憶部DB2で記述されている定式化データD2(資源制約付きスケジューリング問題)を解く。組合せ最適化部115は、組合せ最適化装置107やプロセッサ101を用いて資源制約付きスケジューリング問題の求解を実行する。組合せ最適化部115は、目的関数部114から取得した目的関数、定式化データ記憶部DB2に格納された資源制約付きスケジューリング問題D2の数理表現と、変数定義部113で作成された変数を入力として、資源制約付きスケジューリング問題D2の解を最適化結果判定部116と解出力部117に出力する。最適化結果判定部116は、組合せ最適化部115で得られた解を入力とし、求解を続行するか判定する。
【0035】
解出力部117は、組合せ最適化部115の求解が終了すると、組合せ最適化部115で得られた解と、組合せ最適化部115で利用した定数値等を読み出し、記憶部DBの暫定解記憶部DB4に暫定解D4として格納する。また、解出力部117は、組合せ最適化部115から読み出した結果を、出力装置105や通信装置106に出力してもよい。
【0036】
演算プログラム記憶部DB5は、変数定義部113が問題データ記憶部DB1を参照しながら変数を定義する際に実行するプログラム、及び組合せ最適化部115が組合せ最適化装置107やプロセッサ101を用いて資源制約付きスケジューリング問題を求解する際に実行するプログラムである。
【0037】
図3は、本発明における最適化処理の手順の一例を示すフローチャートである。図3に示される最適化方法は、図1に示されるハードウェアで構成される情報処理装置100を用いて、図2に示される各機能部によって実行されるのがよい。以下、図3に示す、情報処理装置100が実行する処理を最適化処理S200と称することにする。なお、以下において、符号の前に付している「S」の文字は処理ステップの意味である。最適化処理S200は、例えば、入力装置104を介してユーザからの指示等を受け付けることにより開始される。
【0038】
以下、図3を参照しながら、最適化処理S200について説明する。
【0039】
まず、処理ステップS201において、問題データ記憶部DB1に格納された最適化の各目的に関する重要度の情報(問題データ情報D1)を参照して、目的関数設定部114が重要度の特に高い項目のみを目的関数に設定し、組合せ最適化部115が最適化処理を実行する。
【0040】
資源制約付きスケジューリング問題を例にとると、最適化の目的となる項目としては、例えば、作業完了時刻の最小化、コスト最小化、作業人員の最小化、各作業者の負担平準化、同一作業員の作業はなるべく連続で実行させる、などが考えられる。最適化の目的となる各項目は、ユーザがユーザインターフェイスを介して入力してよい。また、最適化の目的となる各項目の重要度も、ユーザが入力してよい。
【0041】
最適化の目的となる各項目の重要度の指定方法としては、例えば、各目的関数項に対する重みづけとして数値によって指定する、優先度の順序関係で指定するなどがある。また、ユーザが直接処理ステップS201、および後続の処理ステップS203のぞれぞれで最適化対象とする目的関数項を指定しても良い。処理ステップS201での最適化では、組合せ最適化部115を複数回利用して、繰り返し最適化計算を実行しても良い。処理ステップS201での最適化完了後、得られた解は記憶部DBの暫定解記憶部DB4に格納される。
【0042】
処理ステップS202では、処理ステップS201の処理の後、処理ステップS201で得られた解を暫定解D4とし、その暫定解D4の情報を利用して、変数定義部113により変数D3を定義しなおす。処理ステップS202での変数定義では、暫定解D4で得られた情報を利用することで、不要な変数の定義を避けることができる。言い換えれば、処理ステップS202では、処理ステップS201で利用した変数D3の枝刈りを行う。この変数D3の枝刈りとは、制約条件を全て充足する実行可能解を算出するため、および、処理ステップS201で既に最適化した目的関数値を維持するために、値を事前に解析的に決定できる変数に関する計算を、後続の処理から除くことである。これにより、後続の最適化処理において、計算すべき変数の個数を削減することができる。
【0043】
処理ステップS203では、処理ステップS202で枝刈りされた後の変数を用いて、処理ステップS201では最適化の目的として考慮しなかった項目も含めて最適化を実行する。処理ステップS203での最適化においては、必ずしも処理ステップS201で最適化の目的となった項目を含まなくても良い。処理ステップS203での最適化は、処理ステップS201と同様に、問題データ記憶部DB1に格納された最適化目的に関する問題データ情報D1を参照して、目的関数設定部114が最適化対象となる目的関数を決定し、組合せ最適化部115が最適化を実行する。処理ステップS201で最適化の目的となった項目を、処理ステップS203でも最適化の目的に設定するかは、ユーザが事前に入力しておき、問題データ記憶部DB1に格納しておいてよい。処理ステップS203での最適化完了後、記憶部DBの暫定解記憶部DB4に処理ステップS203で得られた解を暫定解D4として格納する。
【0044】
処理ステップS204では、最適化結果判定部116が、処理ステップS203で得られた解を入力として、最適化処理S200を終了するか、再度最適化処理S200の一部を繰り返すかを判定する。処理ステップS204における求解終了の判定条件としては、例えば、前回の解から目的関数値が改善されたか否か、事前に設定された時間制限に到達したか、などがありうる。
【0045】
処理ステップS205は、処理ステップS204で求解終了と判定されなかった場合に実行される。処理ステップS205では、処理ステップS202で実行する変数の枝刈り処理の条件を更新する。ただし、必ずしも条件を更新しなければならないわけではなく、一回前の処理ステップS202で利用した条件のままでもよい。
【0046】
ここで、枝刈り処理の条件とは、暫定解D4の情報の利用方法に関する条件を指し、暫定解D4で求まった作業完了時刻の反映方法や、各作業に対する資源の割当を変数定義に反映させるか等である。処理ステップS205の処理の後、新しい暫定解と更新された枝刈り条件を参照して、処理ステップS202にて変数を再定義する。その後、再び処理ステップS203を実行する。この、処理ステップS205、処理ステップS202、処理ステップS203から成る一連の処理を、処理ステップS204で求解終了の判定がなされるまで繰り返し実行する。
【0047】
以上要するに図3の最適化処理をごく簡単に述べるならば、複数の最適化したい目的関数の中から重要度に応じて選択した一部の目的関数のみを用いて1回目の最適化処理を行い、ここで得られた暫定解を用いて、重要度の低い目的関数を含めたすべての目的関数による2回目の最適化処理を実行するという2段階最適化処理を行ったものである。
【0048】
以下、資源制約付きスケジューリング問題の例を用いて、最適化処理S200の一実施例を説明する。本事例で扱う資源制約付きスケジューリング問題では、一連の作業に対して各作業を担当する会社を資源として、各作業に対して担当会社を割り当て、かつ、各作業の開始日を決定する問題を想定する。ただし、各作業の順序関係には指定があり、また、同一の会社が複数の作業を同時に実施することは不可とする。
【0049】
ここで一例として扱う問題では、複数の作業と複数の資源(作業を担当する会社)の関係を最適化する。このうち複数の作業について、図4では作業01~作業11の全11作業を想定し、かつ図示の作業順序を順守する必要があるものとする。
【0050】
図4は、資源制約付きスケジューリング問題における作業順序指定の一例であり、複数の作業間の実行順序は図4の前後作業関係を守って行われる。ここで各矢印の始点と終点が作業間の順序の前後関係を示しており、終点に位置する作業を開始する前に、始点に位置する作業を完了しておく必要がある。例えば、作業06を開始する前には、作業02と作業03を完了しておく必要があり、作業06を完了させない限り、作業08と作業09を開始することはできない等である。
【0051】
またこの問題では、複数の資源(作業を担当する会社)について、資源となる会社はA社~E社の全5社とする。図5は、図4で示した11作業のそれぞれに対する、各会社の作業日数の一覧の例を示す表である。
【0052】
各会社は、数字が記入されている作業のみ担当可能とする。例えばA社は、作業01、05-08は担当不可能だが、作業02、作業03、作業04、作業09、作業10、作業11は所要日数10日、8日、2日、2日、9日、6日でそれぞれ担当することが可能である。また以下、図4で示される作業順序を遵守しながら、各作業を各会社に割り当て、各作業の開始日を決定するスケジューリング最適化の手順を説明する。
【0053】
図6は、スケジューリング最適化手順の一例を示すフローチャートである。以下、図6に示す、情報処理装置100が実行する処理を最適化処理S300と称することにする。最適化処理S300を構成する一連の手順(処理ステップS301、処理ステップS302、処理ステップS303、処理ステップS304、処理ステップS305、処理ステップS306、処理ステップS307)は、図3に示す最適化処理処理ステップS200の処理ステップS201に相当する。同様に、処理ステップS309は処理ステップS202に、処理ステップS308、処理ステップS310は処理ステップS203に、処理ステップS311は処理ステップS204に、処理ステップS312は処理ステップS205に相当する。
【0054】
図6の処理ステップS301において、はじめにルールベース処理によって暫定の作業計画(暫定解)を作成する。ルールベース処理では、例えば、各作業に対して、所要日数の最も短い会社を担当に割り当てれば良い。この場合図5の例では、例えば作業01、02、03の担当会社は、それぞれD社(5日)、B社(2日)、D社(4日)、のように最短日数での処理が可能な担当会社が割り当てられる。
【0055】
会社の割当を全て決めた後、図4に示す作業順序に従って、各作業の開始日を決定する。この際、同一の会社が同時に別作業を実行しないようにしながら、各作業の完了日がなるべく早くなるように開始日を決定する。
【0056】
図7は、上記のルールベース処理によって作成した作業計画を示している。横軸が経過日数、縦軸が作業番号である。この例では、図4の作業順序で最初に位置づけされている作業01に着目し、その開始日を1日目と定める。また作業01は、図5を参照すると最短日数での処理が可能なD社が担当会社に割り当てられるので、作業01について1日目から5日目までの日程が決定される。
【0057】
次に、作業01の終了を開始条件とする作業02に着目し、作業02の開始日を、作業01の終了直後の6日目と定め、かつ図5で定まる2日間(7日目) までの日程が決定される。次に、作業03の開始日を決定する。施工順序の指定としては、作業03は1日目から開始可能だが、作業01と作業03の担当会社はどちらもD社であり、同一会社による別作業の同時実施は不可のため、作業03は作業01終了直後の6日目を開始日とする。同様にして、作業04以降も、施工順序を遵守し、かつ同一会社が同時に複数作業を担当しないようにしながら、各作業の開始日を決定することができる。なお作業06や作業07などは、上流側の複数の作業が共に終了していることをもって作業着手が可能となるので、上流側の複数の作業の日程のうち、終了日が遅い側の作業の終了に応じて作業の開始日が決定されることになる。
【0058】
図7は、上記のルールベース処理によって作成した作業計画の例を示している。図4に示した施工順序の指定を全て満たしながら、各会社が同時に別の作業を担当することが無い計画になっていることが確認できる。また、このルールベース処理によって作成した計画では、全体の作業完了日が24日となっている。
【0059】
上記のルールベース処理の処理ステップS301の例では、単純に各作業の番号順に、すなわち、作業01、作業02、作業03のような順に開始日を決定したが、必ずしもこのような順である必要はない。ただし、各作業の開始日を決定する際は、図4に示す作業順序において、その作業を開始する前に完了していないければならない作業全てに対し、既に開始日が決定されている必要がある。例えば、作業06の開始日を決定する際には、作業02と作業03の開始日を既に決定しておく必要がある。これは、例えば、ある作業の開始日を決定しようとした際、事前に完了していなければならない作業群のうち、一つでも開始日が決定されていない作業があった場合、当該作業の開始日決定を後回しにして、他の作業の開始日決定を優先すれば良い。例えば、作業06の開始日を決定しようとした際に、作業02の開始日が決定されていなかった場合、作業06の開始日決定処理は、作業02の開始日決定処理後になるように後回しにすればよい。
【0060】
上記のルールベース処理の処理ステップS301の例では、各作業の担当会社を所要日数が最小の会社に割り当てたが、他の方法による割り当てを実行してもよい。例えば、各作業の完了日が最も早くなるように、順に各作業への会社割り当てと、各作業の開始日決定を行ってもよい。この場合、例えば、作業01は、D社により1日目から開始とする。次に、作業02は、B社が6日目から開始とする。作業03は、A社が1日目から開始とする。作業03を所要日数最小の会社に割り当てた場合、作業03はD社が6日目から開始し、9日目に完了する。しかし、各作業の完了日が最も早くなるように会社を割り当てた場合、この作業03の完了日は8日目となる。このように、各作業の完了日が最も早くなるように会社の割当を実行すると、同一会社が同時に別作業を担当できないという制約の影響を考慮しながら、各作業の完了日を早くすることが可能である。
【0061】
再び図6を参照して、処理ステップS302では、入力された資源制約付きスケジューリング問題を混合整数計画ソルバで求解するための定式化を生成する。以下、定式化の一例を示す。
【0062】
資源制約付きスケジューリング問題を定式化するにあたり、まず以下の変数を定義する。
i、j、d:会社iが作業jを経過日数dから始める場合に1、それ以外の場合は0になる二値変数
δ:会社iが一つでも作業を担当する場合に1、それ以外の場合は0になる二値変数
D:全体の作業完了日の上界に対応する連続変数、もしくは整数変数
次に、以下の定数を定義する。
i、j:作業jに対する会社iの所要日数
max:全体の作業日数として許容される最大値
:会社iが担当しうる作業数の最大値
:全会社数
:各目的関数の重み係数(k=1、2、…)
なお上記定義について、さらに具体的に述べるならば以下のようである。まずdi、jは、図5に示した、各作業に対する各会社の所要日数である。dmaxは、ルールベース処理で求めた暫定の作業計画を参照して、図6の処理ステップS303及び処理ステップS308において設定される。Mは、図5に示した所要日数表と、dmaxから決められる。例えば、dmax=13の場合、A社が担当しうるのは、最大でも作業04、作業09、作業11の3作業であり、MA社=3と決められる。Nは、全会社数であり、本資源制約付きスケジューリング問題の場合、5である。wは、後に設定する目的関数Qの重み係数であり、ユーザが指定してよい。
【0063】
次に、以下の集合を定義する。
P:順序制約のある作業ペアの集合
:作業jを担当可能な会社の集合
:会社iが担当可能な作業の集合
なお上記定義について、さらに具体的に述べるならば以下のようである。まずPには、例えば、(作業01、作業02)、(作業02、作業05)などが含まれる。IとJは、図5に示す所要日数表から決定することができる。例えば、I作業02={A社、B社、C社、E社}であり、JA社={作業02、作業03、作業04、作業09、作業10、作業11}である。
【0064】
本資源制約付きスケジューリング問題における目的関数は、以上で定義した変数、定数、集合を用いて、例えば以下の(1)式から(4)式のような目的関数項Qによって表現できる。
【0065】
【数1】
【0066】
【数2】
【0067】
【数3】
【0068】
【数4】
【0069】
目的関数項Qは、全体の作業完了日の上界に対応しており、後述する制約項を満たしながら目的関数項Qを最小化することで、作業完了日の最小化を実現できる。目的関数項Qは、作業への担当を一つでも割り当てられる会社数である。後述する、δに関する制約条件を満たしながら目的関数項Qを最小化することで、作業を割り当てられる会社数を最小化できる。目的関数項Qは、同一の会社による連続作業の合計回数を-1倍したものである。ここで、連続作業とは、ある作業を終えた直後に別の作業を開始することを指す。-1倍しているのは、目的関数項Qの最小化によって、連続作業数を最大化するためである。目的関数項Qは、全作業日程における全会社間での稼働日数の分散である。目的関数項Qを最小化することで、会社間の稼働日数を平準化することができる。
【0070】
なお、図3の最適化処理の概念説明において、処理ステップS201では「1回目の最適化処理として重要度の高い項目のみ最適化する」としているが、これは目的関数項Q、Q、Q、Qの中から、この一部の目的関数項Qを選択したことを意味している。
【0071】
本資源制約付きスケジューリング問題における全体の目的関数Hは、上記の目的関数項Qの重み係数wによる重み付け和として、次の(5)式のように表現できる。
【0072】
【数5】
【0073】
ただし、本実施例における図6の処理ステップS302では、混合整数計画ソルバ用の定式化を作成するため、非線形項である目的関数項Qの重み係数wと目的関数項Qの重み係数wは必ず0に設定するものとする。本実施例の例においては、図3の処理処理ステップS201における重要度の高い項目のみの最適化処理を、公知の混合整数計画ソルバを用いることで実行するが、シミュレーテッドアニーリング、遺伝的アルゴリズム、タブーサーチ、確率的進化手法など、他の手法を用いても良い。
【0074】
次に、制約条件を定式化する。本資源制約付きスケジューリング問題においては、例えば、以下の(6)式から(10)式のような制約条件を考慮する必要がある。
【0075】
【数6】
【0076】
【数7】
【0077】
【数8】
【0078】
【数9】
【0079】
【数10】
【0080】
(6)式は、各作業が必ずただ1度だけ実行されなければならないことを示している。(7)式は、図4で示した作業の順序指定を反映しており、集合Pに属する全ての作業ペア(j、j)について、作業jが作業jの開始日よりも早く完了しなければならないことを示している。(8)式は、同一の会社が同時に複数の作業を担当することを禁止している。(9)式は、δに関する制約条件であり、会社iが1作業でも割り当てられた場合にδが1になる。この(9)式を満たしながら、目的関数項Qを最小化することで、δは会社iが1作業も割り当てられていない場合にのみ0となり、目的関数Q項で作業担当会社数を表現できる。(10)式は、作業完了日の上界を設定しており、いかなる作業もD-1日目までには完了することを示している。この(10)式を満たしながら、目的関数項Qを最小化することで、全体の作業完了日を最小化できる。
【0081】
図6の処理ステップS303では、処理ステップS301で得た暫定の計画における作業完了日を、定数dmaxに代入する。ただし、暫定の計画における作業完了日そのものでなくても、作業完了日に数日足した値、もしくは、作業完了日から数日引いた値を代入しても良い。以下、dmaxには、図7に示すルールベース処理で作成した計画における作業完了日として、24日を代入したものとする。
【0082】
図6の処理ステップS304では、混合整数計画ソルバで本資源制約付きスケジューリング問題を解くために、変数si、j、d、δ、Dを定義する。変数δは全ての会社に対して、δA社、δB社などのように定義する。ただし、後述する処理ステップS305において、目的関数項Qを目的関数Hに含まないのであれば、変数δは定義しなくてよい。変数Dは、連続変数もしくは整数変数として定義する。変数si、j、dは、全ての会社iについて、その会社が担当可能な作業群Jに含まれる作業jに対してのみ定義する。また、会社i、作業jに対して変数si、j、dを定義する日にちdの範囲は、必ず全作業がdmax日目には終わるように決定する。さらに、変数si、j、dは、図4に示した施工順序の指定を参照して、会社iが作業jを開始しうる日にちdに対してのみ定義する。
【0083】
具体的には、作業jの事前作業の全パスに対して最も早い終了日を計算し、それらの最大値の翌日を作業jの最も早い開始日とする。図4の作業06を例にとると、事前作業のパスは(作業01、作業02)と(作業03)であり、これら2つのパスについて、各作業の最小所要日数の和を取って最速終了日を算出することができる。その結果、(作業01、作業02)の最速終了日は7日目、(作業03)の最速終了日は4日目と求まるため、作業06の最速開始日は8日目である。この議論は、作業06の事前作業を終了させるには最低でも7日かかるため、作業06はどんなに早くても8日目以降にしか開始できないことを意味している。
【0084】
また、作業jの後続作業の全パスに対して最小施工日数を計算し、それらの最大値をdmax(=24日)から引いた値が作業jの終了日として許容される、最も遅い日にちになる。図4の作業06を例にとると、後続作業のパスは(作業08、作業11)と(作業09、作業11)であり、各作業の最小施工日数の和を取ることで、これら2つのパスの最小施工日数を算出することができる。その結果、(作業08、作業11)、(作業09、作業11)の最小施工日数はそれぞれ10日間、4日間と求まるため、作業06の最も遅い終了日として許されるのはdmax-10=14日目である。この議論は、作業06の後続作業を24日目までに完了するには、どんなに遅くとも作業06を14日目までには完了する必要があることを意味している。
【0085】
上記手法によって求めた作業jの最速開始日をd start、最も遅い終了日をd finishとすると、変数sijdを定義する日数dの範囲は[d start、d finish-dij+1]に限定できる。例えば、図4に示した作業06に対する、D社の変数、sD社、作業06、dを定義する日数dの範囲は[8、10]となる。すなわち、作業06、D社に対応する変数sijdは、sD社、作業06、8日目、sD社、作業06、9日目、sD社、作業06、10日目の3つを定義すればよい。逆に、これ以外の日数範囲では、変数sD社、作業06、dは必ず0であるため、定義する必要が無い。
【0086】
図6の処理ステップS305では、処理ステップS302で生成した定式化と、処理ステップS304で定義した変数に対して、例えば、公知の混合整数計画ソルバを利用して、目的関数値を最小にするような変数値の組合せを求めることで、最適な作業計画を作成する。処理ステップS305での最適化処理では処理ステップS301で得られた暫定の作業計画を初期解として利用しても良い。
【0087】
以下、図3の処理ステップS201における重要度の高い項目として、目的関数項Q(作業完了日)のみを指定する場合と、目的関数項Q(作業完了日)とQ(作業担当会社数)の2つを指定する場合とに別けて、実施例を説明する。なお、重要度の高い項目としてどの目的関数項を選択するかは、図2の目的関数設定部114が、問題データ記憶部DB1に格納された各目的関数項に対する重要度の情報を参照して行う。
【0088】
まず、目的関数項Q(作業完了日)のみを重要度の高い項目として、作業完了日の最小化を計画作成の必須条件とする場合、図6の処理ステップS305では、目的関数Hを目的関数項Qのみ、すなわち、H=wとして最適化を行う。これは、処理ステップS302で生成した目的関数Hに対して、重み係数w、w、wに対して全て0を代入することで実現できる。また、目的関数Hに目的関数項Qが含まれない場合は、会社数に関する制約式である(9)式は、制約条件として加味しなくてよい。
【0089】
図8は、(6)式~(10)式で記述した制約式の下、(5)式で記述される目的関数H(=w)を最小化した際の求解結果から作成した、作業計画のガントチャートである。この作業計画は、値が1になっている変数sijdと各作業の所要日数dijの値を参照することで作成することができる。得られた解における変数sijdは、例えば、A社を添え字に含む変数を挙げると、sA社、作業04、4=1、sA社、作業09、15=1であり、それ以外は全て0である。また、得られた解における変数Dの値は23日であり、全体の作業完了日は23日となっている。図7に示したルールベースの作業計画では作業完了日が24日となっており、S305での最適化を経ることで作業完了日が1日短縮されている。
【0090】
混合整数計画ソルバでは、得られた解が厳密解であると保証することができる。したがって、得られた作業完了日の23日は、厳密に最小な作業完了日である。このように、混合整数計画ソルバでの求解を完了した時点で、最小日数での作業計画を作成することができる。
【0091】
再び図6を参照し、処理ステップS306では、処理ステップS305で得られた作業計画を参照して、dmaxの値を更新する。更新の方法としては、例えば、処理ステップS305で得られた作業計画における作業完了日の23日をdmaxに代入してよい。この場合、図6の処理ステップS303の時点では、dmax=24であったが、処理ステップS306ではdmax=23となる。ただし、dmaxの更新方法は上記手法に限られず、処理ステップS305で得られた作業計画における作業完了日に数日足した値、もしくは数日引いた値を代入してもよい。dmaxの更新方法はユーザが指定して良い。処理ステップS305での最適化処理は、例えば、計算時間に制限を設けることで、途中で打ち切っても良い。混合整数計画ソルバでの最適化処理を途中で打ち切ると、処理ステップS305で得られる解が厳密解である保証が無い。そこで、例えば、処理ステップS306においてdmaxを前回の値よりも小さくすることにより、処理ステップS304で定義される変数の個数を削減することができ、結果として次回の処理ステップS305で厳密解を得るまでの計算時間を短縮できる。
【0092】
図6の処理ステップS307では、混合整数計画ソルバでの求解を終了するか、再度処理ステップS304、処理ステップS305、処理ステップS306の手順を繰り返すかを判定する。判定条件としては、例えば、処理ステップS305で厳密解が得られているか否か、前回の求解時よりも目的関数値が改善されたか否か等がある。また、判定条件はユーザが指定してもよく、例えば、指定回数までdmaxの値を減少、ないし増加させながら求解を繰り返して良い。以下、処理ステップS305で、作業完了日が厳密に最小の解が得られたとして説明する。
【0093】
図6の処理ステップS308では、混合整数計画ソルバでの求解を終了後、イジングマシン用の定式化を生成する。図6に示すフローチャートでは、図3における重要度の低い項目を含めた最適化処理S203を、イジングマシンで実行することを想定している。イジングマシン用の定式化では、(6)式~(10)式で示される制約式を、公知のラグランジュ関数法を用いて目的関数に取り込む方法や、公知の交互方向乗数法を利用する方法を採用しても良い。また、全ての制約式をペナルティ項として記述し、目的関数に取り込んでも良い。制約条件をペナルティ項として記述する場合、例えば、制約式(6)式は(11)式などのように表現して、重み係数wを乗じて目的関数に加算すればよい。
【0094】
【数11】
【0095】
図6の処理ステップS309では、全体の作業完了日がdmax以内になるように、変数を定義する。今の場合、dmax=23であり、図6の処理ステップS304と同一の手順によって、各会社i、各作業jに対して、変数sijdを定義する日にちdの範囲を決定すれば良い。図6の処理ステップS305で厳密に最小の作業完了日を取得したことにより、変数sijdを定義する日数範囲を削減することができ、扱う変数の個数を削減できている。
【0096】
また、変数sijdや変数δは、処理ステップS305で得た暫定解において、一つでも作業を割り当てられている会社についてだけ定義しても良い。ただし、図8に示す暫定解の場合、候補となっている5つの会社全てに作業が割り当てられているため、本実施例では、全ての会社に対して変数を定義する。処理ステップS309で、一部の会社に対してのみ変数を定義するケースについては後述する。
【0097】
図6の処理ステップS310では、処理ステップS305では考慮しなかった目的関数項も加味して、イジングマシンを用いて最適化を行う。処理ステップS310での最適化処理では処理ステップS305で得られた暫定解を初期解として利用しても良い。今回の場合、新たに加味する目的関数項は、Q、Q、Qであり、それぞれにユーザに指定された重み係数w、w、wを乗じた目的関数値を最小化する。ただし、ラグランジュ関数法や交互方向乗数法、ペナルティ項として制約条件を目的関数に取り込んでいる場合は、制約由来の項も含めた目的関数値を最適化する。本実施例の場合、特に、目的関数項Q、Qは二次の目的関数であり、混合整数計画ソルバによる扱いが比較的困難で、イジングマシンが得意とする目的関数項である。
【0098】
図6の処理ステップS310で用いる、目的関数項の重み係数wは、処理ステップS305で用いる重み係数wと異なっても良い。例えば、処理ステップS305では、作業完了日に関する目的関数項Qを、全体の目的関数Hに指定していたが、処理ステップS310ではw=0として、作業完了日は最適化の対象から除外してよい。このような処理は、作業完了日の最小化が必須条件となるような作業計画作成において有効である。すなわち、処理ステップS305の時点で作業完了日を厳密に最小化し、処理ステップS306でこの最小作業完了日をdmaxに設定し、処理ステップS309で作業計画が必ずdmaxまでに終わるように変数を定義すれば、処理ステップS310の最適化処理では、必ず最小作業完了日に全作業が完了する作業計画が得られる。この際、目的関数Hに作業完了日に関する目的関数項Qを含まなくてよい。その上で、処理ステップS310では、処理ステップS305で考慮しなかった目的関数項を含めた最適化を実行することで、最小作業完了日を維持しながら、連続作業数や作業日数の平準化といった、付加的な最適化指標を加味した作業計画を作成することができる。
【0099】
図9は、dmaxに最小作業完了日である23日を設定して、イジングマシンで図6の処理ステップS310の最適化処理を行って得られる作業計画の一例である。この例では、最適化の対象となる目的関数Hは目的関数項Q、目的関数項Qから成り、目的関数項Q、Qは含んでいない。すなわち、図3の処理ステップS203における重要度の低い項目として、連続作業数(目的関数項Q)、作業日数平準化(目的関数項Q)を指定している。
【0100】
図9に示す作業計画例では、作業完了日は23日となっており、図6の処理ステップS305で求めた最小作業完了日と同一の値が得られている。また、連続実行数は、図8の作業計画では1(A社による作業03と作業04)だが、イジングマシンによる最適化処理を経ることで、図9の作業計画では、2増加して3(A社による作業03と作業04、C社による作業05と作業09、E社による作業08と作業10)となっている。
【0101】
これにより、作業順序が許す範囲でなるべく同一の会社による連続作業を増やして、各会社にとっては無用な空き日数を最小限に抑えられる。稼働日数の平準化に関しては、各会社の稼働日数の分散値で比較すればよい。図8の作業計画では、各会社の稼働日数がA社:12日、B社:5日、C社:2日、D社:12日、E社:11日で、会社間の稼働日数分散は17.04である。
【0102】
一方、イジングマシンによる最適化処理を経た結果、図9の作業計画では、各会社の稼働日数がA社:10日、B社:5日、C社:10日、D社:12日、E社:11日であり、会社間の稼働日数分散は図8の計画から減少して、5.84となっている。これにより、会社間の負担がなるべく平準化されている。
【0103】
このように、まずは最重要な最適化指標である作業完了日を厳密に最小化し、その作業完了日を遵守した上で、連続作業数の最大化と、稼働日数分散の最小化という付加的な最適化指標も加味した計画の作成ができている。本実施例では、作業完了日の最小化を必須条件とした場合を想定した。この想定は、資源制約付きスケジューリング問題において頻出するケースである。
【0104】
イジングマシンを利用した従来手法では、作業完了日を最小化するために、複数回の最適化処理を繰り返して、ヒューリスティックに最適解を探索する必要があった。特に、最短作業完了日を発見するために必要な最適化処理の繰り返し回数が未知であり、さらには、得られた作業完了日が厳密に最短であるかを保証することができない。本実施例で例示したように、作業完了日を混合整数計画ソルバで厳密に最小化し、その後で、2次の目的関数も含めてイジングマシンによる最適化処理を施すことで、全体の手順としてはループ回数一回で、確実に作業完了日を最小しつつ、かつ、その他の最適化指標も加味した計画の作成が可能である。
【0105】
図6の処理ステップS311では、事前に指定した判定基準にしたがって、イジングマシンによる求解を終了するか、再度実行するかを決定する。この判定基準は、例えば、制約条件を全て充足しているか、前回のイジングマシンの解よりも目的関数値が改善されたか否かや、ユーザが指定した回数だけイジングマシンによる最適化処理を実行したか、等がある。
【0106】
図6の処理ステップS312では、処理ステップS310で得られた作業計画を参照して、dmaxの値を更新してよい。これは、作業完了日の最小化が計画作成の必須条件でない場合で、例えば、全体の作業完了日を遅らせてでも、連続作業数や会社間の稼働日数分散等、その他の目的関数項の最小化を優先したい場合に有効である。
【0107】
次に、図3の処理ステップS201における重要度の高い最適化項目として、目的関数項Q(作業完了日)とQ(作業担当会社数)の2つを指定する場合について詳述する。目的関数項Q(作業完了日)のみを指定した場合と同様の手順については、適宜説明を省略する。
【0108】
再び図6を参照して、処理ステップS301、処理ステップS302では、既に述べた方法により、ルールベースの暫定計画作成と、混合整数計画ソルバ用の定式化生成を行う。図6の処理ステップS303では、例えば、処理ステップS301で得られた暫定計画(図7参照)における作業完了日から1引いた23日をdmaxに代入したとする。
【0109】
続いて、目的関数項Qのみを考慮した場合と同様に、図6の処理ステップS304、処理ステップS305を実行する。その結果、例えば、図10に示すような作業計画が得られる。この作業計画では、作業完了日が23日、作業担当会社数が5(A社~E社の全て)となっている。ここで、処理ステップS304の時点で作業完了日が必ず23日目以下になるように変数sijdを定義しているため、処理ステップS305の最適化処理では作業完了日が24日目以上になるような計画は作成できないことに注意されたい。
【0110】
図6の処理ステップS306では、dmaxの値を前回の設定値である23日から増加させて、例えば、24日にする。そして、図6の処理ステップS307で、混合整数計画ソルバでの求解を再度実行すると判定を下すとする。これらdmaxの更新方法と求解続行の判定条件は、例えば、「目的関数値が改善されなくなるまで、dmaxの値を1増加させて求解を繰り返す」としてもよいし、ユーザが事前に「dmaxの値を1増加させて2回繰り返す」のように指定しておいても良い。また、必ずしもdmaxは増加させる必要はなく、dmaxを減少させながら、最適化処理を繰り返しても良い。
【0111】
図11は、二回目のループにおいて、図6の処理ステップS305でdmax=24日の下、混合整数計画ソルバで求めた作業計画の例を示している。この作業計画では、作業完了日が24日、作業担当会社数が4(A社~D社のみ作業を担当、E社が担当しない)となっている。目的関数項Qの重み係数wと比較して目的関数項Qの重み係数wが十分大きく、会社数削減が重視される場合には、dmaxを変更して再度最適化処理を実行することで、このように作業完了日を延ばしてでも会社数を削減する計画を得ることができる。ただし、作業完了日を厳密に最小にしなくても構わない場合、図6の処理ステップS303の時点でdmaxの値を十分大きい値に設定しておいて、処理ステップS304~処理ステップS307の繰り返し回数を少なくしても良い。
【0112】
図11に示す作業計画を得た後、図6の処理ステップS306ではdmaxに、例えば、処理ステップS305で得られた作業完了日の24日をそのまま代入したとする。さらに、図6の処理ステップS307において、混合整数計画ソルバでの最適化処理を終了すると判定したとして、処理ステップS308では既に述べた方法でイジングマシン用の定式化を生成する。
【0113】
図6の処理ステップS309では、全体の作業完了日がdmax(=24日)以内になるように変数を定義する。変数sijdを定義する日にちdの範囲は、図6の処理ステップS304と同一の手順によって決定すれば良い。また、目的関数項Qで記述される、担当会社数の削減を重視するのであれば、変数sijdと変数δは、処理ステップS305で得た暫定解(図11)において、計画に現れる会社のみ、すなわち、A社、B社、C社、D社に対してのみ定義し、E社の変数は定義しなくてもよい。この場合、変数自体がA社、B社、C社、D社の4社に対してしか定義されていないため、イジングマシンを用いた最適化処理で得られる作業計画は、必ず担当会社が4社以下になる。
【0114】
図6の処理ステップS310では、イジングマシンを用いた最適化処理を実行する。この時、追加の目的関数として、例えば、連続作業に関する目的関数項Qを追加して、最適化対象となる目的関数項としては、w、w、wの3項目にしたとする。ただし、処理ステップS309において、暫定解に現れた会社に対してのみ変数sijdと変数δを定義している場合、会社数に関する目的関数項Qは、目的関数Hに含めなくても良い。なお、ここで追加する目的関数項はQに限る必要はなく、Qや、その他の最適化指標でも良い。
【0115】
図12は、dmax=24日の下、イジングマシンで最適化処理をして求めた作業計画である。この例では、目的関数項として、Q、Q、Qを加味している。図6の処理ステップS305で得られていた暫定解(図11)と比較すると、作業完了日は24日のまま変わらず、作業会社数も全部で4社のまま変わっていない。図6の処理ステップS309では、暫定解を参照して変数を定義しており、これらの最適化指標が暫定解よりも悪化しないように設定できる。しかし、新たに追加した、連続作業に関する目的関数項Qの効果により、作業完了日と会社数という優先度の高い最適化指標の値を維持しながら、連続作業数が図11の3から増加し、図12では4となっている。
【0116】
図12に示す作業計画が得られた後、図6の処理ステップS311では、イジングマシンでの求解を再実行すると判定されたとする。さらに、処理ステップS312では、dmaxに26日を設定したとする。これら、処理ステップS311での判定条件とdmaxの更新方法は、事前にユーザが指定しておいてよく、例えば「目的関数値が改善されなくなるまで、dmaxを2ずつ増加させながらイジングマシンでの求解を繰り返す」と設定しておけばよい。なお、イジングマシンでの求解を繰り返す際には、前回の求解時に得られた解を初期解として利用しても良い。
【0117】
図6の処理ステップS309では、再びdmax=26日の下、A社~D社の4社に対してのみ変数を定義する。さらに、処理ステップS310でイジングマシンによる最適化を実行する。
【0118】
図13は、上記の条件の下、イジングマシンで求めた作業計画の例である。一回前のイジングマシンによる求解時よりも、dmaxの値を増加させたため、作業完了日が26日に延びているが、会社数はA社~D社の4社のまま変わっていない。また、連続作業数は、前回の4から増加して、7となっている。作業完了日を多少遅らせてでも、その他の目的関数項の改善を重視するのであれば、このようにdmaxの値を変更して再度イジングマシンによる最適化処理を行えばよい。
【0119】
以上、一実施例について詳述したが、本発明は上記の実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、上記の実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また上記実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0120】
また上記の各構成、機能部、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD(Solid State Drive)等の記録装置、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0121】
また上記の各図において、制御線や情報線は説明上必要と考えられるものを示しており、必ずしも実装上の全ての制御線や情報線を示しているとは限らない。例えば、実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【0122】
また以上に説明した情報処理装置100の各種機能部、各種処理部、各種データベースの配置形態は一例に過ぎない。各種機能部、各種処理部、各種データベースの配置形態は、情報処理装置100が備えるハードウェアやソフトウェアの性能、処理効率、通信効率等の観点から最適な配置形態に変更し得る。
【0123】
また前述した各種のデータを格納するデータベースの構成(スキーマ(Schema)等)は、リソースの効率的な利用、処理効率向上、アクセス効率向上、検索効率向上等の観点から柔軟に変更し得る。
【符号の説明】
【0124】
100:情報処理装置
107:組合せ最適化装置
111:問題データ取得部
112:定式化生成部
113:変数定義部
114:目的関数設定部
115:組合せ最適化部
116:最適化結果判定部
117:解出力部
DB:記憶部
DB1:問題データ記憶部
DB2:定式化データ記憶部
DB3:変数データ記憶部
DB4:暫定解記憶部
DB5:演算プログラム記憶部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13