(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024171441
(43)【公開日】2024-12-12
(54)【発明の名称】割当問題処理システム及び割当問題処理方法
(51)【国際特許分類】
G06Q 10/0631 20230101AFI20241205BHJP
【FI】
G06Q10/0631
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023088446
(22)【出願日】2023-05-30
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】加藤 晶子
(72)【発明者】
【氏名】山本 佳生
(72)【発明者】
【氏名】大野 耕司
【テーマコード(参考)】
5L010
5L049
【Fターム(参考)】
5L010AA10
5L049AA10
(57)【要約】
【課題】部分問題に分解した際に制約充足困難で計算が終了しなくなる問題を解消することで、大規模の割当問題を処理可能にする割当問題処理システム及び割当問題処理方法を提供する。
【解決手段】割当問題処理システムは、割当問題の問題区間の部分区間である部分問題区間に対応する部分問題を生成し、部分問題に対して割当候補となる複数の候補を生成し、複数の候補から最適な組み合わせを選択することにより部分問題に対する解である部分解を計算することにより、割当問題の解を計算する。割当問題処理システムは、部分解が割当問題の制約条件を充足しない場合、問題区間において部分問題区間をずらすことにより、部分問題を作り直して再計算を行うことと、部分問題の部分解を計算するときの前記制約条件を必要に応じて修正することと、の少なくとも一方を実行する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
割当問題を処理する計算機を含む割当問題処理システムであって、
前記計算機は、
前記割当問題の問題区間の部分区間である部分問題区間に対応する部分問題を生成し、前記部分問題に対して割当候補となる複数の候補を生成し、前記複数の候補から最適な組み合わせを選択することにより前記部分問題に対する解である部分解を計算することにより、前記割当問題の解を計算する、
ように構成され、
前記計算機は、
前記部分解が前記割当問題の制約条件を充足しない場合、
前記問題区間において前記部分問題区間をずらすことにより、前記部分問題を作り直して再計算を行うことと、
前記部分問題の前記部分解を計算するときの前記制約条件を必要に応じて修正することと、
の少なくとも一方を実行する、
ように構成された、
割当問題処理システム。
【請求項2】
請求項1に記載の割当問題処理システムにおいて、
前記計算機は、
前記部分解が前記割当問題の前記制約条件を充足しない場合、
前記問題区間において前記部分問題区間をずらすことにより、前記部分問題を作り直して再計算を行うことと、
前記部分問題の前記部分解を計算するときの前記制約条件を必要に応じて修正することと、
の両方を実行する、
ように構成された、
割当問題処理システム。
【請求項3】
請求項1に記載の割当問題処理システムにおいて、
前記計算機は、
前記部分解が前記割当問題の前記制約条件を充足しない場合、
前記問題区間において前記部分問題区間をずらすことにより、前記部分問題を作り直して再計算を行うことと、
前記部分問題の前記部分解を計算するときの前記制約条件を必要に応じて修正することと、
の何れか一方を実行する、
ように構成された、
割当問題処理システム。
【請求項4】
請求項2に記載の割当問題処理システムにおいて、
前記計算機は、
前記割当問題の問題区間における起点に基づいて前記部分問題を生成し、前記部分問題を解くたびに、前記起点をずらし、ずらした前記起点に基づいて次に解く前記部分問題を生成することを、前記割当問題の解に対応する全ての前記部分解に対して、前記制約条件を充足する解を得ることができるまで行うことにより、前記割当問題の解を計算する、
ように構成され、
前記計算機は、
前記部分解が前記制約条件を充足する場合、前記起点を前記問題区間の終点側にずらして次に解く前記部分問題を生成し、
前記部分解が前記制約条件を充足しない場合、前記起点を前記問題区間の始点側にずらして部分問題を作り直すことにより次に解く前記部分問題を生成する、
ように構成された、
割当問題処理システム。
【請求項5】
請求項2に記載の割当問題処理システムにおいて、
前記計算機は、
前記割当問題の問題区間における起点に基づいて前記部分問題を生成し、前記部分問題を解くたびに、前記起点をずらし、ずらした前記起点に基づいて次に解く前記部分問題を生成することを、前記割当問題の解に対応する全ての前記部分解に対して、前記制約条件を充足する解を得ることができるまで行うことにより、前記割当問題の解を計算するように構成され、
前記計算機は、
前記部分解が前記制約条件を充足する場合、前記起点を前記問題区間の終点側にずらして次に解く所定サイズの部分問題区間に対応する前記部分問題を生成し、
前記部分解が前記制約条件を充足しない場合、前記部分解が制約条件を充足しない前記部分問題を、前記起点を前記問題区間の始点側にずらして前記所定サイズの部分問題区間に対応する部分問題に作り直すことにより、次に解く前記部分問題を生成する、
ように構成された、
割当問題処理システム。
【請求項6】
請求項2に記載の割当問題処理システムにおいて、
前記計算機は、
前記割当問題の問題区間における起点に基づいて前記部分問題を生成し、前記部分問題を解くたびに、前記起点をずらし、ずらした前記起点に基づいて次に解く前記部分問題を生成することを、前記割当問題の解に対応する全ての前記部分解に対して、前記制約条件を充足する解を得ることができるまで行うことにより、前記割当問題の解を計算するように構成され、
前記計算機は、
前記部分解が前記制約条件を充足する場合、前記起点を前記問題区間の終点側にずらして次に解く所定サイズの部分問題区間に対応する前記部分問題を生成し、
前記部分解が前記制約条件を充足しない場合、前記部分解が制約条件を充足しない前記部分問題を、前記起点を前記問題区間の始点側にずらして前記所定サイズと異なるサイズの部分問題区間に対応する部分問題に作り直すことにより、次に解く前記部分問題を生成する、
ように構成された、
割当問題処理システム。
【請求項7】
請求項2に記載の割当問題処理システムにおいて、
前記計算機は、
前記割当問題の問題区間における起点に基づいて部分問題区間に対応する前記部分問題を生成し、前記部分問題を解くたびに、前記起点をずらし、ずらした前記起点に基づいて次に解く前記部分問題を生成することを、前記割当問題の解に対応する全ての前記部分解に対して、前記制約条件を充足する解を得ることができるまで行うことにより、前記割当問題の解を計算するように構成され、
前記計算機は、
前記部分解が前記制約条件を充足する場合、前記起点を前記問題区間の終点側にずらして次に解く所定サイズの部分問題区間に対応する前記部分問題を生成し、
前記部分解が前記制約条件を充足しない場合、前記部分解が制約条件を充足しない前記部分問題を、前記起点を前記問題区間の始点側にずらして前記所定サイズと異なるサイズの部分問題区間に対応する部分問題又は前記所定サイズの部分問題区間に対応する部分問題に作り直すことにより次に解く前記部分問題を生成し、
生成した前記部分問題の前記部分解が前記制約条件を充足しない場合、前記部分解が制約条件を充足しない前記部分問題を、前記起点をずらさないで、生成した前記部分問題のサイズとは異なるサイズの部分問題区間に対応する部分問題に作り直すことにより、次に解く前記部分問題を生成する、
ように構成された、
割当問題処理システム。
【請求項8】
請求項4に記載の割当問題処理システムにおいて、
前記計算機は、
各起点での前記部分問題の生成を行った回数を計算し、
前記回数が、所定の閾値回数以上になった場合、前記割当問題を解くことが困難と判定する、
ように構成された、
割当問題処理システム。
【請求項9】
請求項4に記載の割当問題処理システムにおいて、
難解な制約条件を示す情報が格納された記憶装置を備え、
前記計算機は、
前記難関な制約条件に基づいて、次に解く前記部分問題の前記制約条件が難解であるか否かを判定し、
次に解く前記部分問題の前記制約条件が難解であると判定した場合、前記難解な制約条件を示す情報に基づいて、前記次に解く部分問題に対応する前記制約条件が緩和するように、前記制約条件を修正する、
ように構成された、
割当問題処理システム。
【請求項10】
請求項9に記載の割当問題処理システムにおいて、
前記計算機は、
前記部分問題を生成する場合に、前記割当問題の前記制約条件に基づいて、前記部分問題に対応する前記難解な制約条件を示す情報を作成し、前記記憶装置に格納する、
ように構成された、
割当問題処理システム。
【請求項11】
請求項1に記載の割当問題処理システムにおいて、
前記計算機は、アニーリングによって、前記複数の候補から最適な組み合わせを選択することにより前記部分問題に対する解である前記部分解を計算する、
ように構成された、
割当問題処理システム。
【請求項12】
割当問題を処理する計算機を用いた割当問題処理方法であって、
前記計算機によって、
前記割当問題の問題区間の部分区間である部分問題区間に対応する部分問題を生成し、前記部分問題に対して割当候補となる複数の候補を生成し、前記複数の候補から最適な組み合わせを選択することにより前記部分問題に対する解である部分解を計算することにより、前記割当問題の解を計算し、
前記部分解が前記割当問題の制約条件を充足しない場合、
前記問題区間において前記部分問題区間をずらすことにより、前記部分問題を作り直して再計算を行うことと、
前記部分問題の前記部分解を計算するときの前記制約条件を必要に応じて修正することと、
の少なくとも一方を実行する、
割当問題処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、割当問題処理システム及び割当問題処理方法に関する。
【背景技術】
【0002】
社会システムの生産性向上のためアニーリング法が組合せ最適化問題の高速解法として注目を浴びている。交通系や配送・巡回経路決定などの実問題では多数の複雑な制約条件を加味する必要があり、特に勤務シフト作成や人員配置といったような割当問題は、所謂NP困難な問題に分類され、従来のコンピュータに基づくアルゴリズムでは、実用に耐えうる速度での計画の立案が困難であることが知られている。このため、割当計画立案の自動化へのシーズないしニーズが高まっていると考えられる。
【0003】
本発明に関連する従来技術として、例えば、下記特許文献1及び特許文献2に記載の技術が挙げられる。特許文献1の技術は、集合分割問題における部分集合の候補の情報である候補情報を取得する取得手段と、前記取得手段により取得された前記候補情報に基づいて、前記集合分割問題に対応するイジングモデルにおけるハミルトニアンの式を生成する生成手段と、を有する。
【0004】
特許文献2の技術は、集合分割問題の最適解を求める最適化システムを、集合分割問題を双対問題に変換し、双対問題の解を求め、双対問題の解を含み2値変数により表される列生成子問題を作成し、列生成子問題を求解する。特許文献2の技術は、列生成子問題の解に収束条件を満たさない解が含まれる場合、当該列生成子問題の解を部分集合の候補として部分集合族に追加し、列生成子問題の解に収束条件を満たさない解が含まれなくなるまで列生成子問題の生成および求解を繰り返す。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2017-151810号公報
【特許文献2】特開2021-43693号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
本願発明者等は、鋭意研究を行い、上述した割当計画立案は、「最適化問題」として計算機で解くことができるとの知見ないしコンセプトのもと、以下のように行うことを検討している。
【0007】
すなわち、実社会の大規模な最適化問題を高速で解くには、例えばイジングモデルなどの「相互作用モデル」で問題を記述し、CMOSアニーリングのような「最適化問題専用計算技術」を用いて計算を実行する方法が考えられる。相互作用モデルを用いて計画立案を行うにあたり、複雑な制約条件を効率的に扱う方法として、割当問題を所定の固定サイズで複数の部分問題に分割し、列生成法等を用いて部分問題の候補生成を行った後に、集合分割問題や集合被覆問題を解く手段を用いることを検討した。この手段では、部分問題を順次解いていき、ある部分問題で制約充足しない解がでた場合、その前に解いた部分問題に戻るループを、部分制約を満たすまで計算することを行う。
【0008】
しかし、この手段により大規模な割当問題を処理すると、ある部分問題で制約充足しない解がでた場合にその前に解いた部分問題に戻るループを行ったとしても、必ずしも部分制約を満たすことができるとは限らないので、部分問題の解が制約充足困難で計算が終了しなくなってしまうことが生じ得る。
【0009】
本発明は上記課題を解決するためにされた。即ち、本発明の目的の一つは、部分問題に分解した際に制約充足困難で計算が終了しなくなる問題を解消することで、大規模の割当問題を処理可能にする割当問題処理システム及び割当問題処理方法を提供することにある。
【課題を解決するための手段】
【0010】
上記課題を解決するために、本発明の割当問題処理システムは、割当問題を処理する計算機を含む割当問題処理システムであって、前記計算機は、前記割当問題の問題区間の部分区間である部分問題区間に対応する部分問題を生成し、前記部分問題に対して割当候補となる複数の候補を生成し、前記複数の候補から最適な組み合わせを選択することにより前記部分問題に対する解である部分解を計算することにより、前記割当問題の解を計算するように構成され、前記計算機は、前記部分解が前記割当問題の制約条件を充足しない場合、前記問題区間において前記部分問題区間をずらすことにより、前記部分問題を作り直して再計算を行うことと、前記部分問題の前記部分解を計算するときの前記制約条件を必要に応じて修正することと、の少なくとも一方を実行するように構成される。
【0011】
本発明の割当問題処理方法は、割当問題を処理する計算機を用いた割当問題処理方法であって、前記計算機によって、前記割当問題の問題区間の部分区間である部分問題区間に対応する部分問題を生成し、前記部分問題に対して割当候補となる複数の候補を生成し、前記複数の候補から最適な組み合わせを選択することにより前記部分問題に対する解である部分解を計算することにより、前記割当問題の解を計算し、前記部分解が前記割当問題の制約条件を充足しない場合、前記問題区間において前記部分問題区間をずらすことにより、前記部分問題を作り直して再計算を行うことと、前記部分問題の前記部分解を計算するときの前記制約条件を必要に応じて修正することと、の少なくとも一方を実行する。
【発明の効果】
【0012】
本発明によれば、部分問題に分解した際に制約充足困難で計算が終了しなくなる問題を解消することで、大規模の割当問題を処理可能にする。
【図面の簡単な説明】
【0013】
【
図1】
図1は第1実施形態に係る情報処理システムの構成の一例を示すブロック図である。
【
図2】
図2は物理的な計算機のハードウェア構成の一例を示すブロック図である。
【
図6】
図6は仕事1乃至仕事5の仕事開始場所及び仕事終了場所を示す図である。
【
図7】
図7は各運搬機材の最初の起点となる日の作業終了場所を示す図である。
【
図8A】
図8Aは整備リスト及び可能仕事リストを示す図である。
【
図9】
図9は処理の概要を説明するための図である。
【
図11】
図11は割当先に対して割当が完了した状態を示す図である。
【
図15】
図15は、割当先に対して割当が完了した状態を示す図である。
【
図17】
図17は割当先に対して割当が完了した状態を示す図である。
【
図18】
図18は情報処理システムが実行する処理フローを示すフローチャートである。
【
図19】
図19は部分問題に対す割当候補の例を説明するための図である。
【
図20】
図20は停滞判定の詳細を説明するためのフローチャートである。
【
図21】
図21は部分問題の制約条件修正の処理の詳細を説明するためのフローチャートである。
【
図23】
図23は3日及び4日のそれぞれの可能仕事リストを示す図である。
【
図24】
図24は第1実施形態に係る情報処理システムの構成の一例を示すブロック図である。
【
図25】
図25は情報処理システムが実行する処理フローを示すフローチャートである。
【
図26】
図26は第1実施形態に係る情報処理システムの構成の一例を示すブロック図である。
【
図27】
図27は情報処理システムが実行する処理フローを示すフローチャートである。
【発明を実施するための形態】
【0014】
以下、本発明の各実施形態について図面を参照しながら説明する。なお、実施形態の全図において、同一又は対応する部分には同一の符号を付す場合がある。以下の説明では、プログラム又は機能ブロックを主語として処理を説明する場合があるが、処理の主語が、プログラム又は機能ブロックに代えて、CPU又は計算機とされてもよい。
【0015】
<<第1実施形態>>
本発明の第1実施形態に係る情報処理システム100(割当問題処理システム)について説明する。
図1は第1実施形態に係る情報処理システム100の構成の一例を示すブロック図である。
【0016】
図1に示す情報処理システム100は、一つの物理的な計算機であってもよい。もしくは、各構成要素が別々の物理的な計算機上で実現されていてもよい。もしくは、一つ以上の物理的な計算機を備えた計算機システムに代えて、他種のシステム、例えば、物理的な計算リソース群(例えば、クラウド基盤)上に実現されたシステム(例えば、クラウドコンピューティングシステム)でもよい。
【0017】
図2は物理的な計算機のハードウェア構成の一例を示すブロック図である。
図2に示すように、物理的計算機200は、プロセッサであるCPU201、ROM202、RAM203、データの読み出し及び書き込み可能な不揮発性の記憶装置204、ネットワークインタフェース205及び入出力インタフェース206などを含む。これらは、バス207を介して互いに通信可能に接続されている。CPU201はROM202及び/又は記憶装置204に格納された図示しない各種プログラムをRAM203にロードし、RAM203にロードされたプログラムを実行することによって、各種機能を実現する。RAM203には、上述したようにCPU201が実行する各種プログラムがロードされ、CPU201が各種プログラムを実行する際に使用するデータが一時的に記憶される。ROM202及び/又は記憶装置204は、不揮発性の記憶媒体であり、各種プログラムが記憶されている。ネットワークインタフェース205は、物理的計算機200がネットワークに接続されるためのインタフェースである。入出力インタフェース206は、情報を入出力するためのインタフェースであり、例えば、キーボード、マウスなどの入力装置及びディスプレイなどの表示装置に接続されるためのインタフェースである。なお、物理的計算機200は、その一部又は全部をハードウェアにより構成することもできる。例えば、物理的計算機200は、FPGA(Field Programmable Gate Array)等を用いて、割当問題処理システムの各種機能の少なくとも一部を実現するようにしてもよい。
【0018】
図1に示すように、情報処理システム100は、本発明の「割当問題処理システム」に対応する。情報処理システム100は、入出力支援部101、部分問題サイズ決定部102、部分問題最適化部103、部分問題境界決定部104、サイクル検出部105及び制約条件修正処理部106を備える。
【0019】
入出力支援部101は、例えば、入出力インタフェース206により構成される。入出力支援部101を介して、情報処理システム100に対する情報(入力データ110及び出力データ120)の入出力が行われる。入力データ110は、割当対象、割当先及び制約条件等の割当問題を示す情報111と、部分問題サイズの上限値112とを含む。
【0020】
入出力支援部101は、例えば、入力インタフェースと接続され、入力インタフェースを介してユーザが入力する情報を受け取り、情報処理システム100が備える記憶装置204に格納する。入出力支援部101は、例えば、出力インタフェースと接続され、出力インタフェースを介して、情報処理システム100によって自動立案された計画案のデータを受け取る、あるいは目視することができる。
【0021】
部分問題最適化部103は、割当最適化問題を高速に処理するために、CMOSアニーリングのような「最適化問題専用計算技術」を用いて実現してもよい。ここで、最適化問題とは、要請された制約の下、評価値となるコスト(
図3の数式2)を最小化あるいは最大化する変数の値を求める問題を指す。最適化問題専用計算技術は、例えばイジングモデルやボルツマンマシンのような、
図3の数式1の形で記述される相互作用モデルの超高速な専用シミュレータとなっている。数式1のxおよびhは縦ベクトルであり、Jは対称行列である。数式1のxは変数である。変数xの型は、ハードウェアの性質に依存するため適宜それに合わせてモデル化すればよく、本特許には影響しない。Jやhは定数であり、変数幅や整数か実数かは、こちらも利用するハードウェアの性質に依存するが、本特許には影響しない。
【0022】
最適化問題専用計算技術では、相互作用モデルの最低エネルギー状態(数式1の左辺Hが最小となるxの値)を計算機上で探索あるいは再現することで、最適な変数の値を求める。つまり、最適化問題専用計算技術では、相互作用モデルの相互作用係数(数式1ではJに対応する値)や外場係数(数式1ではhに対応する値)などを入力として受け取り、Hが最小となるxを出力する。CMOSアニーリングのような疑似量子アニーリング、あるいは量子アニーリングを用いる場合、例えば
図3の数式2の数理モデルは数式3の2次非制約2値最適化モデル(QUBO)に書き直せば解くことができる。
【0023】
数式2の目的関数が
図3の数式3の第一項、数式2の制約条件は数式3の第二項に対応している。第二項は、制約条件が満たされるときは0、そうでない時は有限の数値を取るため、数式3の最小値を取るときは自然と制約条件を満たすことになる。
【0024】
部分問題最適化部103は、並列処理デバイス(並列処理が可能なデバイス)の一例であり、相互作用モデル(例えばイジングモデル)を演算することで割当問題を解くためのアクセラレータである。部分問題最適化部103は、一つ以上の物理的な又は仮想的なコアを有するCPU(Central Processing Unit)により実現されてもよいが、典型的には、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)又はGPU(Graphics Processing Unit)のようなハードウェア回路である。部分問題最適化部103は、例えば、半導体回路(例えばCMOS(Complementary Metal Oxide Semiconductor)回路)でイジングモデルの動作を疑似的に再現した半導体コンピュータ(例えばCMOSアニーリングマシン)でよい。部分問題最適化部103は、例えば、GPU上で動作するアルゴリズム(例えばMomentum annealing)によって実現されてもよい。また、デジタル計算機ではなく、アニーリング型量子計算機や汎用型量子計算機を用いてもよい。
【0025】
部分問題サイズ決定部102、部分問題境界決定部104、サイクル検出部105及び制約条件修正処理部106は、プロセッサ上でプログラムを実行することにより実現される。即ち、部分問題サイズ決定部102は、CPU201で実行されるROM202及び/又は記憶装置204に格納された各種プログラムで構成される。部分問題境界決定部104は、CPU201で実行されるROM202及び/又は記憶装置204に格納された各種プログラムで構成される。サイクル検出部105は、CPU201で実行されるROM202及び/又は記憶装置204に格納された各種プログラムで構成される。制約条件修正処理部106は、CPU201で実行されるROM202及び/又は記憶装置204に格納された各種プログラムで構成される。
【0026】
部分問題サイズ決定部102は、入力データ110の部分問題サイズの上限値112に基づいて、部分問題のサイズ(L)(問題日付区間のサイズ(L))の上限を決定する。部分問題最適化部103は、部分問題境界決定部104によって決定された部分問題の問題日付区間を設定するためのパラメータ(例えば、起点日(起点)及び終了日(終了点))及び割当問題に基づいて、割当問題の部分問題を設定し、設定した部分問題を解くことにより、割当問題を処理(計算)する。問題日付区間は、便宜上、「問題区間」とも称呼される場合がある。問題日付区間の部分日付区間(部分区間)である部分問題の問題日付区間は、便宜上、「部分問題区間」とも称呼される。
【0027】
部分問題境界決定部104は、所定のロジックに基づいて、部分問題の起点(起点日)、サイズ及び終了日を決定する。
【0028】
サイクル検出部105は、部分問題の設定及び計算を繰り返すことにより、特定のドメイン(問題日付区間)に何度も戻ってきてしまう停滞(問題日付区間の停滞)が起こっているか否を判定する。問題日付区間の停滞が生じている場合、エラーとして計算を中止する。
【0029】
制約条件修正処理部106は、新たに設定される部分問題の制約条件が難解な制約条件である場合に、制約条件を修正する。
【0030】
部分問題最適化部103は、割当問題に対応する全ての部分問題について、制約充足解を得ることができたら、割当データ121を出力する。
【0031】
<<実施例>>
以下、実施例により本発明をより詳細に説明する。なお、本発明は下記の実施例に限定されるものではない。
本実施例では、運搬機材に仕事を割り当てる割当問題を例に示す。この割当問題の例では、機材番号1の運搬機材(運搬機材1)、機材番号2の運搬機材(運搬機材2)、及び、機材番号3の運搬機材(運搬機材3)に対して、日付:1日、2日、3日及び4日の各日付で要求される仕事(
図4の表400を参照。)を、割り当てる。即ち、
図5の割当先の表500の空白の部分に、割当対象の表400の日付ごとに要求されている仕事を割り当てる。
【0032】
仕事は、流れ作業になっており、仕事の開始場所及び仕事終了場所が決まっている。仕事1乃至仕事5の仕事開始場所及び仕事終了場所は、
図6の表600に示す通りである。各運搬機材の最初の起点となる日の作業終了場所は、
図7の表700に示す通りである。
【0033】
この割当問題の例の制約条件は、下記の通りである。
仕事は流れ作業になっており、ある日、地点Aで始まった仕事が地点Bで終わるとすると、翌日の仕事は地点Bから開始するものとする。
【0034】
運搬機材は定期あるいは不定期な整備をする必要があり、整備には複数種類(
図8Aの整備リスト800を参照。)ある。いつ、どの整備をするかを定めた整備計画(
図8Bの整備予定表810を参照。)があらかじめ上位システムで決められている。
【0035】
整備の予定がある日は、整備に時間がとられることから、特定の仕事しか割り当てられないという制約条件(
図8Aの可能仕事リスト801乃至可能仕事リスト804を参照。)が課される。
【0036】
情報処理システム100は、このような割当問題に対して、部分問題を設定し処理する。まず
図9乃至
図17を用いて処理の概要について説明する。
【0037】
図9は処理の概要を説明するための図である。
S900:部分問題最適化部103は、初回の部分問題設定で、実線枠R1の問題日付区間の部分問題(即ち、上記の制約条件下で、1日及び2日の各日付に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0038】
S901:部分問題最適化部103は、設定した部分問題を解く。
S902:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。なお、例えば、部分問題最適化部103がアニーリングマシンで構成される場合、解が出てもその解が制約条件をやぶる(解が制約条件を充足していない)ことが生じ得る。
【0039】
解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS903に進む。なお、解が制約条件を充足していない場合の以降の処理は、説明の便宜上、説明を省略する。
【0040】
S903:部分問題境界決定部104は、部分問題最適化部103によって部分問題に対する制約条件が充足している解を一旦(暫定的に)確定させ、次に、現在の問題日付区間を終点日側(終点側)にずらして、次に解く部分問題の問題日付区間を設定する。具体的には、部分問題境界決定部104は、部分問題の起点日及びサイズ(問題日付区間の起点日及びサイズ)を決める。部分問題境界決定部104は、矢印a1に示すように、現在の部分問題の終了日(=2日)を次に解く部分問題の起点日に設定し、部分問題のサイズの上限値(Lmax=2日)を次の部分問題のサイズ(問題日付区間のサイズ)に設定する。そして、部分問題境界決定部104は、次に解く部分問題の起点日(=2日)に1日を足した日(=3日)を、次に解く部分問題の開始日とし、起点日(=2日)に部分問題のサイズ(Lmax=2日)を足した日(=4日)を次に解く部分問題の終了日とし、点線枠R2により示す問題日付区間を設定する。
【0041】
S904:
図10AのS1000に進む。
図10Aは処理の概要を説明するための図である。
【0042】
S1000:部分問題最適化部103は、
図9のS903で設定した問題日付区間(
図10Aの実線枠R2の問題日付区間)及び制約条件に基づいて部分問題(即ち、上記の制約条件下で、3日及び4日の各日付に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0043】
S1001:部分問題最適化部103は、設定した部分問題を解く。
S1002:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。解が制約条件を充足していない場合、部分問題最適化部103は、「NO」と判定しS1003に進む。例えば、
図10Bに示すような部分問題の解が計算された場合、3日に割り当てられた仕事は、制約条件としての
図4の表400に示す3日に要求される仕事を割り当てておらず、解が制約条件を充足していない。この場合、部分問題最適化部103は、「NO」と判定しS1003に進む。解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS1006に進む。
【0044】
S1003:部分問題最適化部103は、現在の部分問題に対して制約充足解を得られていないので、部分問題を作り直すため、現在の部分問題の問題日付区間を始点日側(始点側)にずらし、ずらした問題日付区間を次に解く作り直す部分問題の問題日付区間に設定する。具体的には、部分問題境界決定部104は、作り直す部分問題の起点日及びサイズを決める。部分問題境界決定部104は、矢印b1に示すように、作り直す部分問題の起点日を、現時点の起点日(=2日)から1日だけ減じた日(=1日)に決め、部分問題のサイズの上限値(Lmax=2日)を次の部分問題のサイズに決める。部分問題境界決定部104によって決定された作り直す部分問題の起点日(=1日)及びサイズ(=2日)に基づいて、問題日付区間を設定する。部分問題境界決定部104は、部分問題の起点日(=1日)に1日を足した日(=2日)を、部分問題の開始日とし、起点日に部分問題のサイズを足した日(=3日)を部分問題の終了日とし、点線枠R3により示す問題日付区間を設定する。
【0045】
S1004:制約条件修正処理部106は、作り直した部分問題について、必要に応じて制約条件を修正する。即ち、部分問題の制約条件が難解な制約条件となる場合、制約条件を緩和するように修正する。なお、この処理の詳細は後述する。
【0046】
S1005:
図12AのS1200に進む。
S1006:
図11に示すように、部分問題最適化部103は、部分問題の解を最終的に確定し(割り当て)、割当問題の割り当てが完了し、割当データ121を出力する。
【0047】
図12Aは処理の概要を説明するための図である。
S1200:部分問題最適化部103は、
図10AのS1003で作成した問題日付区間(実線枠R3の問題日付区間)及び制約条件に基づいて部分問題(即ち、上記の制約条件下で、2日及び3日の各日付に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0048】
S1201:部分問題最適化部103は、設定した部分問題を解く。
S1202:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。解が制約条件を充足していない場合、部分問題最適化部103は、「NO」と判定しS1203に進む。解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS1206に進む。例えば、作り直した部分問題を解くことにより解が更新され、
図12Bに示すように、
図10Aに示した3日の制約破れが解消され、2日の制約条件も満たしているので、解が制約条件を充足していると判定される。
【0049】
S1203:部分問題最適化部103は、現在の部分問題に対して制約充足解を得られていないので、部分問題を作り直すため、現在の部分問題の問題日付区間(実線枠R3の問題日付区間)を始点日側にずらし、次に解く作り直す部分問題の問題日付区間(点線枠R4の問題日付区間)に設定する。具体的には、部分問題境界決定部104は、作り直す部分問題の起点日及びサイズを決める。部分問題境界決定部104は、矢印c1に示すように、作り直す部分問題の起点日を、現時点の起点日(=1日)から1日だけ減じた日(=0日)に決め、部分問題のサイズの上限値(Lmax=2日)を次の部分問題のサイズに決める。部分問題境界決定部104によって決定された作り直す部分問題の起点日(=0日)及びサイズ(=2日)に基づいて、問題日付区間を設定する。部分問題境界決定部104は、部分問題の起点日(=0日)に1日を足した日(=1日)を、部分問題の開始日とし、起点日(=0日)に部分問題のサイズ(L=2日)を足した日(=2日)を部分問題の終了日とし、点線枠R4により示す問題日付区間を設定する。
【0050】
S1204:制約条件修正処理部106は、作り直した部分問題について、必要に応じて制約条件を修正する。なお、この処理の詳細は後述する。
【0051】
【0052】
S1206:部分問題境界決定部104は、部分問題最適化部103によって部分問題に対する制約条件が充足している部分問題に対する解を一旦(暫定的に)確定させ、現在の問題日付区間を終点日側にずらして、次に解く部分問題の問題日付区間を設定する。具体的には、部分問題境界決定部104は、起点日及びサイズを決める。部分問題境界決定部104は、矢印c2に示すように、現在の部分問題の終了日(=3日)を次に解く部分問題の起点日に設定し、部分問題のサイズの上限値(Lmax=2日)を次の部分問題のサイズに設定する。そして、部分問題境界決定部104は、次に解く部分問題の起点日(=3日)に1日を足した日(=4日)を、次に解く部分問題の開始日とし、起点日(=3日)に部分問題のサイズ(Lmax=2日)を足した日に相当する日(=5日)が割当問題(原問題)にないので、相当日(=5日)から1日を引いた日を部分問題の終了日(=4日)とし、点線枠R5により示す問題日付区間を設定する。即ち、部分問題の開始日と部分問題の終了日とが重なることにより、1日分の問題日付区間が設定される。
【0053】
【0054】
【0055】
S1300:部分問題最適化部103は、
図12のS1203で作成した問題日付区間(実線枠R4の問題日付区間)及び制約条件に基づいて部分問題(即ち、上記の制約条件下で、1日及び2日の各日付に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0056】
S1301:部分問題最適化部103は、設定した部分問題を解く。
【0057】
S1302:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。解が制約条件を充足していない場合、部分問題最適化部103は、「NO」と判定しS1303に進む。解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS1304に進む。
【0058】
S1303:部分問題最適化部103は、有効な部分問題の作り直しは困難と判断し、エラーを通知する。
【0059】
S1304:部分問題境界決定部104は、部分問題に対する解を一旦(暫定的に)確定させ、次に、現在の問題日付区間を終点日側にずらして、次に解く部分問題の問題日付区間を設定する。具体的には、部分問題境界決定部104は、起点日及びサイズを決める。部分問題境界決定部104は、矢印d1に示すように、現在の部分問題の終了日(=2日)を次に解く部分問題の起点日に設定し、部分問題のサイズの上限値(Lmax=2日)を次の部分問題のサイズに設定する。そして、部分問題境界決定部104は、次に解く部分問題の起点日(=2日)に1日を足した日(=3日)を、次に解く部分問題の開始日とし、起点日(=2日)に部分問題のサイズ(Lmax=2日)を足した日(=4日)を次に解く部分問題の終了日とし、点線枠R6により示す問題日付区間を設定する。
【0060】
【0061】
【0062】
S1400:部分問題最適化部103は、
図12のS1206で作成した問題日付区間(実線枠R5の問題日付区間)及び制約条件に基づいて部分問題(即ち、上記の制約条件下で、4日に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0063】
S1401:部分問題最適化部103は、設定した部分問題を解く。
【0064】
S1402:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。解が制約条件を充足していない場合、部分問題最適化部103は、「NO」と判定しS1403に進む。解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS1404に進む。
【0065】
S1403:部分問題境界決定部104は、現在の部分問題に対して制約充足解を得られていないので、部分問題を作り直すため、現在の部分問題の問題日付区間を始点日側にずらし、ずらした問題日付区間を次に解く作り直す部分問題の問題日付区間に設定する。なお、説明の便宜上、これ以降の処理の説明は省略する。
【0066】
S1404:
図15に示すように、部分問題最適化部103は、部分問題の解を最終的に確定し(割り当て)、割当問題の割り当てが完了し、割当データ121を出力する。
【0067】
【0068】
S1600:部分問題最適化部103は、
図13のS1304で作成した問題日付区間(実線枠R6により示す問題日付区間)及び制約条件に基づいて部分問題(即ち、上記の制約条件下で、3日及び4日の各日付に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0069】
S1601:部分問題最適化部103は、設定した部分問題を解く。
【0070】
S1602:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。解が制約条件を充足していない場合、部分問題最適化部103は、「NO」と判定しS1603に進む。解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS1604に進む。
【0071】
S1603:部分問題境界決定部104は、現在の部分問題に対して制約充足解を得られていないので、部分問題を作り直すため、現在の部分問題の問題日付区間を始点日側にずらし、ずらした問題日付区間を次に解く作り直す部分問題の問題日付区間に設定する。なお、これ以降の処理の説明を省略する。
【0072】
S1604:
図17に示すように、部分問題最適化部103は、部分問題の解を最終的に確定し(割り当て)、割当問題の割り当てが完了し、割当データ121を出力する。
【0073】
次に、情報処理システム100が割当問題を処理するときの具体的作動について説明する。
図18は情報処理システム100が実行する処理フローを示すフローチャートである。
【0074】
情報処理システム100は、ステップ1800から処理を開始して以下に述べる処理を実行する。
【0075】
ステップ1805:情報処理システム100は、入力データ110を読み込み、計算対象全体の期間(問題日付区間)の開始日DINT~終了日DENDを記憶する。
【0076】
ステップ1810:部分問題サイズ決定部102は、部分問題のサイズ(L)(問題日付区間のサイズ(L))を決定する。
【0077】
ステップ1815:部分問題サイズ決定部102は、「DINT-1」を起点日Xに設定し、Xを起点とした取った回数のカウンタNXの値をリセット(カウンタNX=0)にする。
【0078】
ステップ1820:部分問題最適化部103は、部分問題を設定する。
【0079】
ステップ1825:部分問題最適化部103は、部分問題での候補Aijを作成する。例えば、
図19の表1901に示すように、部分問題(1日~2日)に対して、各機材1乃至3に対する仕事の割当の候補(各候補)は、「1」又は「0」の2値からなるベクトルによって表現される。この表では、列方向は割当の候補を示し、行方向は割当対象の機材と各日付の仕事をそれぞれ示す。
【0080】
例えば、j=1の列は、部分問題(1日~2日)における割当候補の一つであり、i=1の行が機材1への割当の有無(1があり、0がなし)を示すため、このj=1の割当候補が機材1への仕事の割当候補を意味する。この候補では、i=4、7のそれぞれが1であるため、機材1に対して、1日目は仕事2が割り当てられ、2日目は仕事1が割り当てられる。
【0081】
ステップ1830:部分問題最適化部103は、最適化計算により候補選択を行う。この最適化計算は、運搬機材1乃至運搬機材3の各日の仕事を割り当て、割り当てる仕事の重複は許さないという集合分割問題を解くものであり、一般的に
図3の数式2のように表現される。この数式2において、どの列jの組合せを選択するかを、バイナリ変数xjで決定する。具体的には、列jの割当候補を選択する場合、xj=1、選択しない場合、xj=0となる。選択した候補のみを取り出したものが、実際の計画案(割当データ121)となる。数式2のAijは、
図19の例では、太点線枠で囲まれた0/1のバイナリ値の行列である。Cjは、割当候補jにおいて所定の条件を満たす場合にコストとしてカウントする。例えば、割当候補jが所定の条件を満たす場合、コストCjを1として、所定の条件を満たさない場合の場合、コストCjを0とする。ここで得られる結果(解)としては、運搬機材1乃至運搬機材3の1日及び2日の3つの仕事の割当候補の集合が得られる。また、これらは、数式2によってCjが小さい候補の集合である。
【0082】
ステップ1835:部分問題最適化部103は、制約充足判定を行う。即ち、解に制約やぶれが発生しているか否かの判定を行う。
【0083】
ステップ1840:部分問題境界決定部104は、ステップ1835の制約充足判定の結果により処理を分岐させる。部分問題境界決定部104は、制約充足判定により制約条件を充足していると判定した場合、「YES」と判定し、ステップ1845に進む。部分問題境界決定部104は、制約充足判定により制約条件を充足していないと判定した場合、「NO」と判定し、ステップ1850に進む。
【0084】
ステップ1845:部分問題境界決定部104は、現時点の起点日Xから1だけ減じた日を、新たな起点日Xに設定する。これにより、問題日付区間が始点日側にずらされる。
【0085】
ステップ1850:部分問題境界決定部104は、ステップ1820にて設定した部分問題の期間の終了日を、新たな起点日Xに設定する。これにより、問題日付区間が終点日側にずらされる。
【0086】
ステップ1855:部分問題境界決定部104は、起点日Xに1を加算した日を、部分問題開始日D0に設定し、起点日Xに部分問題のサイズLだけ加算した日を、部分問題終了日D1に設定し、部分問題(次に解く予定の部分問題)の問題日付区間を設定する。
【0087】
ステップ1860:サイクル検出部105は、ステップ1855で設定した問題日付区間の部分問題について、計算エラー判定条件を満たすか否かを判定するサイクル判定を行う。このサイクル判定は、特定のドメイン(問題日付区間)に何度も戻ってきてしまう停滞が行っていないかを判定する。この判定は、便宜上、「停滞判定」と称呼される。なお、この停滞判定の詳細は後述する。
【0088】
ステップ1865:制約条件修正処理部106は、部分問題の制約条件修正処理を行う。なお、この処理の詳細は後述する。
【0089】
ステップ1870:部分問題最適化部103は、ステップ1820で設定した部分問題の終了日D1が期間の終了日DENDに達し、且つ、制約条件を充足する解を得ているか否かを判定する。ステップ1820で設定した部分問題の終了日D1が期間の終了日DENDに達していない場合、制約条件を充足する解を得ているか否かにかかわらず、部分問題最適化部103は、「NO」と判定してステップ1820に戻り、次に解く部分問題を設定する。ステップ1820で設定した部分問題の終了日D1が期間の終了日DENDに達しているが、その部分問題に関して制約条件を充足する解を得ていない場合も、部分問題最適化部103は、「NO」と判定してステップ1820に戻り、次に解く部分問題を設定する。
【0090】
部分問題最適化部103は、ステップ1820で設定した部分問題の終了日D1が期間の終了日DENDに達し、且つ、その部分問題が制約条件を充足する解を得ている場合、部分問題最適化部103は、「YES」と判定してステップ1875に進む。
【0091】
ステップ1875:部分問題最適化部103は、計算された割当問題に対する割当データ121を出力する。
【0092】
情報処理システム100は、ステップ1895に進み、本処理フローを終了する。
【0093】
図20は上述したステップ1860の停滞判定の詳細を説明するためのフローチャートである。
サイクル検出部105は、
図18のステップ1860に進むと、ステップ2000から処理を開始し、以下の処理を実行する。
【0094】
ステップ2005:サイクル検出部105は、現時点の起点日Xに対応するカウンタNXの値を1だけ増加した値を、現時点の起点日XのカウンタNXの値に設定する。なお、カウンタNXは、異なる起点日毎に用意され、記憶装置204に格納される。本実施例では、0日に対応するカウンタNXが用意され、1日に対応するカウンタNXが用意され、2日に対応するカウンタNXが用意され、3日に対応するカウンタNXが用意されている。
【0095】
ステップ2010:サイクル検出部105は、現時点の起点日Xに対応するカウンタNXの値が0より大きいか否かを判定する。現時点の起点日Xに対応するカウンタNXの値が0以下である場合、サイクル検出部105は、「NO」と判定してステップ2095に進んで本処理フローを一旦終了する。。現時点の起点日XのカウンタNXの値が0より大きい場合、サイクル検出部105は、「YES」と判定してステップ2015に進む。
【0096】
ステップ2015:サイクル検出部105は、現時点の起点日Xに対応するカウンタNXの値が所定の閾値NMAXより小さいか否かを判定する。現時点の起点日Xに対応するカウンタNXの値が閾値NMAXより小さい場合、サイクル検出部105は、「YES」と判定してステップ2095に進み、本処理フローを一旦終了する。現時点の起点日Xに対応するカウンタNXの値が閾値NMAX以上である場合、この現時点の起点日Xで何度も部分問題が設定されたことがわかるので、特定の問題日付区間での部分問題の計算が繰り返される停滞が生じている可能性が高い。従って、この場合、サイクル検出部105は、ステップ2015に「NO」と判定してステップ2020に進む。
【0097】
ステップ2020:サイクル検出部105は、現時点の起点日Xから1だけ減じた後を判定用起点日Xdの値に設定する。
【0098】
ステップ2025:判定用起点日Xdの値が、DINTから1だけ減じた値より小さいか否かを判定する。判定用起点日Xdの値がDINTから1だけ減じた値以上である(即ち、DINTから1だけ減じた値より小さくない場合)場合、0日以上のどこかの起点日に基づく特定の問題日付区間で、停滞が生じている可能性が高い。従って、サイクル検出部105は、「NO」と判定してステップ2030に進む。判定用起点日Xdの値が、DINTから1だけ減じた値(=0日)より小さい場合、サイクル検出部105は、「YES」と判定してステップ2095に進み、本処理フローを一旦終了する。
【0099】
ステップ2030:サイクル検出部105は、エラーログを出力する。
【0100】
ステップ2035:サイクル検出部105は、システムを終了する(ステップ1895)。
【0101】
図21は上述したステップ1865の部分問題の制約条件修正の処理の詳細を説明するためのフローチャートである。
【0102】
図18のステップ1865に進むと、制約条件修正処理部106は、ステップ2100から処理を開始し、以下の処理を実行する。
【0103】
ステップ2105:制約条件修正処理部106は、難問リストの作成を開始する。難問リストとは、部分問題についての難解な制約条件をリスト化したものである。例えば、ある日のある運搬機材に対して整備の予定がある場合において、その整備の予定があるために、ある運搬機材に対して割り当て可能な仕事の種類が一つしかない場合、そのある整備の予定がある運搬機材に対して対して一つの仕事しか割り当てることができないという制約条件(例えば、ある日に整備1の予定がある運搬機材に対して割り当て可能な仕事は仕事5のみであるという制約条件)は、難解な制約条件となり難問リストにリスト化される。
【0104】
制約条件修正処理部106は、ステップ2110乃至2130のループ処理を部分問題内の全ての日について、各日で考慮する整備を確認するまで行う。ここで、各日で考慮する整備とは、整備予定の整備のこと(
図8Bの整備予定表810を参照。)をいう。
【0105】
(ステップ2110乃至2130のループ処理)
ステップ2110:制約条件修正処理部106は、整備予定表810を参照し、部分問題の全ての日のうちの未選択の一つの日について考慮すべき整備を一つ以上選択する。例えば、部分問題の問題日付区間が3日及び4日である場合で、ある一つの日が3日である場合、3日で考慮すべき整備は整備1及び整備2である。このステップでは、これらの整備を選択する。
【0106】
ステップ2115:制約条件修正処理部106は、選択した整備に対応する可能仕事リスト(
図8Aを参照。)内の仕事数をカウントする。
【0107】
例えば、整備1及び整備2を選択した場合、整備1の可能仕事リスト801の仕事の数を数え(この場合、1つと数える。)、整備2の可能仕事リスト802の数を数える(この場合、2つと数える。)。
【0108】
ステップ2120:制約条件修正処理部106は、各整備の数えた仕事の数が1つであるか否かを判定する。仕事数が1つではない場合、制約条件修正処理部106は、「NO」と判定してステップ2130に進む。仕事数が1である場合、制約条件修正処理部106は、「YES」と判定してステップ2125に進む。
【0109】
ステップ2125:制約条件修正処理部106は、仕事数が1つに該当する日付、整備及び該当仕事を難問リストに格納する(リスト化する。)。
【0110】
ステップ2130:制約条件修正処理部106は、ループ終了条件(部分問題のすべての日について、各日で考慮する整備を確認した)が成立している場合、ステップ2135に進む。制約条件修正処理部106は、ループ終了条件が成立していない場合、ループ処理の開始点のステップ2110に戻り、未選択の日一つの日について考慮する整備を一つ以上選択する。
【0111】
ステップ2135:制約条件修正処理部106は、難問リストの作成を終了する。その結果、例えば、
図22に示すような部分問題(3日、4日)の難問リストが作成され、記憶装置204に記憶される。
【0112】
ステップ2140:制約条件修正処理部106は、部分問題内の各日の整備の可能仕事リスト(
図23)の作成を開始する。まず、制約条件修正処理部106は、部分問題内の各日の整備の可能仕事リスト(以下、「テンプレート可能仕事リスト」とも称呼される場合がある。)を用意する。この時点のテンプレート可能仕事リストの内容は、
図8Aに示した可能仕事リスト801乃至可能仕事リスト804と同じである。各日の整備のテンプレート可能仕事リストの各整備の可能仕事リストの仕事を、以下の処理によって必要に応じて削除することにより、部分問題内の各日の整備の可能仕事リスト(
図23)が作成される。
【0113】
(ステップ2145乃至2170のループ処理)
制約条件修正処理部106は、ステップ2145乃至2170のループ処理を部分問題内の各日を確認するまで(
図8Aに示した可能仕事リスト801乃至可能仕事リスト804から各日の可能仕事リスト(
図23)を作成するまで)行う。
【0114】
ステップ2145:制約条件修正処理部106は、部分問題内の日付のうちの一つを選択する。
【0115】
(ステップ2150乃至2165のループ処理)
制約条件修正処理部106は、ステップ2150乃至2165のループ処理を、難問リストに存在しない全ての整備を確認するまで行う。
【0116】
ステップ2150:制約条件修正処理部106は、
図8Aの整備リスト800から、難問リストに存在しない未選択の整備を一つ選択する。
【0117】
ステップ2155:制約条件修正処理部106は、部分問題内の選択した日付のテンプレート可能仕事リストの選択した整備の可能仕事リストに難問リストに含まれる制約条件(仕事)があるか否かを判定する。
【0118】
選択した日付のテンプレート可能仕事リストの選択した整備の可能仕事リスト内に難問リストに含まれる制約条件(仕事)がある場合、制約条件修正処理部106は、「YES」と判定してステップ2160に進む。選択した日付のテンプレート可能仕事リストの整備の可能仕事リスト内に難問リストに含まれる制約条件(仕事)がない場合、制約条件修正処理部106は、「NO」と判定してステップ2165に直接進む。
【0119】
ステップ2160:制約条件修正処理部106は、選択した日付のテンプレート可能仕事リストのうちの選択した整備の可能仕事リスト内から難問リストに含まれる仕事を削除する。
【0120】
ステップ2165:制約条件修正処理部106は、ステップ2150乃至ステップ2165のループ終了条件(難問リストに存在しない全ての整備を確認したとの条件)が成立している場合、ステップ2170に進む。制約条件修正処理部106は、ループ終了条件が成立していない場合、ループ処理の開始点のステップ2150に戻り、整備リスト800から難問リストに存在しない未選択の整備を一つ選択する。
【0121】
ステップ2170:制約条件修正処理部106は、ステップ2145乃至ステップ2170のループ終了条件(部分問題内の各日を全て確認したとの条件)が成立しているか否かを確認する。ステップ2145乃至ステップ2170のループ終了条件が成立していない場合、制約条件修正処理部106は、ステップ2145乃至ステップ2170のループ処理の開始点のステップ2145に戻り、部分問題内の日付のうちの未選択の一つを選択する。
【0122】
ステップ2145乃至ステップ2170のループ終了条件が成立している場合、制約条件修正処理部106は、ステップ2195に進んで本処理フローを一旦終了する。
【0123】
これにより、解に制約破りが発生した場合に、制約条件を緩和するように修正した上で部分問題を設定し、次に解く部分問題について制約条件をやぶる解が発生し難くすることができる。
【0124】
<効果>
以上説明したように、本発明の第1実施形態に係る情報処理システム100は、部分問題に分解した際に制約充足困難で計算が終了しなくなる問題を解消することで、大規模な割当問題(従来の手法では困難な規模のデータ)を処理可能にする。
【0125】
<<第2実施形態>>
本発明の第2実施形態に係る情報処理システム100(割当問題処理システム)について説明する。本発明の第2実施形態に係る情報処理システム100(割当問題処理システム)は、以下の点のみにおいて、第1実施形態に係る情報処理システム100と相違点を有する。
・第2実施形態に係る情報処理システム100は、制約条件修正処理部106を有していない。
【0126】
以下、この相違点を中心として説明する。
【0127】
図24は第2実施形態に係る情報処理システム100の構成の一例を示すブロック図である。
図24に示すように、第2実施形態に係る情報処理システム100は、入出力支援部101、部分問題サイズ決定部102、部分問題最適化部103、部分問題境界決定部104及びサイクル検出部105を備える。
【0128】
図25は第2実施形態に係る情報処理システム100が実行する処理フローを示すフローチャートである。このフローチャートは、
図18のフローチャートからステップ1865を省略したこと以外、
図18のフローチャートと同様である。
【0129】
情報処理システム100は、この処理フローを実行することにより、第1実施形態と同様、特定の部分問題の解に制約破れが生じている場合に、問題日付区間を割当問題の始点日側にずらして、部分問題を作り直す。これにより、制約破れが生じている解を、制約破れがないように、修正することができる。
【0130】
<効果>
本発明の第2実施形態に係る割当問題処理システムによれば、部分問題に分解した際に制約充足困難で計算が終了しなくなる問題を解消することで、大規模な割当問題(従来の手法では困難な規模のデータ)を処理可能にする。
【0131】
<<第3実施形態>>
本発明の第3実施形態に係る情報処理システム100(割当問題処理システム)について説明する。本発明の第3実施形態に係る情報処理システム100(割当問題処理システム)は、以下の点のみにおいて、第1実施形態に係る情報処理システム100と相違点を有する。
・第3実施形態に係る情報処理システム100は、部分問題境界決定部104を有していない。
【0132】
以下、この相違点を中心として説明する。
【0133】
図26は第3実施形態に係る情報処理システム100の構成の一例を示すブロック図である。
図26に示すように、第3実施形態に係る情報処理システム100は、入出力支援部101、部分問題サイズ決定部102、部分問題最適化部103、部分問題境界決定部104及びサイクル検出部105を備える。
【0134】
図27は第3実施形態に係る情報処理システム100が実行する処理フローを示すフローチャートである。このフローチャートは、
図18のフローチャートにおいて、ステップ1850を省略し、ステップ1840で「NO」と判定された場合に、直接ステップ1865に進むようにした点以外、
図18のフローチャートと同様である。
【0135】
情報処理システム100は、この処理フローを実行することにより、第1実施形態と同様、特定の部分問題の解に制約破れが生じている(ステップ1840にて「NO」との判定)場合に、制約破れが生じている部分問題の制約条件が緩和するように修正し(ステップ1865)、修正後の制約条件及び同じ問題日付区間で部分問題を設定し、その部分問題を解き直す。これにより、制約破れが生じている解を、制約破れがないように、修正することができる。
【0136】
<効果>
本発明の第3実施形態に係る割当問題処理システムによれば、部分問題に分解した際に制約充足困難で計算が終了しなくなる問題を解消することで、大規模な割当問題(従来の手法では困難な規模のデータ)を処理可能にする。
【0137】
<<変形例>>
本発明は上記各実施形態に限定されることなく、本発明の範囲内において種々の変形例を採用することができる。更に、上記各実施形態は、本発明の範囲を逸脱しない限り、互いに組み合わせることが可能である。
【0138】
上記各実施形態において、部分問題のサイズは、上記に限定されるものではない。
【0139】
上記第1実施形態において、部分問題の解(部分解)が制約条件を充足しない場合、起点日を問題日付区間の始点日側にずらして所定サイズと異なるサイズの問題日付区間の部分問題に作り直すことにより次に解く前記部分問題を生成するようにしてもよい。
【0140】
図28はこの変形例の処理の概要を説明するための図である。
図28は、
図10Aと同様、日付が1日及び2日まで制約充足解が計算されたので、日付が3日及び4日の問題日付区間を生成し、日付3日及び4日の部分問題を設定する(S1000)ときの処理の概要を説明する図である。
【0141】
この場合において、この変形例では次のように処理が実行される。
【0142】
S1000:部分問題最適化部103は、
図9のS903で設定した問題日付区間(
図10Aの実線枠R2の問題日付区間)及び制約条件に基づいて部分問題(即ち、上記の制約条件下で、3日及び4日の各日付に要求される仕事を運搬機材1乃至運搬機材3に割り当てる部分問題)を設定する。
【0143】
S1001:部分問題最適化部103は、設定した部分問題を解く。
【0144】
S1002:部分問題最適化部103は、解が制約条件を充足しているか否かを判定する。解が制約条件を充足していない場合、部分問題最適化部103は、「NO」と判定しS1283に進む。解が制約条件を充足している場合、部分問題最適化部103は、「YES」と判定しS1006に進む。
【0145】
S1283:部分問題最適化部103は、現在の部分問題に対して制約充足解を得られていないので、部分問題を作り直すため、現在の部分問題の問題日付区間を始点日側にずらし、且つ、問題日付区間のサイズを変更し、その問題日付区間を次に解く作り直す部分問題の問題日付区間に設定する。具体的には、部分問題境界決定部104は、作り直す部分問題の起点日及びサイズを決める。部分問題境界決定部104は、矢印b1に示すように、作り直す部分問題の起点日を、現時点の起点日(=2日)から1日だけ減じた日(=1日)に決め、部分問題のサイズの上限値+1(=Lmax(2日)+1日)を次の部分問題のサイズに決める。部分問題境界決定部104によって決定された作り直す部分問題の起点日(=1日)及びサイズ(=3日)に基づいて、問題日付区間を設定する。部分問題境界決定部104は、部分問題の起点日(=1日)に1日を足した日(=2日)を、部分問題の開始日とし、起点日に部分問題サイズを足した日(=4日)を部分問題の終了日とし、点線枠R13により示す問題日付区間を設定する。
【0146】
S1004:制約条件修正処理部106は、作り直した部分問題について、必要に応じて制約条件を修正する。即ち、部分問題の制約条件が難解な制約条件となる場合、制約条件を緩和するように修正する。なお、以降の処理の説明は省略する。
【0147】
S1006:
図11に示すように、部分問題最適化部103は、部分問題の解を最終的に確定し(割り当て)、割当問題の割り当てが完了し、割当データ121を出力する。
【0148】
以上説明したように、この変形例では、部分解が制約条件を充足しない場合、起点日を問題日付区間の始点側にずらして所定サイズ(Lmax)と異なるサイズの部分問題に作り直すことにより次に解く部分問題を生成する。
【0149】
なお、この変形例の特徴を第2実施形態に適用してもよい。
【0150】
上記第1実施形態において、部分解が制約条件を充足しない場合、起点日を問題日付区間の始点日側にずらして所定サイズの問題日付区間又は所定サイズとは異なるサイズの問題日付区間の部分問題に作り直すことにより次に解く部分問題を生成することをまず行い、次に解く部分問題の部分解が制約条件を充足しない場合、起点日をずらさないで、当該部分問題のサイズとは異なるサイズの部分問題に作り直すことにより次に解く前記部分問題を生成するようにしてもよい。
【0151】
より具体的には、上記第1実施形態において、部分解が制約条件を充足しない場合、起点日を問題日付区間の始点日側にずらして所定サイズと異なるサイズの問題日付区間の部分問題に作り直すことにより次に解く部分問題を生成することをまず行い、次に解く前記部分問題の部分解が制約条件を充足しない場合、起点日をずらさないで、所定サイズと同じサイズの問題日付区間の部分問題に作り直すことにより次に解く部分問題を生成するようにしてもよい。
【0152】
上記第1実施形態において、部分解が制約条件を充足しない場合、起点日を問題日付区間の始点日側にずらして所定サイズと同じサイズの問題日付区間の部分問題に作り直すことにより次に解く部分問題を生成することをまず行い、次に解く前記部分問題の部分解が制約条件を充足しない場合、起点日をずらさないで、所定サイズと異なるサイズの問題日付区間の部分問題に作り直すことにより次に解く部分問題を生成するようにしてもよい。
【0153】
なお、これらの変形例の特徴を第2実施形態に適用してもよい。
【符号の説明】
【0154】
100…情報処理システム、101…入力支援部、102…部分問題サイズ決定部、103…部分問題最適化部、104…部分問題境界決定部、105…サイクル検出部、106…制約条件修正処理部、110…入力データ、120…出力データ