特許第6628041号(P6628041)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 日本電信電話株式会社の特許一覧 ▶ 国立大学法人大阪大学の特許一覧

特許6628041最適化問題解決装置、方法、及びプログラム
<>
  • 特許6628041-最適化問題解決装置、方法、及びプログラム 図000045
  • 特許6628041-最適化問題解決装置、方法、及びプログラム 図000046
  • 特許6628041-最適化問題解決装置、方法、及びプログラム 図000047
  • 特許6628041-最適化問題解決装置、方法、及びプログラム 図000048
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6628041
(24)【登録日】2019年12月13日
(45)【発行日】2020年1月8日
(54)【発明の名称】最適化問題解決装置、方法、及びプログラム
(51)【国際特許分類】
   G06Q 10/04 20120101AFI20191223BHJP
   G06N 99/00 20190101ALI20191223BHJP
   G06F 17/17 20060101ALI20191223BHJP
【FI】
   G06Q10/04
   G06N99/00 180
   G06F17/17
【請求項の数】5
【全頁数】23
(21)【出願番号】特願2016-113044(P2016-113044)
(22)【出願日】2016年6月6日
(65)【公開番号】特開2017-219979(P2017-219979A)
(43)【公開日】2017年12月14日
【審査請求日】2018年7月20日
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(73)【特許権者】
【識別番号】504176911
【氏名又は名称】国立大学法人大阪大学
(74)【代理人】
【識別番号】110001519
【氏名又は名称】特許業務法人太陽国際特許事務所
(72)【発明者】
【氏名】鈴木 潤
(72)【発明者】
【氏名】西野 正彬
(72)【発明者】
【氏名】梅谷 俊治
【審査官】 関 博文
(56)【参考文献】
【文献】 特開2001−142708(JP,A)
【文献】 特表2008−518359(JP,A)
【文献】 特開平03−179562(JP,A)
【文献】 特開平05−143572(JP,A)
【文献】 松原 仁,2010年のパーソナル・コンピューティング,日経バイト 第100号,日本,日経BP社,1998年 5月15日,第100号,p.264-267,ISSN:0289-6508
【文献】 米田 清 ,スケジューリングの理論と応用−II,システム/制御/情報 第41巻 第4号,日本,システム制御情報学会,1997年 4月15日,第41巻, 第4号,p.14-22,ISSN:0916-1600
(58)【調査した分野】(Int.Cl.,DB名)
G06Q 10/00−99/00
G06F 17/17
G06N 99/00
(57)【特許請求の範囲】
【請求項1】
0又は1の値をとる最適化変数の各々と、前記最適化変数の各々を選択した場合のコスト値の各々と、前記最適化変数の各々に対する制約の各々とが与えられたときに、前記制約を満たしつつ、前記最適化変数を最適化するための整数計画問題を解く最適化問題解決装置であって、
貪欲法による山登り法に従って、前記制約を満たしつつ、予め定められた、前記最適化変数の各々及び前記コスト値の各々と、前記制約の各々に対する、前記制約を表す不等式制約を等式制約に変換するための補助変数と、前記制約の各々に対する、前記制約を満たさない度合いを表す違反度合いとを含む目的関数を最適化するように、前記最適化変数を選択して更新することを繰り返す更新部と、
予め定められた反復終了条件を満たすまで、前記更新部による更新を繰り返させる反復判定部と、
前記更新部による更新で前記目的関数の最適値が得られる毎に、前記目的関数の最適値を比較して、より良い前記目的関数の最適値が得られたときの前記最適化変数の各々の値を暫定解として保持する結果比較部と、を含み、
前記更新部は、
前記最適化変数の各々を初期化する初期化部と、
前記最適化変数の各々及び前記制約の各々に対する違反度合いに基づいて、前記目的関数を最適化するように、前記制約の各々に対する補助変数を更新する補助変数更新部と、
前記最適化変数の各々に基づいて、前記目的関数を最適化するように、前記制約の各々に対する違反度合いを更新する違反度合更新部と、
前記制約の各々に対する補助変数及び前記制約の各々に対する違反度合いに基づいて、前記最適化変数の値を変更することにより前記目的関数の値を最も良くする前記最適化変数を選択して更新する最適化変数更新部と、
前記最適化変数の値を変更しても前記目的関数の値が良くならず、かつ、前記制約の各々を満たすまで、前記補助変数更新部による更新、前記違反度合更新部による更新、及び最適化変数更新部による更新を繰り返させる終了判定部と、
を含む最適化問題解決装置。
【請求項2】
前記最適化変数更新部は、前記最適化変数を選択して更新したとき前記最適化変数の各々の値の組み合わせを表すbit列についてハッシュ値を計算し、キャッシュテーブルにおいて、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、前記最適化変数の各々の値の組み合わせを表すbit列と、前記計算されたハッシュ値をアドレスとした位置に格納されているbit列とが一致するか否かを判定し、一致すると判定された場合、前記更新部による処理を終了し、一致しないと判定された場合、前記キャッシュテーブルにおいて、前記計算されたハッシュ値をアドレスとした位置に、前記最適化変数の各々の値の組み合わせを表すbit列を格納する請求項に記載の最適化問題解決装置。
【請求項3】
0又は1の値をとる最適化変数の各々と、前記最適化変数の各々を選択した場合のコスト値の各々と、前記最適化変数の各々に対する制約の各々とが与えられたときに、前記制約を満たしつつ、前記最適化変数を最適化するための整数計画問題を解く最適化問題解決装置における最適化問題解決方法であって、
更新部が、貪欲法による山登り法に従って、前記制約を満たしつつ、予め定められた、前記最適化変数の各々及び前記コスト値の各々と、前記制約の各々に対する、前記制約を表す不等式制約を等式制約に変換するための補助変数と、前記制約の各々に対する、前記制約を満たさない度合いを表す違反度合いとを含む目的関数を最適化するように、前記最適化変数を選択して更新することを繰り返すステップと、
反復判定部が、予め定められた反復終了条件を満たすまで、前記更新部による更新を繰り返させるステップと、
結果比較部が、前記更新部による更新で前記目的関数の最適値が得られる毎に、前記目的関数の最適値を比較して、より良い前記目的関数の最適値が得られたときの前記最適化変数の各々の値を暫定解として保持するステップと、を含み、
前記更新部が更新するステップは、
初期化部が、前記最適化変数の各々を初期化するステップと、
補助変数更新部が、前記最適化変数の各々及び前記制約の各々に対する違反度合いに基づいて、前記目的関数を最適化するように、前記制約の各々に対する補助変数を更新するステップと、
違反度合更新部が、前記最適化変数の各々に基づいて、前記目的関数を最適化するように、前記制約の各々に対する違反度合いを更新するステップと、
最適化変数更新部が、前記制約の各々に対する補助変数及び前記制約の各々に対する違反度合いに基づいて、前記最適化変数の値を変更することにより前記目的関数の値を最も良くする前記最適化変数を選択して更新するステップと、
終了判定部が、前記最適化変数の値を変更しても前記目的関数の値が良くならず、かつ、前記制約の各々を満たすまで、前記補助変数更新部による更新、前記違反度合更新部による更新、及び最適化変数更新部による更新を繰り返させるステップと、
を含む最適化問題解決方法。
【請求項4】
前記最適化変数更新部が更新するステップは、前記最適化変数を選択して更新したとき前記最適化変数の各々の値の組み合わせを表すbit列についてハッシュ値を計算し、キャッシュテーブルにおいて、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、前記最適化変数の各々の値の組み合わせを表すbit列と、前記計算されたハッシュ値をアドレスとした位置に格納されているbit列とが一致するか否かを判定し、一致すると判定された場合、前記更新部による処理を終了し、一致しないと判定された場合、前記キャッシュテーブルにおいて、前記計算されたハッシュ値をアドレスとした位置に、前記最適化変数の各々の値の組み合わせを表すbit列を格納する請求項に記載の最適化問題解決方法。
【請求項5】
コンピュータを、請求項1又は請求項2に記載の最適化問題解決装置の各部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、最適化問題解決装置、方法、及びプログラムに係り、特に、整数計画問題を解くための最適化問題解決装置、方法、及びプログラムに関する。
【背景技術】
【0002】
資源の割り当て問題、アルバイトのシフト作成、容器への詰め込み問題など、任意の制約の元で、設定した効用を最良にする解を得たいといった場面は、現実世界でしばしば起こる状況である。このような場合、例えば、現実世界の問題を数式に落とし込んで最適化問題として定式化し、その最適化問題を解くことで、現実世界の問題を効果的に実行する方法を獲得するといった方法論がある。
【0003】
ここでは、特に0−1整数計画問題と呼ばれる組合せ最適化問題で定式化できる問題を対象とする。一般的な0−1整数計画問題で表現できる現実の問題は多岐にわたるため、効果的な解法を作成することができれば、現実世界の多くの問題を効率的に解くことができる場面が増えることが見込める。
【0004】
0−1整数計画問題は、一般形として以下のような式で表現できる。
【0005】
【数1】
【0006】
ここで、zは最適化したい変数である。ここでは、0−1整数計画問題のみにフォーカスを当てているため、zの取り得る値は、0または1のみである。この、0または1のみの値を取るということを、上記(1)式では
【0007】
【数2】
【0008】
で表現している。また、最適化変数zの個数は、
【0009】
【数3】
【0010】
個であり、全体で
【0011】
【数4】
【0012】
である。ここでは、簡単のため、
【0013】
【数5】
【0014】
と記述する。ただし、
【0015】
【数6】
【0016】
は1から始まる連続した整数の集合とし、1から
【0017】
【数7】
【0018】
までを含むものとする。また、
【0019】
【数8】
【0020】
も同様に、それぞれ1から始まる連続した整数の集合とし、それぞれ、
【0021】
【数9】
【0022】
までを含むものとする。
【0023】
はzを選択した際のコスト値になっている。もしcが負の値であれば、選択することによって加点される状況であると解釈できる。目的関数はΣであるので、コストの線形和が最も小さくなるように最適化変数zを選択する、すなわちz=1とする問題といえる。ただし、最適化変数zは自由に選択できるわけではなく、与えられた制約を満たす組み合わせで選択しなくてはいけない。
【0024】
上記0−1整数計画問題の解法は、特定の問題に特化して効率的に解く方法が数多く存在する。一般論として、多様な問題に対して総じて効率的に解ける方法論として、限定分枝法に基づく方法が広く用いられている。ただし、これは一般には汎用ソルバーと呼ばれ、事前にどのような問題が与えられるかわからない状況に対応することが主眼となっているため、事前に解きたい問題の性質がわかっている場合は、その解きたい問題に適した専用の解法を用いた方が圧倒的に効率的に解を得られる場合がある。
【先行技術文献】
【非特許文献】
【0025】
【非特許文献1】Stephen Boyd, Neal Parikh, Eric Chu, Borja Peleato, and Jonathan Eckstein. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers. Foundations and Trends in Machine Learning, 2011.
【発明の概要】
【発明が解決しようとする課題】
【0026】
前述の通り、0−1整数計画問題を解くためアルゴリズムはこれまでに様々な方法論が提案され、それぞれの方法はそれぞれの得意な問題の領域が存在する。そこで、0−1整数計画問題と呼ばれる組合せ最適化問題に関して、特に大規模かつ実行可能解が容易に発見できないといった特徴を持つ最適化問題を効率的に解く課題に取り組む。
【0027】
本発明は、上記事情を鑑みて成されたものであり、効率よく、整数計画問題を解くことができる最適化問題解決装置、方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0028】
上記目的を達成するために、第1の発明に係る最適化問題解決装置は、0又は1の値をとる最適化変数の各々と、前記最適化変数の各々を選択した場合のコスト値の各々と、前記最適化変数の各々に対する制約の各々とが与えられたときに、前記制約を満たしつつ、前記最適化変数を最適化するための整数計画問題を解く最適化問題解決装置であって、貪欲法による山登り法に従って、前記制約を満たしつつ、予め定められた、前記最適化変数の各々及び前記コスト値の各々を含む目的関数を最適化するように、前記最適化変数を選択して更新することを繰り返す更新部と、予め定められた反復終了条件を満たすまで、前記更新部による更新を繰り返させる反復判定部と、前記更新部による更新で前記目的関数の最適値が得られる毎に、前記目的関数の最適値を比較して、より良い前記目的関数の最適値が得られたときの前記最適化変数の各々の値を暫定解として保持する結果比較部と、を含んで構成されている。
【0029】
また、第1の発明に係る最適化問題解決装置において、前記目的関数は、前記制約の各々に対する、前記制約を表す不等式制約を等式制約に変換するための補助変数と、前記制約の各々に対する、前記制約を満たさない度合いを表す違反度合いとを更に含み、前記更新部は、前記最適化変数の各々を初期化する初期化部と、前記最適化変数の各々及び前記制約の各々に対する違反度合いに基づいて、前記目的関数を最適化するように、前記制約の各々に対する補助変数を更新する補助変数更新部と、前記最適化変数の各々に基づいて、前記目的関数を最適化するように、前記制約の各々に対する違反度合いを更新する違反度合更新部と、前記制約の各々に対する補助変数及び前記制約の各々に対する違反度合いに基づいて、前記最適化変数の値を変更することにより前記目的関数の値を最も良くする前記最適化変数を選択して更新する最適化変数更新部と、前記最適化変数の値を変更しても前記目的関数の値が良くならず、かつ、前記制約の各々を満たすまで、前記補助変数更新部による更新、前記違反度合更新部による更新、及び最適化変数更新部による更新を繰り返させる終了判定部とを含むようにしてもよい。
【0030】
また、第1の発明に係る最適化問題解決装置において、前記最適化変数更新部は、前記最適化変数を選択して更新したとき前記最適化変数の各々の値の組み合わせを表すbit列についてハッシュ値を計算し、キャッシュテーブルにおいて、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、前記最適化変数の各々の値の組み合わせを表すbit列と、前記計算されたハッシュ値をアドレスとした位置に格納されているbit列とが一致するか否かを判定し、一致すると判定された場合、前記更新部による処理を終了し、一致しないと判定された場合、前記キャッシュテーブルにおいて、前記計算されたハッシュ値をアドレスとした位置に、前記最適化変数の各々の値の組み合わせを表すbit列を格納するようにしてもよい。
【0031】
第2の発明に係る最適化問題解決方法は、0又は1の値をとる最適化変数の各々と、前記最適化変数の各々を選択した場合のコスト値の各々と、前記最適化変数の各々に対する制約の各々とが与えられたときに、前記制約を満たしつつ、前記最適化変数を最適化するための整数計画問題を解く最適化問題解決装置における最適化問題解決方法であって、更新部が、貪欲法による山登り法に従って、前記制約を満たしつつ、予め定められた、前記最適化変数の各々及び前記コスト値の各々を含む目的関数を最適化するように、前記最適化変数を選択して更新することを繰り返すステップと、反復判定部が、予め定められた反復終了条件を満たすまで、前記更新部による更新を繰り返させるステップと、結果比較部が、前記更新部による更新で前記目的関数の最適値が得られる毎に、前記目的関数の最適値を比較して、より良い前記目的関数の最適値が得られたときの前記最適化変数の各々の値を暫定解として保持するステップと、を含んで実行することを特徴とする。
【0032】
また、第2の発明に係る最適化問題解決方法において、前記目的関数は、前記制約の各々に対する、前記制約を表す不等式制約を等式制約に変換するための補助変数と、前記制約の各々に対する、前記制約を満たさない度合いを表す違反度合いとを更に含み、前記更新部が更新するステップは、初期化部が、前記最適化変数の各々を初期化するステップと、補助変数更新部が、前記最適化変数の各々及び前記制約の各々に対する違反度合いに基づいて、前記目的関数を最適化するように、前記制約の各々に対する補助変数を更新するステップと、違反度合更新部が、前記最適化変数の各々に基づいて、前記目的関数を最適化するように、前記制約の各々に対する違反度合いを更新するステップと、最適化変数更新部が、前記制約の各々に対する補助変数及び前記制約の各々に対する違反度合いに基づいて、前記最適化変数の値を変更することにより前記目的関数の値を最も良くする前記最適化変数を選択して更新するステップと、終了判定部が、前記最適化変数の値を変更しても前記目的関数の値が良くならず、かつ、前記制約の各々を満たすまで、前記補助変数更新部による更新、前記違反度合更新部による更新、及び最適化変数更新部による更新を繰り返させるステップと、を含んで実行してもよい。
【0033】
また、第2の発明に係る最適化問題解決方法において、前記最適化変数更新部が更新するステップは、前記最適化変数を選択して更新したとき前記最適化変数の各々の値の組み合わせを表すbit列についてハッシュ値を計算し、キャッシュテーブルにおいて、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、前記最適化変数の各々の値の組み合わせを表すbit列と、前記計算されたハッシュ値をアドレスとした位置に格納されているbit列とが一致するか否かを判定し、一致すると判定された場合、前記更新部による処理を終了し、一致しないと判定された場合、前記キャッシュテーブルにおいて、前記計算されたハッシュ値をアドレスとした位置に、前記最適化変数の各々の値の組み合わせを表すbit列を格納するようにしてもよい。
【0034】
また、第3の発明に係るプログラムは、コンピュータを、第1の発明に係る最適化問題解決装置の各部として機能させるためのプログラムである。
【発明の効果】
【0035】
本発明の最適化問題解決装置、方法、及びプログラムによれば、貪欲法による山登り法に従って、制約を満たしつつ、予め定められた、最適化変数の各々及びコスト値の各々を含む目的関数を最適化するように、最適化変数を選択して更新することを繰り返し、予め定められた反復終了条件を満たすまで、更新を繰り返させることにより、効率よく、整数計画問題を解くことができる、という効果が得られる。
【図面の簡単な説明】
【0036】
図1】本発明の実施の形態に係る最適化問題解決装置の構成を示すブロック図である。
図2】本発明の実施の形態に係る最適化問題解決装置における更新部の構成を示すブロック図である。
図3】本発明の実施の形態に係る最適化問題解決装置における最適化問題解決処理ルーチンを示すフローチャートである。
図4】本発明の実施の形態に係る最適化問題解決装置における更新処理ルーチンを示すフローチャートである。
【発明を実施するための形態】
【0037】
以下、図面を参照して本発明の実施の形態を詳細に説明する。
【0038】
<本発明の実施の形態に係る概要>
【0039】
まず、本発明の実施の形態における概要を説明する。
【0040】
前述の通り、0−1整数計画問題を解くためアルゴリズムはこれまでに様々な方法論が提案され、それぞれの方法はそれぞれに好適な問題の領域が存在する。そこで、本発明の実施の形態では、0−1整数計画問題と呼ばれる組合せ最適化問題に関して、特に大規模かつ実行可能解が容易に発見できないといった特徴を持つ最適化問題を効率的に解く課題に取り組む。
【0041】
まず、本発明の実施の形態において取り組む課題においては、実行可能解が容易に獲得できないという前提がある。そのため、初期値として実行可能解を適当に得てから開始するアルゴリズムを用いることはできない。そこで、本発明の実施の形態では、適当な初期値をランダムに与え、そこから目的関数の値がよくなる方向に変数を一つずつ更新する、貪欲山登り法(貪欲法による山登り法)を用いる。ただし、貪欲山登り法では、局所解に陥って、真の最適解を得られない可能性が高い。そこで、現時点の最良の解を保持しつつ、貪欲山登り法を複数回繰り返して、より良い解を更新していくような方法論を用いる。本実施の形態では、この手法を反復貪欲山登り法と呼ぶこととする。
【0042】
次に、実行可能解が容易に得られないという性質に対処するために、最適化アルゴリズム中により制約を満たす方向へ最適化変数を更新するような仕組みを導入する。また、制約を満たす方向へ向かう強さをコントロールできる仕組みを導入してもよい。これにより、解の探索中に、より実行可能解を発見しやすく調整することができる。
【0043】
反復貪欲山登り法では、個々の貪欲山登り法の計算途中では別の探索結果を全く考慮しない方式となる。これは、余計な通信コストが発生しないため、非常に効率的であるが、一方で、同じ領域を何度も探索してしまう可能性があるため、探索が非効率になる可能性がある。そこで、オプションとして、全ての貪欲山登り法で共有するブルームフィルタを作成し、個々の貪欲山登り法によって探索した領域を、擬似的に共有する方法を用いる。
【0044】
上記の手法の利点を、以下の(1)から(3)に述べる。
【0045】
(1)反復貪欲山登り法の利用(大規模問題への適用)
【0046】
貪欲山登り法により、個々の計算処理が容易であるため、最適化変数が多くても対応可能となる。また、個々の計算量は変数の数に対して線形時間。付加効果として、分散並列処理に適した枠組みであるため、容易に並列計算が可能となる。
【0047】
(2)拡張ラグランジュ緩和法による緩和問題、及びADMM最適化に基づくアルゴリズムの枠組みの利用(実行可能解を効果的に探索する効果)
【0048】
拡張ラグランジュ緩和による制約の緩和を行うことで、より制約を満たす方向で探索を行うことができる。また、制約を満たす度合いを制御するパラメタを自然に導入することができる。そのため、例えば、探索最初は制約を満たす強さを弱めにしておき、探索が進むにつれて、より制約を満たす方向へ探索を進めるといった戦略を取ることも可能となる。これにより、実行可能解が容易に見つからないことに対処できる。
【0049】
(3)キャッシュテーブルの利用(重複探索の削除による更なる大規模問題へ適用)
【0050】
複数回の貪欲山登り法を用いるため、これまでに探索した領域を何度も探索してしまう可能性がある。よって、重複探索を簡単なキャッシュテーブルを用いて排除し、全体の計算量を削減することができる。
【0051】
<本発明の実施の形態に係る原理>
【0052】
次に、本発明の実施の形態における原理を説明する。
【0053】
ここでは、上記(1)式1に示された0−1整数計画問題を解く例を用いて、本発明の実施の形態の原理を説明する。
【0054】
まず、上記(1)式に書かれているように、制約には、等式制約と不等式制約の二種類が存在する。本発明の実施の形態では、計算アルゴリズムを効率化するために、全ての制約を一旦不等式制約に変換したのち、それらを補助変数付きの等式制約の形式に変換し、問題を再定式化する。
【0055】
まず、第一に全ての制約を不等式制約に変換する。上記(1)式の等式制約は、二つの不等式制約で記述することができる。
【0056】
【数10】
【0057】
この二つの不等式制約が同時に満たされるのは、等式制約が満たされるのと等価である。上記(2)式を用いることで、等式制約を不等式制約で記述できるので、最適化問題の全ての制約は不等式制約によって表現できる。計算を簡単にするために、不等式制約の向きを「≦0」の形式で全て変換する。これは、両辺に−1を掛けることによって、容易に実現できる。よって、係数ai,jとbを再定義し、全ての制約は
【0058】
【数11】
【0059】
の形式で記述できることになる。
【0060】
最後に、上記の不等式制約を、補助変数ξ≧0を導入して、以下の等式制約に変換する。
【0061】
【数12】
【0062】
補助変数ξは0以上の値をとるので、不等式制約が満たされている場合はξの値を調節することで、等式制約を満たしたと判定することができる。逆に、不等式制約が満たされていない場合は、ξ=0とするのが最も等式制約に近い値となる。このように、補助変数付きの等式制約は元の不等式制約を満たしているか、いないかの判定を一致させることができる。
【0063】
元の不等式制約の数が
【0064】
【数13】
【0065】
個、等式制約の数が
【0066】
【数14】
【0067】
個の時、等式制約は2倍になるので、最終的に得られる補助変数付きの等式制約の数は
【0068】
【数15】
【0069】
個になる。また、
【0070】
【数16】
【0071】
とおき、上記(1)式の最適化問題を以下の形式で再定義する。
【0072】
【数17】
【0073】
次に、上記(5)式について、拡張ラグランジュ緩和法を用いて、制約を緩和する。
【0074】
【数18】
【0075】
このとき、Lは緩和問題の目的関数である。また、αは、制約を違反している場合にどの程度強くその違反をコストとして計上するかを制御するための違反度合いを表すパラメタである。また、ρは、制約を満たす強さを表すパラメタであり、ρ>0とする。
【0076】
上記(6)式を解くために、非特許文献1で紹介されているADMMに則って最適化を行う。目的関数の最適化は、以下で説明する反復貪欲山登り法における、[2]の貪欲山登り法において実行する。
【0077】
まず、本発明の実施の形態で用いる反復貪欲山登り法について説明する。一般的に一回の貪欲山登り法では最適解を得ることは難しい。そこで、初期値をランダムにふって、複数回の貪欲法による山登り法を用いて、より精度の高い解を得る。下記[2−5]の終了判定を満たした際に、暫定解を保持するが、その暫定解は、実行可能解であることを想定している。よって、現在暫定解として保持している目的関数の値よりも、より良い目的関数の値を獲得した場合は、暫定解を書き換えてより良い解のみを保持する。このように、複数回行うことで、一回のときより悪い結果になることは絶対になく、必ず良いか同じ暫定解が得られる。また、個々の貪欲法による山登り法の試行は完全に独立に行うことができるため、昨今の複数の演算装置がある計算機を効率的に利用して最適解の探索を行うことができる。
【0078】
反復貪欲山登り法としては、全体として以下[1]から[5]の処理を行う。
【0079】
[1]:独立に貪欲山登り法を行うオブジェクトをN個計算機内に生成する。
[2]:個々のN個に対して、後述する貪欲山登り法を実行する。
[3]:終了条件を満たしたn番目の結果を受け取る。
[4]:現在の最良の解と、[3]で受け取ったn番目の解を比較し、より良い結果であれば、それを保持する。
[5]:事前に設定した規定回数K回の貪欲法を実行する場合、規定回数Kに満たなければ、新たに貪欲山登り法を行うオブジェクトを作成して追加する。そして、[2]に戻って、追加したオブジェクトを、新たなn番目の処理として実行する。
【0080】
次に、上記[2]の貪欲山登り法の基本的な処理手順を、以下の[2−1]から[2−5]に示す。
【0081】
[2−1]:初期化
初期状態として、各zにランダムに0または1を代入する。
[2−2]:ξの更新
補助変数ξを更新する。ただし、更新が必要なξは、[2−4]で更新されたzのうち制約の式の係数ai,jが非零のもののみである。
[2−3]:αの更新
パラメタαを更新する。ただし、更新が必要なαは、[2−4]で更新されたzのうち制約の式の係数ai,jが非零のもののみである。
[2−4]:zの更新
目的関数の値が最もよくなる一つの最適化変数zを選択し値を更新する。つまり現在の値が1なら0へ更新し、0であれば[2−1]へ更新する。
[2−5]:終了判定
最適化変数zの変更がすべて目的関数の値をよくしない場合、かつ、実行可能解なら、現在の解を保持して終了し、それ以外の場合であれば[2−2]へ戻る。
【0082】
<本発明の実施の形態に係る最適化問題解決装置の構成>
【0083】
次に、本発明の実施の形態に係る最適化問題解決装置の構成について説明する。本実施の形態の最適化問題解決装置は、上記(1)式のように、0又は1の値をとる最適化変数と、最適化変数zを選択した場合のコスト値cと、最適化変数zに対する制約の各々とが与えられたときに、制約を満たしつつ、最適化変数zを最適化するための整数計画問題を解く装置である。
【0084】
図1に示すように、本発明の実施の形態に係る最適化問題解決装置100は、CPUと、RAMと、後述する最適化問題解決処理ルーチンを実行するためのプログラムや各種データを記憶したROMと、を含むコンピュータで構成することが出来る。この最適化問題解決装置100は、機能的には図1に示すように入力部10と、演算部20と、出力部50とを備えている。
【0085】
入力部10は、貪欲山登り法を行うオブジェクトを生成する指令を受け付ける。
【0086】
演算部20は、オブジェクト生成部30と、更新部32〜32と、キャッシュテーブル33と、結果比較部34と、反復判定部36とを含んで構成されている。
【0087】
オブジェクト生成部30は、貪欲山登り法を行うN個のオブジェクトを生成し、オブジェクトの各々を更新部32〜32に出力する。
【0088】
更新部32〜32は、オブジェクト生成部30で生成されたオブジェクトの各々について、貪欲法による山登り法に従って、制約を満たしつつ、予め定められた、最適化変数z及びコスト値cの各々を含む、上記(6)式の目的関数を最適化するように、最適化変数を選択して更新することを繰り返す。また、更新部32〜32は、並列処理により、各々独立して更新処理を行う。また、更新部32〜32は既に探索した最適化変数zの値の組み合わせ(解候補)を、ハッシュ値をアドレスとしてキャッシュテーブル33に保存する。これにより更新部32〜32では、既に探索した最適化変数zの領域を排除して更新処理を行うことができる。
【0089】
また、更新部32〜32の各々はそれぞれ、初期化部230と、補助変数更新部232と、違反度合更新部234と、最適化変数更新部と、終了判定部238との各部を含んで構成されている。更新部32〜32の各部の処理については後述する。
【0090】
キャッシュテーブル33には、更新部32〜32で探索された最適化変数zの値の組み合わせ(解候補)が、ハッシュ値をアドレスとした位置に格納されている。
【0091】
結果比較部34は、更新部32〜32による更新で目的関数の最適値が得られる毎に、目的関数の最適値を比較して、より良い目的関数の最適値が得られたときの最適化変数の各々の値を暫定解として保持する。
【0092】
反復判定部36は、予め定められた反復終了条件を満たすまで、更新部32〜32による更新を繰り返させる。ここでは、反復終了条件は規定回数K回分の更新処理が更新部32〜32によって行われたこととする。
【0093】
次に、更新部32〜32の各部の処理について説明する。
【0094】
初期化部230は、複数の最適化変数zの値をランダムに初期化する。よって、このときに、制約を満たしているかは考慮しない。また、実行可能解が容易に得られない問題では、初期化段階で実行可能解になっていることはほぼない。また、初期化部230は、制約の各々に対する違反度合いであるαを初期化する。例えば、αは0にすればよい。
【0095】
補助変数更新部232は、初期化された、又は前回更新された複数の最適化変数z及び制約の各々に対する違反度合いαに基づいて、上記(6)式の目的関数を最適化するように、制約の各々に対する補助変数ξを更新する。
【0096】
補助変数更新部232は、具体的には以下に説明するように、ξの最適値を解析的に求める。まず、補助変数ξ以外の全ての変数を固定して考えた場合、補助変数ξの最適値は、目的関数の勾配
【0097】
【数19】
【0098】
が0になる時の値である。目的関数の補助変数ξに関する勾配
【0099】
【数20】
【0100】
は以下(7)式となる。
【0101】
【数21】
【0102】
このように、補助変数ξの最適値は解析的に求めることができる。上記(7)式からもわかるように、例えば、特定の最適化変数zしか更新されていない場合は、特定の補助変数ξの値は前回と全く同じ値であることがある。これは、i番目の制約の最適化変数zの係数ai,jがai,j=0である場合に、zの変更はi番目の制約に何も影響を与え無いためである。
【0103】
よって、逆に言えば、ある一つの最適化変数zのみが更新された場合は、ai,j≠0の制約のみを更新すれば良い。また、その変化量は、ai,jの増減のみである。つまり、この計算は非常に高速に計算できる。例えば、ai,j≠0の制約が10個であった場合は、10個の補助変数ξに対してαを増減すればよい。
【0104】
上述したように、補助変数更新部232は、初期化された、又は前回更新された複数の最適化変数z及び制約の各々に対する違反度合いαに基づいて、上記(7)式に従って、制約の各々に対する補助変数ξを更新する。
【0105】
違反度合更新部234は、初期化された、又は前回更新された複数の最適化変数zに基づいて、上記(6)式の目的関数を最適化するように、制約の各々に対する違反度合いαを更新する。
【0106】
違反度合更新部234は、具体的には以下に説明するように、違反度合いαの最適値を求める。
【0107】
ここでは、制約の違反度合いを判定したいので、元の不等式制約の違反度を反映させたい。よって、便宜上ξ=0とおいてαの更新式を考える。目的関数Lのαに関する勾配
【0108】
【数22】
【0109】
は以下(8)式となる。
【0110】
【数23】
【0111】
ここでは、ξのように解析解は求まらないため、勾配法による反復計算により最適値を求める方法を用いる。その際の更新式は以下(9)式のようになる。
【0112】
【数24】
【0113】
ただし、ηは学習率であり、0<η<1の範囲の値をとることとする。ここでの注意点は、α≧0の制約があるので、違反度合いαは、必ず0以上の値をとるようになっている点である。
【0114】
この更新の意味は、Σi,j−b>0の場合は制約が満たされていないので、
【0115】
【数25】
【0116】
の値に応じて、拡張ラグランジュ緩和法における双対変数の値が増加する。つまり、i番目の制約に重みが加算され、次にzの更新候補を選択する際に、よりi番目の制約を満たすことを考慮して選択が行われる。逆に、Σi,j−b≦0の場合は制約が満たされていることを意味する。注意点としては、Σi,j−b≦0であるので、負の値であるから、
【0117】
【数26】
【0118】
の値に応じて、違反度合いαの値は減ることになる。つまり、i番目の制約を満たすことを考慮する点において、制約を満たす度合いを多少減らすことを意味する。
【0119】
また、違反度合いαも補助変数ξと同様に、例えば、特定の最適化変数zしか更新されていない場合は、特定の
【0120】
【数27】
【0121】
の値は前回と全く同じ値となる。具体的には、i番目の制約のzの係数ai,jがai,j=0である場合に、zの変更はi番目の制約に何も影響を与えないため
【0122】
【数28】
【0123】
の値は変化しない。よって、このようなケースで計算量を削減するために、
【0124】
【数29】
【0125】
の値をキャッシュしておくこととする。このキャッシュを実現するには、
【0126】
【数30】
【0127】
個の実数を保存するメモリを用いれば足りるため、効率がよい。
【0128】
上述したように、違反度合更新部234は、初期化された、又は前回更新された複数の最適化変数zに基づいて、上記(9)式に従って、制約の各々に対する違反度合いαを更新する。
【0129】
最適化変数更新部236は、以下に説明するように、補助変数更新部232で更新された制約の各々に対する補助変数ξ、及び違反度合更新部234で更新された制約の各々に対する違反度合いαに基づいて、値を変更することにより上記(6)式の目的関数の値を最も良くする最適化変数zを選択して更新する。
【0130】
最適化変数更新部236では、具体的には、以下の第1及び第2の処理によって最適化変数zを更新する。第1の処理は、最も目的関数の値を減らせる変数を一つ選択する処理である。第2の処理は、第1の処理で選択する変数が既に探索済みか判定する処理である。
【0131】
最適化変数更新部236は、第1の処理において、一回の変更で最も目的関数の値を減らせる最適化変数を選択して更新する。最適化変数の取り得る値は、0または1なので、最適化変数の現在の値が1であれば0、0であれば1へ変更した際に、緩和問題の目的関数Lの値を最も多く減らせる最適化変数を一つ選択する最適化問題を解けばよい。よって、最適化変数zに対して、現在の値から、もう一方の値に変化させた際に目的関数がどのぐらい変化するかを計算する必要がある。まず、ある任意のjを一つ選択する。このとき、対象とする最適化変数zがz=1の時の目的関数の値
【0132】
【数31】
【0133】
と、z=0の時の目的関数の値
【0134】
【数32】
【0135】
は以下(10)式で記述できる。
【0136】
【数33】
【0137】
ここで、
【数34】
【0138】
【0139】
【数35】
【0140】
との値を比較すると、右辺第3項までは全く同じであることがわかる。よって、現在z=1であり、これをz=0に変更した際の目的関数の増減は以下(11)式で求められる。
【0141】
【数36】
【0142】
ここで、先ほど上記(8)式において、
【0143】
【数37】
【0144】
とおいたので、上記(11)式はさらに以下(12)式のようにかける。
【0145】
【数38】
【0146】
ここで、あるjに対して、ai,j≠0の数を
【0147】
【数39】
【0148】
と記述するとすれば、右辺第2項は
【0149】
【数40】
【0150】
回の足し算
【0151】
【数41】
【0152】
の部分と、
【0153】
【数42】
【0154】
のai,jとの掛け算をし、最後にρとの掛け算の計算量でzを変化させた際の目的関数の変化量を計算することができる。
【0155】
また、現在z=0であり、これをz=1に変更した場合の目的関数の増減は、上記(12)式の右辺の値に−1を掛けると、以下(13)式となることは容易にわかる。
【0156】
【数43】
【0157】
次に、最適化変数更新部236は、第2の処理において、第1の処理で選択して更新した最適化変数zの各々の値の組み合わせ(解候補)が既に探索済みであるか否かを判定する。
【0158】
これは、解候補が、既に処理した更新部32〜32のいずれかの処理部における処理で既に出現していた場合は、処理中の更新部におけるそこから先の処理は、解候補が以前に出現した際の組み合わせと完全に一致してしまうため、無駄な処理になってしまう。この無駄な処理を削減するため、既に探索済みかどうかを判定し、探索済みの場合は、最適化変数をこれ以上更新しないようにする。
【0159】
ここでは、第1の処理で選択した最適化変数zを更新したときの最適化変数zの各々の値の組み合わせ(現在の解候補)を表すbit列について、bit列から任意のハッシュ値を計算し、キャッシュテーブル33における、計算したハッシュ値をアドレスとした位置に、現在の解候補のbit列を格納する。このキャッシュテーブル33を使うことで任意の解候補が既に出現したかどうかの判定自体は非常に単純に行うことができる。現在の解候補のbit列からハッシュ値を計算し、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、現在の解候補のbit列と、計算されたハッシュ値をアドレスとした位置に格納さているbit列とが完全一致する場合には、現在の解候補は探索済みであると判定することができる。
【0160】
ただし、キャッシュテーブル33に利用可能なメモリ量は有限なので、これまで探索した解候補のbit列を全て保持することは事実上不可能である。ここでは、「これまでに探索した解」を「これまでに探索していない解」とある程度間違えることは許容することとする。逆に、「これまでに探索していない解」を「これまでに探索した解」を間違えることは、探索中に到達不可能な解候補ができてしまうため、こちらは許容しないとする。
【0161】
これら二つの要件を満たすために、キャッシュテーブル33内のbit列は、同じハッシュ値になる場合は上書きされ、古いbit列は消失する、という処理を導入する。これはつまり、キャッシュテーブルに入っているbit列は、少なくとも、これまでに探索した解候補(の一部)であることは保証できる。一方、上書きにより古いbit列が消失することがあるので、「これまでに探索した解」を「これまでに探索していない解」と間違えることが発生する。ただし、これによって、キャッシュテーブル33の一定のメモリサイズ内で全ての処理を行うことが可能になるという利点が加えられる。
【0162】
実際の処理では、例えば、解候補のbit列を固定長のブロックに分割し、各ブロック毎にブルームフィルタを構築することで、キャッシュテーブル33の計算コストを削減するといった工夫ができる。
【0163】
これは、偽陽性(出現していなくても出現したと判定する)をある程度許容して、偽陰性(出現したものを出現していないと判定する)は起こらないというブルームフィルタの性質から、少なくとも全てのブロックで「出現した」と判定されなければ、絶対に出現していないことは保証できる。よって、キャッシュテーブル33への問い合わせの前にブルームフィルタが一つでも出現していないと判定した場合には、それ以上の処理は不要となる。
【0164】
また、ブロックで分割したことと、一回で変更される変数は一つであることを加味して、一回の判定では、高々一回のブルームフィルタの計算を行えばよい。さらに、キャッシュテーブル33のハッシュ計算とブルームフィルタで計算するハッシュとを共有することで、余計な計算を削減することもできる。
【0165】
上述したように、最適化変数更新部236は、補助変数更新部232で更新された制約の各々に対する補助変数ξ、及び違反度合更新部234で更新された制約の各々に対する違反度合いαに基づいて、上記(13)式に示す目的関数の増減が最も大きい最適化変数zを選択して更新する。そして、選択した最適化変数zて¥を更新したときの最適化変数zの各々の値の組み合わせを表すbit列についてハッシュ値を計算し、キャッシュテーブル33において、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、最適化変数の各々の値の組み合わせを表すbit列と、計算されたハッシュ値をアドレスとした位置に格納されているbit列とが一致するか否かを判定し、一致すると判定された場合、更新部32〜32のうちの処理中の更新部による処理を終了し、一致しないと判定された場合、又は、計算されたハッシュ値をアドレスとした位置にbit列が格納されていない場合に、キャッシュテーブル33において、計算されたハッシュ値をアドレスとした位置に、最適化変数の各々の値の組み合わせを表すbit列を格納する。
【0166】
終了判定部238は、どの最適化変数zの値を変更しても目的関数の値が良くならず、かつ、制約の各々を満たすまで(実行可能解となるまで)、補助変数更新部232による更新、違反度合更新部234による更新、及び最適化変数更新部236による更新を繰り返させる。
【0167】
<本発明の実施の形態に係る最適化問題解決装置の作用>
【0168】
次に、本発明の実施の形態に係る最適化問題解決装置100の作用について説明する。入力部10において貪欲山登り法を行うオブジェクトを生成する指令を受け付けると、最適化問題解決装置100は、図3に示す最適化問題解決処理ルーチンを実行する。
【0169】
まず、ステップS100では、入力部10において受け付けた指令により、貪欲山登り法を行うN個のオブジェクトを生成し、n=1とする。
【0170】
次に、ステップS102では、生成されたn番目のオブジェクトについて、貪欲法による山登り法に従って、制約を満たしつつ、予め定められた、最適化変数z及びコスト値cの各々を含む、上記(6)式の目的関数を最適化するように、最適化変数を選択して更新することを繰り返す。
【0171】
ステップS104では、ステップS102におけるn番目の目的関数の最適値の更新の結果を受け取る。
【0172】
ステップS106では、ステップS102で更新された目的関数の最適値を比較して、より良い目的関数の最適値が得られたときの最適化変数の各々の値を暫定解として保持する。
【0173】
ステップS108では、規定回数K回分の更新処理が行われたか否かを判定し、K回分の更新処理が行われていればステップS112へ移行し、K回分の更新処理が行われていなければステップS110でn=n+1とし、ステップS102に戻って処理を繰り返す。
【0174】
ステップS112では、ステップS106で保持した目的関数の最適値を出力部50に出力し、処理を終了する。
【0175】
ステップS102は、図4に示す更新処理ルーチンによって実行される。
【0176】
ステップS200では、最適化変数zの値をランダムに初期化し、違反度合いαをα=0と初期化する。
【0177】
ステップS202では、初期化された、又は前回更新された複数の最適化変数z及び制約の各々に対する違反度合いαに基づいて、上記(7)式に従って、制約の各々に対する補助変数ξを更新する。
【0178】
ステップS204では、初期化された、又は前回更新された複数の最適化変数zに基づいて、上記(9)式に従って、制約の各々に対する違反度合いαを更新する。
【0179】
ステップS206では、ステップS202で更新された制約の各々に対する補助変数ξ、及びステップS204で更新された制約の各々に対する違反度合いαに基づいて、上記(13)式に示す目的関数の増減が最も大きい最適化変数zを選択する。
【0180】
ステップS208では、ステップS206で選択した最適化変数zを更新したときの最適化変数zの各々の値の組み合わせを表すbit列についてハッシュ値を計算し、キャッシュテーブル33において、計算されたハッシュ値をアドレスとした位置にbit列が格納されているか否かを判定する。キャッシュテーブル33において、計算されたハッシュ値をアドレスとした位置にbit列が格納されていない場合には、ステップS210へ移行する。一方、キャッシュテーブル33において、計算されたハッシュ値をアドレスとした位置にbit列が格納されている場合に、ステップS209において、最適化変数の各々の値の組み合わせを表すbit列と、計算されたハッシュ値をアドレスとした位置に格納されているbit列とが一致するか否かを判定する。一致しないと判定された場合に、ステップS210へ移行し、一致すると判定された場合は、更新処理ルーチンを終了する。
【0181】
ステップS210では、キャッシュテーブル33において、ステップS208で計算したハッシュ値をアドレスとした位置に、最適化変数zの値の組み合わせを表すbit列を保存する。なお、計算したハッシュ値をアドレスとした位置に既にbit列が存在する場合には上書きする。
【0182】
ステップS212では、どの最適化変数zの値を変更しても目的関数の値が良くならず、かつ、制約の各々を満たすことを条件として、条件を満たすか否かを判定し、条件を満たさなければステップS202に戻って処理を繰り返し、条件を満たせば更新処理ルーチンを終了する。
【0183】
ステップS214では、ステップS208でどの最適化変数zの値を変更しても目的関数の値が良くならず、かつ、制約の各々を満たすことを条件として、条件を満たすか否かを判定し、条件を満たさなければステップS202に戻って処理を繰り返し、条件を満たせば更新処理ルーチンを終了する。
【0184】
以上説明したように、本発明の実施の形態に係る最適化問題解決装置によれば、更新部32〜32の各部が、貪欲法による山登り法に従って、制約を満たしつつ、予め定められた、最適化変数の各々及びコスト値の各々を含む目的関数を最適化するように、最適化変数を選択して更新することを繰り返し、反復判定部36が、予め定められた反復終了条件を満たすまで、更新部32〜32による更新を繰り返させることにより、効率よく、整数計画問題を解くことができる。
【0185】
なお、本発明は、上述した実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【符号の説明】
【0186】
10 入力部
20 演算部
30 オブジェクト生成部
321〜N 更新部
33 キャッシュテーブル
34 結果比較部
36 反復判定部
50 出力部
100 最適化問題解決装置
230 初期化部
231 重複探索排除部
232 補助変数更新部
234 違反度合更新部
236 最適化変数更新部
238 終了判定部
図1
図2
図3
図4