(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023179912
(43)【公開日】2023-12-20
(54)【発明の名称】情報処理装置、情報処理方法およびプログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20231213BHJP
【FI】
G06N99/00 180
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022092839
(22)【出願日】2022-06-08
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】神田 浩一
(57)【要約】
【課題】求解性能を向上する。
【解決手段】処理部12は、イジングモデルのエネルギー関数に基づく解の探索において次の第1処理と第2処理とを切り替えて実行する。処理部12は、第1処理では、N(Nは4以上の整数)の2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定する。処理部12は、第1処理では、2-Way 1-Hot制約を満たすように4つの状態変数の値を変化させる場合のエネルギー関数の値の第1変化量に応じて4つの状態変数の値を変化させる処理を繰り返し行う。処理部12は、第2処理では、K行目かつL列目の状態変数の値を非固定にして、2-Way 1-Hot制約を満たすように4つの状態変数の値を変化させる場合のエネルギー関数の値の第2変化量に応じて4つの状態変数の値を変化させる処理を繰り返し行う。
【選択図】
図1
【特許請求の範囲】
【請求項1】
イジングモデルのエネルギー関数で表される順列最適化問題の解を探索する情報処理装置において、
前記エネルギー関数に含まれるN(Nは4以上の整数)の2乗個の状態変数であって、N行N列に配列したときの各行に含まれる状態変数の値の和が1であり、かつ各列に含まれる状態変数の値の和が1である制約に基づいて値が決定される前記Nの2乗個の状態変数を記憶する記憶部と、
前記Nの2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定して、前記制約を満たすように4つの状態変数の値を変化させる場合の前記エネルギー関数の値の第1変化量に応じて前記4つの状態変数の値を変化させる処理を繰り返し行う第1処理と、
前記K行目かつ前記L列目の状態変数の値を非固定にして、前記制約を満たすように前記4つの状態変数の値を変化させる場合の前記エネルギー関数の値の第2変化量に応じて前記4つの状態変数の値を変化させる処理を繰り返し行う第2処理と、
を前記解の探索において切り替えて実行する処理部と、
を有する情報処理装置。
【請求項2】
前記処理部は、前記第1処理において前記エネルギー関数の値の最低値が更新されない場合に前記第2処理に切り替え、前記第2処理を実行した後に前記第1処理に切り替える、
請求項1記載の情報処理装置。
【請求項3】
前記処理部は、前記第2処理を所定時間実行した後に、または、前記第2処理による前記4つの状態変数の値の変化が所定回数行われた後に、前記第1処理に切り替える、
請求項2記載の情報処理装置。
【請求項4】
前記処理部は、前記K行目かつ前記L列目の前記状態変数に対応する、前記エネルギー関数の値の変化量に対するバイアスを制御することで、前記第1処理と前記第2処理との切り替えを行う、
請求項1記載の情報処理装置。
【請求項5】
前記処理部は、前記K行目かつ前記L列目の前記状態変数に対応するフラグを制御することで、前記第1処理と前記第2処理との切り替えを行う、
請求項1記載の情報処理装置。
【請求項6】
前記処理部は、前記第1処理において値を1に固定し前記第2処理において値を非固定にする前記状態変数の数を可変にする、
請求項1記載の情報処理装置。
【請求項7】
前記処理部は、
前記N行N列に配列された前記Nの2乗個の状態変数の値により示される複数の要素の順列のうち、前記第1処理において値を1に固定し前記第2処理において値を非固定にする複数の状態変数の追加により前記順列に挿入された複数の冗長要素それぞれの前記順列における位置を識別するフラグを前記Nの2乗個の状態変数それぞれに対して設定し、
前記第2処理では、前記Nの2乗個の状態変数それぞれに対応する前記フラグに基づいて、前記順列のうちの2つの冗長要素の置換に対応する前記4つの状態変数の値の変化に対する処理を省略する、
請求項1記載の情報処理装置。
【請求項8】
前記処理部は、入力された問題情報に含まれるM(MはNより小さい3以上の整数)行M列の問題行列に対し、前記問題行列をN行N列に変換したときのK行目となる新たな行およびL列目となる新たな列として、全ての要素が0である行および列を挿入して前記問題行列をN行N列に変換し、N行N列に変換した前記問題行列に基づいて、前記エネルギー関数に含まれる重み係数行列を生成する、
請求項1記載の情報処理装置。
【請求項9】
イジングモデルのエネルギー関数で表される順列最適化問題の解を探索する情報処理方法において、情報処理装置が、
前記エネルギー関数に含まれるN(Nは4以上の整数)の2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定して、各行に含まれる状態変数の値の和が1であり、かつ各列に含まれる状態変数の値の和が1である制約を満たすように4つの状態変数の値を変化させる場合の前記エネルギー関数の値の第1変化量に応じて前記4つの状態変数の値を変化させる処理を繰り返し行う第1処理と、
前記K行目かつ前記L列目の状態変数の値を非固定にして、前記制約を満たすように前記4つの状態変数の値を変化させる場合の前記エネルギー関数の値の第2変化量に応じて前記4つの状態変数の値を変化させる処理を繰り返し行う第2処理と、
を前記解の探索において切り替えて実行する、
情報処理方法。
【請求項10】
イジングモデルのエネルギー関数で表される順列最適化問題の解を探索するプログラムにおいて、コンピュータに、
前記エネルギー関数に含まれるN(Nは4以上の整数)の2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定して、各行に含まれる状態変数の値の和が1であり、かつ各列に含まれる状態変数の値の和が1である制約を満たすように4つの状態変数の値を変化させる場合の前記エネルギー関数の値の第1変化量に応じて前記4つの状態変数の値を変化させる処理を繰り返し行う第1処理と、
前記K行目かつ前記L列目の状態変数の値を非固定にして、前記制約を満たすように前記4つの状態変数の値を変化させる場合の前記エネルギー関数の値の第2変化量に応じて前記4つの状態変数の値を変化させる処理を繰り返し行う第2処理と、
を前記解の探索において切り替えて実行する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【0002】
組合せ最適化問題の求解に情報処理装置が用いられることがある。組合せ最適化問題は、磁性体のスピンの振る舞いを表すモデルであるイジングモデルのエネルギー関数に変換される。エネルギー関数は、評価関数や目的関数と言われることもある。
【0003】
情報処理装置は、例えばエネルギー関数に含まれる状態変数の値の組合せのうち、エネルギー関数の値を最小化する組合せを探索する。この場合、エネルギー関数の値を最小化する状態変数の値の組合せは、状態変数の組により表される基底状態または最適解に相当する。実用的な時間で組合せ最適化問題の近似解を得る手法には、マルコフ連鎖モンテカルロ(MCMC:Markov-Chain Monte Carlo)法に基づく、シミュレーテッドアニーリング(SA:Simulated Annealing)法やレプリカ交換法などがある。
【0004】
ところで、組合せ最適化問題には、エネルギー関数に含まれる複数の状態変数のうち値が1となる状態変数の数を1つのみとする制約、すなわち、1-Hot制約をもつものがある。1-Hot制約には、N2個の状態変数をN行N列の行列状に並べたときに各行と各列に含まれる状態変数の値の和が1となるものがある。このような1-Hot制約は、2-Way 1-Hot制約と言われる。例えば、x1~x9を3行3列の行列状に並べたときに、x1+x2+x3=1、x4+x5+x6=1、x7+x8+x9=1、x1+x4+x7=1、x2+x5+x8=1、x3+x6+x9=1とする制約は、2-Way 1-Hot制約である。巡回セールスマン問題、配車計画問題、2次割り当て問題および線形順序付け問題などは、2-Way 1-Hot制約をもつ。
【0005】
2-Way 1-Hot制約をもつ組合せ最適化問題では、N行N列の各状態変数の値は、異なるN個の要素の順列で表記可能である。例えば、異なる3つの要素を「1,2,3」とすると、3行3列の各状態変数の値は(1,2,3)や(2,1,3)などのように表記される。例えば、順列の要素の位置は行を示し、順列の要素の値は1である状態変数の列を示す。このように、2-Way 1-Hot制約を充足する解は順列で表される。解が順列で表される組合せ最適化問題は順列最適化問題と言われる。
【0006】
例えば、2-Way 1-Hot制約をもつ組合せ最適化問題の求解を行う最適化装置の提案がある。
また、イジングモデルに対応する複数のビットのうち、n(nは2以上の整数)個のビットの値が変化することによるエネルギー変化を算出する最適化装置の提案がある。提案の最適化装置は、温度パラメータおよび乱数に基づいて決定される熱励起エネルギーと、エネルギー変化との大小関係に基づいて、更新を許容するn個のビットを選択し、n個のビットの値を変化させる。
【0007】
なお、係数の値域が限られているイジングモデルの基底状態探索を行う装置を用いて、任意の値域の係数を持つイジングモデルの基底状態探索を実現する提案もある。また、最適化問題の求解において、変数のセット全体を複数のサブセットに分割し、個々のサブセットに対して組合せ最適化演算を実行するシステムの提案もある。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2021-157361号公報
【特許文献2】特開2020-21209号公報
【特許文献3】特開2016-51349号公報
【特許文献4】米国特許出願公開第2017/0161612号明細書
【発明の概要】
【発明が解決しようとする課題】
【0009】
2-Way 1-Hot制約をもつ組合せ最適化問題、すなわち、順列最適化問題の求解を行う上記の最適化装置では、1回の状態遷移の試行では高々4つの状態変数の値が変化される。ところが、現状態に対して高々4つの状態変数の値を変化させた状態の中だけから遷移先の状態を決定していると、例えば局所解に陥った場合に局所解から脱出できなくなることがある。
【0010】
1つの側面では、本発明は、求解性能を向上する情報処理装置、情報処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
1つの態様では、イジングモデルのエネルギー関数で表される順列最適化問題の解を探索する情報処理装置が提供される。情報処理装置は、記憶部と処理部とを有する。記憶部は、エネルギー関数に含まれるN(Nは4以上の整数)の2乗個の状態変数であって、N行N列に配列したときの各行に含まれる状態変数の値の和が1であり、かつ各列に含まれる状態変数の値の和が1である制約に基づいて値が決定されるNの2乗個の状態変数を記憶する。処理部は、Nの2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定して、制約を満たすように4つの状態変数の値を変化させる場合のエネルギー関数の値の第1変化量に応じて4つの状態変数の値を変化させる処理を繰り返し行う第1処理と、K行目かつL列目の状態変数の値を非固定にして、制約を満たすように4つの状態変数の値を変化させる場合のエネルギー関数の値の第2変化量に応じて4つの状態変数の値を変化させる処理を繰り返し行う第2処理と、を解の探索において切り替えて実行する。
【0012】
また、1つの態様では、情報処理方法が提供される。また、1つの態様では、プログラムが提供される。
【発明の効果】
【0013】
1つの側面では、求解性能を向上できる。
【図面の簡単な説明】
【0014】
【
図1】第1の実施の形態の情報処理装置を説明する図である。
【
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【
図3】2-Way 1-Hotによるビットフリップ制御例を示す図である。
【
図4】イジングモデルの状態と順列との対応関係の例を示す図である。
【
図6】QAPにおける冗長要素の追加方法の例を示す図である。
【
図8】情報処理装置の処理例を示すフローチャートである。
【
図9】冗長要素を用いた動作モードの切り替え例を示す図である。
【
図10】第3の実施の形態の冗長変数フラグの例を示す図である。
【
図13】情報処理装置の処理例を示すフローチャートである。
【
図14】冗長変数の数を制御する動作例を示すフローチャートである。
【
図15】冗長要素同士の置換による遷移を抑制する動作例を示すフローチャートである。
【発明を実施するための形態】
【0015】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0016】
図1は、第1の実施の形態の情報処理装置を説明する図である。
情報処理装置10は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力する。例えば、情報処理装置10は、MCMC法を基にしたSA法などを解の探索に用いる。情報処理装置10は記憶部11および処理部12を有する。
【0017】
記憶部11は、例えばRAM(Random Access Memory)などの揮発性記憶装置である。記憶部11は、レジスタなどの電子回路を含んでもよい。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、GPU(Graphics Processing Unit)などの電子回路でもよい。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合(マルチプロセッサ)を含み得る。
【0018】
組合せ最適化問題は、イジング型のエネルギー関数により定式化され、例えばエネルギー関数の値を最小化する問題に置き換えられる。エネルギー関数は、目的関数や評価関数などと言われてもよい。エネルギー関数は、複数の状態変数を含む。状態変数は、0または1の値を取るバイナリ変数である。状態変数はビットと言われてもよい。組合せ最適化問題の解は、複数の状態変数の値により表される。エネルギー関数の値を最小化する解は、イジングモデルの基底状態を表し、組合せ最適化問題の最適解に対応する。エネルギー関数の値は、エネルギーと表記される。
【0019】
イジング型のエネルギー関数は、式(1)で表される。
【0020】
【数1】
状態ベクトルxは、複数の状態変数を要素とし、イジングモデルの状態を表す。式(1)は、QUBO(Quadratic Unconstrained Binary Optimization)形式で定式化されたエネルギー関数である。なお、エネルギーを最大化する問題の場合には、エネルギー関数の符号を逆にすればよい。
【0021】
式(1)の右辺第1項は、全状態変数から選択可能な2つの状態変数の全組合せについて、漏れと重複なく、2つの状態変数の値と重み係数との積を積算したものである。添え字i,jは状態変数のインデックスである。xiは、i番目の状態変数である。xjは、j番目の状態変数である。Wijは、i番目の状態変数とj番目の状態変数との間の重み、または、結合の強さを示す重み係数である。Wij=Wjiであり、Wii=0である。
【0022】
式(1)の右辺第2項は、全状態変数の各々のバイアスと状態変数の値との積の総和を求めたものである。biは、i番目の状態変数に対するバイアスを示している。エネルギー関数に含まれる重み係数やバイアスなどを含む問題データは、記憶部11に記憶される。式(1)において、状態変数xiの値が変化して1-xiとなると、xiの増加分は、δxi=(1-xi)-xi=1-2xiと表せる。xiの変化に伴うエネルギーの変化量ΔEiは、式(2)で表される。
【0023】
【数2】
h
iは局所場と呼ばれ、式(3)で表される。局所場は、ローカルフィールド(LF:Local Field)と言われることもある。
【0024】
【数3】
状態変数x
jが変化したときの局所場h
iの変化分δh
i
(j)は、式(4)で表される。
【0025】
【数4】
状態変数x
jの値が変化したときに変化分δh
i
(j)をh
iに加算することで、x
jの値の変化後の状態に対応するh
iが得られる。
【0026】
基底状態の探索において、エネルギー変化がΔEiとなる状態遷移、すなわち、状態変数xiの値の変化を許容するか否かを決定するためにメトロポリス法やギブス法が用いられる。すなわち、ある状態から当該状態よりもエネルギーの低い他の状態への遷移を探索する近傍探索において、エネルギーが下がる状態だけでなく、エネルギーが上がる状態への遷移が確率的に許容される。例えば、エネルギー変化ΔEの状態変数の値の変化を受け入れる確率Aは、式(5)で表される。
【0027】
【数5】
βは温度値T(T>0)の逆数(β=1/T)であり、逆温度と呼ばれる。min演算子は、引数のうちの最小値を取ることを示す。式(5)の右辺上側はメトロポリス法に相当する。式(5)の右辺下側はギブス法に相当する。処理部12は、あるインデックスiに関して0<u<1である一様乱数uとAとを比較し、u<Aであれば状態変数x
iの値の変化を受入れ、状態変数x
iの値を変化させる。処理部12は、u<Aでなければ状態変数x
iの値の変化を受入れず、状態変数x
iの値を変化させない。式(5)によれば、ΔEが大きい値であるほど、Aは小さくなる。また、βが小さい、すなわち、Tが大きいほど、ΔEが大きい状態遷移も許容され易くなる。例えば、メトロポリス法の判定基準が用いられる場合、式(5)を変形した式(6)により遷移判定が行われてもよい。
【0028】
【数6】
すなわち、一様乱数u(0<u≦1)に対して、エネルギー変化ΔEが式(6)を満たす場合に、該当の状態変数の値の変化が許容される。一様乱数uに対して、エネルギー変化ΔEが式(6)を満たさない場合に、該当の状態変数の値の変化が許容されない。ln(u)・Tは熱ノイズに相当する。例えば、SA法では、最高温度値から最低温度値へ温度値Tを徐々に下げながら解を探索する。
【0029】
ここで、処理部12は、2-Way 1-Hot制約を満たす状態以外の状態の探索を除外することで、2-Way 1-Hot制約をもつ組合せ最適化問題、すなわち、順列最適化問題を効率的に解く。順列最適化問題は、N2個の状態変数の値で表される順列であって、エネルギー関数の値を最小化、または最大化する順列を求める問題であると言える。2-Way 1-Hot制約を満たす状態以外の状態の探索を除外する場合、処理部12は、一度の状態遷移において、4つの状態変数の値を変化させることになる。
【0030】
以下では、エネルギー関数に含まれるM2(Mは3以上の整数)個の状態変数が2-Way 1-Hot制約を受けるものとする。これらの状態変数をM行M列に配列したときに各行と各列に含まれる状態変数の値の和が1である制約を満たすように、一度の状態遷移において、4つの状態変数の値を変化させることで、2-Way 1-Hot制約を満たす状態以外の状態の探索が除外される。M2の状態変数をM行M列に配列する場合、例えば、x1~xMが1行目の1列目~M列目に相当し、xM+1~x2Mが2行目の1列目~M列目に相当し、以降、同様に、xM^2-M+1~xM^2がM行目の1列目~M列目に相当する。
【0031】
なお、2-Way 1-Hot制約が満たされている状態で、値が0の状態変数の1つを更新対象候補とした場合、他の3つの更新対象候補の状態変数が決まる。
例えば、インデックス=i,j,k,l(i<j<k<l)の4つの状態変数(xi,xj,xk,xl)の値を変化させると仮定する。xi,xjは同じ行に属する。xi,xkは同じ列に属する。xk,xlは同じ行に属する。xj,xlは同じ列に属する。
【0032】
値が0の状態変数であるxjを更新対象候補とした場合、xjと同じ行および同じ列に含まれる状態変数のうち、値が1の状態変数であるxi,xlが更新対象候補となる。さらに、xiと同じ列、かつ、xlと同じ行である、値が0のxkが更新対象候補となる。これら4つの状態変数(xi,xj,xk,xl)の値の変化は、式(7)のように表せる。
【0033】
【数7】
4つの状態変数(x
i,x
j,x
k,x
l)の値を変化させた場合に生じるイジングモデルのエネルギー変化をΔE
jとすると、ΔE
jは、以下の式(8)のように表せる。
【0034】
【数8】
また、x
i,x
j,x
k,x
lが変化することによる局所場の変化分Δh
m(m=1,2,…,n)は、以下の式(9)のように表せる。
【0035】
【数9】
このように、順列最適化問題では、式(5)または式(6)のΔEに式(8)のΔE
jが用いられる。また、式(4)のδh
i
(j)に代えて、式(9)のΔh
mが用いられる。記憶部11は、M
2個の状態変数の値を保持する。記憶部11は、M
2個の状態変数それぞれに対応する局所場h
mを保持する。処理部12は、記憶部11に保持されるh
mに基づいて、ΔE
jを計算する。また、処理部12は、ΔE
jと式(5)または式(6)とに基づいて、値の変化が許容される4つの状態変数を判定する。処理部12は、記憶部11に保持されるM
2個の状態変数のうち、値の変化が許容される4つの状態変数の値を変化させることで、イジングモデルの状態を遷移させる。処理部12は、4つの状態変数の値の変化に伴い、記憶部11に保持されるh
mを、h
m=h
m+Δh
mに更新する。
【0036】
例えば、処理部12は、変化候補となる4つ状態変数をシーケンシャルに選択して、ΔEjの計算や式(5)または式(6)の判定を行い、値の変化が許容される4つの状態変数の値を変化させる処理を繰り返し行ってもよい。あるいは、処理部12は、変化候補の4つの状態変数の複数の組に対して、ΔEjの計算や式(5)または式(6)の判定を並列に行ってもよい。この場合、処理部12は、値の変化が許容される組からランダムに1つを選択し、当該組に属する4つの状態変数の値を変化させる処理を繰り返し行う。
【0037】
このように、処理部12は、順列最適化問題の求解における1回の状態遷移の試行では高々4つの状態変数の値を変化させる仕組みをもつ。ここで、M行M列の各状態変数の値は順列で表せる。例えば、順列の要素の位置は行を示し、順列の要素の値は1である状態変数の列を示す。
図1では、M=5の場合、すなわち、5行5列の計25個の状態変数で表される1つの状態20に対応する順列(1,2,3,4,5)が示されている。例えば、順列の左からp番目の値qは、状態20で示される行列の上からp行目かつ左からq列目の要素を1とすることを示す。順列の左からp番目の値qは、状態20で示される行列の左からp列目かつ上からq行目の要素を1とすることを示してもよい。
【0038】
処理部12による、高々4つの状態変数の値を変化させる操作は、順列内の任意の2つの要素の位置を交換する操作に相当する。しかし、処理部12による1回の操作では、元の順列(1,2,3,4,5)に対して、(1,2,4,3,5)、(1,4,3,2,5)、(4,2,3,1,5)などのように、2つの要素を交換できるだけである。
【0039】
ところが、このような操作により、次の遷移先の状態を決定していると、例えば局所解に陥った場合に局所解から脱出できなくなり、より良い解を得られなくなることがある。
そこで、処理部12は、元のM行M列の状態変数に対して、順列における冗長要素に相当するN2-M2個の状態変数を追加して、N行N列の状態変数とする。Nは、Mより大きい整数である。冗長要素は、解の探索のために便宜的に導入される要素である。一例では、処理部12は、状態20に対応する順列(1,2,3,4,5)に対して冗長要素「6」を追加し、順列(1,2,3,4,5,6)とする。この場合、N=6である。順列(1,2,3,4,5,6)は、6行6列の状態変数で表される状態21に相当する。状態21の例では、6行目に属する状態変数および6列目に属する状態変数が、冗長要素「6」に対応する状態変数である。
【0040】
この場合、エネルギー関数は、冗長要素「6」が順列の所定位置、例えば最後尾にある場合に順列要素「6」が順列最適化問題の解に影響を与えないよう6行6列の計36個の状態変数に対して定式化される。冗長要素「6」が順列の最後尾にある場合は、6行目かつ6列目の状態変数の値が1の場合に相当する。
【0041】
例えば、順列最適化問題として、2次割り当て問題(QAP:Quadratic Assignment Problem)がある。QAPでは、フロー行列Fおよび距離行列Dが重み係数Wの計算に用いられる。フロー行列Fは式(10)で表される。距離行列Dは式(11)で表される。
【0042】
【0043】
【数11】
例えば、Fが非対称行列、Dが対象行列の場合、重み係数行列Wは式(12)で表される。
【0044】
【数12】
冗長要素「6」を追加する場合、フロー行列Fは式(13)で示されるフロー行列F’に変換される。また、距離行列Dは式(14)で示される距離行列D’に変換される。
【0045】
【0046】
【数14】
この場合、重み係数行列Wは、式(12)のフロー行列の要素をフロー行列F’の要素とし、距離行列の要素を距離行列D’の要素とすることで得られる。
【0047】
処理部12は、冗長要素に対応する各状態変数のバイアスbを、当初1を設定する状態変数については、比較的大きい正の値、例えば設定可能な最大値とし、当初0を設定する状態変数については、比較的小さい値、例えば0とする。なお、Wやbを含むエネルギー関数の情報は、処理部12によって生成されてもよいし、他の処理部で生成されたものが処理部12に入力されてもよい。処理部12は、エネルギー関数に基づいて、例えばテーブル30に示されるように順列最適化問題の解を探索する。なお、テーブル30の例では、探索の初期状態を、順列の最後尾に配置される冗長要素「6」を含む6つの要素の所定の順列で表される状態であると仮定する。
【0048】
テーブル30のステップ数は、4つの状態変数の値の変化による状態遷移を判定したステップの回数を示す。テーブル30の置換候補は、該当のステップにおいて置換候補となった2つの要素を示す。1回のステップにおいて、遷移先の候補状態が式(5)または式(6)の判定基準を満たさない場合、当該ステップでは状態遷移が起こらないことがある。ステップ数「α+1」の直前のステップ数「α」で到達する状態は、順列(1,2,3,4,5,6)に対応する状態21に相当する。
【0049】
まず、処理部12は、冗長要素「6」の位置を固定し、要素「1,2,3,4,5」の中で2つの要素を交換する操作により、初期状態から次々に上記判定基準を満たす状態へ変化させる。例えば、処理部12は、冗長要素「6」に対応する6行目かつ6列目の状態変数のバイアスに比較的大きい正の値を設定することで、当該状態変数の値を1に固定できる。あるいは、処理部12は、冗長要素「6」を当初の位置に固定することを示す制御フラグを記憶部11に設け、制御フラグ=Trueに設定してもよい。そして、処理部12は、制御フラグ=Trueの場合に、6行目かつ6列目の状態変数を値の変化候補から除外することで、当該状態変数の値を1に固定できる。後者の場合、処理部12は、6行目かつ6列目の状態変数のバイアスを最初から比較的小さい値にする。
【0050】
テーブル30の例では、ステップ数「α+1」の直前のステップ「α」において、順列(1,2,3,4,5,6)に到達した後、ステップ数「α+10」の時点まで、同じ状態から変化していない。なお、テーブル30では、ステップ「α」の図示を省略している。これは、要素「1,2,3,4,5」の任意の2つの要素を交換する場合のエネルギーの変化量が全て正であり、式(5)または式(6)の判定基準を満たさないことを示す。この場合、ステップ数「α+11」の時点で、処理部12は、局所解に陥ったと判定し、冗長要素「6」の位置の固定を解除する。例えば、処理部12は、6行目かつ6列目の状態変数のバイアスを比較的小さい値、例えば0に設定することで、当該状態変数の値を非固定にできる。あるいは、処理部12は、前述の制御フラグ=Falseに設定して、6行目かつ6列目の状態変数を値の変化候補に加えることで、当該状態変数の値を非固定にしてもよい。
【0051】
この場合、ステップ数「α+12」以降、ステップ数「δ」の前まで、処理部12は、順列内において冗長要素「6」を他の要素と交換する操作に相当する状態遷移を行える。例えば、ステップ数「α+12」では、直前の順列(1,2,3,4,5,6)で表される状態から、順列(6,2,3,4,5,1)で表される状態に遷移する。順列(6,2,3,4,5,1)は、要素「2,3,4,5,1」に着目すれば、直前の順列の同じ要素「1,2,3,4,5」に対して、例えば2つの要素(1,2)、(1,3)、(1,4)、(1,5)の置換を計4回行った状態に相当する。
【0052】
フロー行列F’および距離行列D’に基づく重み係数Wを用い、要素「6」のバイアスを比較的小さくすることで、要素「6」が順列内の他の位置に移動し易くなる。QAPでは、順列の要素と要素の位置とがエネルギーに影響するが、冗長要素「6」の位置が変化してもエネルギーの値の増加への影響がないためである。このため、冗長要素「6」が当初存在していた位置はエネルギー寄与の大きい他要素が入り易くなる。例えば、ステップ「β」において、エネルギー寄与の大きい要素「4」が、順列要素「6」が当初存在していた位置に入ると、要素「4」を除く、他の5つの要素の中で、2つの要素の置換が行われ易くなる。
【0053】
そして、ステップ数「δ」に達すると、処理部12は、再び、冗長要素「6」を当初の位置に固定する。例えば、処理部12は、冗長要素「6」に対応する6行目かつ6列目の状態変数のバイアスに比較的大きい正の値を再び設定することで、当該状態変数の値を1に固定できる。例えば、処理部12は、ステップ数「δ」より前のステップ「γ」で、6行目かつ6列目の状態変数のバイアスに比較的大きい正の値を設定する。すると、ステップ数「δ」で当該状態変数が「1」に更新されると、当該バイアスの効果により、それ以降6行目かつ6列目の状態変数は「1」に固定される。あるいは、処理部12は、ステップ数「δ」で制御フラグ=Trueに設定して、ステップ数「δ」以降、6行目かつ6列目の状態変数を強制的に1に設定するとともに、当該状態変数を値の変化候補から除外してもよい。
【0054】
処理部12は、その後、再び局所解に陥ったと判定した場合には、冗長要素「6」の位置の固定を解除した状態遷移を実行し、その後、冗長要素「6」の位置を当初の位置に固定する処理を再度行って、解の探索を継続してもよい。
【0055】
処理部12は、上記の解の探索を所定期間実行すると、冗長要素「6」を当初の位置に固定して得られた解の中で最もエネルギーの低い解を出力する。例えば、処理部12は、当該最もエネルギーの低い解から、冗長要素「6」に対応する状態変数を除去した解を生成し、生成した解を出力してもよい。
【0056】
なお、前述のように、処理部12は、ある状態に対する全ての遷移先候補に対して、エネルギーの変化量を並列に計算し、そのうち式(5)または式(6)の判定基準を満たすものの中から1つを、次の遷移先としてランダムに選択してもよい。処理部12は、全ての遷移先候補に対してエネルギーの変化量が正であり、次の遷移先候補の状態が式(5)または式(6)の判定基準により全て棄却された場合に局所解に陥ったと判定する。
【0057】
また、冗長要素の位置は任意の位置とすることができる。処理部12は、初期状態の順列(1,2,3,4,5,6)のうち、例えば要素「3」を冗長要素として扱ってもよい。この場合、例えばフロー行列F’や距離行列D’の3行目かつ3列目に全て0の行および列が設定され、冗長要素「3」が当初位置にある場合に順列最適化問題の解に影響を与えないように、エネルギー関数が定義される。あるいは、処理部12は、初期状態の順列(2,3,1,4,6,5)のうち、例えば要素「6」を冗長要素として扱ってもよい。この場合、例えばフロー行列F’や距離行列D’の5行目かつ6列目に全て0の行および列が設定され、冗長要素「6」が当初位置にある場合に順列最適化問題の解に影響を与えないように、エネルギー関数が定義される。
【0058】
このように、情報処理装置10によれば、第1処理と第2処理とが解の探索において切り替えて実行される。第1処理では、Nの2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定して、2-Way 1-Hot制約を満たすように4つの状態変数の値を変化させる場合のエネルギー関数の値の第1変化量に応じて当該4つの状態変数の値を変化させる処理が繰り返し行われる。第2処理では、K行目かつL列目の状態変数の値を非固定にして、2-Way 1-Hot制約を満たすように4つの状態変数の値を変化させる場合のエネルギー関数の値の第2変化量に応じて4つの状態変数の値を変化させる処理が繰り返し行われる。
【0059】
これにより、情報処理装置10は、求解性能を向上できる。例えば、第1処理において、局所解に陥った場合でも、第2処理を実行し、第1処理に戻すことで、局所解から脱出した状態で、第1処理を継続し、解の探索を行える。このため、情報処理装置10は、より良い解に到達する可能性を高めることができる。
【0060】
特に、情報処理装置10において、エネルギー関数に冗長要素に対応する状態変数を導入しない場合、局所解に陥ったときに、4つの状態変数よりも多くの状態変数の値を1度に変化させる演算を行うことで、局所解からの脱出を図ることも考えられる。しかし、1度に変化させる状態変数の数が多いほど、エネルギーの変化量や局所場の計算が複雑化し、演算のコストが高まる。例えば、処理部12を、FPGAなどの電子回路で実現する場合、当該演算のための回路の複雑化も問題になる。
【0061】
これに対し、情報処理装置10は、エネルギー関数に導入された、冗長要素に対応する状態変数を用いた状態遷移を行う。これにより、情報処理装置10は、第2処理では、第1処理で扱われる状態に対し、等価的に、既存の仕組みでは不可能だったマルチビット遷移、すなわち、同時に4よりも大きい数の状態変数を遷移させる動作を達成しているとみることもできる。このため、情報処理装置10は、第1処理で局所解に陥った場合でも、第2処理により当該局所解から容易に脱出可能になる。
【0062】
ただし、上記の例の場合、第2処理では求解対象の問題が変わるため、第2処理で得られた解を元のQAPの解とすることはできない。そのため、処理部12は、第1処理で得られた解の中から、冗長要素に対応する状態変数を除去することで元のQAPの解を取得する。
【0063】
また、順列最適化問題の一例としてQAPを例示したが、情報処理装置10の機能は、巡回セールスマン問題(TSP:Travelling Salesman Problem)、配車計画問題(VRP:Vehicle Routing Problem)および線形順序付け問題(LOP:Linear Ordering Problem)などに適用されてもよい。
【0064】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【0065】
情報処理装置100は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力する。情報処理装置100は、CPU101、RAM102、HDD(Hard Disk Drive)103、GPU104、入力インタフェース105、媒体リーダ106、NIC(Network Interface Card)107およびアクセラレータカード108を有する。
【0066】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、情報処理装置100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0067】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0068】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0069】
GPU104は、CPU101からの命令に従って、情報処理装置100に接続されたディスプレイ51に画像を出力する。ディスプレイ51としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0070】
入力インタフェース105は、情報処理装置100に接続された入力デバイス52から入力信号を取得し、CPU101に出力する。入力デバイス52としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0071】
媒体リーダ106は、記録媒体53に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体53として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0072】
媒体リーダ106は、例えば、記録媒体53から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体53は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体53やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0073】
NIC107は、ネットワーク54に接続され、ネットワーク54を介して他のコンピュータと通信を行うインタフェースである。NIC107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。NIC107は、無線通信インタフェースでもよい。
【0074】
アクセラレータカード108は、式(1)のイジング型のエネルギー関数で表される問題の解を、MCMC法を用いて探索するハードウェアアクセラレータである。アクセラレータカード108は、エネルギー関数の情報を示す問題データをCPU101から受け付け、解の探索を行い、探索した解を出力する。
【0075】
アクセラレータカード108は、一定温度のMCMC法または複数温度間でイジングモデルの状態を交換するレプリカ交換法を行うことで、該当温度におけるボルツマン分布に従う状態をサンプリングするサンプラーとして用いることができる。アクセラレータカード108は、組合せ最適化問題の求解のためには、レプリカ交換法や温度値を徐々に下げるSA法などのアニーリングの処理を実行する。
【0076】
SA法は、各温度値におけるボルツマン分布に従う状態をサンプリングし、サンプリングに用いる温度値を高温から低温に下げる、すなわち、逆温度βを増やすことで、最適解を効率的に発見する方法である。低温側、すなわち、βの大きい場合でもある程度状態が変化することで、温度値を早く下げても良い解を発見できる可能性が高くなる。例えば、SA法を用いる場合、アクセラレータカード108は、一定の温度値での状態遷移の試行を一定回数繰り返した後に温度値を下げる、という動作を繰り返す。
【0077】
レプリカ交換法は、複数の温度値を用いて独立してMCMC法を実行し、各温度値で得られた状態に対して、適宜、温度値を交換する手法である。低温でのMCMCによって状態空間の狭い範囲を探索し、高温でのMCMCによって状態空間の広い範囲を探索することで、効率的に良い解を発見することができる。例えば、レプリカ交換法を用いる場合、アクセラレータカード108は、複数の温度値の各々での状態遷移の試行を並列して行い、一定回数の試行を行うごとに、各温度値で得られた状態に対して、所定の交換確率で温度値を交換する、という動作を繰り返す。
【0078】
アクセラレータカード108は、FPGA109を有する。FPGA109は、アクセラレータカード108における解探索機能を実現する。解探索機能は、GPUやASICなどの他の種類の電子回路により実現されてもよい。FPGA109は、メモリ109aを有する。メモリ109aは、FPGA109での探索に用いられる問題データやFPGA109により探索された解を保持する。メモリ109aは、例えばSRAM(Static Random Access Memory)である。FPGA109は、メモリ109aを含む複数のメモリを有してもよい。FPGA109は、第1の実施の形態の処理部12の一例である。メモリ109aは、第1の実施の形態の記憶部11の一例である。なお、アクセラレータカード108は、FPGA109の外部にRAMを有してもよく、FPGA109の処理に応じて、メモリ109aに格納されたデータを当該RAMに一時的に退避してもよい。
【0079】
アクセラレータカード108のようにイジング形式の問題の解を探索するハードウェアアクセラレータは、イジングマシンやボルツマンマシンなどと呼ばれることがある。
図3は、2-Way 1-Hotによるビットフリップ制御例を示す図である。
【0080】
組合せ最適化問題では、2-Way 1-Hot制約と呼ばれる制約条件が課されることがある。2-Way 1-Hot制約をもつ組合せ最適化問題は、順列最適化問題と言われる。2-Way 1-Hotは、2W1Hと略記される。
【0081】
ここで、1-Hot制約とは、「ある状態変数の組の中で、値が1の変数は1個だけである」という制約である。例えば、
図3では、N
2個(Nは4以上の整数)の状態変数x
1,x
2,…が、N行N列で示されている。グループg11,g12は、行に対応する状態変数のグループの例を示す。グループg21,g22は、列に対応する状態変数のグループの例を示す。各行に対応する状態変数のグループに1-Hot制約を課す場合、各行の状態変数の和は1である。例えば、グループg11に属する状態変数の和は1である。また、グループg12に属する状態変数の和は1である。あるいは、各列に対応する状態変数のグループに1-Hot制約を課す場合、各列の状態変数の和は1である。例えば、グループg21に属する状態変数の和は1である。グループg22に属する状態変数の和は1である。
【0082】
2W1Hでは、2つの1-Hot制約を満たすように、1度に4つの状態変数の値を変化させる。すなわち、式(7)のような4ビットフリップである。i,j,k,lは、フリップさせる状態変数の組を示すインデックスの組である。なお、i<j<k<lである。
図3では、インデックスi,j,k,lに対応する状態変数の組の例が示されている。2W1Hでは、状態変数の数がN
2であり、N行の各行およびN列の各列でそれぞれ状態変数が、1-Hot制約が課されたグループとしてグループ化される。このときのエネルギー変化ΔE
jは、式(8)で表される。状態変数x
mに対応する局所場の変化Δh
mは、式(9)で表される。m=1,2,…,N
2である。
【0083】
以下では、順列最適化問題の一例として、QAPを挙げる。ただし、順列最適化問題は、例えば、TSP、VRPおよびLOPなどでもよい。
図4は、イジングモデルの状態と順列との対応関係の例を示す図である。
【0084】
図4(A)は、N=5の場合のイジングモデルの状態61を示す。
図4(B)は、N=5の場合のイジングモデルの状態62を示す。状態61,62それぞれは、25個の状態変数x
1~x
25で表される。状態61,62それぞれで示される行列の1行目は、状態変数x
1~x
5のグループである。2行目は、状態変数x
6~x
10のグループである。3行目は、状態変数x
11~x
15のグループである。4行目は、状態変数x
16~x
20のグループである。5行目は、状態変数x
21~x
25のグループである。なお、各状態変数は列方向にもグループ化される。
【0085】
状態61の例では、行方向の各グループの状態変数の値は次の通りである。{x1,x2,x3,x4,x5}={1,0,0,0,0}である。{x6,x7,x8,x9,x10}={0,1,0,0,0}である。{x11,x12,x13,x14,x15}={0,0,1,0,0}である。{x16,x17,x18,x19,x20}={0,0,0,1,0}である。{x21,x22,x23,x24,x25}={0,0,0,0,1}である。この場合、状態61は、順列(1,2,3,4,5)と表される。前述のように、例えば、順列の左からp番目の値qは、状態61や状態62などで示される行列の上からp行目かつ左からq列目の要素を1とすることを示す。
【0086】
状態62の例では、行方向の各グループの状態変数の値は次の通りである。{x1,x2,x3,x4,x5}={0,0,0,1,0}である。{x6,x7,x8,x9,x10}={0,1,0,0,0}である。{x11,x12,x13,x14,x15}={0,0,1,0,0}である。{x16,x17,x18,x19,x20}={0,0,0,0,1}である。{x21,x22,x23,x24,x25}={1,0,0,0,0}である。この場合、状態62は、順列(4,2,3,5,1)と表される。
【0087】
図5は、情報処理装置の機能例を示す図である。
情報処理装置100は、2W1H制約を満たすようにイジングモデルの状態を遷移させ、順列最適化問題の求解を効率的に行う。情報処理装置100は、探索部110および制御部120を有する。探索部110は、SA法などを用いて順列最適化問題の解を探索する。制御部120は、探索部110を制御する。探索部110および制御部120は、FPGA109により実現される。制御部120は、CPU101により実現されてもよい。探索部110は、重み係数保持部111、局所場保持部112、ΔE計算部113、判定部114および状態保持部115を有する。重み係数保持部111および局所場保持部112におけるデータの記憶領域には、メモリ109aが用いられる。
【0088】
重み係数保持部111は、式(1)における重み係数行列Wを保持する。重み係数保持部111は、判定部114から供給されるインデックスjに基づいて、局所場保持部121に重み係数Wmi,Wmj,Wmk,Wmlを供給する。
【0089】
局所場保持部112は、式(3)に基づく局所場h1,h2,…,hnを保持する。局所場保持部112は、2W1Hによる4つの状態変数xi,xj,xk,xlの値の変化に応じて、重み係数保持部111に保持される重み係数Wに基づき、式(9)により局所場h1,h2,…,hnを更新する。ここで、nは、全状態変数の数であり、n=N2である。
【0090】
ΔE計算部113は、状態変数xi,xj,xk,xlの値を変化させる場合のエネルギー変化ΔEjを、式(8)により計算する。ΔE計算部113は、変化候補とする複数の状態変数に対して、複数のΔEを並列に計算してもよい。
【0091】
判定部114は、式(6)に基づいて、4つの状態変数xi,xj,xk,xlの値の変化が許容されるか否かを判定する。判定部114は、許容される場合、状態保持部115に保持される4つの状態変数xi,xj,xk,xlの値を変化させるとともに、インデックスi,j,k,lを重み係数保持部111に供給する。ΔE計算部113により複数のΔEが並列に計算される場合、判定部114は、式(6)に基づいて、値の変化が許容される4つの状態変数の複数の組のうち、何れかを選択し、選択した組に属する4つの状態変数の値を変化させる。
【0092】
状態保持部115は、状態変数(x1,x2,…,xn)を保持する。状態保持部115は、初期状態のエネルギーに対して状態遷移に応じたΔEを積算することで、現在の状態に対応するエネルギーを保持してもよい。
【0093】
制御部120は、元の問題に対応するエネルギー関数に対して冗長要素を導入したエネルギー関数の情報を生成し、探索部110に設定する。例えば、制御部120は、QAPにおける元の問題のフロー行列Fおよび距離行列Dを、それぞれ式(13)、(14)のフロー行列F’および距離行列D’に変換し、フロー行列F’および距離行列D’に対して式(12)を用いて、重み係数Wを生成する。また、制御部120は、元の問題に対応するM2個の状態変数に対して、N2-M2個の状態変数を追加する。なお、制御部120がFPGA109で実現される場合、冗長要素を導入したエネルギー関数の情報の生成は、CPU101により実行されてもよい。
【0094】
制御部120は、通常は、冗長要素に対応する状態変数の値を1に固定して探索部110に解の探索を実行させる。制御部120は、探索部110における解の探索状況に応じて、冗長要素に対応する状態変数の値を非固定にして探索部110に解の探索を実行させる。その後、制御部120は、再び、冗長要素に対応する状態変数の値を1に固定して探索部110に解の探索を実行させる。具体的には、制御部120は、探索部110による解の探索で、局所解に陥った場合に、冗長要素に対応する状態変数の値を非固定にする。
【0095】
この場合、冗長要素に対応する状態変数の値を1に固定して解の探索を行う探索部110の動作モードは通常モードと呼ばれる。また、冗長要素に対応する状態変数の値を非固定にして状態遷移を促す探索部110の動作モードは、局所解脱出モードと呼ばれる。
【0096】
制御部120は、冗長要素に対応する状態変数のバイアスbに比較的大きい正の値を設定することで、冗長要素に対応する状態変数の値を1に固定する。また、制御部120は、冗長要素に対応する状態変数のバイアスbに比較的小さい値を設定することで、冗長要素に対応する状態変数の値を非固定にする。例えば、冗長要素として追加した特定の位置、例えばN行目かつN列目の状態変数が、通常時は1に固定する対象として、制御部120に予め設定される。
【0097】
なお、探索部110における2W1Hによる解の探索には、例えば、特開2021-157361号公報が参考になる。
図6は、QAPにおける冗長要素の追加方法の例を示す図である。
【0098】
一例として、元の問題が16個の状態変数x1~x16を用いて表されるものとする。問題情報D1は、元の問題に対応するフロー行列F、距離行列Dおよび状態変数(x1,…,x16)を示す。フロー行列Fおよび距離行列Dは、何れも4行4列の行列である。
【0099】
問題情報D2は、冗長要素を加えた後のフロー行列F’、距離行列D’および状態変数(x1,…,x25)を示す。フロー行列F’および距離行列D’は、何れも5行5列の行列である。フロー行列F’および距離行列D’それぞれの5行目の各要素および5列目の各要素は何れも0である。
【0100】
フロー行列F’および距離行列D’は拡張行列と言われる。QAPでは、重み係数行列Wは、拡張行列F’,D’を用いて式(12)により生成される。また、元の16個の状態変数x1~x16に対して追加される9個の状態変数は、冗長変数と言われる。
【0101】
図7は、冗長変数の追加例を示す図である。
図6の例において、元の問題における16個の状態変数x
1~x
16は、状態71を示す。例えば、{x
1,x
2,x
3,x
4}={1,0,0,0}、{x
5,x
6,x
7,x
8}={0,1,0,0}、{x
9,x
10,x
11,x
12}={0,0,1,0}、{x
13,x
14,x
15,x
16}={0,0,0,1}の場合、状態71は、順列(1,2,3,4)と表される。
【0102】
また、冗長要素「5」を加えた後の25個の状態変数x
1~x
25は、状態72を示す。
図7の状態72は、順列(1,2,3,4,5)と表される。この場合、例えば状態72の5行目かつ5列目の状態変数が冗長要素「5」に対応して、通常時は値が1に固定される状態変数として扱われる。
【0103】
制御部120は、5行目かつ5列目の状態変数の値を1に固定する場合、5行目かつ5列目の状態変数に対応するバイアスbを比較的大きい正の値、例えば設定可能な最大値などとする。また、制御部120は、5行目の他の状態変数、および、5列目の他の状態変数に対応する各バイアスbを比較的小さい値、例えば0などとする。
【0104】
そして、制御部120は、5行目かつ5列目の状態変数の値を非固定にする場合、5行目かつ5列目の状態変数に対応するバイアスbを比較的小さい値、例えば0などとする。なお、バイアスbを比較的小さい値に設定する際、当該値はWの大きさに応じて0より大きい値としてもよいし、負の値としてもよい。
【0105】
フロー行列F’および距離行列D’から式(12)により生成される重み係数行列Wを用いて、5行目かつ5列目の状態変数の値を1に固定する場合、冗長要素の追加後の問題は、元の問題と等価になる。
【0106】
なお、例えば、初期状態の順列(2,3,1,5,4)のうち、要素「5」を冗長要素とする場合も考えられる。この場合、制御部120は、例えばフロー行列F’および距離行列D’において4行目かつ5列目の要素を全て0とし、5行5列の状態変数のうちの4行目かつ5列目の状態変数を通常モードで「1」に固定する状態変数とすればよい。
【0107】
次に、情報処理装置100によりSA法を用いて順列最適化問題の求解を実行する処理手順を説明する。順列最適化問題としてQAPを例示するが、他の順列最適化問題の場合も同様の手順となる。
【0108】
図8は、情報処理装置の処理例を示すフローチャートである。
(S10)制御部120は、入力された元の問題情報を基に拡張行列を生成する。例えば、制御部120は、QAPの元の問題情報で示されるフロー行列Fおよび距離行列Dに対するフロー行列F’および距離行列D’を生成する。そして、制御部120は、フロー行列F’および距離行列D’を基に、式(12)を用いて重み係数行列を生成する。制御部120は、生成した重み係数行列を重み係数保持部111に設定する。更に、制御部120は、元の問題に対応する状態変数に対して冗長変数を追加し、状態保持部115に設定する。また、制御部120は、冗長変数の追加後の各状態変数の局所場を、局所場保持部112に設定する。
【0109】
(S11)制御部120は、式(6)に用いられる温度値Tを判定部114に設定する。なお、ステップS11が初回に実行される場合、制御部120は、初期温度値を温度値Tに設定する。また、ステップS11が2回目以降に実行される場合、制御部120は、温度値Tを前回よりも低い値とする。
【0110】
(S12)制御部120は、探索部110を2W1Hに基づいて動作させ、解探索を行わせる。制御部120は、2W1Hでの動作中、ステップS13,S18を実行する。このとき、制御部120は、冗長要素に対応する状態変数、すなわち、値を1に固定する冗長変数のバイアスを比較的大きい正の値に維持することで、当該冗長変数の値を1に固定する。ステップS12の探索部110の動作モードは、通常モードである。
【0111】
(S13)制御部120は、探索部110における2W1Hでの解探索で、局所解に陥ったか否かを判定する。局所解に陥った場合、ステップS14に処理が進む。局所解に陥っていない場合、ステップS12に処理が進む。例えば、制御部120は、判定部114により次の遷移先候補の状態が全て棄却された場合、局所解に陥ったと判定する。次の遷移先候補の状態が全て棄却される場合とは、次の遷移先候補に対応するエネルギーの変化量が全て正であり、式(5)または式(6)の判定基準を満たさない場合である。
【0112】
(S14)制御部120は、探索部110に対して、値を1に固定している冗長変数のバイアスを比較的小さい値に下げる設定を行う。
(S15)制御部120は、探索部110を2W1Hに基づいて動作させ、状態遷移を行わせる。ステップS15の探索部110の動作モードは、局所解脱出モードである。
【0113】
(S16)制御部120は、ステップS15の解探索において、所定条件が満たされたか否かを判定する。所定条件が満たされた場合、ステップS17に処理が進む。所定条件が満たされない場合、ステップS15に戻り、ステップS15の解探索を継続させる。所定条件は、例えば、ステップS14のバイアス低下直後から所定時間が経過したことでもよいし、ステップS14のバイアス低下直後から探索部110において所定回数だけ状態遷移が発生したことでもよい。
【0114】
(S17)制御部120は、探索部110に対して、値を1に固定する冗長変数のバイアスを、元の比較的大きい値に上げる設定を行う。そして、ステップS12に処理が進む。
【0115】
(S18)制御部120は、ステップS12における2W1Hでの解探索において、規定回数だけ変化候補の変数xjを選択したか否かを判定する。規定回数だけ変化候補の変数xjを選択した場合、ステップS19に処理が進む。規定回数だけ変化候補の変数xjを選択していない場合、ステップS12に処理が進む。なお、前述のように、変化候補のxjの選択に応じて、変化候補の4つの状態変数xi,xj,xk,xlが特定される。
【0116】
(S19)制御部120は、規定回数だけ温度値Tを下げたか否かを判定する。規定回数だけ温度値Tを下げた場合、ステップS20に処理が進む。規定回数だけ温度値Tを下げていない場合、ステップS11に処理が進む。
【0117】
(S20)制御部120は、それまでで得られた最も低いエネルギーの状態から、冗長変数を除去することで、元の問題に対する解を生成して出力し、処理を終了する。ここで、最終的な解は、冗長変数を1に固定した通常モードでの解探索で得られた状態の中から選択される。
【0118】
このように、情報処理装置100は、冗長変数の値を1に固定した2W1Hでの解探索で局所解に陥った場合に、当該冗長変数の値を非固定にすることで、より多様な状態に遷移可能となり、局所解から効率的に脱出可能になる。こうして、情報処理装置100は、より良い解を探索可能になり、求解性能を向上できる。
【0119】
なお、ステップS18,S19は、ステップS12の中で実行される処理であると考えてもよい。また、ステップS12の実行中に、ステップS13の判定が実行されることになる。
【0120】
また、
図8の手順では、SA法を実行する例を示したが、情報処理装置100は、レプリカ交換法を実行してもよい。その場合、ステップS10の温度値の設定は、レプリカ間での温度値の交換により行われ得る。また、ステップS19の判定は、例えば規定回数だけ温度値の交換を行ったか否かにより判定され得る。
【0121】
図9は、冗長要素を用いた動作モードの切り替え例を示す図である。
テーブルT1は、探索部110および制御部120における通常モードおよび局所解脱出モードの切り替え例を示す。テーブルT1の例では、最初の状態は順列(1,2,3,4,5,6)で表される。このうち、要素「6」は冗長要素である。
図9の説明では、状態遷移は、順列の要素の置換によって表される。
【0122】
テーブルT1は、動作モード、ステップ、置換候補、状態、ΔE、遷移および冗長要素に関する変数のバイアスの項目を含む。動作モードの項目には、通常モードまたは局所解脱出モードの何れかが記載される。ステップの項目には、状態遷移の試行の回数に相当するステップ数が記載される。置換候補の項目には、順列における置換のための試行の対象とされる要素のペアが記載される。状態の項目には、該当のステップ数における状態が記載される。状態の項目は、置換要素および冗長要素の項目に細分化される。置換要素の項目には、順列のうち、置換候補として選択され得る要素が記載される。冗長要素の項目には、順列において冗長要素「6」が当初配置されていた位置、すなわち、冗長枠に配置されている要素が記載される。ΔEの項目には、ΔEの符号が記載される。遷移の項目には、該当のステップ数における状態から、置換候補を置換する遷移の発生の有無が記載される。冗長要素に関する変数のバイアスの項目には、冗長要素「6」に対応する冗長変数のバイアスの値が記載される。
【0123】
例えば、ステップ「1」~「10」は、通常モードの動作である。ステップ「1」~「10」では、冗長要素「6」に対応する冗長変数のバイアスに正の大きい値が設定されており、冗長要素「6」は、他の位置に移動できない。また、ステップ「1」~「10」では、各置換候補に対してΔEが全て正であり、状態遷移が発生しないものとする。この場合、制御部120は、ステップ「11」において、探索部110での解探索で局所解に陥ったと判断し、探索部110を局所解脱出モードへ移行させる。すなわち、制御部120は、冗長要素「6」に対応する冗長変数のバイアスを例えば0に設定する。
【0124】
そして、探索部110は、ステップ「12」において、置換候補(1,6)に対して、ΔEが負となったため、当該置換候補(1,6)を置換する遷移を行う。これにより、要素「1」が冗長枠に移動し、冗長要素「6」が要素「1」の位置に移動する。
【0125】
ステップ「12」の後も探索部110は、局所解脱出モードでの動作を継続する。そして、暫くすると、ステップ「r」で、コスト寄与の最も大きい要素「4」が冗長枠に出される。すると、その後、局所解脱出モードでは、実質的に当該要素「4」を除く5つの要素で2W1Hでの状態遷移が行われる。
【0126】
その後、制御部120は、ステップ「s」で、局所解脱出モードにおいて所定条件が満たされると、局所解脱出モードに移行する際に変更した冗長変数のバイアスを、比較的大きい正の値に再び設定する。これにより、探索部110は、通常モードに移行する。すると、その後、ステップ「t」で、冗長要素「6」が元の冗長枠に移動し、以降の通常モードでは、冗長要素「6」が当初の冗長枠の位置に固定される。
【0127】
こうして、制御部120は、探索部110での通常モードの解探索で局所解に陥った場合には、探索部110を局所解脱出モードに切り替え、その後再び通常モードに戻すことで、局所解から脱出して解探索を継続できる。これにより、情報処理装置100は、より良い解を発見する可能性を高めることができ、求解性能を向上できる。
【0128】
また、探索部110は、冗長要素の導入と、動的なバイアスの変更以外は全て通常の2W1Hの仕組みの中で動作している。局所解脱出モードへの出入りによって、等価的に、既存の2W1Hの仕組みでは不可能だったマルチビット遷移、すなわち、同時に4よりも大きい数の状態変数を遷移させる動作を達成しているとみることもできる。
【0129】
[第3の実施の形態]
次に第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0130】
第2の実施の形態では、情報処理装置100は、バイアスの値の変更によって冗長変数の値の固定および非固定を制御するものとした。
第3の実施の形態では、情報処理装置100は、バイアスの値の変更に代えて、状態変数ごとにフラグを付与し、フラグに基づいて冗長変数の値の固定および非固定を制御する。
【0131】
図10は、第3の実施の形態の冗長変数フラグの例を示す図である。
例えば、元の状態ベクトルx=(x
1,x
2,…,x
R)に対して冗長変数x
R1,x
R2,x
R3を追加して、状態ベクトルx’=(x
1,x
2,…,x
R,x
R1,x
R2,x
R3)とした場合、状態ベクトルx’の各要素に冗長変数フラグ81が付与される。冗長変数フラグ81は、例えば、対応する状態変数が冗長変数の場合に「1」が設定され得る。一方、冗長変数フラグ81は、対応する状態変数が冗長変数でない場合に「0」が設定される。
【0132】
図11は、冗長変数フラグの変化例を示す図である。
一例として4要素の順列(1,2,3,4)に対して、1つの冗長要素「5」を加える場合を示す。初期状態では冗長要素「5」は、順列の末尾に付加される。すなわち、順列(1,2,3,4)が順列(1,2,3,4,5)のように拡張される。この時、両者の間でエネルギーの差が発生しないように定式化される。例えば、QAPの場合、
図6のように拡張すれば当該エネルギーの差が発生しない。
【0133】
また、状態変数には、元の状態変数(x1,x2,…,x16)に対して、冗長変数(x17,x18,…,x25)が追加される。
状態90は、25個の状態変数による5行5列の行列で表される。状態90では、1行目がx1~x5、2行目がx6~x10、3行目がx11~x15、4行目がx16~x20、5行目がx21~x25となる。
【0134】
このとき、冗長変数フラグの値は、冗長要素「5」が順列のどこにあるか分かるように付与される。探索部110による解探索を始めた後、暫くは(1,2,3,4)の中の2要素のみを動かす遷移となる。したがって、取り得る状態は、(*,*,*,*,5)のように、冗長要素「5」は常に末尾となる。ここで、アスタリスク記号「*」は、「5」以外の要素を示す。冗長変数フラグ情報91(=flag1)は、このときの各状態変数の冗長変数フラグの値を示す。
【0135】
制御部120は、探索部110で局所解に陥ったことを検出すると、探索部110を局所解脱出モードに移行させ、冗長変数についても値の変化を許容するようにする。これは、順列としては、冗長要素「5」が順列中のどこにでも移動できることを意味する。例えば、順列(2,3,4,1,5)のときに、制御部120は、冗長要素「5」を動かせるようにして、探索部110により暫く遷移を行わせる。すると、冗長要素「5」が移動し、例えば、順列(3,5,2,1,4)の状態に移動する。冗長変数フラグ情報92(=flag2)は、このときの各状態変数の冗長変数フラグの値を示す。
【0136】
例えば、制御部120は、局所解脱出モードでの動作が所定期間行われた、あるいは、局所解脱出モードでの状態遷移が所定回数行われたなど、上記の局所解から十分離れた状態に移動したと判定すると、冗長要素「5」を順列の末尾に移動させる。この操作は、順列(3,5,2,1,4)の例では、冗長要素「5」と要素「4」とを入れ替える操作に相当する。制御部120は、この操作がエネルギーを増加させる場合でも、強制的に行う。例えば、
図6のようにQAPを拡張した場合、順列(3,4,2,1,5)のエネルギーは、(3,5,2,1,4)に比べて必ず大きくなるので、強制的に行わないと、冗長要素「5」を当初の位置に戻せないためである。
【0137】
冗長要素「5」を戻した後の順列は(3,4,2,1)に相当する。順列(3,4,2,1)は、局所解脱出モードへの移行直前における順列(2,3,4,1)から比較的大きく離れた順列となる。
【0138】
図12は、情報処理装置の機能例を示す図である。
第3の実施の形態では、局所場保持部112が局所場h
1,h
2,…,h
nとともに、冗長変数フラグf
1,f
2,…,f
nを保持する点が、第2の実施の形態と異なる。また、ΔE計算部113が冗長変数判定部113aを有する点が第2の実施の形態と異なる。冗長変数判定部113aは、冗長変数フラグf
1,f
2,…,f
nに基づいて、各インデックスに対応する状態変数が冗長変数に該当するか否かを判定する。冗長変数フラグf
1,f
2,…,f
nの値は、通常モードでは値を1に固定する冗長変数に対する値が1、それ以外が0になるように固定される。冗長変数フラグf
1,f
2,…,f
nの値は、局所解脱出モードでは状態遷移に応じて冗長要素に対応する状態変数に対する値が1、それ以外が0になるように更新される。冗長変数フラグf
1,f
2,…,f
nの値の更新は、局所場保持部112により行われてもよいし、判定部114により行われてもよい。
【0139】
例えば、ΔE計算部113は、冗長変数判定部113aにより冗長変数フラグが1であると判定された冗長変数の値を1から0にする場合のΔEを比較的大きな値、例えば、設定可能な最大値として出力することで、当該冗長変数の値を1に固定し得る。ΔE計算部113は、当該冗長変数の値を1に固定しない場合は、冗長変数フラグの値に関わらず、通常通り、2W1Hに従って各状態変数の値を変化させる場合のΔEを式(8)を基に計算すればよい。
【0140】
次に、第3の実施の形態の情報処理装置100によりSA法を実行する処理手順を説明する。
図13は、情報処理装置の処理例を示すフローチャートである。
【0141】
ここで、第3の実施の形態では、情報処理装置100は、
図8で例示したステップS12,S15,S17に代えて、それぞれステップS12a,S15a,S17aを実行する点が第2の実施の形態と異なる。そこで、以下では、ステップS12a,S15a,S17aを主に説明し、他のステップの説明を省略する。
【0142】
(S12a)制御部120は、探索部110を2W1Hに基づいて動作させ、解探索を行わせる。制御部120は、2W1Hでの動作中、ステップS13,S18を実行する。このとき、探索部110は、値を1に固定する冗長変数の冗長変数フラグを1に維持し、フラグ無し、すなわち、冗長変数フラグ=0の状態変数のみに対して状態遷移試行を行う。ステップS12aの探索部110の動作モードは、通常モードである。
【0143】
ここで、ステップS13 YESの場合、ステップS15aに処理が進む。ステップS13 NOの場合、ステップS12aに処理が進む。
(S15a)制御部120は、冗長変数フラグ有無、すなわち、冗長変数フラグの値に関わらず、全状態変数に対する状態遷移試行を行うように、探索部110を2W1Hに基づいて動作させ、解探索を行わせる。探索部110では、状態遷移に応じて、冗長要素に対応する冗長変数の冗長変数フラグが1、それ以外が0になるように冗長変数フラグが更新される。ステップS15aの探索部110の動作モードは、局所解脱出モードである。そして、ステップS16に処理が進む。
【0144】
なお、ステップS16における所定条件は、例えば、ステップS15aの動作開始直後から所定時間が経過したことでもよいし、探索部110において所定回数だけ状態遷移が発生したことでもよい。
【0145】
(S17a)制御部120は、フラグ付き状態変数を初期状態の場所へ強制移動させる。すなわち、制御部120は、冗長要素がステップS15aの直前の当初の位置に配置されるように、当初の値が1であった冗長変数の値を1に強制的に戻し、冗長変数フラグも当該冗長変数が1、それ以外が0になるように設定する。探索部110では、当該冗長変数の値の更新に応じて、局所場の更新も行われる。そして、ステップS12aに処理が進む。
【0146】
このように、情報処理装置100は、冗長変数の値を1に固定した2W1Hでの解探索で局所解に陥った場合に、当該冗長変数の値を非固定にすることで、より多様な状態に遷移可能となり、局所解から効率的に脱出可能になる。こうして、情報処理装置100は、より良い解を探索可能になり、求解性能を向上できる。
【0147】
なお、ステップS18,S19は、ステップS12aの中で実行される処理であると考えてもよい。また、ステップS12aの実行中に、ステップS13の判定が実行されることになる。
【0148】
ところで、情報処理装置100は、通常モードで値を1に固定する冗長変数の数を可変にすることもできる。そこで、情報処理装置100により、冗長変数の数を制御する手順を説明する。
【0149】
図14は、冗長変数の数を制御する動作例を示すフローチャートである。
例えば、情報処理装置100は、ステップS15aに相当する局所解脱出モードにおいて、下記の手順により、冗長変数の数を制御してもよい。
【0150】
(S30)制御部120は、入力された元の問題情報に応じて、拡張行列を生成し、冗長変数をk個追加する。拡張行列は、値を1に固定する冗長変数の数に応じて生成される。例えば、順列の末尾に冗長要素を2つ追加するように冗長変数を追加する場合、QAPでは、元のフロー行列Fおよび距離行列Dの行および列の末尾に、値が全て0の2つの行と2つの列とが追加される。例えば、制御部120は、当初追加する冗長変数の数を0とし、以後、ステップS30が実行されるたびにkの値を増やす。
【0151】
(S31)制御部120は、冗長変数フラグ有無、すなわち、冗長変数フラグの値に関わらず、全状態変数に対する状態遷移試行を行うように、探索部110を2W1Hに基づいて動作させ、解探索を行わせる。探索部110では、状態遷移に応じて、冗長要素に対応する冗長変数の冗長変数フラグが1、それ以外が0になるように冗長変数フラグが更新される。ステップS31における探索部110の動作は、例えば一定時間行われる。
【0152】
(S32)制御部120は、規定回数、変数kを変更したか否かを判定する。規定回数、変数kを変更した場合、ステップS33に処理が進む。規定回数、変数kを変更していない場合、ステップS30に処理が進む。
【0153】
(S33)制御部120は、当初の値を1として追加された冗長変数の値を1に強制的に戻し、ステップS30により追加された冗長変数を除去して、処理を終了する。本処理の終了後は、例えばステップS12aに処理が進む。
【0154】
なお、制御部120は、ステップS31を一定時間実行することで得られた最低エネルギーを取得し、ステップS32では、当該最低エネルギーが、これまでに得られたものから改善されたか否かに応じて、kを増やすか減らすかを選択してもよい。
【0155】
例えば、最初にk=0でステップS31が実行された際に得られた最低エネルギーをE(0)とする。次に1回目に冗長変数をk個増やしてステップS31が実行された際に得られた最低エネルギーをE(1)とする。制御部120は、ステップS32でE(1)<E(0)、すなわち、改善の場合は、更に、2回目以降もkを増やし、k個の冗長変数を追加して試す。そして、制御部120は、ステップS32でE(n+1)>E(n)になった段階で、ステップS33に進んでもよい。
【0156】
このように、制御部120は、導入する冗長要素の可変として、当該冗長変数を複数導入してもよい。
また、探索部110は、冗長要素が複数導入された場合に、局所解脱出モードにおいて、冗長要素同士の置換による遷移を抑制してもよい。そこで、探索部110による冗長要素同士の置換による遷移を抑制する手順を説明する。
【0157】
図15は、冗長要素同士の置換による遷移を抑制する動作例を示すフローチャートである。下記の処理は、例えばステップS15aにおいて実行される。
(S40)ΔE計算部113は、現在の値が0である状態変数x
jのインデックスjを決定する。インデックスjは、ランダムに選択されてもよいし、シーケンシャルに選択されてもよい。ΔE計算部113は、インデックスjからその他にフリップすべき3つの状態変数のインデックスi,k,lを計算する。x
i=1、かつ、x
l=1である。
【0158】
(S41)冗長変数判定部113aは、インデックスi,lに対応する冗長変数フラグfi,flを読み出す。
(S42)冗長変数判定部113aは、2つの冗長変数フラグfi,flの少なくとも一方が0であるか否かを判定する。2つの冗長変数フラグfi,flの少なくとも一方が0である場合、ステップS43に処理が進む。2つの冗長変数フラグfi,flの何れもが0でない、すなわち、両方とも1の場合、ステップS40に処理が進む。このように、状態変数xi,xlの両方が冗長変数の場合、インデックスjが再度選択される。
【0159】
(S43)ΔE計算部113は、式(8)に基づくΔEの計算を行い、判定部114に供給する。判定部114は、ΔEに基づく式(6)の判定により、4つの状態変数xi,xj,xk,xlの値の更新を許容するか否か判定し、許容する場合、状態保持部115における状態変数xi,xj,xk,xlの値を更新する。また、判定部114は、インデックスjを重み係数保持部111に出力し、重み係数(Wmi,Wmj,Wmk,Wml)を局所場保持部112に供給させる。局所場保持部112は、式(9)に基づいて各局所場を更新する。
【0160】
(S44)ΔE計算部113は、制御部120の制御により局所解脱出モードにおける2W1Hの動作を終了するか否かを判定する。2W1Hの動作を終了する場合、処理が終了する。2W1Hの動作を継続する場合、ステップS40に処理が進む。なお、局所解脱出モードの終了は、前述のステップS16の判定により、制御部120により制御される。
【0161】
ここで、冗長要素同士の置換による状態遷移は、冗長要素以外の他の要素の移動を伴わない意味のない遷移であり、余計な処理となる。そこで、探索部110は、上記のように冗長要素同士の置換による遷移を抑制することで、意味のない遷移が行われることを防ぎ、求解を高速化できる。
【0162】
以上説明したように、探索部110は、Nの2乗個の状態変数をN行N列に配列したときのK(KはN以下の自然数)行目かつL(LはN以下の自然数)列目の状態変数の値を1に固定して2W1H制約を満たすように状態遷移を繰り返し行う第1処理を実行する。また、探索部110は、Nの2乗個の状態変数をN行N列に配列したときのK行目かつL列目の状態変数の値を非固定にして、2W1H制約を満たすように状態遷移を繰り返し行う第2処理を実行する。制御部120は、探索部110の解の探索において、第1処理と第2処理とを切り替えて実行させる。
【0163】
これにより、情報処理装置100は、求解性能を向上できる。なお、情報処理装置100の探索部110や制御部120の機能は、例えばFPGA109やGPUなどにより実現される。情報処理装置100の上記機能は、RAM102に記憶されたプログラムがCPU101により実行されることで実現されてもよい。FPGA109、GPUおよびCPU101などの演算回路を含むコプロセッサまたはプロセッサは、第1の実施の形態の処理部12の一例である。
【0164】
制御部120は、第1処理においてエネルギー関数の値の最低値が更新されない場合に第2処理に切り替え、第2処理を実行した後に第1処理に切り替えてもよい。これにより、情報処理装置100は、第1処理での探索の進行が期待できない場合に、第2処理によって状態遷移を促し、第1処理でより良い解を得られる可能性を高められる。例えば、制御部120は、第1処理において局所解に陥った場合に、局所解を起点として第2処理に切り替え、第2処理を実行した後に第1処理に切り替えてもよい。これにより、情報処理装置100は、第2処理により局所解から脱出して第1処理を継続でき、求解性能を向上できる。
【0165】
例えば、制御部120は、第1処理から第2処理に切り替えた後、第2処理を所定時間実行した後に、または、第2処理による4つの状態変数の値の変化が所定回数行われた後に、第1処理に切り替える。これにより、情報処理装置100は、局所解からある程度離れた状態から第1処理を再開でき、より多様な解を探索できる。
【0166】
また、制御部120は、Nの2乗個の状態変数をN行N列に配列したときのK行目かつL列目の状態変数に対応する、エネルギー関数の値の変化量に対するバイアスを制御することで、第1処理と第2処理との切り替えを行う。これにより、情報処理装置100は、既存の仕組みを用いて、第1処理と第2処理との切り替えを容易に行える。当該バイアスは、例えば、式(1)や式(3)のbiである。
【0167】
あるいは、制御部120は、Nの2乗個の状態変数をN行N列に配列したときのK行目かつL列目の状態変数に対応するフラグを制御することで、第1処理と第2処理との切り替えを行う。これにより、情報処理装置100は、第1処理と第2処理との切り替えを簡便な仕組みにより行える。冗長変数フラグは、当該フラグの一例である。
【0168】
また、制御部120は、第1処理において値を1に固定し第2処理において値を非固定にする状態変数の数を可変にしてもよい。これにより、問題や第2処理の実行状況に応じて冗長変数の数を適宜設定可能になり、第2処理の効率化を図れる。
【0169】
また、探索部110は、N行N列に配列されたNの2乗個の状態変数の値により示される複数の要素の順列のうち、第1処理において値を1に固定し第2処理において値を非固定にする複数の状態変数の追加により順列に挿入された複数の冗長要素それぞれの順列における位置を識別するフラグをNの2乗個の状態変数それぞれに対して設定してもよい。探索部110は、第2処理では、Nの2乗個の状態変数それぞれに対応するフラグに基づいて、順列のうちの2つの冗長要素の置換に対応する4つの状態変数の値の変化に対する処理を省略する。これにより、情報処理装置100は、冗長要素同士の置換に対応する状態遷移試行を抑制でき、第2処理を効率化できる。冗長変数フラグは、上記フラグの一例である。
【0170】
また、例えば、制御部120は、入力された問題情報を取得してもよい。問題情報は、M(MはNより小さい3以上の整数)行M列の問題行列を含む。例えば、前述のフロー行列や距離行列は、問題行列の一例である。制御部120は、当該問題行列をN行N列に変換したときのK行目となる新たな行およびL列目となる新たな列として、全ての要素が0である行および列を挿入して問題行列をN行N列に変換してもよい。制御部120は、N行N列に変換した問題行列に基づいて、エネルギー関数に含まれる重み係数行列を生成し得る。こうして、制御部120は、N行N列で配列されたNの2乗個の状態変数のうちのK行目かつL列目の状態変数を、通常時に値を1に固定し、局所解脱出モードでは値を非固定にする冗長変数としてエネルギー関数に導入することができる。
【0171】
情報処理装置100の上記機能は、QAP、TSP、VRPおよびLOPなどの順列最適化問題に適用することができる。
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体53に記録できる。
【0172】
例えば、プログラムを記録した記録媒体53を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体53に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0173】
10 情報処理装置
11 記憶部
12 処理部
20,21 状態
30 テーブル