(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022164162
(43)【公開日】2022-10-27
(54)【発明の名称】情報処理システム、情報処理方法及びプログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20221020BHJP
【FI】
G06N99/00 180
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2021069480
(22)【出願日】2021-04-16
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】特許業務法人扶桑国際特許事務所
(72)【発明者】
【氏名】小山 純平
(57)【要約】
【課題】求解性能を向上する。
【解決手段】ノード10は、自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数を保持し、自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または第2重み係数の計算に用いられるペナルティ値を保持する。ノード10は、第2重み係数またはペナルティ値に対して、0より大きく1より小さい係数を乗算する。ノード10は、第2重み係数に対する当該係数の乗算結果である第3重み係数、または、ペナルティ値に対する当該係数の乗算結果を用いて計算された第2ペアに対する第4重み係数と、第1重み係数とに基づいて、自ノードに割り当てられた各状態変数の値を変化させることによるエネルギー関数の値の変化量を計算する。ノード10は、当該各状態変数に対して計算した変化量に基づいて、値を変化させる状態変数を決定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数の状態変数を含むエネルギー関数により表される問題の解を探索する、複数のノードを含む情報処理システムにおいて、
前記複数のノードの各々は、前記問題を分割することによって生成され、各々が前記複数の状態変数のうちの一部の状態変数である状態変数群を含む複数の部分問題のうち、自ノードに割り当てられた前記部分問題に対応して割り当てられた前記状態変数群に属する状態変数の値を変化させることで前記解の探索を実行し、
前記探索において、前記複数のノードの各々は、
前記自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数を保持し、前記自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または前記第2重み係数の計算に用いられるペナルティ値を保持し、
前記第2重み係数または前記ペナルティ値に対して、0より大きく1より小さい係数を乗算し、
前記第2重み係数に対する前記係数の乗算結果である第3重み係数、または、前記ペナルティ値に対する前記係数の乗算結果を用いて計算された前記第2ペアに対する第4重み係数と、前記第1重み係数とに基づいて、前記自ノードに割り当てられた前記状態変数群に属する各々の状態変数に対して当該状態変数の値を変化させることによる前記エネルギー関数の値の変化量を計算し、
前記各々の状態変数に対して計算した前記変化量に基づいて、値を変化させる状態変数を決定する、
情報処理システム。
【請求項2】
前記複数のノードの各々は、
前記自ノードで特定された前記解に対応する前記エネルギー関数の値を、前記第3重み係数または前記第4重み係数に代えて、前記第2重み係数を用いて計算し、計算した前記エネルギー関数の値に応じて前記解を複数保持し、
前記自ノードで保持する前記複数の解のうちの少なくとも1つの前記解を他ノードに送信し、前記他ノードにより送信された前記解を受信し、前記他ノードから受信した前記解に基づいて、前記自ノードで保持する前記複数の解の少なくとも一部を更新する、
請求項1記載の情報処理システム。
【請求項3】
前記複数のノードの各々は、
前記自ノードで新たに特定された第1の解及び前記自ノードで保持する前記複数の解の各々に対応する前記エネルギー関数の値に基づいて、前記自ノードで保持する前記複数の解の何れかを前記第1の解に置換する、
請求項2記載の情報処理システム。
【請求項4】
前記複数のノードの各々は、
前記自ノードで新たに特定された第2の解に含まれる、前記自ノードに割り当てられた前記状態変数群に属する状態変数の値を、前記自ノードで保持する前記複数の解の各々に反映させることで、前記第1の解を特定する、
請求項3記載の情報処理システム。
【請求項5】
前記複数のノードの各々は、
前記自ノードで新たに特定された第2の解を、前記第1の解とする、
請求項3記載の情報処理システム。
【請求項6】
前記複数のノードの各々は、
前記他ノードから受信した前記解に対応する前記エネルギー関数の値に基づいて、前記自ノードで保持する前記複数の解の少なくとも一部を更新する、
請求項2記載の情報処理システム。
【請求項7】
前記複数のノードの各々は、
前記自ノードで保持する前記複数の解に基づいて次の探索に用いる初期解を生成する、
請求項2記載の情報処理システム。
【請求項8】
前記複数のノードに前記複数の部分問題を割り当て、前記複数のノードの各々による前記解の探索、及び、ノード間での前記解の送受信が繰り返して一定時間行われると、前記複数のノードの各々が保持する前記複数の解のうちの少なくとも1つの前記解を特定し、特定した前記解を出力する制御部、
を更に有する請求項2記載の情報処理システム。
【請求項9】
前記複数のノードの各々は、
前記自ノードで特定された前記解に対応する前記エネルギー関数の値を求める際には、前記第3重み係数または前記第4重み係数に代えて、前記第2重み係数を用いる、
請求項1記載の情報処理システム。
【請求項10】
複数の状態変数を含むエネルギー関数により表される問題の解を、複数のノードを用いて探索する情報処理方法において、
前記複数のノードの各々は、前記問題を分割することによって生成され、各々が前記複数の状態変数のうちの一部の状態変数である状態変数群を含む複数の部分問題のうち、自ノードに割り当てられた前記部分問題に対応して割り当てられた前記状態変数群に属する状態変数の値を変化させることで前記解の探索を実行し、
前記探索において前記複数のノードの各々が、
前記自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数を保持し、前記自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または前記第2重み係数の計算に用いられるペナルティ値を保持し、
前記第2重み係数または前記ペナルティ値に対して、0より大きく1より小さい係数を乗算し、
前記第2重み係数に対する前記係数の乗算結果である第3重み係数、または、前記ペナルティ値に対する前記係数の乗算結果を用いて計算された前記第2ペアに対する第4重み係数と、前記第1重み係数とに基づいて、前記自ノードに割り当てられた前記状態変数群に属する各々の状態変数に対して当該状態変数の値を変化させることによる前記エネルギー関数の値の変化量を計算し、
前記各々の状態変数に対して計算した前記変化量に基づいて、値を変化させる状態変数を決定する、
情報処理方法。
【請求項11】
複数の状態変数を含むエネルギー関数により表される問題の解を探索する、複数のノードを含む情報処理システムに用いられるコンピュータに、
前記複数のノードの各々に、前記問題を分割することによって生成され、各々が前記複数の状態変数のうちの一部の状態変数である状態変数群を含む複数の部分問題のうち、自ノードに割り当てられた前記部分問題に対応して割り当てられた前記状態変数群に属する状態変数の値を変化させることで前記解の探索を実行させるプログラムであって、
前記探索において、複数のノードの各々に、
前記自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数を保持し、前記自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または前記第2重み係数の計算に用いられるペナルティ値を保持し、
前記第2重み係数または前記ペナルティ値に対して、0より大きく1より小さい係数を乗算し、
前記第2重み係数に対する前記係数の乗算結果である第3重み係数、または、前記ペナルティ値に対する前記係数の乗算結果を用いて計算された前記第2ペアに対する第4重み係数と、前記第1重み係数とに基づいて、前記自ノードに割り当てられた前記状態変数群に属する各々の状態変数に対して当該状態変数の値を変化させることによる前記エネルギー関数の値の変化量を計算し、
前記各々の状態変数に対して計算した前記変化量に基づいて、値を変化させる状態変数を決定する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理システム、情報処理方法及びプログラムに関する。
【背景技術】
【0002】
ノイマン型コンピュータが不得意とする多変数の組合せ最適化問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する情報処理装置がある。イジングモデルに置き換えられた問題を実用的な時間で解く手法には、シミュレーテッドアニーリング(SA:Simulated Annealing)やシミュレーテッド量子アニーリング(SQA:Simulated Quantum Annealing)などの種々の探索アルゴリズムがある。
【0003】
組合せ最適化問題は、複数の状態変数を含むエネルギー関数により定式化される。エネルギー関数は、目的関数や評価関数などと呼ばれることもある。エネルギー関数は、イジングモデルに含まれる複数のスピンに対応した複数の状態変数、及び、ある状態変数と他の状態変数との相互作用の大きさを示す重み係数を含む。重み係数には、例えば最小化対象のコストを表すコスト値や、問題に課される制約条件への違反を表すペナルティ値などの値が反映される。情報処理装置は、上記探索アルゴリズムを用いて、エネルギー関数の値が最小となる、イジングモデルの基底状態を探索する。基底状態は組合せ最適化問題の最適解に対応する。
【0004】
ここで、エネルギー関数で表される問題において扱われる状態変数の数、すなわち、問題の規模に応じて、当該問題を複数の部分問題に分割して解くことがある。
例えば、通信路を介して接続された複数のイジングボードを有し、イジングモデルの基底状態探索を行う情報処理装置が提案されている。提案の情報処理装置は、イジング形式の問題を複数の部分問題に分割し、これらの部分問題を個々のイジングボードにそれぞれ振り分ける。部分問題は、それ自体が他の部分問題と独立した単一のイジングモデル形式の問題となる。また、不等式制約を伴うイジングモデルの基底状態探索を行う半導体装置の提案もある。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2020-160755号公報
【特許文献2】特開2019-179364号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
問題を複数の部分問題に分割して解く場合、複数の部分問題、及び、その各々に対応する状態変数群がノードに割り当てられる。各ノードは自ノードに割り当てられた状態変数群に属さない状態変数の値を固定し、自ノードに割り当てられた状態変数群に属する状態変数を変化させることで、解を探索する。各ノードにおいて、自ノードに割り当てられた状態変数群に属さない状態変数については、他ノードと通信することによる解共有に応じて更新され得るが、更新頻度は低くなる。
【0007】
ここで、あるノードにおいて、自ノードに割り当てられた状態変数群に属さない状態変数が特定の値に固定されていると、当該状態変数に係る重み係数の影響により自ノードに割り当てられた状態変数群において値を変化させることができない状態変数が生じ得る。これにより、当該ノードで変化され得る状態変数が制限されて局所解に陥り易くなり、複数のノード全体として得られる解が悪くなるという問題がある。
【0008】
1つの側面では、本発明は、求解性能を向上する情報処理システム、情報処理方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
1つの態様では、複数の状態変数を含むエネルギー関数により表される問題の解を探索する、複数のノードを含む情報処理システムが提供される。複数のノードの各々は、問題を分割することによって生成され、各々が複数の状態変数のうちの一部の状態変数である状態変数群を含む複数の部分問題のうち、自ノードに割り当てられた部分問題に対応して割り当てられた状態変数群に属する状態変数の値を変化させることで解の探索を実行し、探索において、複数のノードの各々は、自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数を保持し、自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または第2重み係数の計算に用いられるペナルティ値を保持し、第2重み係数またはペナルティ値に対して、0より大きく1より小さい係数を乗算し、第2重み係数に対する係数の乗算結果である第3重み係数、または、ペナルティ値に対する係数の乗算結果を用いて計算された第2ペアに対する第4重み係数と、第1重み係数とに基づいて、自ノードに割り当てられた状態変数群に属する各々の状態変数に対して当該状態変数の値を変化させることによるエネルギー関数の値の変化量を計算し、各々の状態変数に対して計算した変化量に基づいて、値を変化させる状態変数を決定する。
【0010】
また、1つの態様では、情報処理方法が提供される。
また、1つの態様では、プログラムが提供される。
【発明の効果】
【0011】
1つの側面では、求解性能を向上できる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態の情報処理システムを説明する図である。
【
図2】情報処理システムの処理例を示すフローチャートである。
【
図3】第2の実施の形態の情報処理システムの例を示す図である。
【
図6】部分問題における固定ビットの例を示す図である。
【
図7】各ノードが保持する情報の例を示す図である。
【
図8】解バッファが保持する情報の例を示す図である。
【
図9】他領域の状態変数に係る重み係数の例を示す図である。
【
図10】他領域の状態変数の影響を受ける自領域の状態変数の例を示す図である。
【
図11】重み係数のスケーリングの例を示す図である。
【
図12】探索の全体制御例を示すフローチャートである。
【
図13】探索後の解更新の第1の例を示すフローチャートである。
【
図14】他ノードへの解送信例を示すフローチャートである。
【
図15】他ノードからの解受信例を示すフローチャートである。
【
図16】探索時の変数固定例を示すフローチャートである。
【
図17】探索後の解更新の第2の例を示すフローチャートである。
【
図18】ノードの他のハードウェア例を示す図である。
【
図19】複数の探索手法を用いる情報処理システムの例を示す図である。
【発明を実施するための形態】
【0013】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0014】
図1は、第1の実施の形態の情報処理システムを説明する図である。
情報処理システム1は、イジングモデルのエネルギー関数で表される問題に対する解を求め、求めた解を出力する。イジングモデルのエネルギー関数で表される問題には、組合せ最適化問題がある。
【0015】
エネルギー関数は、イジングモデルに含まれる複数のスピンに対応する複数の状態変数を含む。状態変数は、1または0の値をとるバイナリ変数である。例えば、イジングモデルにおけるスピンの「-1」は、状態変数の値「0」に対応する。イジングモデルにおけるスピンの「+1」は、状態変数の値「1」に対応する。このため、状態変数を、0または1の値をとるビットと呼ぶこともできる。解は、複数の状態変数により表される。複数の状態変数の全体によって表される解を「全体解」と呼ぶこともできる。組合せ最適化問題は、エネルギー関数の値を最小にする解を求める問題に変換される。エネルギー関数の値を最小にする解は、イジングモデルの基底状態に相当し、組合せ最適化問題に対する最適解に対応する。
【0016】
情報処理システム1は、複数のノードを有する。情報処理システム1は、エネルギー関数で表される問題を複数の部分問題にビットで分割し、複数の部分問題を複数のノードにより分散して処理する。情報処理システム1は、内部バスに接続された複数のノードを有する1つの筐体で実現されてもよいし、LAN(Local Area Network)、WAN(Wide Area Network)またはインターネットなどのネットワークに接続された複数のノードにより実現されてもよい。
【0017】
図1の例では、情報処理システム1は、ノード10,20,30,40を有する。ただし、情報処理システム1が有するノードの個数は4以外でもよい。ノード10,20,30,40の各々には、解くべき問題、すなわち、問題全体を分割した部分問題が割り当てられる。ここで、問題全体のイジングモデルのエネルギーは、例えば、式(1)のエネルギー関数E(x)で定義される。
【0018】
【0019】
状態ベクトルxは、複数の状態変数を要素とし、イジングモデルの状態を表す。エネルギー関数の値を最大化する問題の場合は、エネルギー関数の符号を逆にすればよい。
式(1)の右辺第1項は、イジングモデルに含まれるN個の状態変数から選択可能な2つの状態変数の全組合せについて、漏れと重複なく、2つの状態変数の値と重み係数との積を積算したものである。xiは、i番目の状態変数である。xjは、j番目の状態変数である。Wijは、i番目の状態変数とj番目の状態変数との間の重みを示す重み係数である。重み係数は、例えば、2つの状態変数の結合の強さを示す。なお、Wii=0である。また、Wij=Wjiである。
【0020】
式(1)の右辺第2項は、全状態変数の各々のバイアスと状態変数の値との積の総和を求めたものである。biは、i番目の状態変数に対するバイアスを示している。cは定数である。式(1)のエネルギー関数の値が最小となる状態変数の値の組合せが問題の最適解となる。ここで、エネルギー関数の値を単にエネルギーと言う。エネルギーは、解の良否を判断するための評価値または指標であるとも言える。エネルギーが小さいほど良い解と評価される。
【0021】
問題全体を部分問題に分割して解く場合、各ノードは、自ノードが扱う状態変数に対応する重み係数を保持すればよくなる。N(Nは2以上の整数)個の状態変数のうちの一部である、例えばi=1~K(K<N)の状態変数を扱う部分問題についてのイジングモデルのエネルギーは、以下の式(2)のエネルギー関数E’(x)で定義される。
【0022】
【0023】
式(2)において、b’i及びc’の各々は、式(3)、式(4)のように表せる。
【0024】
【0025】
【0026】
i=1~K(K<N)の状態変数を扱う部分問題の解を探索する際、i=K+1~Nの状態変数の値は固定される。式(3)の右辺の第2項は、固定値とされた状態変数によるバイアスへの寄与分を表し、式(4)の右辺の第2項及び第3項は、固定値とされた状態変数による定数への寄与分を表す。
【0027】
このとき、i番目の状態変数の値が変化したときのエネルギー差分hiは、式(5)で表される。
【0028】
【0029】
例えば、ノードは、状態変数x1~xKのうちの1つの状態変数の値が変化することによるエネルギー関数E’(x)の値の変化量を、式(5)を基に状態変数x1~xKの各々について計算し、E’(x)が小さくなる変化が優先される形で確率的に受け入れる。状態変数x1~xKのうち、xiが変化することによるエネルギーの変化量ΔE’iは以下の式(6)で表せる。
【0030】
【0031】
式(6)において、状態変数xiが1から0に変化するとき、δxiは-1となり、状態変数xiが0から1に変化するとき、δxiは+1となる。Wijの絶対値が大きい程、エネルギーに加算される値が大きくなる。
【0032】
例えば、SA法やレプリカ交換法では、ある状態変数を変化させることによる、イジングモデルのある状態から次の状態への遷移確率の決定に、メトロポリス法やギブス法が用いられる。すなわち、ノードは、エネルギー関数E’(x)の値が大きくなる変化についてもエネルギーの変化量とノイズ値との比較に応じて確率的に許容する。ノイズ値は、温度値や乱数に基づいて求められる。温度値が大きい程、ノイズ値の振幅が大きくなる。ノイズ値の振幅が大きい程、エネルギーの増加量が大きい状態遷移が許容されやすくなる。
【0033】
ここで、ノードは、値を変化させる状態変数を決定する際に、通常用いられる式(3)の代わりに、次の式(7)で表されるバイアスb’iを用いる。
【0034】
【0035】
すなわち、ノードは、自ノードに割り当てられていない状態変数群に係る重み係数を係数αでスケーリングすることで、当該重み係数によるエネルギーの変化量への影響を軽減する。係数αは、0より大きく1より小さい実数である。ただし、ノードは、解のエネルギーを求める際には、αでスケーリングしない、式(3)で表されるバイアスb’を用いる。
【0036】
なお、重み係数Wijは、問題における最小化対象のコストを表すコスト値Cij及び問題における制約条件への違反を表すペナルティ値Pijを用いて、Wij=Cij+Pijのように表される。ノードが自ノードのWijに対応するコスト値Cij及びペナルティ値Pijを保持する場合、ノードは、ペナルティ値PijをαでスケーリングしてWijを求めてもよい。この場合、重み係数は、コスト値とスケーリング後のペナルティ値との線形結合で表せ、例えば、Wij=Cij+αPijと表せる。そして、ノードは、ペナルティ値Pijをαでスケーリングして求めた重み係数Wijを式(3)のバイアスb’iの計算に用いてもよい。制約に違反する状態は、ペナルティ値Pijによってエネルギーが比較的高い状態として表され、重み係数によるエネルギーの増加量に対して、ペナルティ値Pijの影響が非常に大きいためである。
【0037】
また、上記の例では、i=1~Kの状態変数を扱う部分問題を示したが、インデックスiの他の区間の状態変数を扱う他の部分問題についても、同様にして、エネルギーやエネルギーの変化量が計算される。部分問題に対応して各ノードに割り当てられる状態変数群は、複数の状態変数の全体に対するサブセットとなり、インデックスiの連続する区間でもよいし、不連続な区間でもよい。例えば、ノードは、各々がインデックスiについて連続する第1の区間と第2の区間とに関し、第1の区間と第2の区間とが連続していない状態変数群に対応する部分問題に対する解を求めてもよい。
【0038】
例えば、情報処理システム1は、図示を省略している制御装置に接続されてもよい。制御装置は、ユーザにより入力される組合せ最適化問題の情報に基づいて、当該組合せ最適化問題をイジングモデルのエネルギー関数により定式化する。制御装置は、エネルギー関数で表される問題を複数の部分問題に分割し、複数の部分問題をノード10,20,30,40に割り当てる。制御装置は、情報処理システム1に含まれてもよい。また、制御装置の機能は、ノード10,20,30,40の何れかが有してもよい。
【0039】
ノード10は、記憶部11、処理部12及び探索部13を有する。ノード20は、記憶部21、処理部22及び探索部23を有する。図示を省略しているが、ノード30,40も、ノード10,20と同様に記憶部、処理部及び探索部を有する。以下では、主に、ノード10,20の処理部12,22及び探索部13,23を例に挙げて説明するが、ノード30,40の処理部及び探索部も、自ノードに割り当てられた部分問題に関して同様の処理を実行する。ノード10,20,30,40の全体により、解くべき問題に対する状態変数の全体がカバーされる。
【0040】
例えば、ノード10に対する状態変数割当部分は、状態変数の全体のうちの状態変数群X0である。ノード20に対する状態変数割当部分は、状態変数の全体のうちの状態変数群X1である。ノード30に対する状態変数割当部分は、状態変数の全体のうちの状態変数群X2である。ノード40に対する状態変数割当部分は、状態変数の全体のうちの状態変数群X3である。
【0041】
記憶部11,21は、DRAM(Dynamic Random Access Memory)などの揮発性記憶装置で実現されてもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置で実現されてもよい。記憶部11,21の各々は、ノード10,20で取得された解、すなわち、全体解を保持する。記憶部11,21の当該解を保持する記憶領域を解バッファと言う。
【0042】
処理部12,22は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)が含まれ得る。
【0043】
探索部13,23は、自ノードに割り当てられた部分問題の解を探索する。例えば、探索部13,23は、専用のハードウェアにより実現される。例えば、FPGAなどの集積回路を用いて実現される探索回路が、探索部13または探索部23として機能してもよい。ただし、探索部13,23を含むノード10,20,30,40の探索部の少なくとも何れかは、プロセッサが所定のプログラムを実行することで実現されてもよい。探索部13,23を含むノード10,20,30,40の探索部で用いられる探索手法には、例えば、SA、遺伝的アルゴリズム(GA:Genetic Algorithm)、SQA及びタブーサーチ(Tabu Search)などがある。探索手法はこれらに限らず、他の探索手法でもよい。また、探索部13,23を含むノード10,20,30,40の探索部で用いられる探索手法は同じでもよいし、ある探索部と別の探索部とで異なっていてもよい。
【0044】
ここで、あるノードが探索した解において、部分問題が割り当てられた解の割当領域部を考える。解の割当領域部は、解のうちの、当該部分問題に対応する状態変数群の値の組となる。例えば、ノード10には第1の部分問題が割り当てられる。第1の部分問題には、状態変数群X0が対応する。第1の部分問題に対応する解の割当領域部は、例えば状態変数群X0に属する状態変数x1~xKの値の組となる。また、ノード20には第2の部分問題が割り当てられる。第2の部分問題には、状態変数群X1が対応する。第2の部分問題に対応する解の割当領域部は、例えば状態変数群X1に属する状態変数xK+1~xL(L>K+1)の値の組となる。ただし、あるノードに割り当てられた状態変数群の一部と他のノードに割り当てられた他の状態変数群の一部とは重複してもよい。
【0045】
なお、図示を省略しているが、探索部13は、状態変数群X0及び状態変数群X0に属する状態変数間の重み係数などを保持するSRAM(Static Random Access Memory)などの記憶部を有する。探索部23も同様に、状態変数群X1及び状態変数群X1に属する状態変数間の重み係数などを保持する記憶部を有する。探索部13,23の各々の記憶部に格納される情報は、探索部13,23の各々による部分問題の解探索に用いられる。
【0046】
探索部13,23の各々による解の探索は、例えば所定期間の間、繰り返し実行され、各回の探索で得られた解が出力される。後述されるように、探索部13,23の各々における解情報は、次の解探索が開始される直前に解バッファに保持している全体解の1つで初期化される。解情報は、全状態変数のうちの自ノードが担当する状態変数群以外の、値を固定する状態変数群に関する情報を含み、例えば、前述の式(2)のエネルギー関数E’(x)におけるb’,c’などである。解情報の初期化により、探索の初期解が探索部13,23に再設定されると共に、b’やc’が再設定される。探索部13,23には、前述のように、αでスケーリングされたb’が設定される。
【0047】
記憶部11は、処理部12の処理に用いられる情報を記憶する。記憶部11は、重み係数を記憶する。記憶部11が記憶する重み係数は、状態変数群X0に対応する部分でよい。すなわち、記憶部11が記憶する重み係数は、N×N個の重み係数のうちのN×K個でよい。当該重み係数は、解に対するエネルギーの計算や解情報の初期化に用いられる。
【0048】
より具体的には、記憶部11は、ノード10に割り当てられた状態変数群X0に対して、重み係数群W_00,W_10,W_20,W_30を保持する。ここで、重み係数の符号のアンダースコア「_」の後の数値は、状態変数群X0~X3の表記に含まれる数値に対応するインデックス範囲を示す。例えば、「0」は、1~Kのインデックス範囲である。この場合、W_00は、重み係数Wの全体のうちの{Wij}(1≦i≦K,1≦j≦K)の部分である。
【0049】
記憶部21は、ノード20に割り当てられた状態変数群X1に対して、重み係数群W_01,W_11,W_21,W_31を保持する。ノード30の記憶部は、ノード30に割り当てられた状態変数群X2に対して、重み係数群W_02,W_12,W_22,W_32を保持する。ノード40の記憶部は、ノード40に割り当てられた状態変数群X3に対して、重み係数群W_03,W_13,W_23,W_33を保持する。
【0050】
ただし、処理部12は、前述の式(7)で表されるバイアスb’を求める際には、状態変数群X0に属さない状態変数に係る重み係数群W_10,W_20,W_30をαでスケーリングし、求めたb’を探索部13に設定する。また、処理部22は、前述の式(7)で表されるバイアスb’を求める際には、状態変数群X1に属さない状態変数に係る重み係数群W_01,W_21,W_31をαでスケーリングし、求めたb’を探索部23に設定する。
【0051】
図示を省略しているが、ノード30,40の処理部も処理部12,22と同様に、重み係数をαでスケーリングした値でb’を求め、自ノードの探索部に設定する。すなわち、ノード30の処理部は、前述の式(7)で表されるバイアスb’を求める際には、状態変数群X2に属さない状態変数に係る重み係数群W_02,W_12,W_32をαでスケーリングする。また、ノード40の処理部は、前述の式(7)で表されるバイアスb’を求める際には、状態変数群X3に属さない状態変数に係る重み係数群W_03,W_13,W_23をαでスケーリングする。
【0052】
また、記憶部11は、式(1)で表される問題全体のエネルギー関数E(x)に基づいて選択された解を記憶する。記憶部11には、複数の解が保持され得る。記憶部11に保持される解の数は、ノード10に予め設定される所定数となる。また、記憶部11には、解に対応付けて、当該解に対応する、式(1)のエネルギーが保持される。当該エネルギーは、αでスケーリングしない元の重み係数を用いて計算されたものである。
【0053】
このように、ノード10,20,30,40は、解くべき組合せ最適化問題を分割することによって生成された複数の部分問題の各々が割り当てられる。ノード10,20,30,40の各々は、複数の状態変数のうち、自ノードに割り当てられた部分問題に対応する状態変数群に属する状態変数の値を変化させることで組合せ最適化問題の解を探索する。ノード10,20,30,40の各々は、探索した解が反映された第1の解を含む複数の解を保持する。第1の解は、探索された解でもよいし、探索された解のうちの状態変数群X0の値の組で記憶部11に保持される解の同じ部分を置換したものでもよい。例えば、ノード10は、ノード10で探索した解が反映された第1の解及び記憶部11に保持される複数の解のうち、エネルギーの低い解を優先的に所定数だけ選択して、記憶部11に保持する。
【0054】
ノード10は、ノード10で保持する複数の解のうちの少なくとも1つの解を複数のノードのうちのノード20に送信する。例えば、ノード10は、記憶部11に保持する複数の解のうち、エネルギーの低い解を優先的に少なくとも1つ選択して、ノード20に送信する。ノード10は、ノード20以外の他のノードにも当該解を送信してよい。
【0055】
ノード20は、ノード10から受信した解に基づいて、ノード20で保持する複数の解の少なくとも一部を更新する。例えば、ノード20は、ノード10から受信した解と、記憶部21に保持される複数の解のうち、エネルギーの低い解を優先的に所定数だけ選択して、記憶部21に保持する。
【0056】
こうして、ノード10で探索された良解が、ノード20と共有される。同様に、ノード20からノード10に解を送信することで、ノード20で得られた良解をノード10,20で共有することもできる。各ノードと他ノードとの間の解の送受信は、同期して行われてもよいし、非同期に行われてもよい。
【0057】
ノード10,20,30,40の各々は、上記の処理により、自ノードが探索した解に基づいて自ノードが保持する解を更新し、他ノードが保持する解に基づいて自ノードが保持する解を更新する。ノード10,20,30,40の各々は、こうして更新された、自ノードが保持する解に基づいて、自ノードにおける解情報を初期化し、次の解の探索を行える。
【0058】
例えば、処理部12は、探索部13において、ある解が得られた後、次の探索を行う直前に、記憶部11に保持された複数の解に基づいて、次の探索での状態変数群X0以外の状態変数の値を決定し、b’やc’を変更する。処理部22も処理部12と同様に状態変数群X1以外の状態変数の値を決定する処理を行う。
【0059】
ここで、処理部12が記憶部11に保持される解に基づいて、状態変数群X0以外の状態変数の値を決定する方法には、種々の方法が考えられる。
一例では、処理部12は、記憶部11に保持される複数の解のうち、式(1)で求められるエネルギーが最小の解を選択し、選択した解における状態変数群X0以外の各状態変数の値を採用する。
【0060】
または、処理部12は、記憶部11に保持される複数の解のうち、ランダムに1つの解を選択し、選択した解における状態変数群X0以外の各状態変数の値を採用してもよい。このとき、処理部12は、記憶部11に3以上の解が保持される場合、エネルギーが低い方からk個(例えば、2個または3個程度)の解の中からランダムに、当該1つの解を選択してもよい。あるいは、処理部12は、記憶部11に保持される複数の解の各々の状態変数群X0以外の各状態変数の値を比較して、他の解と値が一致する状態変数の数が最も多い解を選択し、当該解における当該各状態変数の値を採用してもよい。
【0061】
このようにして、処理部12は、記憶部11に保持される解に基づいて、状態変数群X0以外の各状態変数の値を決定し、探索部13に設定する解情報を初期化する。そして、探索部13は、例えば状態変数群X0については選択した解に含まれる各状態変数の値を始状態として、次の解の探索を開始する。
【0062】
処理部22も、処理部12と同様にして、記憶部21に保持される解に基づいて、状態変数群X1以外の各状態変数の値を決定し、探索部23に設定する解情報を初期化し、探索部23に次の解の探索を開始させる。
【0063】
ノード10,20,30,40は、上記の処理を繰り返し実行し、所定時間が経過すると、それぞれ自ノードの記憶部に保持される解を制御装置に出力する。制御装置は、ノード10,20,30,40から取得した解を組合せ最適化問題に対する解の形式に変換し、表示装置に表示させたり、ネットワークを介してユーザが利用する端末装置に送信したりすることで、ユーザに提供する。例えば、制御装置は、ノード10,20,30,40から取得したエネルギーが最小の解をユーザに提供してもよいし、ノード10,20,30,40から取得した複数の解をユーザに提供してもよい。
【0064】
図2は、情報処理システムの処理例を示すフローチャートである。
ここでは、ノード10に着目して説明するが、ノード20,30,40も同様の手順を実行する。
【0065】
(S1)処理部12は、自領域の重み係数を取得し、記憶部11に保持する。ノード10に関する自領域の重み係数とは、ノード10に割り当てられた状態変数群X0に対応する重み変数群W_00,W_10,W_20,W_30に属する重み係数である。
【0066】
(S2)処理部12は、他ノードからの解の受信と他ノードへの解の送信を実行する。前述のように、処理部12は、自ノードの解バッファで保持する複数の解のうち、エネルギーの低い解を優先して、他ノードに送信する。また、処理部12は、他ノードからも同様にして選択された解を受信する。処理部12は、他ノードから受信した解及び自ノードの解バッファで保持する解のうち、エネルギーの低い解を優先して自ノードの解バッファに保持する。
図2の手順を最初に実行する場合、ステップS2はスキップされてもよい。
【0067】
(S3)処理部12は、探索の初期解を生成する。前述のように、処理部12は、自ノードで保持する複数の解のうち、エネルギーの低い解を優先して、初期解の生成に用いる。例えば、処理部12は、自ノードで保持する複数の解のうち、エネルギーが最低の解を初期解としてもよい。なお、ステップS3を最初に実行する場合は、例えば、処理部12は、外部から初期解及び当該初期解のエネルギーを取得してもよい。処理部12は、探索部13に初期解を設定する。
【0068】
(S4)処理部12は、他領域の状態変数に係る重み係数を係数α(0<α<1)でスケーリングする。ノード10に関する他領域の状態変数に係る重み係数とは、重み係数群W_10,W_20,W_30に属する重み係数である。スケーリングは、該当の重み係数にαを乗じることを意味する。処理部12は、重み係数に対するαの乗算を、該当の重み係数を表すビット列のシフト演算により行ってもよい。
【0069】
(S5)処理部12は、他領域に割り当てられた変数部分を固定するように、式(7)に基づくバイアスb’を計算する。処理部12は、計算したバイアスb’を探索部13に設定する。処理部12は、探索部13による解探索を開始させる。
【0070】
(S6)探索部13は、設定された初期解とバイアスb’とに基づいて、解探索を実行する。探索部13は、バイアスb’に基づいて式(6)によるエネルギーの変化量を計算し、当該変化量に基づいて値を変化させる状態変数を決定する。バイアスb’には、αでスケーリングされた重み係数が反映される。したがって、探索部13は、αでスケーリングされた重み係数に基づいて、ある状態変数の値を変化させることによるエネルギーの変化量を計算すると言える。探索部13は、所定時間、解探索を実行すると、解探索を終了する。
【0071】
(S7)処理部12は、探索部13により探索された解を取得し、係数αでスケーリングしない重み係数と初期解のエネルギーとに基づいて、新たに取得された解に対応するエネルギーを計算する。
【0072】
(S8)処理部12は、自ノードの解バッファで保持する解の更新及び解の選択を行う。例えば、処理部12は、新たに得られた解及びノード10で得られた解のうち、エネルギーが低い解を優先して自ノードの解バッファで保持する。また、処理部12は、出力対象の解として、エネルギーが低い解を優先的に選択する。
【0073】
(S9)処理部12は、終了条件を満たすか否かを判定する。終了条件を満たす場合、処理部12は、例えば、ステップS8で選択した解を制御装置などに出力して、処理を終了する。終了条件を満たさない場合、処理部12は、ステップS2に処理を進める。終了条件は、例えば、
図2の手順の実行開始から一定時間が経過したことである。
【0074】
なお、前述のように、ノード10は、重み係数群W_00,W_10,W_20,W_30に対応するコスト値及びペナルティ値を保持してもよい。この場合、処理部12は、ステップS4のスケーリングをペナルティ値に対して実行して、探索部13の探索に用いられる重み係数群を求め、当該重み係数群によりステップS5のバイアスの計算を行ってもよい。このとき、処理部12は、ペナルティ値にαを乗算した結果から求めた重み係数を用いて、式(3)によりバイアスを計算すればよい。ノード20,30,40も、ノード10と同様に、ペナルティ値を係数αでスケーリングしてもよい。重み係数を係数αでスケーリングするよりも、ペナルティ値を係数αでスケーリングする方が、コスト値に対する係数αの影響を抑えられる。
【0075】
このように、情報処理システム1は、複数の状態変数を含むエネルギー関数により表される問題の解を探索する。情報処理システム1は、問題を分割することによって生成された複数の部分問題のうち、自ノードに割り当てられた部分問題に対応して割り当てられた状態変数群に属する状態変数の値を変化させることで解を探索する複数のノードを有する。状態変数群は、複数の状態変数のうちの一部の状態変数である。
【0076】
そして、複数のノードの各々により、自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数が保持される。複数のノードの各々により、自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または第2重み係数の計算に用いられるペナルティ値が保持される。複数のノードの各々により、第2重み係数またはペナルティ値に対して、0より大きく1より小さい係数αが乗算される。複数のノードの各々により、第2重み係数に対する係数αの乗算結果である第3重み係数、または、ペナルティ値に対する係数αの乗算結果を用いて計算された第2ペアに対する第4重み係数と、第1重み係数とに基づいて、自ノードに割り当てられた状態変数群に属する各々の状態変数に対して当該状態変数の値を変化させることによるエネルギー関数の値の変化量が計算される。複数のノードの各々により、自ノードに割り当てられた各々の状態変数に対して計算した変化量に基づいて、値を変化させる状態変数が決定される。ここでいう「エネルギー関数の値の変化量」は、値を変化させる状態変数を決定する制御のための代替的なエネルギーの変化量であり、係数αにより調整されたエネルギーの変化量とも言える。
【0077】
これにより、情報処理システム1は、求解性能を向上することができる。情報処理システム1は、1ノードでは解くことが困難な大規模な問題を複数のノードにより分散して解くことができる。情報処理システム1は、あるノードで発見された良解を他のノードと共有することで、複数のノードにより共同で解を改善することで、効率的に解を探索する。
【0078】
このとき、ノード10は、自領域の重み係数のうち、他領域の状態変数に係る重み係数またはペナルティ値を係数αでスケーリングすることで、エネルギーの変化量に対する、該当の状態変数に係る重み係数の影響を軽減できる。これにより、ノード10以外の他ノードに割り当てられた状態変数が特定の値、具体的には、1で固定される場合にも、当該状態変数の値によるエネルギーの増加量を低く抑えることができる。
【0079】
このため、他ノードが担当する状態変数が1に固定されることにより、通常はペナルティ値の影響で自ノードが担当する状態変数を1に変化させることが困難な場合でも、当該状態変数を1に変化させ易くなる。その結果、ノード10における状態変数の遷移が促進され、良解に到達できる可能性が高まる。ノード20,30,40についても、ノード10と同様に、良解に到達できる可能性が高まる。よって、ノード10,20,30,40全体として、より良い解に到達できる可能性が高まる。こうして、情報処理システム1は、求解性能を向上することができる。
【0080】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図3は、第2の実施の形態の情報処理システムの例を示す図である。
【0081】
情報処理システム2は、制御装置50及びノード100,200,300,400を有する。制御装置50及びノード100,200,300,400は、ネットワーク60に接続される。ネットワーク60は、LANでもよいし、WANやインターネットなどでもよい。情報処理システム2は、4以外の複数のノードを有してもよい。
【0082】
制御装置50は、組合せ最適化問題の問題データのユーザによる入力を受け付ける。制御装置50は、問題データに基づいて、イジングモデルのエネルギー関数で表される問題に変換する。当該問題は、イジングモデルのエネルギー関数を最小化する問題となる。
【0083】
エネルギー関数は、最小化したいコストを表すコスト項や制約を表すペナルティ項を含み得る。例えば、状態変数のインデックスの所定のグループにおいて、特定の値(例えば、「1」)をとる状態変数の数を1つのみとするといった制約がペナルティ項により表される。制約に違反する状態は、ペナルティ項によってエネルギーが比較的高い状態として表される。
【0084】
問題全体のエネルギー関数は、式(1)で定式化される。式(1)は、QUBO(Quadratic Unconstrained Binary Optimization)形式で定式化されたエネルギー関数である。式(1)のWij,bi,cは定式化の際に計算される。
【0085】
制御装置50は、イジングモデルのエネルギー関数で表される問題を複数の部分問題に分割し、ノード100,200,300,400に割り当てる。制御装置50は、情報処理システム2による所定時間の解の探索の後、ノード100,200,300,400が保持する解を取得し、組合せ最適化問題に対する解の形式に変換して、ユーザに提供する。制御装置50は、例えばサーバコンピュータなどの情報処理装置により実現されてもよい。
【0086】
ノード100,200,300,400は、各々が自ノードに割り当てられた部分問題の解を探索する。ノード100,200,300,400は、解の探索を実行するアクセラレータを有する。アクセラレータは、エネルギーを最小化する解を求めるハードウェアである。ただし、ノード100,200,300,400の少なくとも1つが提供する解探索機能は、ソフトウェアにより実装されてもよい。ノード100,200,300,400は、例えばコンピュータなどの情報処理装置により実現されてもよい。
【0087】
ノード100,200,300,400の各々のアクセラレータは、互いに異なる探索手法、すなわち、探索アルゴリズムを用いて解の探索を行ってもよいし、そのうちの少なくとも2つが同じ探索手法を用いて解の探索を行ってもよい。探索手法には、例えば、SA、GA、SQA、タブーサーチなどがある。
【0088】
図4は、ノードのハードウェア例を示す図である。
ノード100は、CPU101、RAM102、HDD103、媒体リーダ104、アクセラレータカード105、NIC(Network Interface Card)106及びバス107を有する。CPU101は、第1の実施の形態の処理部12,22の一例である。RAM102は、第1の実施の形態の記憶部11,21の一例である。アクセラレータカード105は、後述されるように組合せ最適化問題を分割した部分問題に対する解を探索する探索部の機能を実現する。アクセラレータカード105は、第1の実施の形態の探索部13,23の一例である。
【0089】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、ノード100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0090】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、ノード100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0091】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、及び、データを記憶する不揮発性の記憶装置である。なお、ノード100は、フラッシュメモリやSSDなどの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0092】
媒体リーダ104は、記録媒体61に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体61として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0093】
媒体リーダ104は、例えば、記録媒体61から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体61は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体61やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0094】
アクセラレータカード105は、イジングモデルのエネルギー関数で表される問題の解を探索するハードウェアアクセラレータである。アクセラレータカード105は、FPGA111及びRAM112を有する。FPGA111は、アクセラレータカード105における探索機能を実現する。当該探索機能は、GPUやASICなどの他の種類の集積回路により実現されてもよい。RAM112は、FPGA111での探索に用いられるデータやFPGA111により探索された部分問題の解を保持する。
【0095】
アクセラレータカード105のようにイジング形式の問題の解を探索するハードウェアアクセラレータは、イジングマシンやボルツマンマシンなどと呼ばれることがある。後述されるように、ノード100は、複数のアクセラレータカードを有してもよい。
【0096】
NIC106は、ネットワーク60に接続され、ネットワーク60を介して制御装置50やノード200,300,400と通信を行う通信インタフェースである。NIC106は、例えばスイッチやルータなどの通信装置とケーブルで接続される。
【0097】
バス107は、ノード100の内部バスである。CPU101、RAM102、HDD103、媒体リーダ104、アクセラレータカード105及びNIC106は、バス107に接続される。バス107には、例えば、PCIe(Peripheral Component Interconnect express)が用いられる。
【0098】
なお、ノード200,300,400もノード100と同様のハードウェアにより実現される。制御装置50もノード100と同様のハードウェアにより実現される。ただし、制御装置50は、アクセラレータカード105に相当するハードウェアを備えなくてよい。
【0099】
図5は、情報処理システムの機能例を示す図である。
制御装置50は、制御部51を有する。制御部51は、例えば、制御装置50のRAMに記憶されたプログラムを制御装置50のCPUが実行することで実現される。
【0100】
制御部51は、組合せ最適化問題の問題データの入力の受け付け、問題データのイジング形式への変換、イジング形式に変換した問題の複数の部分問題への分割、複数の部分問題のノード100,200,300,400への割り当てを行う。ただし、制御部51は、複数の部分問題の情報の、外部からの入力を受け付けて、当該複数の部分問題のノード100,200,300,400への割り当てを行ってもよい。
【0101】
また、制御部51は、ノード100,200,300,400からの解の取得や、取得した解に基づく組合せ最適化問題の解のユーザへの提供を行う。
ノード100,200,300,400は、それぞれデータ記憶部120,220,320,420、解バッファ130,230,330,430、探索部140,240,340,440、通信部150,250,350,450及び探索制御部160,260,360,460を有する。
【0102】
データ記憶部120,220,320,420及び解バッファ130,230,330,430には、それぞれノード100,200,300,400のRAM(例えば、RAM102)の記憶領域が用いられる。探索部140,240,340,440は、それぞれノード100,200,300,400のアクセラレータカードにより実現される。通信部150,250,350,450及び探索制御部160,260,360,460は、それぞれノード100,200,300,400のCPUが当該ノードのRAMに記憶されたプログラムを実行することで実現される。
【0103】
以下では、主に、ノード100を例示して説明するが、ノード200,300,400の同名の機能も同様の説明となる。
データ記憶部120は、探索制御部160の処理に用いられるデータを記憶する。例えば、データ記憶部120は、ノード100が担当する状態変数群が関係する、状態変数間の重み係数を記憶する。ノード100が担当する状態変数群に属する状態変数の数がK個の場合、データ記憶部120が保持する重み係数の数は、K×Nとなる。
【0104】
解バッファ130は、ノード100で得られた解を保持する。解バッファ130には問題全体に対する解、すなわち、全体解が保持される。解バッファ130に保持される解は、探索部140で探索された解や他のノードから受信した解に基づいて更新される。
【0105】
探索部140は、ノード100に割り当てられた部分問題に対する解の探索を行う。
探索部140は、前述のSA、GA、SQA、タブーサーチなどの探索手法を用いて、部分問題の解を探索する。ここでは、一例として、SAまたはレプリカ交換法を用いる場合を考える。
【0106】
探索部140は、自ノードが担当する状態変数群のうちの1つの状態変数の値が変化することによるエネルギーの変化量ΔE’iを、自ノードが担当する各状態変数について計算し、エネルギーが小さくなる変化が優先される形で確率的に受け入れる。ただし、探索部140は、自身以外のノードが担当する状態変数群に属する状態変数の値を固定する。ここで、エネルギーの変化量ΔE’iは、前述の式(6)で表される。探索部140は、式(6)のバイアスb’として式(7)により求められた値を用いる。式(7)では、重み係数が係数α(0<α<1)でスケーリングされる。
【0107】
また、SA法やレプリカ交換法では、ある状態変数を変化させることによる、イジングモデルのある状態から次の状態への遷移確率の決定に、メトロポリス法やギブス法が用いられる。すなわち、探索部140は、エネルギー関数E’(x)の値が大きくなる変化についてもエネルギーの変化量とノイズ値との比較に応じて確率的に許容する。ノイズ値は、温度値や乱数に基づいて求められる。温度値が大きい程、ノイズ値の振幅が大きくなる。ノイズ値の振幅が大きい程、エネルギーの増加量が大きい状態遷移が許容されやすくなる。
【0108】
探索部140は、このような処理を、解の1回分の探索に対する探索終了条件が満たされるまで繰り返し、探索終了条件が満たされたときの、自ノードが担当する各状態変数の値及び固定した状態変数の値の組を、今回の解とする。例えば、探索終了条件は、所定の単位時間が経過したか、あるいは、状態変数の変化(ビット反転)の試行回数が所定の単位回数に到達したかなどにより判定される。
【0109】
なお、図示を省略しているが、探索部140は、自ノードが担当する各状態変数の値、当該各状態変数に関係する重み係数を保持するローカルメモリを有している。当該ローカルメモリには、アクセラレータカード105に搭載されたSRAMなどの記憶領域が用いられる。例えば、RAM112はローカルメモリを提供するSRAMでもよい。
【0110】
通信部150は、解バッファ130に保持される解の他のノードへの送信、及び、他のノードからの解の受信を行う。
探索制御部160は、探索部140及び通信部150を制御する。探索制御部160は、探索部140及び通信部150を非同期に動作させることができる。探索制御部160は、探索部140により取得された解に基づいて、解バッファ130に保持される解を更新する。また、探索制御部160は、解バッファ130に保持される解の送信を通信部150に指示する。探索制御部160は、通信部150が他のノードから受信した解に基づいて、解バッファ130に保持される解を更新する。更に、探索制御部160は、解バッファ130に保持される解に基づいて、探索部140における解情報を初期化する。このとき、探索制御部160は、式(7)に基づくバイアスb’を計算し、探索部140に設定する。
【0111】
すなわち、探索制御部160は、自ノードに割り当てられていない状態変数群に係る重み係数を係数αでスケーリングする。これにより、探索制御部160は、当該重み係数によるエネルギーの変化量への影響を軽減する。ただし、探索制御部160は、解のエネルギーを求める際には、αでスケーリングしない、式(3)で表されるバイアスb’を用いる。
【0112】
なお、係数αは制御装置50によりノード100,200,300,400に予め入力される。一例では、制御装置50は、ユーザにより入力された係数αをノード100,200,300,400に入力する。あるいは、制御装置50は、例えばスケーリング後の全重み係数の取り得る値の最大値が、スケーリング前の重み係数に含まれるコスト値の取り得る値の最大値と同程度となるように係数αを決定し、ノード100,200,300,400に入力してもよい。
【0113】
図6は、部分問題における固定ビットの例を示す図である。
グラフ70は、状態変数x
1,x
2,x
3,x
K,x
K+1,x
Nの相互の関係の例を示す。ノード100では、ノード200が担当する状態変数群に含まれるx
K+1や、ノード400が担当する状態変数群に含まれるx
Nが固定ビット、すなわち、値が固定された状態変数とされる。グラフ70の例ではx
K+1=1、x
N=0である。
【0114】
探索制御部160は、固定ビットの値と、探索部140が担当する状態変数群に含まれる状態変数と固定ビットとの間の重み係数を用いて、バイアスb’iを式(3)あるいは式(7)により確定させることができる。例えば、xKとxK+1との間の重み係数WK,K+1は、b’Kを計算するために用いられ、x3とxK+1との間の重み係数W3,K+1は、b’3を計算するために用いられる。
【0115】
図7は、各ノードが保持する情報の例を示す図である。
表80は、ノード100,200,300,400の各々が保持する情報の例を示す。
表80は、ノード名、ステート割当部分及び重み係数の項目を含む。ノード名の項目には、ノード名が記載されている。ステート割当部分の項目には、該当のノードが担当する状態変数群が記載されている。ここで、ステートとは、問題全体の表現に用いられる全ての状態変数の値により表されるイジングモデルの状態である。
【0116】
一例では、ノード100,200,300,400の各々にK個の状態変数が割り当てられる。例えば、ノード100には、状態変数群X0が割り当てられる。状態変数群X0には、状態変数x1~xKが属する。ノード200には、状態変数群X1が割り当てられる。状態変数群X1には、状態変数xK+1~x2Kが属する。ノード300には、状態変数群X2が割り当てられる。状態変数群X2には、状態変数x2K+1~x3Kが属する。ノード400には、状態変数群X3が割り当てられる。状態変数群X3には、状態変数x3K+1~xNが属する。状態変数群X0,X1,X2,X3の値は、それぞれ探索部140,240,340,440のローカルメモリに保持される。
【0117】
ただし、ノード100,200,300,400の各々には、互いに異なる数の状態変数が割り当てられてもよいし、あるノードに割り当てられる状態変数群の一部と他のノードに割り当てられる状態変数群の一部とが重複してもよい。
【0118】
重み係数の項目には、各ノードが保持する重み係数が記載されている。例えば、ノード100は、重み係数群W_00,W_10,W_20,W_30を保持する。ここで、重み係数の符号のアンダースコア「_」の後の数値は、状態変数に関する次のインデックス範囲を示す。「0」は、1~Kである。「1」は、K+1~2Kである。「2」は、2K+1~3Kである。「3」は、3K+1~Nである。例えば、W_00は、重み係数Wの全体のうちの{Wij}(1≦i≦K,1≦j≦K)の部分である。
【0119】
また、ノード200は、重み係数群W_01,W_11,W_21,W_31を保持する。ノード300は、重み係数群W_02,W_12,W_22,W_32を保持する。ノード400は、重み係数群W_03,W_13,W_23,W_33を保持する。
【0120】
重み係数群W_00,W_11,W_22,W_33は、それぞれ探索部140,240,340,440のローカルメモリに保持される。
また、重み係数群W_00,W_10,W_20,W_30は、データ記憶部120に保持される。重み係数群W_01,W_11,W_21,W_31は、データ記憶部220に保持される。重み係数群W_02,W_12,W_22,W_32は、データ記憶部320に保持される。重み係数群W_03,W_13,W_23,W_33は、データ記憶部420に保持される。
【0121】
このように、ノード100,200,300,400は、それぞれ自ノードに割り当てられた状態変数群に対応する重み係数群のみを保持すればよい。このため、重み係数群を保持するためにノード100,200,300,400で所要されるメモリ容量を低減できる。
【0122】
図8は、解バッファが保持する情報の例を示す図である。
解バッファ130は、解及びエネルギー値を保持する。便宜的に図示した「#」は解及びエネルギー値を含むレコードの識別番号を示す。
【0123】
識別番号「0」のレコードは、解「X0_0,X1_0,X2_0,X3_0」及びエネルギー値「E0」である。ここで、第1の実施の形態と同様に、ある状態変数群における各状態変数の値の組を、状態変数群を表すX0などの符号に、「_1」のようにアンダースコア「_」と数字とを付して、例えば「X0_0」、「X0_1」のように区別するものとする。
【0124】
解バッファ130には、識別番号「0」以外にも、識別番号「1」、「2」、「3」のレコードが格納される例が示されている。
解バッファ130に格納される解及びエネルギー値の組の数は、予め定められる。第2の実施の形態の例では、解バッファ130,230,330,430の各々に解及びエネルギー値の4つの組が格納されるものとする。ただし、解バッファ130,230,330,430の各々に格納される解及びエネルギー値の組の数は4以外の数でもよい。
【0125】
探索制御部160は、状態変数群X0に関して探索部140で探索された解を取得すると、当該解を、解バッファ130に保持される解に反映した解候補のエネルギーを計算する。このとき、データ記憶部120は、ノード100に割り当てられた状態変数群X0の各状態変数と結合のある状態変数に関する重み係数群しか保持していない。このため、探索制御部160は、解バッファ130に保持される解において状態変数群X0の部分を新たな値に変更する際のエネルギーを、次のように計算する。なお、他のノードに割り当てられる他の状態変数群に関しても同様にエネルギーを計算できる。
【0126】
状態変数の全体をSnとする。Snに対応するエネルギーをEnとする。
また、Sn=Sa&Soと表す。Saは自ノードが担当する状態変数群であり、ノード100の場合、状態変数群X0に相当する。Soは他ノードが担当する状態変数群であり、ノード100に対しては、固定部分の状態変数群X1,X2,X3に相当する。アンパサンド記号「&」は、&の左側の状態変数群と、&の右側の状態変数群とを組み合わせることを意味する。
【0127】
自ノードで担当する状態変数群をSaからSa’に更新する場合における、エネルギーEに対する更新後のエネルギーE’を求めることを考える。
例えば、ノード100は、解バッファ130に保持される解の状態変数群Saの各状態変数の値と更新前のエネルギーEを得る。また、状態変数群SaからSa’に対するエネルギー変化ΔE(E’-E)は、自ノードで計算可能である。例えば、ノード100は、Soと自ノードが保持する重み係数とから計算される追加バイアスΔbを元のバイアスbに加算して、重み係数とバイアス(b+Δb)と自ノードの状態変数の変化(Sa’-Sa)からエネルギー変化ΔE(E’-E)を計算し得る。
【0128】
よって、更新後のエネルギーE’は、E’=E+ΔEとなり、自ノードだけで計算可能である。なお、ΔE(E’-E)の計算に用いられる重み係数は、係数αでスケーリングしない重み係数である。
【0129】
図9は、他領域の状態変数に係る重み係数の例を示す図である。
表80aは、ノード100,200,300,400の各々が保持する情報の例を示す。表80aにおいて、例えばノード100に対する重み係数群W_10,W_20,W_30のように、太い枠線で囲われた重み係数群は、当該ノード100に対する他領域の状態変数に係る重み係数に相当する。
【0130】
ノード100に割り当てられた状態変数、すなわち、ノード100における自領域の状態変数は、状態変数群X0に属する状態変数である。ノード100における他領域の状態変数は、状態変数群X1,X2,X3に属する状態変数である。したがって、ノード100における他領域の状態変数に係る重み係数は、重み係数群W_10,W_20,W_30に属する重み係数である。ノード100では、重み係数群W_10,W_20,W_30に属する重み係数が係数αによるスケーリング対象となる。
【0131】
ノード200における自領域の状態変数は、状態変数群X1に属する状態変数である。ノード200における他領域の状態変数は、状態変数群X0,X2,X3に属する状態変数である。ノード200における他領域の状態変数に係る重み係数は、重み係数群W_01,W_21,W_31に属する重み係数である。ノード200では、重み係数群W_01,W_21,W_31に属する重み係数が係数αによるスケーリング対象となる。
【0132】
ノード300における自領域の状態変数は、状態変数群X2に属する状態変数である。ノード300における他領域の状態変数は、状態変数群X0,X1,X3に属する状態変数である。ノード300における他領域の状態変数に係る重み係数は、重み係数群W_02,W_12,W_32に属する重み係数である。ノード300では、重み係数群W_02,W_12,W_32に属する重み係数が係数αによるスケーリング対象となる。
【0133】
ノード400における自領域の状態変数は、状態変数群X3に属する状態変数である。ノード400における他領域の状態変数は、状態変数群X0,X1,X2に属する状態変数である。ノード400における他領域の状態変数に係る重み係数は、重み係数群W_03,W_13,W_23に属する重み係数である。ノード400では、重み係数群W_03,W_13,W_23に属する重み係数が係数αによるスケーリング対象となる。
【0134】
図10は、他領域の状態変数の影響を受ける自領域の状態変数の例を示す図である。
表80bは、ノード100に対する自領域の状態変数と他領域の状態変数との関係を表す。状態変数xは、ノード100における自領域の1つの状態変数である。重み係数w
ijは、他領域のある状態変数と、自領域の状態変数xとのペアに対する重み係数である。ただし、w
ijは当該ペアに対する重み係数に含まれるペナルティ値であると考えてもよい。w
ijの絶対値|w
ij|は比較的大きい値であるとする。
【0135】
バイアスの計算に式(3)を用いる場合、他領域の状態変数が1のとき、自領域の状態変数xを0から1に変化させるとすると、式(6)に基づくエネルギーの増加量はwijの影響のために比較的大きくなる。他領域の状態変数の値は、他ノードとの解共有のタイミングで更新され得るが、当該タイミングで更新されない限り固定される。このため、探索部140での解探索において自領域の状態変数xを0から1に変化させ難くなる。
【0136】
そこで、探索制御部160は、式(7)で示されるように重み係数w
ijを係数αでスケーリングする。
図11は、重み係数のスケーリングの例を示す図である。
【0137】
グラフ91は、重み係数w
ijのスケーリングを行わない場合における、エネルギーの増加量に対するw
ijの影響を表す。グラフ92は、重み係数w
ijのスケーリングを行う場合における、エネルギーの増加量に対するαw
ijの影響を表す。グラフ91,92の横軸は、
図10で例示した自領域の状態変数xの取り得る値を示す。状態変数xの取り得る値は、0または1である。グラフ91,92の縦軸は、エネルギーを示す。なお、w
ijに対応する他領域の状態変数の値は1であるとする。
【0138】
グラフ92で示されるように、wijをαでスケーリングすることで、自領域の状態変数xを1にしたときの、1に固定された他領域の状態変数に起因するエネルギーの増加量を低く抑えることができる。このため、wijをαでスケーリングすることで、自領域の状態変数xを0から1に変化させる状態遷移を促せる。なお、wijに含まれるペナルティ値をαでスケーリングする場合も同様に、エネルギーの増加量を低く抑えることができる。
【0139】
特に、自ノードで担当しない状態変数が1であるためにペナルティ違反はするが、コスト自体は大きく削減されるような遷移に関し、遷移確率を高めることができる。その結果、自ノードにおける探索空間を広げることが可能になり、解の多様性が高まることで、良質な解、すなわち、よりエネルギーの低い解を得られる可能性が高まる。
【0140】
情報処理システム2は、次の処理手順を実行する。まず、制御装置50は、ノード100,200,300,400の各々に部分問題を割り当てる。そして、ノード100,200,300,400は、次に示す手順を実行する。ノード100を主に例示して説明するが、ノード200,300,400もノード100と同様の手順を実行する。
【0141】
図12は、探索の全体制御例を示すフローチャートである。
(S10)探索制御部160は、自領域の重み係数を制御装置50から取得し、データ記憶部120に保持する。ノード100における自領域の重み係数は、重み係数群W_00,W_10,W_20,W_30に属する重み係数である。探索制御部160は、重み係数群W_00を探索部140に設定する。
【0142】
(S11)探索制御部160は、他領域のビット(状態変数)に係る重み係数をαでスケーリングする。ノード100では、スケーリング対象の重み係数は、重み係数群W_10,W_20,W_30に属する重み係数である。探索制御部160は、重み係数に対するαの乗算を、重み係数を表すビット列のシフト演算により行ってもよい。
【0143】
(S12)探索制御部160は、初期解とスケーリングした重み係数とを用いて、式(7)に基づくバイアスb’を計算し、計算したバイアスb’を探索部140に設定する。また、探索制御部160は、初期解を探索部140に設定する。なお、ステップS12における初期解は、例えば制御装置50から入力される。
【0144】
(S13)探索部140は、部分問題に対する解の探索を実行する。探索部140は、当該探索により解を得る。探索制御部160は、探索部140で得られた解を取得する。探索では、探索部140は、自ノードに割り当てられた状態変数群X0に属する状態変数の値のみを変化させる。探索部140は、値を変化させる状態変数の決定に、メトロポリス法やギブス法を用いる。すなわち、探索部140は、値を変化させる状態変数を選択する場合に、ステップS12で設定されたバイアスb’及び式(6)で計算されるエネルギーの変化量に基づいて、エネルギーが小さくなる変化が優先される形で確率的に受け入れる。このとき、探索部140は、エネルギーが大きくなる変化についても確率的に許容する。探索部140は、次の遷移先候補の状態へ変化する際のエネルギーの変化量が小さいほど、受入確率が大きくなるように制御する。
【0145】
(S14)探索制御部160は、探索後の解更新を実行する。探索後の解更新の処理の詳細は、後述される。
(S15)探索制御部160は、通信部150を介して、他ノードへの解送信を実行する。他ノードへの解送信の処理の詳細は、後述される。
【0146】
(S16)探索制御部160は、通信部150を介して、他ノードからの解受信を実行する。他ノードからの解受信の処理の詳細は、後述される。
(S17)探索制御部160は、探索の全体制御の終了条件を満たすか否かを判定する。終了条件を満たさない場合、探索制御部160は、ステップS18に処理を進める。終了条件を満たす場合、探索制御部160は、ステップS19に処理を進める。終了条件は、例えば、全体制御の処理の開始から所定時間が経過したことや、上記のステップS13を所定回数実行したことなどである。
【0147】
(S18)探索制御部160は、探索時の変数固定の処理を実行する。探索時の変数固定の処理は、解情報の初期化を含む。探索時の変数固定の処理の詳細は、後述される。そして、探索制御部160は、ステップS13に処理を進める。
【0148】
(S19)探索制御部160は、解バッファ130に保持される解を制御装置50に出力する。そして、探索制御部160は、探索の全体制御処理を終了する。
なお、ステップS13,S14,S16は各ノードで同期して実行されてもよい。あるいは、ステップS15の他ノードへの解送信や、ステップS16の他ノードからの解受信は、上記のようにステップS14の後に実行されなくてもよく、所定の周期など、探索部140による探索とは非同期に、任意のタイミングで実行されてもよい。
【0149】
例えば、他ノードへの解送信の周期を、探索部140が探索した解を基に解バッファ130の解が更新される周期と同じにするか、または当該周期よりも長くすることが考えられる。また、他ノードからの解受信は、他ノードが解をプッシュ送信した際に実行されてもよい。このように、自ノードでの探索、他ノードへの解送信及び他ノードからの解受信は、それぞれ独立した処理として実行されてもよい。また、ステップS15の他ノードへの解送信や、ステップS16の他ノードからの解受信は、任意の順序で実行されてよい。例えば、ステップS15,S16は逆の順序で実行されてもよい。また、1つのノードが複数の他ノードから連続して解を受信することもある。
【0150】
図13は、探索後の解更新の第1の例を示すフローチャートである。
探索後の解更新は、ステップS14に相当する。
(S20)探索制御部160は、探索部140より、探索された解の割当領域部Spを取得する。割当領域部Spは、探索された解のうち、自ノードに割り当てられた状態変数群X0の値の組である。
【0151】
(S21)探索制御部160は、解候補生成ループを実行する。
図13の手順において、iをループの実行回数とする。iの初期値を0とする。また、Kを解バッファ130に格納されている解の数とする。iはループが1回実行されるたびにインクリメントされる。i<Kである間、下記のステップS22~S24が繰り返し実行される。
【0152】
(S22)探索制御部160は、解バッファ130からi番目の解S(i)及びエネルギーE(i)を取得する。
(S23)探索制御部160は、解S(i)に対して、該当ビット、すなわち、ノード100が担当する状態変数群X0に属する状態変数の部分を、割当領域部Spに置換した解候補S’(i)を生成する。
【0153】
(S24)探索制御部160は、係数αでスケーリングしない重み係数を用いて、解候補S’(i)のエネルギーE’(i)を計算する。
(S25)探索制御部160は、ループが1回実行されるたびに、iをインクリメントし、i=Kに達すると解候補生成ループを抜けて、ステップS26に処理を進める。
【0154】
(S26)探索制御部160は、解バッファ130の元の解S(i)と生成した解候補S’(i)の計2K個のエネルギーE(i)、E’(i)を比較し、エネルギーの低いK個の解を選択する。選択されるK個の解には、解候補S’(i)が含まれ得る。
【0155】
(S27)探索制御部160は、ステップS26で選択したK個の解で解バッファ130の解を置換する。そして、探索制御部160は、探索後の解更新処理を終了する。
図14は、他ノードへの解送信例を示すフローチャートである。
【0156】
他ノードへの解送信は、ステップS15に相当する。
(S30)探索制御部160は、解バッファ130の中から上位k個、すなわち、エネルギーの低い解からk個を取得する。
図14の手順において、kは1以上かつ解バッファ130に保持される解の数よりも小さい整数である。例えば、kの値は1~3程度の値から予め定められる。
【0157】
(S31)探索制御部160は、選択したk個の解と当該解に対応するエネルギーとを通信部150を介して他ノードに送信する。解の送信先は、自ノード以外の全てのノードである。そして、探索制御部160は、他ノードへの解送信処理を終了する。
【0158】
図15は、他ノードからの解受信例を示すフローチャートである。
他ノードからの解受信は、ステップS16に相当する。
(S40)通信部150は、他ノードから解SrとエネルギーErとを受信する。探索制御部160は、通信部150で受信した解SrとエネルギーErとを取得する。
【0159】
(S41)探索制御部160は、解バッファ130の中のWorst解Sw、すなわち、エネルギーが最大の解SwのエネルギーEwを取得する。
(S42)探索制御部160は、Er≦Ewであるか否かを判定する。Er≦Ewの場合、探索制御部160は、ステップS43に処理を進める。Er>Ewの場合、探索制御部160は、他ノードから受信した解Srを破棄して、他ノードからの解受信処理を終了する。
【0160】
(S43)探索制御部160は、解バッファ130の中のWorst解Swを解Srで置換する。探索制御部160は、Worst解Swを破棄する。そして、探索制御部160は、他ノードからの解受信処理を終了する。
【0161】
図16は、探索時の変数固定例を示すフローチャートである。
探索時の変数固定は、ステップS18に相当する。
(S50)探索制御部160は、解バッファ130の中から上位k個の解、すなわち、エネルギーの低い解からk個の解のうち、1つの解Ssをランダムに選択する。
図16の手順において、kは1以上かつ解バッファ130に保持される解の数よりも小さい整数である。
【0162】
(S51)探索制御部160は、他ノードに割り当てられた変数部分を、選択した解Ssの値で固定するように、αでスケーリングした重み係数によりバイアスを計算する。当該バイアスは、式(7)のb’に相当する。
【0163】
(S52)探索制御部160は、選択した解Ssと式(7)のバイアスb’とを探索部140に入力し、探索部140による探索を実行させる。例えば、探索部140による当該探索の始状態、すなわち、次の探索の初期解は、ステップS52の段階で探索部140に設定された解Ssとなる。そして、探索制御部160は、探索時の変数固定処理を終了する。
【0164】
このように、ノード100,200,300,400により、各ノードの解バッファ内の全ての解に対して、新たに探索した解を反映させた解候補を評価することで、多くの良解に対して、探索結果が早く反映され易くなる。
【0165】
なお、上記の例では、各ノードで探索された解のうちの自ノードの割当領域部で、自ノードの解バッファの解のうちの対応する部分を置換することで解候補を生成し、解バッファの解を解候補で置換するものとした。一方、解バッファの解の更新には他の方法も考えられる。
【0166】
例えば、ノード100,200,300,400は、各々の探索部で得られた解を、解候補として用いて、自ノードの解バッファの解を更新してもよい。当該解候補のエネルギーを得るために、例えば、探索制御部160は、探索時の変数固定に使用した解及び当該解のエネルギーをデータ記憶部120に保持しておいてもよい。例えば、探索制御部160は、当該解候補のエネルギーと解バッファ130に保持される解のエネルギーとを比較し、解候補のエネルギーが、解バッファ130に保持されるWorst解のエネルギーよりも大きければ、Worst解を解候補で置換する。次に、このような解バッファの解の更新の手順の例を説明する。
【0167】
図17は、探索後の解更新の第2の例を示すフローチャートである。
探索後の解更新は、ステップS14に相当する。
図17の手順は、
図13の手順の代わりに実行される。
【0168】
(S60)探索制御部160は、探索時の自ノード変数以外の変数固定に使用した解Sf、及び、解SfのエネルギーEfをデータ記憶部120に保持する。自ノード変数とは、ノード100が担当する状態変数群に含まれる状態変数である。
【0169】
(S61)探索制御部160は、探索部140より、探索された解の割当領域部Spを取得する。
(S62)探索制御部160は、変数固定に使用した解Sfに対して、該当ビットを割当領域部Spに置換した解Sf’を生成する。解Sf’は、ノード100で新たに探索された全体解である。
【0170】
(S63)探索制御部160は、係数αでスケーリングしない重み係数を用いて、解Sf’のエネルギーEf’を計算する。
(S64)探索制御部160は、エネルギーEf,Ef’を比較し、小さい方の解を選択する。
【0171】
(S65)探索制御部160は、ステップS64で選択した解で解バッファ130の中のWorst解を置換する。そして、探索制御部160は、探索後の解更新処理を終了する。
【0172】
なお、ノード100は、重み係数群W_00,W_10,W_20,W_30に対応するコスト値及びペナルティ値をデータ記憶部120に保持してもよい。この場合、探索制御部160は、ステップS11,S51のスケーリングをペナルティ値に対して実行する。探索制御部160は、コスト値とスケーリング後のペナルティ値との線形結合により、探索部140の探索に用いられる重み係数群を求め、当該重み係数群によりステップS51のバイアスの計算を行い、探索部140に設定する。このとき、探索制御部160は、ペナルティ値にαを乗算した結果から求めた重み係数を用いて、式(3)によりバイアスを計算すればよい。探索部140は、当該バイアスをエネルギーの変化量の計算に用いることができる。ノード200,300,400も、ノード100と同様に、ペナルティ値を係数αでスケーリングしてもよい。
【0173】
また、ノード100,200,300,400は、探索の全体制御において、途中から係数αでスケーリングしない重み係数またはペナルティ値に基づいて求めたバイアスを使用して解探索を行うようにしてもよい。すなわち、各ノードの探索制御部は、ステップS13~S18の繰り返しサイクルにおいて、当初の所定期間は、ステップS51において係数αでスケーリングした重み係数によりバイアスを計算する。一方、その後の期間では、各ノードの探索制御部は、ステップS51において係数αでスケーリングしない重み係数によりバイアスを計算し、各ノードの探索部に設定してもよい。特に最適化の初期の段階で他ノード担当の状態変数が固定されて解の多様性を確保できないことの影響が大きいと考えられ、当該初期の段階で重み係数またはペナルティ値をスケーリングすることで、一定の時間において良解に到達できる可能性を高められる。
【0174】
図18は、ノードの他のハードウェア例を示す図である。
例えば、ノード100は、
図4で例示したハードウェアに加えて、アクセラレータカード105aを更に有してもよい。アクセラレータカード105aは、アクセラレータカード105と同様に、イジングモデルのエネルギー関数で表される問題の解を探索するハードウェアアクセラレータである。
【0175】
アクセラレータカード105aは、GPU111a及びRAM112aを有する。GPU111aは、アクセラレータカード105aにおける探索機能を実現する。当該探索機能は、FPGAやASICなどの他の種類の集積回路により実現されてもよい。RAM112aは、GPU111aの探索に用いられるデータやGPU111aにより探索された部分問題の解を保持する。
【0176】
なお、アクセラレータカード105aは、アクセラレータカード105と同じ探索手法を用いるものでもよいし、アクセラレータカード105とは異なる探索手法を用いるものでもよい。例えば、アクセラレータカード105がSA、アクセラレータカード105aがタブーサーチを用いるものでもよい。また、ノード100は、3以上のアクセラレータカードを有してもよい。
【0177】
1つのノードが2以上のアクセラレータカードを有することで、当該ノードにおいて、2以上の探索部の機能が実現されてもよい。この場合、1つのノードで2以上の部分問題を担当することもできる。
【0178】
図19は、複数の探索手法を用いる情報処理システムの例を示す図である。
例えば、ノード100はSQAを用いる。ノード200は、タブーサーチ(Tabu)を用いる。ノード300は、SAを用いる。ノード400は、GAを用いる。このように、ノード100,200,300,400,…が互いに異なる探索手法を用いてもよい。あるいは、ノード100,200,300,400,…の少なくとも2つのノードがSAを用い、他のノードがSQAやタブーサーチを用いるというように、少なくとも2つのノードで同じ探索手法を用いてもよい。ノード100,200,300,400,…の全てが同じ探索手法を用いてもよい。
【0179】
例示のように、ノード単位に探索手法が異なってもよいし、1つのノードに複数の探索手法を用いる複数のアクセラレータが混載されてもよい。アクセラレータは、前述のように、FPGA、GPU、ASICなどにより実現される。第2の実施の形態で例示したように、1つのノードにFPGA、GPU、ASICなどのうちの少なくとも2種類の集積回路が混載されてもよい。
【0180】
情報処理システム2では、複数のノードの各々が、各ノードで得られている複数の解のうちの最良の解を他のノードと共有し、共有した解に基づき各ノードでの次の探索において固定する状態変数群の各状態変数の値を決定する。より良い解の近傍には、更に良い解が存在する可能性が高いと推定される。このため、各ノードで発見された良解を他ノードと共有し、共有した解を基に固定する状態変数群の各状態変数の値を決定することで、探索空間をより良い解の近傍に絞り込め、更に良い解を得られる可能性が高まる。
【0181】
このように、あるノードで発見された良解が他のノードと共有されることで、複数のノードにより共同で解が改善され得る。しかし、各ノードにおいて、自ノードに割り当てられた状態変数群に属さない状態変数については、他ノードと通信することによる解共有に応じて更新されるため、更新頻度は低くなる。このため、自ノードに割り当てられた状態変数群における変化だけで状態遷移ができなくなると、当該状態変数群に属さない、値が固定された状態変数の値の更新を待つことになり、求解速度が低下する。
【0182】
特に、他領域の状態変数の値が1に固定されている場合、当該他領域の状態変数と自領域の状態変数のペアに対するペナルティ値の影響により、自ノードに割り当てられた状態変数群で変化可能な状態変数が制限され得る。
【0183】
そこで、探索制御部160は、他領域の状態変数に係る重み係数またはペナルティ値を係数αでスケーリングすることで、エネルギーの変化量に対する、当該他領域の状態変数に係る重み係数の影響を軽減できる。これにより、ノード100以外の他ノードに割り当てられた状態変数が1で固定される場合にも、当該状態変数の値によるエネルギーの増加量を低く抑えることができる。
【0184】
このため、他ノードが担当する状態変数が1に固定されることにより、通常はペナルティ値の影響で自ノードが担当する状態変数を1に変化させることが困難な場合でも、当該状態変数を1に変化させ易くなる。その結果、ノード100における状態変数の遷移が促進され、良解に到達できる可能性が高まる。ノード200,300,400についても、ノード100と同様に、良解に到達できる可能性が高まる。よって、ノード100,200,300,400全体として、より良い解に到達できる可能性が高まる。こうして、情報処理システム2は、求解性能を向上することができる。
【0185】
また、情報処理システム2は、各ノードを用いて非同期に解の探索を行うこともできるし、各ノードにより異なる探索手法を用いて解の探索を行うこともできる。このため、情報処理システム2は、比較的大規模な問題に対して、ノードの追加を容易に行うことができ、拡張性に優れたシステムを実現することができる。
【0186】
以上で説明した情報処理システム2は、例えば次の処理を実行する。下記の処理は情報処理システム1でも実行され得る。
情報処理システム2は、複数の状態変数を含むエネルギー関数により表される問題の解を探索する。情報処理システム2は、複数のノードを含む。ノード100,200,300,400は、複数のノードの一例である。
【0187】
複数のノードの各々は、問題を分割することによって生成され、各々が複数の状態変数のうちの一部の状態変数である状態変数群を含む複数の部分問題のうち、自ノードに割り当てられた部分問題に対応して割り当てられた状態変数群に属する状態変数の値を変化させることで解の探索を実行する。当該探索において、複数のノードの各々は、次の処理を行う。複数のノードの各々は、自ノードに割り当てられた2つの状態変数の第1ペアに対する重みを示す第1重み係数を保持し、自ノードに割り当てられた状態変数と他ノードに割り当てられた状態変数との第2ペアに対する重みを示す第2重み係数または第2重み係数の計算に用いられるペナルティ値を保持する。複数のノードの各々は、第2重み係数またはペナルティ値に対して、0より大きく1より小さい係数αを乗算する。複数のノードの各々は、第2重み係数に対する係数αの乗算結果である第3重み係数、または、ペナルティ値に対する係数αの乗算結果を用いて計算された第2ペアに対する第4重み係数と、第1重み係数とに基づいて、自ノードに割り当てられた状態変数群に属する各々の状態変数に対して当該状態変数の値を変化させることによるエネルギー関数の値の変化量を計算する。複数のノードの各々は、自ノードに割り当てられた各々の状態変数に対して計算した変化量に基づいて、値を変化させる状態変数を決定する。
【0188】
これにより、情報処理システム2は、複数のノードの各々における探索空間の制限を緩和でき、求解性能を向上することができる。なお、重み係数を係数αでスケーリングするよりも、ペナルティ値を係数αでスケーリングする方が、コスト値に対する係数αの影響を抑えられる。
【0189】
複数のノードの各々は、自ノードで特定された解に対応するエネルギー関数の値を、第3重み係数または第4重み係数に代えて、第2重み係数を用いて計算し、計算したエネルギー関数の値に応じて解を複数保持する。複数のノードの各々は、自ノードで保持する複数の解のうちの少なくとも1つの解を他ノードに送信し、他ノードにより送信された解を受信し、他ノードから受信した解に基づいて、自ノードで保持する複数の解の少なくとも一部を更新する。
【0190】
これにより、情報処理システム2は、複数のノードにより共同で解を改善でき、比較的大規模な問題に対して、求解性能を向上することができる。
また、複数のノードの各々は、自ノードで特定された解に対応するエネルギー関数の値を求める際には、第3重み係数または第4重み係数に代えて、第2重み係数を用いることで、当該解に対応するエネルギー関数の値を適切に求めることができる。そして、当該エネルギー関数の値に基づいて、自ノードが得た解を保持するか、破棄するかを適切に選別できる。
【0191】
複数のノードの各々は、自ノードで新たに特定された第1の解及び自ノードで保持する複数の解の各々に対応するエネルギー関数の値に基づいて自ノードで保持する複数の解の何れかを第1の解に置換する。
【0192】
これにより、情報処理システム2は、各ノードで保持する解を徐々に改善して、良解に到達する可能性を高めることができる。
例えば、複数のノードの各々は、自ノードでの探索結果として新たに特定された第2の解に含まれる、自ノードに割り当てられた状態変数群に属する状態変数の値を、自ノードで保持する複数の解の各々に反映させることで、第1の解を特定する。
【0193】
これにより、情報処理システム2は、各ノードが保持する多くの良解に対して、探索結果を早く反映し易くなり、より良い解に早く到達する可能性を高めることができる。
あるいは、複数のノードの各々は、自ノードでの探索結果として新たに特定された第2の解を、第1の解としてもよい。
【0194】
これにより、情報処理システム2は、各ノードで保持する解を徐々に改善して、良解に到達する可能性を高めることができる。
また、複数のノードの各々は、他ノードから受信した解に対応するエネルギー関数の値に基づいて、自ノードで保持する複数の解の少なくとも一部を更新する。
【0195】
これにより、情報処理システム2は、各ノードで得られた良解を他ノードと共有しながら複数のノードにより共同で解を改善でき、比較的大規模な問題に対して、求解性能を向上することができる。
【0196】
また、複数のノードの各々は、自ノードで保持する複数の解に基づいて次の探索に用いる初期解を生成する。
これにより、情報処理システム2は、各ノードで得られた良解の近傍に探索空間を徐々に絞り込みながら各ノードによる探索を行うことができ、より良い解に到達する可能性を高めることができる。
【0197】
更に、制御部51は、複数のノードに複数の部分問題を割り当ててもよい。制御部51は、複数のノードの各々による解の探索、及び、ノード間での解の送受信が繰り返して一定時間行われると、複数のノードの各々が保持する複数の解のうちの少なくとも1つの解を特定し、特定した解を出力してもよい。
【0198】
これにより、複数のノードを用いて得られた最終的な解を適切に取得できる。前述のように、制御部51は、複数のノードが各々の解バッファに保持する少なくとも1つの解を取得し、取得した解を出力する。例えば、制御部51は、エネルギーの小さい解を優先して出力してもよい。制御部51は、取得した解を組合せ最適化問題の解の形式に変換し、変換後の解の内容を、制御装置50に接続されたディスプレイに表示させたり、ネットワーク60に接続されたクライアントコンピュータなどのコンピュータに送信したりしてもよい。
【0199】
また、制御部51の機能を制御装置50に設ける例を示したが、ノード100,200,300,400の何れか1つが制御部51の機能を有してもよい。例えば、ノード100,200,300,400の何れかのCPUが、当該ノードのRAMに記憶されたプログラムを実行することで制御部51の機能を発揮してもよい。
【0200】
また、情報処理システム1も制御装置50を有してもよい。あるいは、ノード10,20,30,40の何れかが制御装置50における制御部51の機能を有してもよい。
更に、各ノードはコンピュータにより実現されてもよい。何れかのコンピュータが、当該コンピュータのCPUにより当該コンピュータのRAMに記憶されたプログラムを実行することで、第1,第2の実施の形態で例示したように、他ノードと共同した解探索を各ノードに実行させてもよい。
【0201】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体61に記録される。
【0202】
例えば、プログラムを記録した記録媒体61が配布されることで、プログラムが流通される。また、プログラムは他のコンピュータに格納されてもよく、他のコンピュータからネットワーク経由で配布されてもよい。コンピュータは、例えば、記録媒体61に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0203】
1 情報処理システム
10,20,30,40 ノード
11,21 記憶部
12,22 処理部
13,23 探索部