以下に図面を参照して、本発明にかかる最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置の実施の形態を詳細に説明する。
(実施の形態)
図1は、実施の形態にかかる最適化問題演算方法の一実施例を示す説明図である。図1において、最適化問題演算装置101は、演算ユニット102により、組合せ最適化問題の演算を行うコンピュータである。演算ユニット102は、組合せ最適化問題を解くデバイスである。
演算ユニット102は、論理的に複数のパーティションに分割可能である。パーティションに分割するとは、演算の際に利用されるハードウェアリソースの範囲を区切ることである。演算ユニット102では、それぞれのパーティションで独立して異なる問題を解くことができる。
例えば、演算ユニット102を8個のパーティションに分割すると、8人のユーザが同時に異なる問題を解くことが可能となる。演算ユニット102は、例えば、最適化問題演算装置101に接続して使用される別体の装置であってもよく、また、最適化問題演算装置101に内蔵された装置であってもよい。
最適化問題演算装置101は、演算ユニット102への設定により、演算ユニット102の論理的な分割状態を規定するパーティションモードを変更可能である。演算ユニット102をどのように分割するかによって、演算の際に利用可能なハードウェアリソースの範囲が変わり、各パーティションで解くことができる組合せ最適化問題の規模や精度が決まる。
ただし、動的にパーティションモードを変更すると、パーティションで演算中の結果が異常となるおそれがある。したがって、最適化問題演算装置101は、パーティションモードを変更する場合には、例えば、各パーティションで演算が行われていない状態となってから、パーティションモードを変更する。
なお、演算ユニット102をどのように分割するか、すなわち、どのようなパーティションモードを用意するかは、任意に設定可能である。
また、最適化問題演算装置101は、演算ユニット102への設定により、各パーティションモードにおける実行モードを変更可能である。実行モードとは、演算の際に利用されるハードウェアリソースの範囲を規定するモードである。すなわち、演算ユニット102では、演算の際に利用されるハードウェアリソースの範囲を、パーティションモードおよび実行モードによって指定可能である。
ただし、演算ユニット102では、他のパーティションに影響を与えることを防止するため、各パーティションにおいて、パーティションモードよりも粒度が大きい実行モードへの変更は行わない。粒度とは、各モードで解くことができる問題の最大規模や最大精度を表す。すなわち、演算の際に利用されるハードウェアリソースの範囲が、各パーティションで利用可能な最大のハードウェアリソースよりも大きくなる実行モードへの変更は行わない。
また、あるパーティションにおいて、パーティションモードよりも粒度が小さい実行モードへの変更が行われると、演算の際に利用されるハードウェアリソースの範囲がさらに細かく区切られる。すなわち、1つのパーティションが複数のパーティションにさらに分割される。
ここで、組合せ最適化問題を解く最適化装置(イジングマシン)では、異なる規模・要求精度の問題を解くことが求められる場合がある。しかし、従来の最適化装置では、単一のモードしか有しておらず(演算の際に利用するハードウェアリソースの範囲が固定)、問題の規模・要求精度に応じて最適な動作を行う構成ではない。
したがって、従来の最適化装置では、ハードウェアで解くことができる問題の最大規模や精度よりも、解くべき問題の規模や精度が小さい場合、ハードウェアが探索する範囲やDMA(Direct Memory Access)転送するメモリサイズが大きくなり、演算時間が増加してしまう。例えば、ハードウェアで解くことができる問題の最大規模が「8192bit(8K)」のときに、「1024bit(1K)」の規模の問題を解く場合には、探索範囲が広がって無駄なDMA転送が行われるため、演算性能が劣化する。
また、たとえ問題の規模に応じてパーティションモードおよび実行モードを設定したとしても、実行モードが、最適化装置のハードウェアリソースを部分的に使用する場合、必ずしも効率は十分ではない。例えば、解くことができる問題の最大規模が「8192bit(8K)」のパーティションモードにおいて、「1024bit(1K)」の規模の問題を解く場合を想定する。
この場合、実行モードを、パーティションモードよりも粒度が小さい実行モード、例えば、解くことができる問題の最大規模が「1024bit(1K)」の実行モードに変更することが考えられる。しかし、「8192bit(8K)」の規模の問題を解くことができるハードウェアリソースで、「1024bit(1K)」の規模の問題を1個解く場合、ハードウェアリソースを部分的に使用することになり、効率的に使用しているとはいえない。
そこで、本実施の形態では、問題の規模や要求精度に応じたパーティションモードおよび実行モードに設定された演算ユニット102により、当該実行モードに対応した並列数で組合せ最適化問題の演算を並列に行うことで、組合せ最適化問題を効率的に解く最適化問題演算方法について説明する。以下、最適化問題演算装置101の処理例について説明する。
(1)最適化問題演算装置101は、演算ユニット102に対する組合せ最適化問題を受け付ける。ここで、受け付ける組合せ最適化問題は、解くべき計算対象の問題であり、例えば、ユーザによって指定される問題である。なお、組合せ最適化問題の一例については、図6を用いて後述する。
(2)最適化問題演算装置101は、組合せ最適化問題の規模または要求精度に応じて、演算ユニット102のパーティションモード、および、当該パーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードを決定する。
ここで、組合せ最適化問題の規模は、例えば、組合せ最適化問題のイジングモデルのスピンビット数によって表される。イジングモデルとは、磁性体のスピンの振る舞いを表すモデルである。演算ユニット102は、例えば、計算対象の問題をイジングモデルに置き換えて計算する。また、組合せ最適化問題の要求精度は、例えば、ビット間の相互作用の大きさを示す重み係数のビット数によって表される。
具体的には、例えば、最適化問題演算装置101は、組合せ最適化問題の規模が、第1のパーティションモードで解くことができる問題の最大規模より小さいか否かを判断する。ここで、第1のパーティションモードは、演算ユニット102に設定可能な複数のパーティションモードのうちのいずれかのパーティションモードであり、例えば、演算ユニット102の現在のパーティションモードである。
そして、最適化問題演算装置101は、組合せ最適化問題の規模が最大規模より小さい場合、演算ユニット102のパーティションモードを、第1のパーティションモードに決定する。例えば、第1のパーティションモードが現在のパーティションモードであれば、パーティションモードの変更は行われない。
また、最適化問題演算装置101は、演算ユニット102の実行モードを、第1のパーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードのうち、組合せ最適化問題の規模に対応するハードウェアリソースの範囲を規定する第1の実行モードに決定する。
ここで、組合せ最適化問題の規模に対応するハードウェアリソースの範囲とは、例えば、当該規模の問題を解くことができる最小限のハードウェアリソースの範囲である。例えば、組合せ最適化問題の規模を「2048bit(2K)」とすると、当該規模の問題を解くことができる最小限のハードウェアリソースの範囲は、2048bit(2K)以下の規模の問題を解くことができるハードウェアリソースの範囲となる。
一方、組合せ最適化問題の規模が最大規模より大きい場合には、そのままの状態では、第1のパーティションモードで組合せ最適化問題を解くことができない。このため、最適化問題演算装置101は、演算ユニット102のパーティションモードを、組合せ最適化問題の規模に対応するハードウェアリソースを利用可能な第2のパーティションモードに決定してもよい。すなわち、最適化問題演算装置101は、組合せ最適化問題の規模以上の規模の問題を解くことができる第2のパーティションモードに決定する。
ただし、最適化問題演算装置101は、パーティションモードを変更する場合には、パーティションで演算中の結果が異常となるのを防止するため、各パーティションで演算が行われていない状態で、パーティションモードを変更する。
これにより、組合せ最適化問題の規模に応じた設定で、組合せ最適化問題の演算を行うことが可能となる。なお、組合せ最適化問題の規模が最大規模より大きい場合、最適化問題演算装置101は、既存の分割解法を用いて、組合せ最適化問題を分割して解くことにしてもよい。
また、例えば、最適化問題演算装置101は、組合せ最適化問題の要求精度が、第1のパーティションモードで解くことができる問題の最大精度の範囲内であるか否かを判断することにしてもよい。そして、最適化問題演算装置101は、組合せ最適化問題の要求精度が最大精度の範囲内である場合、演算ユニット102のパーティションモードを、第1のパーティションモードに決定する。また、最適化問題演算装置101は、演算ユニット102の実行モードを、組合せ最適化問題の要求精度に対応するハードウェアリソースの範囲を規定する第1の実行モードに決定する。
ここで、組合せ最適化問題の要求精度に対応するハードウェアリソースの範囲とは、例えば、当該要求精度の問題を解くことができる最小限のハードウェアリソースの範囲である。例えば、組合せ最適化問題の要求精度を「32bit」とすると、当該要求精度の問題を解くことができる最小限のハードウェアリソースの範囲は、32bit以下の精度の問題を解くことができるハードウェアリソースの範囲となる。
これにより、組合せ最適化問題の要求精度に応じた設定で、組合せ最適化問題の演算を行うことが可能となる。
図1の例では、計算対象の問題を「組合せ最適化問題110」とし、組合せ最適化問題110の規模を「4096bit(4K)」とする。また、組合せ最適化問題110の実行回数「1024」が指定されているとする。また、第1のパーティションモードを、演算ユニット102の現在のパーティションモードである「パーティションモード(8K)」とする。
パーティションモード(8K)は、演算ユニット102を論理的に1つのパーティション(図1の例では、パーティションP1)とした状態を規定するパーティションモードである。パーティションモード(8K)で解くことができる問題の最大規模は、「8192bit(8K)」である。すなわち、パーティションP1で解くことができる問題の最大規模は「8192bit(8K)」である。
また、パーティションモード(8K)において、パーティションP1で設定可能な実行モードを、実行モードa,b,c,dとする。実行モードaは、「8192bit(8K)」以下の規模の問題を解くことができる実行モードである。実行モードbは、「4096bit(4K)」以下の規模の問題を解くことができる実行モードである。実行モードcは、「2048bit(2K)」以下の規模の問題を解くことができる実行モードである。実行モードdは、「1024bit(1K)」以下の規模の問題を解くことができる実行モードである。
ここでは、組合せ最適化問題110の規模に応じて、演算ユニット102のパーティションモードおよび実行モードを決定する場合を例に挙げて説明する。
この場合、最適化問題演算装置101は、組合せ最適化問題110の規模が、パーティションモード(8K)で解くことができる問題の最大規模より小さいか否かを判断する。ここでは、組合せ最適化問題110の規模「4096bit(4K)」が、最大規模「8192bit(8K)」より小さい。
このため、最適化問題演算装置101は、組合せ最適化問題110の規模が最大規模より小さいと判断する。そして、最適化問題演算装置101は、演算ユニット102のパーティションモードを、パーティションモード(8K)に決定する。すなわち、最適化問題演算装置101は、パーティションモードの変更は行わない。
また、最適化問題演算装置101は、演算ユニット102の実行モードを、パーティションモード(8K)における実行モードa,b,c,dのうち、組合せ最適化問題110の規模に対応するハードウェアリソースの範囲を規定する第1の実行モードに決定する。ここで、組合せ最適化問題110の規模は、「4096bit(4K)」である。
この場合、最適化問題演算装置101は、例えば、演算ユニット102の実行モードを、「4096bit(4K)」の規模の問題を解くことができる最小限のハードウェアリソースの範囲を規定する実行モードbに決定する。実行モードbでは、実行モードaに比べて、各パーティションで解くことができる問題の最大規模は小さいものの、使用するハードウェアリソースは少ない。
例えば、パーティションモード(8K)において、演算ユニット102の実行モードを、実行モードaから実行モードbに変更すると、パーティションP1が、パーティションP1-1とパーティションP1-2とに分割される。各パーティションP1-1,P1-2で解くことができる問題の最大規模は「4096bit(4K)」である。
(3)最適化問題演算装置101は、決定したパーティションモードおよび実行モードにより、組合せ最適化問題の実行回数を当該実行モードに対応した分割数で分割した回数に基づいて、演算ユニット102で組合せ最適化問題の演算を並列して実行させる。
ここで、組合せ最適化問題の実行回数とは、組合せ最適化問題の演算を行う回数である。組合せ最適化問題の実行回数は、例えば、同じ内容の問題を繰り返し解く回数であってもよい。また、組合せ最適化問題の実行回数は、例えば、同じ規模・要求精度で、異なる内容の問題を解く回数であってもよい。例えば、組合せ最適化問題110の実行回数「1024」は、同じ内容の問題を繰り返し解く回数を示す。
実行モードに対応した分割数とは、並列に演算を実行可能な数である。例えば、パーティションモード(8K)のパーティションP1において、実行モードaに対応した分割数は「1」である。また、実行モードbに対応した分割数は「2」である。実行モードcに対応した分割数は「4」である。実行モードdに対応した分割数は「8」である。
図1の例では、演算ユニット102のパーティションモードおよび実行モードは、パーティションモード(8K)および実行モードbである。ここで、パーティションモード(8K)において、実行モードbに対応した分割数は「2」である。組合せ最適化問題110の実行回数「1024」を実行モードbに対応した分割数「2」で分割した回数は、「512」である。
この場合、最適化問題演算装置101は、512回分の組合せ最適化問題110を、演算ユニット102の各パーティションP1-1,P1-2にそれぞれ割り振る。そして、最適化問題演算装置101は、パーティションモード(8K)および実行モードbにより、各パーティションP1-1,P1-2で512回分の組合せ最適化問題110の演算をそれぞれ並列して実行させる。
このように、最適化問題演算装置101によれば、問題の規模や要求精度に応じたパーティションモードおよび実行モードにより、実行回数が指定された組合せ最適化問題の演算を並列して行うことができる。これにより、演算ユニット102のハードウェアリソースを有効活用して演算効率を高めることができ、複数の問題(同じ問題の繰り返しでも、異なる問題でもよい)の演算処理の高速化を図ることができる。
図1の例では、問題の規模に応じたパーティションモード(8K)および実行モードbに設定された演算ユニット102により、当該実行モードbに対応した並列数「2」で組合せ最適化問題110の演算を並列に行うことができる。これにより、1024回分の組合せ最適化問題110の演算を1つのパーティションP1で実行させる場合に比べて、演算効率を2倍高めることができる。
(演算ユニット102の一実施例)
つぎに、図1に示した演算ユニット102の一実施例について説明する。
図2は、演算ユニット102の一実施例を示す説明図である。図2において、演算ユニット102は、計算対象の問題(組合せ最適化問題)を変換したイジングモデルに含まれる複数のスピンに対応する複数のビット(スピンビット)のそれぞれの値の組合せ(状態)のうち、エネルギー関数が最小値となるときの各ビットの値(基底状態)を探索する。
イジング型のエネルギー関数E(x)は、例えば、下記式(1)で定義される。
右辺第1項は、イジングモデルに含まれる全ビットから選択可能な2つのビットの全組合せについて、漏れと重複なく、2つのビットの値(0または1)と結合係数との積を積算したものである。イジングモデルに含まれる全ビット数をK個(Kは2以上の整数)とする。また、i,jの各々を、0以上K-1以下の整数とする。xiは、i番目のビットの値を表す変数(状態変数とも呼ばれる)である。xjは、j番目のビットの値を表す変数である。Wijは、i番目とj番目のビットの相互作用の大きさを示す重み係数である。なお、Wii=0である。また、Wij=Wjiであることが多い(すなわち、重み係数による係数行列は対称行列である場合が多い)。
右辺第2項は、全ビットのそれぞれのバイアス係数とビットの値との積の総和を求めたものである。biは、i番目のビットのバイアス係数を示している。
また、変数xiの値が変化して1-xiとなると、変数xiの増加分は、Δxi=(1-xi)-xi=1-2xiと表せる。したがって、スピン反転(値の変化)に伴うエネルギー変化ΔEiは、下記式(2)で表される。
h
iはローカルフィールド(局所場)と呼ばれ、下記式(3)で表される。
Δxiに応じてローカルフィールドhiに符号(+1または-1)を乗じたものがエネルギー変化ΔEiとなる。ローカルフィールドhiの変化分Δhiは、下記式(4)で表される。
ある変数xjが変化したときのローカルフィールドhiを更新する処理は並列に行われる。
演算ユニット102は、例えば、1チップの半導体集積回路であり、FPGA(Field Programmable Gate Array)などを用いて実現される。演算ユニット102は、ビット演算回路1a1,…,1aK,…,1aN(複数のビット演算回路)、選択回路部2、閾値生成部3、乱数生成部4および設定変更部5を有する。ここで、Nは、演算ユニット102が備えるビット演算回路の総数である。Nは、K以上の整数である。ビット演算回路1a1,…,1aK,…,1aNの各々には、識別情報(index=0,…,K-1,…,N-1)が対応付けられている。
ビット演算回路1a1,…,1aK,…,1aNは、イジングモデルの状態を表すビット列に含まれる1ビットを提供する単位素子である。当該ビット列は、スピンビット列や状態ベクトルなどと呼ばれてもよい。ビット演算回路1a1,…,1aK,…,1aNの各々は、自ビットと他ビットの間の重み係数を記憶し、重み係数に基づいて他ビットの反転に応じた自ビットの反転可否を判定し、自ビットの反転可否を示す信号を選択回路部2に出力する。
選択回路部2は、スピンビット列のうち、反転させるビット(反転ビット)を選択する。具体的には、選択回路部2は、ビット演算回路1a1,…,1aK,…,1aNのうち、イジングモデルの基底状態の探索に用いられているビット演算回路1a1,…,1aKの各々から出力された反転可否の信号を受け付ける。選択回路部2は、ビット演算回路1a1,…,1aKのうち、反転可の信号を出力したビット演算回路に対応するビットを優先的に1つ選択し、反転ビットとする。例えば、選択回路部2は、乱数生成部4により出力される乱数ビットに基づいて当該反転ビットの選択を行う。選択回路部2は、選択した反転ビットを示す信号を、ビット演算回路1a1,…,1aKに出力する。反転ビットを示す信号は、反転ビットの識別情報(index=j)と、反転可否を示すフラグ(flgj=1)と、反転ビットの現在の値qj(今回の反転前の値)とを示す信号を含む。ただし、いずれのビットも反転されないこともある。いずれのビットも反転されない場合、選択回路部2は、flgj=0を出力する。
閾値生成部3は、ビット演算回路1a1,…,1aK,…,1aNの各々に対し、ビットの反転可否を判定する際に用いられる閾値を生成する。ビット演算回路1a1,…,1aK,…,1aNの各々に当該閾値を示す信号を出力する。後述するように、閾値生成部3は、閾値の生成に、温度を示すパラメータ(温度パラメータ)Tと乱数とを用いる。閾値生成部3は、当該乱数を発生させる乱数発生器を有する。閾値生成部3は、ビット演算回路1a1,…,1aK,…,1aNの各々に対して個別に乱数発生器を有し、個別に閾値の生成と供給とを行うことが好ましい。ただし、閾値生成部3は、所定数のビット演算回路で乱数発生器を共用してもよい。
乱数生成部4は、乱数ビットを生成し、選択回路部2に出力する。乱数生成部4により生成された乱数ビットは、選択回路部2による反転ビットの選択に用いられる。
設定変更部5は、ビット演算回路1a1,…,1aK,…,1aNのうち、計算対象のイジングモデルの状態を表すビット列(スピンビット列)の第1のビット数(スピンビット数)の変更を行う。また、設定変更部5は、第1のビット数のビット演算回路の各々に対する、重み係数の第2のビット数の変更を行う。
ここで、第1のビット数(スピンビット数)は、問題(組合せ最適化問題)の規模に相当する。第2のビット数(重み係数のビット数)は、問題の精度に相当する。最適化問題演算装置101は、第1および第2のビット数について、設定変更部5への設定を制御することにより、組合せ最適化問題の規模や要求精度に応じて決定したパーティションモードおよび実行モードによる演算を実現する。
つぎに、ビット演算回路の回路構成を説明する。ビット演算回路1a1(index=0)を主に説明するが、他のビット演算回路も同様の回路構成で実現される(例えば、X番目(Xは1以上N以下の整数)のビット演算回路に対して、index=X-1とすればよい)。
ビット演算回路1a1は、記憶部11、精度切替回路12、反転判定部13、ビット保持部14、エネルギー変化計算部15および状態遷移判定部16を有する。
記憶部11は、例えば、レジスタやSRAM(Static Random Access Memory)などである。記憶部11は、自ビット(ここでは、index=0のビット)と他ビットとの間の重み係数を記憶する。ここで、スピンビット数(第1のビット数)Kに対して、重み係数の総数はK2である。記憶部11には、index=0のビットに対して、K個の重み係数W00,W01,…,W0,K-1が記憶される。ここで、重み係数は第2のビット数Lで表される。したがって、記憶部11では重み係数を格納するために、K×Lビットが所要される。なお、記憶部11は、ビット演算回路1a1の外部であって、演算ユニット102の内部に設けられてもよい(他のビット演算回路の記憶部も同様)。
精度切替回路12は、スピンビット列のいずれかのビットが反転されると反転されたビットに対する重み係数を自身の(ビット演算回路1a1の)記憶部11から読み出し、読み出した重み係数をエネルギー変化計算部15に出力する。すなわち、精度切替回路12は、選択回路部2から反転ビットの識別情報を受け付け、記憶部11から反転ビットと自ビットとの組に対応する重み係数を読み出して、エネルギー変化計算部15に出力する。
このとき、精度切替回路12は、設定変更部5により設定された第2のビット数で表される重み係数の読み出しを行う。精度切替回路12は、設定変更部5による第2のビット数の設定に応じて、記憶部11から読み出す係数の第2のビット数を変更する。
例えば、精度切替回路12は、記憶部11から所定ビット数のビット列を読み出すセレクタを有する。セレクタが読み出す所定ビット数が、第2のビット数よりも大きい場合、精度切替回路12は、当該セレクタにより反転ビットに対応する重み係数を含む単位ビット列を読み出し、読み出した単位ビット列から第2のビット数で表される重み係数を抽出する。あるいは、精度切替回路12は、セレクタが読み出す所定ビット数が、第2のビット数よりも小さい場合、当該セレクタにより読み出された複数のビット列を結合することで、第2のビット数で表される重み係数を記憶部11から抽出してもよい。
反転判定部13は、選択回路部2により出力されたindex=jとflgjとを示す信号を受け付け、当該信号に基づいて反転ビットとして自ビットが選択されたか否かを判定する。反転ビットとして自ビットが選択された場合(すなわち、index=jが自ビットを示し、flgjが反転可を示す場合)、反転判定部13は、ビット保持部14に記憶されたビットを反転させる。すなわち、ビット保持部14に保持されたビットが0の場合、当該ビットを1に変更する。また、ビット保持部14に保持されたビットが1の場合、当該ビットを0に変更する。
ビット保持部14は、1ビットを保持するレジスタである。ビット保持部14は、保持するビットをエネルギー変化計算部15および選択回路部2に出力する。
エネルギー変化計算部15は、記憶部11から読み出した重み係数を用いたイジングモデルのエネルギー変化値ΔE0を計算し、状態遷移判定部16に出力する。具体的には、エネルギー変化計算部15は、反転ビットの値(今回の反転前の値)を選択回路部2から受け付け、反転ビットが、1から0、または、0から1のどちらに反転するかに応じて、上記式(4)により、Δh0を計算する。そして、エネルギー変化計算部15は、前回のh0にΔh0を加算することで、h0を更新する。エネルギー変化計算部15は、h0を保持するレジスタを有し、当該レジスタにより更新後のh0を保持する。
さらに、エネルギー変化計算部15は、ビット保持部14より現在の自ビットを受け付け、自ビットが0であれば0から1へ、自ビットが1であれば1から0へ、反転する場合のイジングモデルのエネルギー変化値ΔE0を、上記式(2)により計算する。エネルギー変化計算部15は、計算したエネルギー変化値ΔE0を、状態遷移判定部16に出力する。
状態遷移判定部16は、エネルギー変化計算部15によるエネルギー変化の計算に応じて、自ビットの反転可否を示す信号flg0を選択回路部2に出力する。具体的には、状態遷移判定部16は、エネルギー変化計算部15により計算されたエネルギー変化値ΔE0を受け付け、閾値生成部3により生成された閾値との比較に応じて、自ビットの反転可否を判定する比較器である。ここで、状態遷移判定部16による判定について説明する。
シミュレーテッド・アニーリングでは、あるエネルギー変化ΔEを引き起こす状態遷移の許容確率p(ΔE,T)を下記式(5)のように決めれば、時刻(反復回数)無限大の極限で状態が最適解(基底状態)に到達することが知られている。
上記式(5)において、Tは、前述の温度パラメータTである。ここで、関数fとして、下記式(6)(メトロポリス法)、または、下記式(7)(ギブス法)が用いられる。
温度パラメータTは、例えば、下記式(8)で表される。すなわち、温度パラメータTは、反復回数tに対して対数的に減少する関数で与えられる。例えば、定数cは問題に応じて決定される。
ここで、T0は、初期温度値であり問題に応じて十分に大きくとることが望ましい。
上記式(5)で表される許容確率p(ΔE,T)を用いた場合、ある温度における状態遷移の十分な反復後に定常状態に達したとすると、当該状態はボルツマン分布に従って生成される。すなわち、各状態の占有確率は熱力学における熱平衡状態に対するボルツマン分布に従う。よって、ある温度でボルツマン分布に従った状態を生成し、その後、当該温度よりも低い温度でボルツマン分布に従った状態を生成し、というように徐々に温度を下げていくことで、各温度におけるボルツマン分布に従った状態を追えることになる。そして、温度0としたときに、温度0でのボルツマン分布により最低エネルギーの状態(基底状態)が高確率で実現される。この様子が材料を焼き鈍したときの状態変化とよく似ているため、この方法はシミュレーテッド・アニーリングと呼ばれる。このとき、エネルギーが上がる状態遷移が確率的に起こることは、物理学における熱励起に相当する。
例えば、許容確率p(ΔE,T)でエネルギー変化ΔEを引き起こす状態遷移を許容することを示すフラグ(flg=1)を出力する回路は、f(-ΔE/T)と、区間[0,1)の値をとる一様乱数uとの比較に応じた値を出力する比較器により実現できる。
ただし、次のような変形を行っても同じ機能を実現可能である。2つの数に同じ単調増加関数を作用させても大小関係は変化しない。したがって、比較器の2つの入力に同じ単調増加関数を作用させても比較器の出力は変わらない。例えば、f(-ΔE/T)に作用させる単調増加関数としてf(-ΔE/T)の逆関数f-1(-ΔE/T)、一様乱数uに作用させる単調増加関数としてf-1(-ΔE/T)の-ΔE/Tをuとしたf-1(u)を用いることができる。その場合、上記の比較器と同様の機能を有する回路は、-ΔE/Tがf-1(u)より大きいとき1を出力する回路でよい。さらに、温度パラメータTが正であることから、状態遷移判定部16は、-ΔEがT・f-1(u)より大きいとき(あるいは、ΔEが-(T・f-1(u))より小さいとき)、flg0=1を出力する回路でよい。
閾値生成部3は、一様乱数uを生成し、上記のf-1(u)の値に変換する変換テーブルを用いて、f-1(u)の値を出力する。メトロポリス法が適用される場合、f-1(u)は、下記式(9)で与えられる。また、ギブス法が適用される場合、f-1(u)は、下記式(10)で与えられる。
変換テーブルは、例えば、閾値生成部3に接続されたRAM(Random Access Memory)、フラッシュメモリなどのメモリ(図示を省略している)に記憶される。閾値生成部3は、温度パラメータTと、f-1(u)との積(T・f-1(u))を閾値として出力する。ここで、T・f-1(u)は、熱励起エネルギーに相当する。
なお、選択回路部2から状態遷移判定部16に対してflgjを入力し、当該flgjが状態遷移を許容しないことを示すとき(つまり状態遷移が生じないとき)、状態遷移判定部16により-ΔE0にオフセット値を加算してから、閾値との比較を行ってもよい。また、状態遷移判定部16は、状態遷移が生じないことが継続する場合に、加算するオフセット値を増加させてもよい。一方、状態遷移判定部16は、flgjが、状態遷移を許容することを示すとき(つまり状態遷移が生じるとき)には、オフセット値を0にする。-ΔE0へのオフセット値の加算やオフセット値の増加により、状態遷移が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
こうして、温度パラメータTが徐々に小さく設定され、例えば、温度パラメータTの値を所定回数、小さくした場合、(または、温度パラメータTが最小値に達した場合)のスピンビット列が、ビット演算回路1a1,…,1aKに保持される。演算ユニット102は、温度パラメータTの値を所定回数、小さくした場合、(または、温度パラメータTが最小値に達した場合)のスピンビット列を解として出力する。演算ユニット102は、温度パラメータTやビット演算回路1a1,…,1aKの各々の記憶部に対する重み係数の設定およびビット演算回路1a1,…,1aKに保持されるスピンビット列を読み出して出力する制御部(図示を省略している)を有してもよい。
演算ユニット102では、設定変更部5により、イジングモデルのスピンビット数(第1のビット数)と、ビット間の重み係数のビット数(第2のビット数)とを変更可能である。ここで、スピンビット数は、イジングモデルを実現する回路の規模(問題の規模)に相当する。規模が大きいほど、多数の組合せ候補をもつ組合せ最適化問題に演算ユニット102を適用できる。また、重み係数のビット数は、ビット間の相互関係の表現の精度(問題における条件表現の精度)に相当する。精度が高いほど、スピン反転時のエネルギー変化ΔEに対する条件を詳細に設定できる。ある問題では、スピンビット数が大きく、重み係数を表すビット数が小さいことがある。あるいは、別の問題では、スピンビット数が小さく、重み係数を表すビット数が大きいこともある。問題に応じて、各問題に適合した最適化装置を個別に製造することは非効率である。
そこで、演算ユニット102では、設定変更部5によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とすることで、規模と精度とを可変にできる。すなわち、パーティションモードを変更することができる。その結果、1つの演算ユニット102において、問題に合った規模および精度を実現できる。
より具体的には、ビット演算回路1a1,…,1aK,…,1aNの各々は、精度切替回路を有し、当該精度切替回路によって、設定変更部5の設定に応じて、自身の記憶部から読み出す重み係数のビット長を切り替える。また、選択回路部2は、設定変更部5により設定されたスピンビット数に相当する数(例えば、K個)のビット演算回路に対して、反転ビットを示す信号を入力し、当該数(K個)のビット演算回路に対応するビットの中から反転ビットを選択する。これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、1つの演算ユニット102によって、問題に応じた規模および精度でイジングモデルを実現できる。
ここで、前述のように、ビット演算回路1a1,…,1aNの各々が備える記憶部は、SRAMなどの比較的小容量の記憶デバイスにより実現される。このため、スピンビット数が増えると、重み係数のビット数によっては、記憶部の容量が不足することも考えられる。一方、演算ユニット102によれば、設定変更部5により、記憶部の容量の制限を満たすように、規模および精度を設定することも可能になる。具体的には、設定変更部5は、スピンビット数が増えるほど、重み係数のビット数を減らすように設定することが考えられる。また、設定変更部5は、重み係数のビット数が増えるほど、スピンビット数を減らすように設定することも考えられる。
また、上記の例では、N個のビット演算回路のうちのK個を、イジングモデルに使用するものとした。演算ユニット102は、N-K≧Kの場合、残りのN-K個のビット演算回路のうちのK個のビット演算回路により、前述のイジングモデルと同じイジングモデルを実現し、両イジングモデルにより同一問題処理の並列度を高めて計算を高速化してもよい。
さらに、演算ユニット102は、残りのN-K個のビット演算回路のうちの一部を用いて、他の問題に対応する他のイジングモデルを実現し、前述のイジングモデルで表される問題と並列に、当該他の問題の演算を行ってもよい。
あるいは、演算ユニット102は、残りのN-K個のビット演算回路を不使用としてもよい。その場合、選択回路部2は、残りのN-K個のビット演算回路により出力されるフラグflgを全て、強制的に0に設定し、残りのN-K個のビット演算回路に対応するビットが反転候補として選択されないようにしてもよい。
(情報処理システム300のシステム構成例)
つぎに、図1に示した最適化問題演算装置101を含む情報処理システム300のシステム構成例について説明する。
図3は、情報処理システム300のシステム構成例を示す説明図である。図3において、情報処理システム300は、最適化問題演算装置101と、クライアント装置301と、を含む。情報処理システム300において、最適化問題演算装置101およびクライアント装置301は、有線または無線のネットワーク310を介して接続される。ネットワーク310は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
最適化問題演算装置101は、組合せ最適化問題をイジングモデルに置き換え、イジングモデルの基底状態の探索により、組合せ最適化問題を解く機能を提供する。最適化問題演算装置101は、例えば、オンプレミスのサーバや、クラウドコンピューティングのサーバである。
クライアント装置301は、ユーザにより使用されるコンピュータである。クライアント装置301は、例えば、ユーザが解くべき問題の最適化問題演算装置101への入力に用いられる。クライアント装置301は、例えば、PC(Personal Computer)、タブレット型PCなどである。
(最適化問題演算装置101のハードウェア構成例)
図4は、最適化問題演算装置101のハードウェア構成例を示すブロック図である。図4において、最適化問題演算装置101は、CPU(Central Processing Unit)401と、メモリ402と、ディスクドライブ403と、ディスク404と、通信I/F(Interface)405と、可搬型記録媒体I/F406と、可搬型記録媒体407と、最適化装置408と、を有する。また、各構成部は、バス400によってそれぞれ接続される。バス400は、例えば、PCIe(Peripheral Component Interconnect Express)バスである。
ここで、CPU401は、最適化問題演算装置101の全体の制御を司る。CPU401は、複数のコアを有していてもよい。メモリ402は、例えば、ROM(Read Only Memory)、RAMおよびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOS(Operating System)のプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU401のワークエリアとして使用される。メモリ402に記憶されるプログラムは、CPU401にロードされることで、コーディングされている処理をCPU401に実行させる。
ディスクドライブ403は、CPU401の制御に従ってディスク404に対するデータのリード/ライトを制御する。ディスク404は、ディスクドライブ403の制御で書き込まれたデータを記憶する。ディスク404としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
通信I/F405は、通信回線を通じてネットワーク310に接続され、ネットワーク310を介して外部のコンピュータ(例えば、図3に示したクライアント装置301)に接続される。そして、通信I/F405は、ネットワーク310と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信I/F405には、例えば、モデムやLANアダプタなどを採用することができる。
可搬型記録媒体I/F406は、CPU401の制御に従って可搬型記録媒体407に対するデータのリード/ライトを制御する。可搬型記録媒体407は、可搬型記録媒体I/F406の制御で書き込まれたデータを記憶する。可搬型記録媒体407としては、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
最適化装置408は、CPU401の制御に従って、イジングモデルの基底状態を探索する。最適化装置408は、図1に示した演算ユニット102の一例である。
なお、最適化問題演算装置101は、上述した構成部のほかに、例えば、SSD(Solid State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、最適化問題演算装置101は、上述した構成部のうち、例えば、ディスクドライブ403、ディスク404、可搬型記録媒体I/F406、可搬型記録媒体407を有していなくてもよい。また、図3に示したクライアント装置301については、例えば、CPU、メモリ、通信I/F、入力装置、ディスプレイなどを有する。
(情報処理システム300におけるハードウェアの関係)
図5は、情報処理システム300におけるハードウェアの関係の一例を示す説明図である。図5において、クライアント装置301は、ユーザプログラム501を実行する。ユーザプログラム501は、最適化問題演算装置101への各種データ(例えば、解くべき問題の内容や最適化装置408の利用スケジュールなどの動作条件)の入力、および、最適化装置408による演算結果の表示などを行う。
CPU401は、ライブラリ502およびドライバ503を実行するプロセッサ(演算部)である。ライブラリ502のプログラム、および、ドライバ503のプログラムは、例えば、メモリ402(図4参照)に格納されている。
ライブラリ502は、ユーザプログラム501により入力される各種データを受け付け、ユーザが解くべき問題を、イジングモデルの最低エネルギー状態を探索する問題に変換する。ライブラリ502は、変換後の問題に関する情報(例えば、スピンビット数、重み係数を表すビット数、重み係数の値、温度パラメータの初期値など)を、ドライバ503に提供する。また、ライブラリ502は、最適化装置408による解の探索結果をドライバ503から取得し、当該探索結果をユーザに分かり易い結果情報(例えば、結果表示画面の情報)に変換して、ユーザプログラム501に提供する。
ドライバ503は、ライブラリ502から提供された情報を最適化装置408に供給する。また、ドライバ503は、イジングモデルによる解の探索結果を最適化装置408から取得し、ライブラリ502に提供する。
最適化装置408は、ハードウェアとして、制御部504およびLFB(Local Field Block)505を有する。
制御部504は、ドライバ503から受け付けたLFB505の動作条件を記憶するRAMを有し、当該動作条件に基づいてLFB505による演算を制御する。また、制御部504は、LFB505が備える各種のレジスタへの初期値の設定、SRAMへの重み係数の格納、および、演算終了後のスピンビット列(探索結果)の読み出しなどを行う。制御部504は、例えば、FPGAなどによって実現される。
LFB505は、複数のLFE(Local Field Element)を有する。LFEは、スピンビットに対応する単位素子である。1つのLFEは、1つのスピンビットに対応する。後述するように、最適化装置408は、例えば、複数のLFBを有する。
(組合せ最適化問題の一例)
つぎに、組合せ最適化問題の一例について説明する。
図6は、組合せ最適化問題の一例を示す説明図である。組合せ最適化問題の一例として、巡回セールスマン問題を考える。ここでは、A都市、B都市、C都市、D都市、E都市の5つの都市を、最少コスト(距離や料金など)で回る経路を求めるとする。グラフ601は、都市をノード、都市間の移動をエッジとした1つの経路を示す。この経路は、例えば、行を回る順番、列を都市に対応付けた行列602で表される。行列602は、行の小さい順に、ビット「1」が設定された都市を回ることを示す。
さらに、行列602は、スピンビット列に相当するバイナリ値603に変換できる。行列602の例では、バイナリ値603は、5×5=25ビットとなる。バイナリ値603(スピンビット列)のビット数は、巡回対象の都市が増すほど増加する。すなわち、組合せ最適化問題の規模が大きくなれば、より多くのスピンビットが所要され、スピンビット列のビット数(規模)が大きくなる。
つぎに、最少エネルギーとなるバイナリ値の探索例を説明する。
図7は、最少エネルギーとなるバイナリ値の探索例を示す説明図である。図7において、まず、バイナリ値702のうちの1ビットを反転させる前(スピン反転前)のエネルギーをEinitとする。
最適化装置408は、バイナリ値702の任意の1ビットを反転させたときのエネルギー変化量ΔEを計算する。グラフ701は、横軸をバイナリ値、縦軸をエネルギーとして、エネルギー関数に応じた1ビット反転に対するエネルギー変化を例示している。最適化装置408は、例えば、上記式(2)によりΔEを求める。
最適化装置408は、上記の計算を、バイナリ値702の全ビットに適用し、各々のビットの反転に対して、エネルギー変化量ΔEを計算する。例えば、バイナリ値702のビット数がNのとき、反転パターン704はN個になる。グラフ701は、反転パターンごとのエネルギー変化の様子を例示する。
最適化装置408は、反転パターンごとのΔEに基づいて、反転条件(閾値とΔEとの所定の判定条件)を満たした反転パターン704のうちからランダムで1つを選択する。最適化装置408は、選択された反転パターンに対応するΔEを、スピン反転前のEinitに加減算し、スピン反転後のエネルギー値Eを計算する。最適化装置408は、求めたエネルギー値EをEinitとし、スピン反転後のバイナリ値705を用いて、上記の手順を繰り返し行う。
ここで、前述のように、上記式(2),(3)で用いられるWの1要素は、ビット間の相互作用の大きさを示すスピン反転の重み係数である。重み係数を表すビット数を精度と呼ぶ。精度が高いほど、スピン反転時のエネルギー変化量ΔEに対する条件を詳細に設定できる。例えば、Wの総サイズは、スピンビット列に含まれる2つのビットの全結合に対して「精度×スピンビット数×スピンビット数」である。一例として、スピンビット数が8k(=8192)の場合、Wの総サイズは、「精度×8k×8k」ビットとなる。
(LFB505の回路構成例)
つぎに、図5で例示した探索を行うLFB505の回路構成例を説明する。最適化装置408は、例えば、8個のLFB505を有する。
図8は、LFBの回路構成例を示す説明図である。図8において、LFB505は、LFE51a1,51a2,…,51an、ランダムセレクタ部52、閾値生成部53、乱数生成部54、モード設定レジスタ55、加算器56、および、E格納レジスタ57を有する。
LFE51a1,51a2,…,51anの各々は、スピンビットの1ビットとして用いられる。nは、2以上の整数であり、LFB505が備えるLFEの数を示す。LFE51a1,51a2,…,51anの各々には、LFEの識別情報(index)が対応付けられている。LFE51a1,51a2,…,51anの各々に対して、index=0,1,…,n-1である。LFE51a1,51a2,…,51anは、図2に示したビット演算回路1a1,…,1aNの一例である。
以下では、LFE51a1の回路構成を説明する。LFE51a2,…,51anも、LFE51a1と同様の回路構成により実現される。LFE51a2,…,51anの回路構成の説明については、以下の説明における各要素の符号の末尾の「a1」の部分を、「a2」,…,「an」の各々に置換して(例えば、「60a1」の符号を「60an」のように置換して)読み替えればよい。また、h,q,ΔE,Wなどの各値の添え字についても、「a2」,…,「an」の各々に対応する添え字に置換して読み替えればよい。
LFE51a1は、SRAM60a1、精度切替回路61a1、Δh生成部62a1、加算器63a1、h格納レジスタ64a1、反転判定部65a1,ビット格納レジスタ66a1、ΔE生成部67a1、判定部68a1を有する。
SRAM60a1は、重み係数Wを格納する。SRAM60a1は、図2に示した記憶部11に対応する。SRAM60a1には、全スピンビットの重み係数Wのうち、LFE51a1で使用される分だけ格納される。このため、スピンビット数をK(Kは2以上n以下の整数)とすると、SRAM60a1に格納される全重み係数のサイズは、「精度×K」ビットとなる。図8では、一例として、スピンビット数K=nの場合を例示している。この場合、SRAM60a1には、重み係数W00,W01,…,W0,n-1が格納される。
精度切替回路61a1は、反転ビットの識別情報であるindexと反転可を示すフラグFとをランダムセレクタ部52から取得し、反転ビットに対応する重み係数をSRAM60a1から抽出する。精度切替回路61a1は、抽出した重み係数を、Δh生成部62a1に出力する。例えば、精度切替回路61a1は、ランダムセレクタ部52によりSRAM60a1に格納されたindexとフラグFとを、SRAM60a1から取得してもよい。あるいは、精度切替回路61a1は、ランダムセレクタ部52からindexとフラグFとの供給を受ける信号線を有してもよい(図示を省略している)。
ここで、精度切替回路61a1は、モード設定レジスタ55に設定された重み係数のビット数(精度)の設定を受け付け、当該設定に応じて、SRAM60a1から読み出す重み係数のビット数を切り替える。
具体的には、精度切替回路61a1は、SRAM60a1から所定の単位ビット数のビット列(単位ビット列)を読み出すセレクタを有する。精度切替回路61a1は、当該セレクタにより反転ビットに対応する重み係数を含むビット数rの単位ビット列を読み出す。例えば、当該セレクタが読み出す単位ビット数rが、重み係数のビット数zよりも大きい場合、精度切替回路61a1は、読み出したビット列に対して、反転ビットに対応する重み係数を示すビット部分をLSB(Least Significant Bit)側にシフトさせ、それ以外のビット部分に0を代入することで、重み係数の読み出しを行う。あるいは、単位ビット数rが、モード設定レジスタ55により設定されたビット数zより小さい場合も考えられる。この場合、精度切替回路61a1は、当該セレクタにより読み出された複数の単位ビット列を結合することで、設定されたビット数zでの重み係数を抽出してもよい。
なお、精度切替回路61a1は、LFE51a2が備えるSRAM60a2にも接続される。後述するように、精度切替回路61a1は、SRAM60a2から重み係数を読み出すことも可能である。
Δh生成部62a1は、ランダムセレクタ部52から反転ビットの現在のビット値(今回の反転前のビット値)を受け付け、精度切替回路61a1から取得した重み係数を用いて、上記式(4)により、ローカルフィールドh0の変化量Δh0を計算する。Δh生成部62a1は、Δh0を加算器63a1に出力する。
加算器63a1は、h格納レジスタ64a1に格納されたローカルフィールドh0にΔh0を加算し、h格納レジスタ64a1に出力する。
h格納レジスタ64a1は、図示しないクロック信号に同期して、加算器63a1が出力する値(ローカルフィールドh0)を取り込む。h格納レジスタ64a1は、例えば、フリップフロップである。なお、h格納レジスタ64a1に格納されるローカルフィールドh0の初期値は、バイアス係数b0である。当該初期値は、制御部504により設定される。
反転判定部65a1は、反転ビットのindex=jと、反転可否を示すフラグFjとをランダムセレクタ部52から受け付け、自ビットが反転ビットとして選択されたか否かを判定する。自ビットが反転ビットとして選択された場合、反転判定部65a1は、ビット格納レジスタ66a1に格納されたスピンビットを反転させる。
ビット格納レジスタ66a1は、LFE51a1に対応するスピンビットを保持する。ビット格納レジスタ66a1は、例えば、フリップフロップである。ビット格納レジスタ66a1に格納されたスピンビットは、反転判定部65a1により反転される。ビット格納レジスタ66a1は、ΔE生成部67a1およびランダムセレクタ部52にスピンビットを出力する。
ΔE生成部67a1は、h格納レジスタ64a1のローカルフィールドh0およびビット格納レジスタ66a1のスピンビットに基づいて、自ビットの反転に応じたイジングモデルのエネルギー変化量ΔE0を、上記式(2)により計算する。ΔE生成部67a1は、エネルギー変化量ΔE0を、判定部68a1およびランダムセレクタ部52に出力する。
判定部68a1は、ΔE生成部67a1により出力されたエネルギー変化量ΔE0と、閾値生成部53により生成された閾値との比較により、自ビットの反転を許容するか否かを示す(自ビットの反転可否を示す)フラグF0を、ランダムセレクタ部52に出力する。具体的には、判定部68a1は、ΔE0が閾値-(T・f-1(u))より小さいときF0=1(反転可)を出力し、ΔE0が閾値-(T・f-1(u))以上のときF0=0(反転不可)を出力する。ここで、f-1(u)は、適用法則に応じて、上記式(9),(10)のいずれかで与えられる関数である。また、uは、区間[0,1]の一様乱数である。
ランダムセレクタ部52は、LFE51a1,51a2,…,51anの各々から、エネルギー変化量、スピンビットの反転可否を示すフラグおよびスピンビットを受け付け、反転可であるスピンビットのうち反転させるビット(反転ビット)を選択する。
ランダムセレクタ部52は、選択した反転ビットの現在のビット値(ビットqj)を、LFE51a1,51a2,…,51anが備えるΔh生成部62a1,62a2,…,62anに供給する。ランダムセレクタ部52は、図2に示した選択回路部2の一例である。
ランダムセレクタ部52は、反転ビットのindex=jと、反転可否を示すフラグFjとを、LFE51a1,51a2,…,51anが備えるSRAM60a1,60a2,…,60anに出力する。なお、ランダムセレクタ部52は、前述のように、反転ビットのindex=jと、反転可否を示すフラグFjとを、LFE51a1,51a2,…,51anが備える精度切替回路61a1,61a2,…,61anに出力してもよい。
また、ランダムセレクタ部52は、反転ビットのindex=jと、反転可否を示すフラグFjとを、LFE51a1,51a2,…,51anが備える反転判定部65a1,65a2,…,65anに供給する。さらに、ランダムセレクタ部52は、選択した反転ビットに対応するΔEjを、加算器56に供給する。
ここで、ランダムセレクタ部52は、あるイジングモデルにおけるスピンビット数(すなわち、使用するLFEの数)の設定を、モード設定レジスタ55から受け付ける。例えば、ランダムセレクタ部52は、indexの小さい方から順に、設定されたスピンビット数に相当する数のLFEを使用して、解の探索が行われるようにする。例えば、ランダムセレクタ部52は、n個のLFEのうち、K個のLFEを用いる場合、LFE51a1,…,LFE51aKのLFEに対応するスピンビット列から反転ビットを選択する。このとき、ランダムセレクタ部52は、例えば、使用しないn-K個のLFE51a(K-1),…,51anの各々から出力されるフラグFを、強制的に0に設定することが考えられる。
閾値生成部53は、LFE51a1,51a2,…,51anが備える判定部68a1,68a2,…,68anに対して、エネルギー変化量ΔEとの比較に用いられる閾値を生成し、供給する。前述のように、閾値生成部53は、温度パラメータTと、区間[0,1]の一様乱数uと、上記式(9)または上記式(10)で示されるf-1(u)とを用いて、閾値を生成する。閾値生成部53は、例えば、LFEごとに個別に、乱数発生器を有し、LFEごとの乱数uを用いて閾値を生成する。ただし、いくつかのLFEで乱数発生器が共有されてもよい。温度パラメータTの初期値やシミュレーテッド・アニーリングにおける温度パラメータTの減少サイクルや減少量などは、制御部504によって制御される。
乱数生成部54は、ランダムセレクタ部52における反転ビットの選択に用いられる乱数ビットを生成し、ランダムセレクタ部52に供給する。
モード設定レジスタ55は、LFE51a1,51a2,…,51anが備える精度切替回路61a1,61a2,…,61anに対して、重み係数のビット数(すなわち、問題の精度)を示す信号を供給する。また、モード設定レジスタ55は、ランダムセレクタ部52に対して、スピンビット数(すなわち、問題の規模)を示す信号を供給する。モード設定レジスタ55に対するスピンビット数や重み係数のビット数の設定は、制御部504により行われる。モード設定レジスタ55は、図2に示した設定変更部5の一例である。
加算器56は、ランダムセレクタ部52により出力されたエネルギー変化量ΔEjを、E格納レジスタ57に格納されたエネルギー値Eに加算し、E格納レジスタ57に出力する。
E格納レジスタ57は、図示しないクロック信号に同期して、加算器56が出力するエネルギー値Eを取り込む。E格納レジスタ57は、例えば、フリップフロップである。なお、エネルギー値Eの初期値は、制御部504によって上記式(1)を用いて計算され、E格納レジスタ57に設定される。
例えば、解の探索にK個のLFEが用いられる場合、制御部504はビット格納レジスタ66a1,…,66aKの各スピンビットを読み出すことで、スピンビット列を得る。
図9は、ランダムセレクタ部の回路構成例を示す説明図である。図9において、ランダムセレクタ部52は、フラグ制御部52aと複数段にわたってツリー状に接続された複数の選択回路とを有する。
フラグ制御部52aは、モード設定レジスタ55のスピンビット数の設定に応じて、初段の選択回路52a1,52a2,52a3,52a4,…,52aqの各々に入力されるフラグの値を制御する。図9では、選択回路52aqの1つの入力(LFE51anの出力に相当)に対するフラグの値を制御する部分回路52xnが例示されている。部分回路52xnのフラグ設定部52ynは、使用しないLFE51anから出力されるフラグFnを強制的に0に設定するスイッチである。
初段の選択回路52a1,52a2,52a3,52a4,…,52aqの各々には、LFE51a1,51a2,…,51anのそれぞれが出力する変数qiとFiとΔEiの組が2組ずつ入力される。例えば、選択回路52a1には、LFE51a1が出力する変数q0とF0とΔE0による組と、LFE51a2が出力する変数q1とF1とΔE1による組とが入力される。また、選択回路52a2には、変数q2とF2とΔE2による組と変数q3とF3とΔE3による組が入力され、選択回路52a3には、変数q4とF4とΔE4による組と変数q5とF5とΔE5による組が入力される。さらに、選択回路52a4には、変数q6とF6とΔE6による組と変数q7とF7とΔE7による組が入力され、選択回路52aqには、変数qn-2とFn-2とΔEn-2による組と変数qn-1とFn-1とΔEn-1による組が入力される。
そして、選択回路52a1,…,52aqの各々は、入力された2組の変数qiとFiとΔEiと、乱数生成部54が出力する1ビット乱数に基づいて、一方の組の変数qiとFiとΔEiを選択する。このとき、選択回路52a1,…,52aqの各々は、Fiが1である組を優先的に選択し、両方の組が1の場合には1ビット乱数に基づいていずれか一方の組を選択する(他の選択回路も同様)。ここで、乱数生成部54は、1ビット乱数を選択回路ごとに個別に生成し、各選択回路に供給する。また、選択回路52a1,…,52aqの各々は、どちらの組の変数qiとFiとΔEiを選択したかを示す1ビットの識別値を生成し、選択した変数qiとFiとΔEiと識別値とを含む信号(状態信号と言う)を出力する。なお、初段の選択回路52a1~52aqの数は、LFE51a1,…,51anの数の1/2、つまり、n/2である。
2段目の選択回路52b1,52b2,…,52brの各々には、選択回路52a1,…,52aqが出力する状態信号が2つずつ入力される。例えば、選択回路52b1には、選択回路52a1,52a2が出力する状態信号が入力され、選択回路52b2には、選択回路52a3,52a4が出力する状態信号が入力される。
そして、選択回路52b1,…,52brの各々は、2つの状態信号と、乱数生成部54が出力する1ビット乱数に基づいて、2つの状態信号のいずれか一方を選択する。また、選択回路52b1,…,52brのそれぞれは、選択した状態信号に含まれる識別値についていずれの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
3段目以降の選択回路においても同様の処理が行われ、各段の選択回路で1ビットずつ識別値のビット幅が増えていき、最後段の選択回路31pから、ランダムセレクタ部52の出力である状態信号が出力される。ランダムセレクタ部52が出力する状態信号に含まれる識別値が、2進数で表された、反転ビットを示すindexである。
ただし、ランダムセレクタ部52は、各LFEからフラグFとともに当該LFEに対応するindexを受け付け、変数qiとFiとΔEiと同様に、各選択回路によりindexの選択を行うことで、反転ビットに対応するindexを出力してもよい。この場合、各LFEは、index格納用のレジスタを有し、当該レジスタからランダムセレクタ部52へindexを出力する。
このように、ランダムセレクタ部52は、LFE51a1,…,51anのうち、設定されたスピンビット数KのLFE51a1,…,51aK以外の他のLFE51a(K+1),…,51anにより出力された反転可否を示す信号を強制的に反転不可に設定する。ランダムセレクタ部52は、LFE51a1,…,51aKにより出力された反転可否を示す信号およびLFE51a(K+1),…,51anに対して設定した反転不可を示す信号に基づいて、反転ビットを選択する。ランダムセレクタ部52は、反転ビットを示す信号を、ビット演算回路51a1,…,51aKに加えてLFE51a(K+1),…,51anにも出力する。
こうして、フラグ制御部52aの制御により、使用されないLFEのフラグFが強制的に0に設定されるので、スピンビット列に使用されないLFEに対応するビットを反転候補から除外できる。
つぎに、LFE51a1,LFE51a2,…,51anの各々のSRAM60a1,60a2,…,60anに対する重み係数の格納例を説明する。まず、SRAM容量に対する規模と精度とのトレードオフ関係について説明する。
図10は、規模と精度とのトレードオフ関係の例を示す説明図である。図10において、グラフ1000は、LFEごとのSRAMにおいて重み係数の格納のための容量の上限が128K(キロ)ビットである場合の規模と精度とのトレードオフ関係を示している。ここで、1K=1024とする。グラフ1000の横軸は規模(Kビット)であり、縦軸は精度(ビット)である。なお、一例として、n=8192であるとする。
この場合、規模1Kビットに対して、精度は最大128ビットである。また、規模2Kビットに対して、精度は最大64ビットである。規模4Kビットに対して、精度は最大32ビットである。規模8Kビットに対して、精度は最大16ビットである。
そこで、最適化装置408では、例えば、次の4つのモードを利用可能にするとする。各モードは、パーティションモードに対応する。第1のモードは、規模1Kビット/精度128ビットのモードである。第2のモードは、規模2Kビット/精度64ビットのモードである。第3のモードは、規模4Kビット/精度32ビットのモードである。第4のモードは、規模8Kビット/精度16ビットのモードである。
つぎに、これら4種のモードの各々に応じた重み係数の格納例を説明する。重み係数は、制御部504により、SRAM60a1,60a2,…,60anの各々に格納される。なお、精度切替回路61a1,61a2,…,61anの各々のセレクタによりSRAM60a1,60a2,…,60anから読み出される単位ビット数は、一例として、128ビットであるとする。
図11は、重み係数の格納例を示す説明図(その1)である。第1のモード(規模1Kビット/精度128ビット)を用いる場合、重み係数Wは、下記式(11)で表される。
データ1d1,1d2,…,1dsは、第1のモード(規模1Kビット/精度128ビット)を用いる場合のSRAM60a1,60a2,…,60asに対する重み係数の格納例を示す。ここで、s=1024である。データ1d1,1d2,…,1dsは、各々、SRAM60a1,60a2,…,60asに格納される。このモードでは、LFEは1k個(=1024個)使用される。なお、図中、LFE51a1,…,51asを、各々の識別番号を用いて、LFE0,…,LFE1023のように表記することがある(以降の図も同様)。
データ1d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,1023を示す。データ1d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,1023を示す。データ1dsは、LFE51as(LFE1023)のSRAM60asに格納されるW1023,0~W1023,1023を示す。1つの重み係数Wijのビット数は128ビットである。
図12は、重み係数の格納例を示す説明図(その2)である。第2のモード(規模2Kビット/精度64ビット)を用いる場合、重み係数Wは、下記式(12)で表される。
データ2d1,2d2,…,2dtは、第2のモード(規模2Kビット/精度64ビット)を用いる場合のSRAM60a1,60a2,…,60atに対する重み係数の格納例を示す。ここで、t=2048である。データ2d1,2d2,…,2dtは、各々、SRAM60a1,60a2,…,60atに格納される。このモードでは、LFEは2k個(=2048個)使用される。
データ2d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,2047を示す。データ2d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,2047を示す。データ2dtは、LFE51at(LFE2047)のSRAM60atに格納されるW2047,0~W2047,2047を示す。1つの重み係数Wijのビット数は64ビットである。
図13は、重み係数の格納例を示す説明図(その3)である。第3のモード(規模4kビット/精度32ビット)を用いる場合、重み係数Wは、下記式(13)で表される。
データ3d1,3d2,…,3duは、第3のモード(規模4Kビット/精度32ビット)を用いる場合のSRAM60a1,60a2,…,60auに対する重み係数の格納例を示す。ここで、u=4096である。データ3d1,3d2,…,3duは、各々、SRAM60a1,60a2,…,60auに格納される。このモードでは、LFEは4k個(=4096個)使用される。
データ3d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,4095を示す。データ3d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,4095を示す。データ3duは、LFE51au(LFE4095)のSRAM60auに格納されるW4095,0~W4095,4095を示す。1つの重み係数Wijのビット数は32ビットである。
図14は、重み係数の格納例を示す説明図(その4)である。第4のモード(規模8kビット/精度16ビット)を用いる場合、重み係数Wは、下記式(14)で表される。
データ4d1,4d2,…,4dnは、第4のモード(規模8Kビット/精度16ビット)を用いる場合のSRAM60a1,60a2,…,60anに対する重み係数の格納例を示す。ここで、n=8192である。データ4d1,4d2,…,4dnは、各々、SRAM60a1,60a2,…,60anに格納される。このモードでは、LFEは8k個(=8192個)使用される。
データ4d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,8191を示す。データ4d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,8191を示す。データ4dnは、LFE51an(LFE8191)のSRAM60anに格納されるW8191,0~W8191,8191を示す。1つの重み係数Wijのビット数は16ビットである。
(最適化装置408の演算処理手順)
つぎに、最適化装置408の演算処理手順について説明する。なお、問題に応じた初期値および動作条件は、最適化装置408に入力される。初期値は、例えば、エネルギー値E、ローカルフィールドhi、スピンビットqi、温度パラメータTの初期値および重み係数Wなどを含む。また、動作条件は、1つの温度パラメータでの状態の更新回数N1、温度パラメータの変更回数N2および温度パラメータの下げ幅などを含む。制御部504は、入力された初期値および動作条件を、前述の各LFEのレジスタおよびSRAMに設定する。
図15は、最適化装置408の演算処理手順の一例を示すフローチャートである。図15の説明では、index=iに対応するLFEをLFE51ax(1番目のLFEはLFE51a1であり、n番目のLFEは51anである)と表記する。LFE51axに含まれる各部についても、例えば、SRAM60axのように、符号の末尾に「x」を付して表記する。LFE51a1,…,LFE51anの各々による演算は並列に実行される。
図15のフローチャートにおいて、ΔE生成部67axは、h格納レジスタ64axに格納されたローカルフィールドhiおよびビット格納レジスタ66axに格納されたビットqiに基づいて、当該ビットqiを反転させた場合のエネルギー変化量ΔEiを生成する(ステップS1501)。ΔEiの生成には、上記式(2)が用いられる。
判定部68axは、ΔE生成部67axにより生成されたエネルギー変化量ΔEiと、閾値生成部53により生成された閾値(=-(T・f-1(u)))とを比較し、閾値>ΔEiであるか否かを判定する(ステップS1502)。ここで、閾値>ΔEiの場合(ステップS1502:Yes)、ステップS1503に処理が進む。閾値≦ΔEiの場合(ステップS1502:No)、ステップS1504に処理が進む。
判定部68axは、反転候補信号(Fi=1)をランダムセレクタ部52に出力する(ステップS1503)。そして、ステップS1505に処理が進む。
判定部68axは、非反転候補信号(Fi=0)をランダムセレクタ部52に出力する(ステップS1504)。そして、ステップS1505に処理が進む。
ステップS1505において、ランダムセレクタ部52は、LFE51a1,…,LFE51anの各々から出力された全反転候補(Fi=1であるLFEに対応するビット)から、反転ビットを1つ選択する。ランダムセレクタ部52は、選択した反転ビットに対応するindex=j、Fj、qjをLFE51a1,…,LFE51anに出力する。また、ランダムセレクタ部52は、選択した反転ビットに対応するΔEjを、加算器56に出力する。すると、次のステップS1506(エネルギー更新処理),S1507(状態更新処理)が並列に開始される。
加算器56は、反転ビットに対応するエネルギー変化量ΔEを、エネルギー値Eに加算することで、E格納レジスタ57に格納されたエネルギー値Eを更新する(ステップS1506)。すなわち、E=E+ΔEである。そして、エネルギー更新処理が終了する。
精度切替回路61axは、反転ビットに対応するindex=jとフラグFjとを取得し、当該反転ビットに対応する重み係数を含む単位ビット列をSRAM60axから読み出す(ステップS1507)。単位ビット列とは、精度切替回路61axのセレクタが、SRAM60axから一度に読み出すビット列の単位である。単位ビット列のビット数(単位ビット数)は、一例では、128ビットである(他の値でもよい)。この場合、ステップS1507ではSRAM60axから128ビットの単位ビット列が読み出される。
例えば、精度として、128/a(a=1,2,4,8)ビットが選択されている場合、精度切替回路61axは、SRAM60axの先頭(先頭を0番目とする)の単位ビット列から数えて「Integer(j/a)」番目の単位ビット列を読み出す。ここで、Integer(j/a)は、(j/a)の値から整数部を抽出する関数である。
精度切替回路61axは、ステップS1507で読み出された単位ビット列から、モード設定レジスタ55により設定されたモード選択に応じたビット数の重み係数(反転ビットqjに対応する重み係数)Wijを抽出する(ステップS1508)。例えば、精度切替回路61axは、128ビットの単位ビット列からzビットのビット列を抽出する場合、前述のように反転ビットに対応するzビットのビット範囲をLSB側へシフトし、それ以外の上位ビットに0を設定することで、zビットの重み係数を抽出する。
なお、精度切替回路61axは、ステップS1507で読み出した単位ビット列を、先頭から精度に応じたビット長の区画に分けたときに、反転ビットに対応するビット範囲が先頭(0番目)から何番目の区画に対応するかにより当該ビット範囲を特定する。
図12~図14の例によれば、精度64ビットの場合、jが偶数のときに0番目の区画、jが奇数のときに1番目の区画である。また、精度32ビットの場合、mod(j,4)=0のときに0番目の区画、mod(j,4)=1のときに1番目の区画、mod(j,4)=2のときに2番目の区画、mod(j,4)=3のときに3番目の区画である。ここで、mod(u,v)は、uをvで除したときの剰余を示す関数である。さらに、精度16ビットの場合も同様に、読み出した128ビットの単位ビット列の先頭から「mod(j,8)」番目の区画が、反転ビットに対応するビット範囲となる。なお、精度128ビットの場合、精度切替回路61axは、ステップS1507で読み出された128ビットの単位ビット列を、そのまま反転ビットに対応する重み係数とする。
上記の例では、128/a(a=1,2,4,8)ビットの精度に対し、ステップS1507で読み出された128ビットの単位ビット列の先頭から「mod(j,a)」番目の区画(1区画のサイズは128/aビット)が、反転ビットに対応する重み係数を示すビット範囲である。
Δh生成部62axは、反転ビットの反転方向と、精度切替回路61axにより抽出された重み係数Wijとに基づいて、Δhiを生成する(ステップS1509)。Δhiの生成には、上記式(4)が用いられる。また、反転ビットの反転方向は、ランダムセレクタ部52により出力される反転ビットqj(今回の反転前のビット)により判別される。
ステップS1510において、加算器63axは、Δh生成部62axにより生成されたΔhiを、h格納レジスタ64axに格納されたローカルフィールドhiに加算することで、h格納レジスタ64axに格納されたローカルフィールドhiを更新する。また、反転判定部65axは、ランダムセレクタ部52により出力されたindex=jおよびフラグFjに基づいて、自ビットが反転ビットとして選択されたか否かを判定する。反転判定部65axは、自ビットが反転ビットとして選択された場合、ビット格納レジスタ66axに格納されたスピンビットを反転させ、自ビットが反転ビットとして選択されなかった場合、ビット格納レジスタ66axのスピンビットを維持する。ここで、自ビットが反転ビットとして選択された場合とは、ランダムセレクタ部52により出力された信号について、index=j=i、かつ、Fj=1の場合である。
制御部504は、現在の温度パラメータTにおいて、LFE51a1,…,LFE51anに保持される各スピンビットの更新処理回数がN1に達したか(更新処理回数=N1であるか)否かを判定する(ステップS1511)。更新処理回数がN1に達した場合(ステップS1511:Yes)、ステップS1512に処理が進む。更新処理回数がN1に達していない場合(ステップS1511:No)、制御部504は、更新処理回数に1を加算して、ステップS1501に処理を進める。
制御部504は、温度パラメータTの変更回数がN2に達したか(温度変更回数=N2であるか)否かを判定する(ステップS1512)。温度変更回数がN2に達した場合(ステップS1512:Yes)、ステップS1514に処理が進む。温度変更回数がN2に達していない場合(ステップS1512:No)、制御部504は、温度変更回数に1を加算して、ステップS1513に処理を進める。
制御部504は、温度パラメータTを変更する(ステップS1513)。具体的には、制御部504は、動作条件に応じた下げ幅で、温度パラメータTの値を減少させる(温度を下げることに相当する)。そして、ステップS1501に処理が進む。
制御部504は、ビット格納レジスタ66axに格納されたスピンビットを読み出し、演算結果として出力する(ステップS1514)。具体的には、制御部504は、モード設定レジスタ55により設定されたスピンビット数Kに対応するビット格納レジスタ66a1,…,66aKの各々に格納されたスピンビットを読み出し、CPU401に出力する。すなわち、制御部504は、読み出したスピンビット列をCPU401に供給する。そして、演算処理が終了する。
なお、ステップS1505において、ランダムセレクタ部52は、モード設定レジスタ55の設定に応じて、使用されないLFEにより出力されるFの値を、強制的に0に設定することで、使用されないLFEをビット反転の候補から除外することができる。
最適化装置408によれば、モード設定レジスタ55によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とし、1チップの最適化装置408において、問題に合った規模および精度を実現できる。
より具体的には、精度切替回路61axは、モード設定レジスタ55の設定に応じて、SRAM60axから読み出す重み係数のビット長を切り替える。精度切替回路61axを用いることで、ステップS1508で示したように、精度切替回路61axのセレクタがSRAM60axから読み出す単位ビット数を変更せずに、種々の精度を実現できる。例えば、精度切替回路61axのセレクタによるSRAM60axからの単位ビット数分の読み出し用の信号線の作り変えを要さずに、精度を可変にできる。
また、ランダムセレクタ部52は、モード設定レジスタ55により設定されたスピンビット数に相当する数(例えば、K個)のLFEに対して、反転ビットを示す信号を入力し、当該数(K個)のLFEに対応するビットの中から反転ビットを選択する。ランダムセレクタ部52は、使用されないn-K個のLFEにも反転ビットを示す信号を入力するが、当該n-K個のLFEから出力されるフラグFを強制的に0(反転不可)に設定することで、使用されないLFEを反転ビットの選択候補から除外する。
これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、1つの最適化装置408によって、問題に応じた規模および精度でイジングモデルを実現できる。
つぎに、モード設定の他の例を説明する。例えば、最適化装置408は、次のようにSRAM60a1,…,60anに重み係数を格納することで、前述の4種類のモードに加え、規模4kビット/精度64ビットの第5のモードを提供することもできる。
図16は、重み係数の格納例を示す説明図(その5)である。データ5d1,5d2,…,5dnは、第5のモード(規模4Kビット/精度64ビット)を用いる場合のSRAM60a1,60a2,…,60anに対する重み係数の格納例を示す。ここで、n=8192である。データ5d1,5d2,…,5dnは、各々、SRAM60a1,60a2,…,60anに格納される。このモードでは、スピンビット列として、LFEは4K個(=4096個)使用され、重み係数の格納のみの用途として、さらに4K個(=4096個)のLFEが使用される。
データ5d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,2047を示す。データ5d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW0,2048~W0,4095を示す。データ5dnは、LFE51an(LFE8191)のSRAM60anに格納されるW4095,2048~W4095,4095を示す。1つの重み係数Wijのビット数は64ビットである。
ここで、前述のように、LFE51a1の精度切替回路61a1は、LFE51a2のSRAM60a2からも重み係数を取得することができる。すなわち、精度切替回路61a1は、例えば、隣接するLFE51a2のSRAM60a2からの読み出し経路を利用することで、LFE51a2のSRAM60a2以外の機能を停止させ、SRAM60a2の容量をLFE51a1に貸し出す方法を採れる。例えば、奇数番目(先頭を1番目とする)のLFEにより偶数番目のLFEのSRAMを利用可能にする(あるいは、先頭を0番目とした場合は偶数番目のLFEにより奇数番目のLFEのSRAMを利用可能にするとも言える)。
このように、精度切替回路61a1,…,61anは、重み係数のビット数の変更に応じて、自ビットと他ビットとに関する重み係数のうちの一部を、スピンビットとして使用されない他のLFEが有するSRAMから読み出す。この場合、ランダムセレクタ部52は、例えば、スピンビットとして使用されない他のLFEから出力されるフラグFを強制的に0(反転不可)に設定することで、当該他のLFEに対応するビットを反転ビットの選択候補から除外してもよい。
これにより、規模4Kビット/精度64ビットの第5のモードを実現できる。同様に、規模を小さくすることで、さらに大きな精度を実現することもできる。このように、最適化装置408によれば、問題に応じて、規模および精度をより柔軟に変更することができる。
(モード設定テーブル1700の記憶内容)
つぎに、最適化問題演算装置101が有するモード設定テーブル1700の記憶内容について説明する。モード設定テーブル1700は、例えば、図4に示したメモリ402、ディスク404などの記憶装置に記憶される。
図17は、モード設定テーブル1700の記憶内容の一例を示す説明図である。図17において、モード設定テーブル1700は、パーティションモード、規模、使用LFB数および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報1700-1~1700-5をレコードとして記憶する。
ここで、パーティションモードは、パーティションモードのモード名を示す。パーティションモード「8P(8分割)」は、最適化装置408を論理的に8個のパーティションに分割するモードである。パーティションモード「8P(8分割)」は、上述した第1のモードに対応する。
パーティションモード「4P(4分割)」は、最適化装置408を論理的に4個のパーティションに分割するモードである。パーティションモード「4P(4分割)」は、上述した第2のモードに対応する。パーティションモード「2P(2分割)」は、最適化装置408を論理的に2個のパーティションに分割するモードである。パーティションモード「2P(2分割)」は、上述した第3のモードに対応する。
パーティションモード「FULL」は、最適化装置408を分割せず、1個のパーティションとして使用するモードである。パーティションモード「FULL」は、規模と精度との組合せに対応して2種類設けられている。パーティションモード「FULL(規模:8K、精度:16bit)」は、上述した第4のモードに対応する。また、パーティションモード「FULL(規模:4K、精度:64bit)」は、上述した第5のモードに対応する。
規模は、パーティションモードで解くことができる問題(組合せ最適化問題)の最大規模を示す。使用LFB数は、パーティションモードにおける各パーティションに使用するLFBの数を示す。精度は、各パーティションモードで解くことができる問題(組合せ最適化問題)の最大精度を示す。
例えば、モード設定情報1700-1は、パーティションモード「8P(8分割)」の規模「1024bit(1K)」、使用LFB数「1」および精度「128bit」を示す。なお、ここでは、パーティションモード「8P(8分割)」を1種類のみ設けたが、これに限らない。例えば、パーティションモード「8P(8分割)」として、規模および使用LFB数は同じで、精度が異なる複数種類のモードを設けることにしてもよい。他のパーティションモードについても同様である。
(最適化問題演算装置101の機能的構成例)
図18は、最適化問題演算装置101の機能的構成例を示すブロック図である。図18において、最適化問題演算装置101は、受付部1801と、決定部1802と、実行制御部1803と、を含む。受付部1801~実行制御部1803は、具体的には、例えば、図4に示したメモリ402、ディスク404、可搬型記録媒体407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、通信I/F405により、その機能を実現する。各機能部の処理結果は、例えば、メモリ402、ディスク404などの記憶装置に記憶される。
受付部1801は、最適化装置408に対する組合せ最適化問題を受け付ける。ここで、受け付ける組合せ最適化問題は、解くべき計算対象の問題である。具体的には、例えば、受付部1801は、図3に示したクライアント装置301から組合せ最適化問題の情報の入力を受け付けることにより、組合せ最適化問題を受け付ける。
組合せ最適化問題の情報には、例えば、問題に応じた繰り返し回数、初期値、動作条件などが含まれる。繰り返し回数は、組合せ最適化問題を繰り返し解く回数であり、例えば、ユーザによって指定される。
決定部1802は、組合せ最適化問題の規模または要求精度に応じて、最適化装置408のパーティションモードおよび実行モードを決定する。ここで、パーティションモードは、最適化装置408の論理的な分割状態を規定する。また、実行モードは、パーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する。実行モードは、パーティション単位で決定することができる。
具体的には、例えば、決定部1802は、受け付けた組合せ最適化問題の規模、要求精度を取得する。ここで、組合せ最適化問題の規模は、例えば、組合せ最適化問題のイジングモデルのスピンビット数によって表される。組合せ最適化問題の要求精度は、例えば、ビット間の相互作用の大きさを示す重み係数のビット数によって表される。より詳細に説明すると、例えば、決定部1802は、ライブラリ502(図5参照)から、受け付けた組合せ最適化問題を変換した変換後の問題のスピンビット数(規模)および重み係数を表すビット数(要求精度)を取得する。
つぎに、決定部1802は、組合せ最適化問題の規模が、第1のパーティションモードで解くことができる問題の最大規模より小さいか否かを判断する。第1のパーティションモードは、例えば、最適化装置408に設定可能な複数のパーティションモードのうち、現在のパーティションモードである。
より詳細に説明すると、例えば、決定部1802は、ライブラリ502から、現在のパーティションモードで解くことができる問題の最大規模(スピンビット数)および最大精度(重み係数のビット数)を取得する。そして、決定部1802は、組合せ最適化問題の規模が、取得した最大規模より小さいか否かを判断する。
例えば、取得された最大規模が「4096bit(4K)」で、最大精度が「32bit」の場合、現在のパーティションモードは、パーティションモード「2P(2分割)」である(図17参照)。この場合、決定部1802は、組合せ最適化問題の規模が、取得した最大規模「4096bit(4K)」より小さいか否かを判断する。
なお、ライブラリ502は、あらかじめ用意された関数を呼び出すことにより、現在のパーティションモードの情報を取得することができる。例えば、ライブラリ502は、getMaxNumBit()関数を呼び出すことにより、現在のパーティションモードで解くことができる問題の最大規模を取得することができる。また、ライブラリ502は、getWeightRange()関数を呼び出すことにより、現在のパーティションモードで解くことができる問題の最大精度を取得することができる。
そして、決定部1802は、組合せ最適化問題の規模が最大規模より小さい場合、最適化装置408のパーティションモードを、第1のパーティションモードに決定する。また、決定部1802は、最適化装置408の実行モードを、組合せ最適化問題の規模に対応するハードウェアリソースの範囲を規定する第1の実行モードに決定する。
ここで、第1の実行モードは、第1のパーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードのうち、例えば、下記(i)および(ii)の条件を満たすハードウェアリソースの範囲を規定する実行モードである。
(i)第1のパーティションモードで解くことができる問題の最大規模よりも解くことができる問題の最大規模が小さい。
(ii)組合せ最適化問題の規模以上の規模の問題を解くことができる。
より詳細に説明すると、例えば、まず、決定部1802は、図17に示したモード設定テーブル1700を参照して、取得した最大規模と最大精度との組合せに対応するパーティションモードを特定する。これにより、最適化装置408の現在のパーティションモードである第1のパーティションモードを特定することができる。
つぎに、決定部1802は、モード設定テーブル1700を参照して、第1のパーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードのうち、上記(i)および(ii)の条件を満たすハードウェアリソースの範囲を規定する実行モードを特定する。
例えば、パーティションモードを「FULL(規模:8K、精度:16bit)」とすると、最適化装置408に設定可能な実行モードは、実行モード「FULL」、実行モード「2P」、実行モード「4P」および実行モード「8P」である。
実行モード「FULL」は、最大で規模「8192bit(8K)」の問題を解くことができるハードウェアリソースの範囲を規定する実行モードである。実行モード「2P」は、最大で規模「4096bit(4K)」の問題を解くことができるハードウェアリソースの範囲を規定する実行モードである。実行モード「4P」は、最大で規模「2048bit(2K)」の問題を解くことができるハードウェアリソースの範囲を規定する実行モードである。実行モード「8P」は、最大で規模「1024bit(1K)」の問題を解くことができるハードウェアリソースの範囲を規定する実行モードである。
なお、初期設定では、パーティションモード「FULL(規模:8K、精度16bit)」における実行モードは、実行モード「FULL」である。以下、各パーティションモードにおいて初期設定される実行モードを「初期モード」と表記する場合がある。
また、パーティションモードを「FULL(規模:4K、精度:64bit)」とすると、最適化装置408に設定可能な実行モードは、実行モード「2P」、実行モード「4P」および実行モード「8P」である。なお、パーティションモード「FULL(規模:4K、精度64bit)」の初期モードは、実行モード「2P」である。
また、パーティションモードを「2P(2分割)」とすると、最適化装置408に設定可能な実行モードは、実行モード「2P」、実行モード「4P」および実行モード「8P」である。なお、パーティションモード「2P(2分割)」の初期モードは、実行モード「2P」である。
また、パーティションモードを「4P(4分割)」とすると、最適化装置408に設定可能な実行モードは、実行モード「4P」および実行モード「8P」である。なお、パーティションモード「4P(4分割)」の初期モードは、実行モード「4P」である。
また、パーティションモードを「8P(8分割)」とすると、最適化装置408に設定可能な実行モードは、実行モード「8P」のみである。
一例として、第1のパーティションモードを「FULL(規模:8K、精度16bit)」とすると、解くことができる問題の最大規模は、「8192bit(8K)」である。また、組合せ最適化問題の規模を「2048bit(2K)」とすると、上記(ii)を満たす実行モードは、実行モード「FULL」、実行モード「2P」および実行モード「4P」である。
したがって、上記(i)および(ii)の条件を満たすハードウェアリソースの範囲を規定する実行モードは、実行モード「2P」および実行モード「4P」である。この場合、決定部1802は、例えば、実行モード「2P」および実行モード「4P」のうち、解くことができる問題の規模が最小の実行モード「4P」を、第1の実行モードに決定する。
また、決定部1802は、組合せ最適化問題の規模が、第1のパーティションモードで解くことができる問題の最大規模と同じ場合には、最適化装置408のパーティションモードを、第1のパーティションモードに決定する。そして、決定部1802は、最適化装置408の実行モードを、第1のパーティションモードの初期モードに決定する。初期モードは、各パーティションモードで解くことができる問題の最大規模に対応するハードウェアリソースの範囲を規定する実行モードである。
実行制御部1803は、決定されたパーティションモードおよび実行モードにより、組合せ最適化問題の実行回数を当該実行モードに対応した分割数で分割した回数に基づいて、最適化装置408で組合せ最適化問題の演算を並列して実行させる。ここで、組合せ最適化問題の実行回数は、例えば、上述した組合せ最適化問題の繰り返し回数である。
また、実行モードに対応した分割数は、例えば、決定されたパーティションモードにおける各パーティションで、決定された実行モードで並列に演算を実行可能な数である。
例えば、パーティションモードを「FULL(規模:8K、精度:16bit)」とし、実行モードを「8P」とする。この場合、パーティションモード「FULL(規模:8K、精度:16bit)」におけるパーティション(1個のパーティション)で、実行モード「8P」で並列に演算を実行可能な数は「8」である。すなわち、パーティションモード「FULL(規模:8K、精度:16bit)」における実行モード「8P」に対応した分割数は、「8」となる。
また、例えば、パーティションモードを「2P(2分割)」とし、実行モードを「8P」とする。この場合、パーティションモード「2P(2分割)」における各パーティション(2個のパーティション)で、実行モード「8P」で並列に演算を実行可能な数は「4」である。すなわち、パーティションモード「2P(2分割)」における実行モード「8P」に対応した分割数は、「4」となる。
また、組合せ最適化問題の実行回数を実行モードに対応した分割数で分割した回数は、最適化装置408内の各パーティションで組合せ最適化問題の演算を並列して実行させる際のそれぞれの実行回数に相当する。例えば、組合せ最適化問題の実行回数を「1024」とし、実行モードに対応した分割数を「8」とする。この場合、組合せ最適化問題の実行回数を実行モードに対応した分割数で分割した回数は、「128」となる。
一例として、決定されたパーティションモードおよび実行モードを、パーティションモード「FULL(規模:8K、精度16bit)」および実行モード「8P」とする。また、組合せ最適化問題の実行回数を実行モードに対応した分割数で分割した回数を、「128」とする。
この場合、まず、実行制御部1803は、例えば、モード設定テーブル1700を参照して、実行モード「8P」に対応する規模および精度を特定する。実行モード「8P」に対応する規模および精度は、パーティションモード「8P(8分割)」に対応する規模および精度に相当する。このため、実行モード「8P」に対応する規模および精度は、規模「1024bit(1K)」および精度「128bit」となる。
つぎに、実行制御部1803は、特定した規模(スピンビット数)および精度(重み係数のビット数)を、最適化装置408に入力する。最適化装置408において、制御部504は、実行制御部1803からの規模(スピンビット数)および精度(重み係数のビット数)を受け付け、LFB505のモード設定レジスタ55に入力する。
モード設定レジスタ55に入力された精度(重み係数のビット数)は、各LFEの精度切替回路に入力される。例えば、精度切替回路61a1は、入力された精度(重み係数のビット数)を受け付け、当該精度(重み係数のビット数)に応じて、SRAM60a1から読み出す重み係数のビット数を切り替える。
また、モード設定レジスタ55に入力された規模(スピンビット数)は、ランダムセレクタ部52に入力される。例えば、ランダムセレクタ部52は、indexの小さい方から順に、入力された規模(スピンビット数)に相当する数のLFEを使用して、解の探索が行われるようにする。
これにより、パーティションモード「FULL(規模:8K、精度16bit)」および実行モード「8P」が最適化装置408に設定される。この場合、最適化装置408には、パーティションモード「FULL(規模:8K、精度16bit)」における実行モード「8P」のパーティションが8個形成される。
なお、各パーティションをどのハードウェアリソース(例えば、LFB)により実現するかは、実行制御部1803が判断してもよく、また、最適化装置408の制御部504が判断してもよい。
そして、実行制御部1803は、回数「128」ごとの組合せ最適化問題の演算を、最適化装置408で並列して実行させる。すなわち、実行制御部1803は、最適化装置408内の8個のパーティションそれぞれで、組合せ最適化問題の演算を128回繰り返す処理を並列して実行させる。
この際、実行制御部1803は、並列して実行させる組合せ最適化問題の演算に、それぞれ異なるシード値を設定して実行を開始させることにしてもよい。すなわち、実行制御部1803は、各パーティションに異なるシード値を入力して、組合せ最適化問題の演算を128回繰り返す処理を並列して実行させる。
ここで、シード値とは、シミュレーテッド・アニーリングの際に最初に与える乱数である。シード値を変化させることで、異なる解を得ることができる。シード値は、例えば、乱数生成部4(または、乱数生成部54)により出力される乱数ビットの生成に用いられる。
より詳細に説明すると、例えば、実行制御部1803は、問題に応じた初期値および動作条件を最適化装置408に入力する。最適化装置408において、制御部504は、入力された初期値および動作条件を、各LFEのレジスタおよびSRAMに設定する。なお、制御部504は、使用されないLFEがある場合、当該LFEのSRAMに、Wとして、例えば全て0を設定する。
実行制御部1803は、特定した規模(スピンビット数)および精度(重み係数のビット数)を、最適化装置408に入力する。この結果、制御部504からモード設定レジスタ55に、規模(スピンビット数)および精度(重み係数のビット数)が入力されて、最適化装置408にパーティションモードおよび実行モードが設定される。
また、実行制御部1803は、組合せ最適化問題の演算を並列して実行させるパーティションごとの回数およびシード値を、最適化装置408に入力する。パーティションごとの回数は、各パーティションで組合せ最適化問題の演算を繰り返し実行する回数であり、例えば、図15の開始(START)から終了(END)までの手順を繰り返す回数に相当する。
そして、実行制御部1803は、最適化装置408に演算開始フラグ(例えば、演算開始フラグ=1)を入力する。制御部504は、演算開始フラグの入力を受け付けると、各パーティションにより、入力された回数分の組合せ最適化問題の演算を並列して実行させる。
なお、実行制御部1803は、例えば、図19に示すようなパーティション情報テーブル1900を用いて、最適化装置408内の各パーティションの情報を管理する。パーティション情報テーブル1900は、例えば、図4に示したメモリ402、ディスク404などの記憶装置に記憶される。
図19は、パーティション情報テーブル1900の具体例を示す説明図である。図19において、パーティション情報テーブル1900は、パーティション、ハードウェアリソース、パーティションモードおよび実行モードのフィールドを有し、各フィールドに情報を設定することで、パーティション情報(例えば、パーティション情報1900-1)がレコードとして記憶される。
ここで、パーティションは、パーティションを識別する識別子である。ハードウェアリソースは、パーティションに対応するハードウェアリソースを識別する識別子である。ここでは、#1~#8は、最適化装置408が有するLFBを識別する識別子である。LFBは、例えば、図8に示したLFB505や、後述の図24に示すLFB70a~70hなどである。パーティションモードは、現在のパーティションモードを示す。実行モードは、パーティションモードにおける実行モードを示す。
例えば、パーティション情報1900-1は、パーティションP1に対応するハードウェアリソース「#1~#8」、パーティションモード「FULL」および実行モード「FULL」を示す。なお、パーティションモード「FULL」は、例えば、パーティションモード「FULL(規模:8K、精度16bit)」に対応する。
ここでは、パーティション情報1900-1は、最適化装置408の初期状態におけるパーティションモードおよび実行モードを示すものとする。ここで、パーティションモード「FULL(規模:8K、精度16bit)」において、実行モードが、実行モード「FULL」から実行モード「2P」に変更された場合を想定する。
この場合、パーティション情報テーブル1900には、例えば、パーティション情報1900-2,1900-2が新たなレコードとして記憶される。例えば、パーティション情報1900-2は、パーティションP1を分割したパーティションP1-1に対応するハードウェアリソース「#1~#4」、パーティションモード「FULL」および実行モード「2P」を示す。
なお、あるパーティション(例えば、パーティションP1)が、実行モードを変更することで、複数のパーティションに分割された場合、分割後のパーティションを、分割前のパーティションの枝番(例えば、P1-1,P1-2)によって管理する。これにより、分割前後のパーティションの対応関係が特定しやすくなる。
例えば、実行制御部1803は、パーティション情報テーブル1900を参照することで、最適化装置408内のパーティション(ハードウェアリソース)を指定して、上述したパーティションごとの回数やシード値を、最適化装置408に入力することができる。
図18の説明に戻り、また、実行制御部1803は、組合せ最適化問題の実行回数が閾値以上の場合に、最適化装置408で組合せ最適化問題の演算を並列して実行させることにしてもよい。換言すれば、実行制御部1803は、組合せ最適化問題の実行回数が閾値未満の場合には、決定されたパーティションモードおよび実行モードのいずれか一つのパーティションで、実行回数分の組合せ最適化問題の演算を実行させることにしてもよい。閾値は、任意に設定可能であり、例えば、100などの値が設定される。
これにより、組合せ最適化問題の実行回数が少ないときは、複数のパーティションを使用しないで、単一のパーティションで演算を実行させることができ、残りのパーティションを不使用とすることができる。
また、実行制御部1803は、決定された第1のパーティションモードおよび第1の実行モードによる最適化装置408での組合せ最適化問題の演算が完了した場合、最適化装置408の実行モードを、第1のパーティションモードにおける初期モードに変更することにしてもよい。
初期モードは、第1のパーティションモードで解くことができる問題の最大規模に対応するハードウェアリソースの範囲を規定する実行モードである。具体的には、例えば、実行制御部1803は、第1の実行モードにおける各パーティションでの演算が完了した後に、最適化装置408の実行モードを、第1のパーティションモードにおける初期モードに変更する。
より詳細に説明すると、例えば、実行制御部1803は、モード設定テーブル1700を参照して、第1のパーティションモードの初期モードに対応する規模および精度を特定する。つぎに、実行制御部1803は、特定した規模(スピンビット数)および精度(重み係数のビット数)を、最適化装置408に入力する。
これにより、組合せ最適化問題の演算が完了したタイミングで、最適化装置408の実行モードを、第1のパーティションモードにおける初期モードに戻して、第1の実行モードより大きい規模の問題を解くことができる元の状態に戻すことができる。
なお、実行モードが初期モードに変更されると、例えば、図19に示したパーティション情報テーブル1900が更新される。例えば、パーティションモード「FULL(規模:8K、精度16bit)」において、実行モードが、実行モード「2P」から初期モードに変更されると、パーティション情報1900-2,1900-3が削除される。
また、組合せ最適化問題の規模が、第1のパーティションモードで解くことができる問題の最大規模より大きい場合、このままの状態では、組合せ最適化問題を解くことができない。この場合、決定部1802は、最適化装置408のパーティションモードを、組合せ最適化問題の規模以上の規模の問題を解くことができる第2のパーティションモードに決定することにしてもよい。そして、決定部1802は、最適化装置408の実行モードを、第2のパーティションモードの初期モードに決定することにしてもよい。
ただし、動的にパーティションモードを変更すると、各パーティションで演算中の結果が異常となるおそれがある。したがって、最適化問題演算装置101は、パーティションモードを変更する場合には、例えば、各パーティションで演算が行われていない状態にしてから、パーティションモードを変更する。
より詳細に説明すると、例えば、実行制御部1803は、パーティションモードを変更する場合、各パーティションを担当する計算ノード(いわゆる、コンテナ)を停止する。つぎに、実行制御部1803は、ドライバ503を一旦アンロードして、ドライバ503を再ロードする。この際、実行制御部1803は、第2のパーティションモードに対応する規模および精度を、最適化装置408に入力する。この結果、最適化装置408に第2のパーティションモードが設定される。そして、実行制御部1803は、計算ノード(コンテナ)を再起動する。これにより、パーティションモードを変更することができる。
なお、パーティションモードが変更されると、例えば、図19に示したパーティション情報テーブル1900が更新される。例えば、パーティションモードが変更されると、パーティション情報テーブル1900が初期化され、変更後のパーティションモードに対応するパーティション情報が新たなレコードとして記憶される。
また、組合せ最適化問題の規模が、第1のパーティションモードで解くことができる問題の最大規模より大きい場合、最適化問題演算装置101は、既存の分割解法により、組合せ最適化問題を分割して解くことにしてもよい。具体的には、例えば、決定部1802は、組合せ最適化問題を分割し、分割した分割後の問題を計算対象の問題としてもよい。
これにより、組合せ最適化問題の規模が、第1のパーティションモードで解くことができる問題の最大規模より大きい場合に、パーティションモードを変更しなくても、組合せ最適化問題を解くことができる。なお、組合せ最適化問題の解は、分割後の問題の解を統合したものとなる。
また、組合せ最適化問題の要求精度が、第1のパーティションモード(現在のパーティションモード)で解くことができる問題の最大精度の範囲外の場合、このままの状態では、組合せ最適化問題を解くことができない。この場合、実行制御部1803は、例えば、現在のパーティションモードで解くことができる問題の最大精度の範囲内にスケーリング(N倍)した問題を解いた後に、エネルギーは元の問題に合うように再計算(1/N倍)したものを返すことにしてもよい。
例えば、パーティションモード「FULL(規模:8K、精度:16bit)」の場合、最大精度が「16bit」のため、問題の二次項の係数に「3276700」が指定されると、このままの状態では解くことができない。この場合、実行制御部1803は、例えば、1/100にスケールダウンして、二次項の係数が32767の問題として解いた後に、エネルギーは元の問題に合うように再計算(100倍)したものを返す。
これにより、組合せ最適化問題の要求精度が、第1のパーティションモードで解くことができる問題の最大精度の範囲外であっても、組合せ最適化問題を解くことができる。
なお、上述した説明では、組合せ最適化問題の規模に応じて、パーティションモードおよび実行モードを決定する場合を例に挙げて説明したが、これに限らない。
決定部1802は、受け付けた組合せ最適化問題の要求精度に応じて、最適化装置408のパーティションモードおよび実行モードを決定することにしてもよい。具体的には、例えば、決定部1802は、組合せ最適化問題の要求精度が、第1のパーティションモードで解くことができる問題の最大精度の範囲内であるか否かを判断する。
ここで、組合せ最適化問題の要求精度が、第1のパーティションモードで解くことができる問題の最大精度の範囲内である場合、決定部1802は、最適化装置408のパーティションモードを、第1のパーティションモードに決定する。また、決定部1802は、最適化装置408の実行モードを、組合せ最適化問題の要求精度に対応するハードウェアリソースの範囲を規定する第2の実行モードに決定する。
ここで、第2の実行モードは、第1のパーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードのうち、下記(iii)の条件を満たすハードウェアリソースの範囲を規定する実行モードである。
(iii)組合せ最適化問題の要求精度が最大精度の範囲内である。
これにより、第1のパーティションモードにおいて、規模が同一で精度が異なる実行モードが複数存在する場合(例えば、規模が「1K」で、精度が「64bit,32bit,16bit」)などに、組合せ最適化問題の要求精度に応じた設定で計算を行うことができる。
また、決定部1802は、受け付けた組合せ最適化問題の規模および要求精度に応じて、最適化装置408のパーティションモードおよび実行モードを決定することにしてもよい。具体的には、例えば、決定部1802は、最適化装置408のパーティションモードを、上記(ii)および(iii)の条件を満たすパーティションモードに決定することにしてもよい。この場合、決定部1802は、最適化装置408の実行モードを、決定したパーティションモードにおける初期モードに決定する。
例えば、組合せ最適化問題の規模を「4096bit(4K)」とし、組合せ最適化問題の要求精度を「64bit」とする。この場合、図10に示したパーティションモードの例では、組合せ最適化問題の規模だけを考慮すると、パーティションモード「2P(規模:4K、精度:32bit)」とパーティションモード「FULL(規模:4K、精度:64bit)」とが考えられる。
しかし、パーティションモード「2P(規模:4K、精度:32bit)」は、組合せ最適化問題の要求精度を満たしていない。このため、決定部1802は、最適化装置408のパーティションモードを、パーティションモード「FULL(規模:4K、精度:64bit)」に決定する。そして、決定部1802は、最適化装置408の実行モードを、パーティションモード「FULL(規模:4K、精度:64bit)」における初期モード「FULL」に決定する。これにより、組合せ最適化問題の規模および要求精度に応じた設定で計算を行うことができる。
(組合せ最適化問題の並列実行例)
つぎに、繰り返し回数に応じた組合せ最適化問題の並列実行例について説明する。繰り返し回数は、組合せ最適化問題の実行回数に相当する。
図20Aは、繰り返し回数に応じた組合せ最適化問題の並列実行例を示す説明図(その1)である。図20Aの例では、計算対象の問題(組合せ最適化問題)を「問題Q1」とし、問題Q1の規模を「1024bit(1K)」、要求精度を「64bit」、繰り返し回数を「1024」とする。
また、パーティションモード「FULL(規模:8K、精度:16bit)」において、パーティションP1の実行モードを、問題Q1の規模に応じて、実行モード「FULL」から実行モード「8P」に変更したとする。この場合、パーティションモード「FULL(規模:8K、精度:16bit)」のパーティションP1が分割されて、実行モード「8P」におけるパーティションP1-1~P1-8が形成される。
ここで、パーティションP1における実行モード「8P」に対応した分割数は、「8」である。この場合、実行制御部1803は、問題Q1の実行回数「1024」を分割数「8」で分割した回数「128」を算出する。つぎに、実行制御部1803は、最適化装置408の制御部504により、算出した回数「128」を各パーティションP1-1~P1-8に割り振る。
また、実行制御部1803は、最適化装置408の制御部504により、各パーティションP1-1~P1-8に異なるシード値s1~s8を与える。そして、実行制御部1803は、最適化装置408の制御部504により、各パーティションP1-1~P1-8で、128回分の問題Q1の演算を並列して実行させる。
これにより、1024回分の問題Q1の演算を1つのパーティションで実行させる場合に比べて、演算効率を8倍高めることができる。
なお、組合せ最適化問題の実行回数が、実行モードに対応する分割数で割り切れる場合を例に挙げて説明したが、割り切れない場合がある。例えば、問題Q1の実行回数が「1020」で、実行モードに対応する分割数が「8」の場合は割り切れない。この場合、実行制御部1803は、例えば、問題Q1の実行回数「1020」を分割数「8」で割った商「127」を各パーティションP1-1~P1-8に割り振る。さらに、実行制御部1803は、いずれかのパーティション(例えば、パーティションP1-1)に、問題Q1の実行回数「1020」を分割数「8」で割った余り「4」分多く割り振ることにしてもよい。
図20Bは、繰り返し回数に応じた組合せ最適化問題の並列実行例を示す説明図(その2)である。図20Bの例では、計算対象の問題を「問題Q2,Q3」とし、各問題Q2,Q3の規模を「1024bit(1K)」、要求精度を「64bit」、繰り返し回数を「512」とする。
また、パーティションモード「2P(2分割)」において、各パーティションP1,P2の実行モードを、各問題Q2,Q3の規模に応じて、実行モード「2P」から実行モード「8P」に変更したとする。この場合、パーティションモード「2P(2分割)」の各パーティションP1,P2が分割されて、実行モード「8P」におけるパーティションP1-1~P1-4およびパーティションP2-1~P2-4が形成される。
ここで、各パーティションP1,P2における実行モード「8P」に対応した分割数は、「4」である。この場合、実行制御部1803は、各問題Q2,Q3について、各問題Q2,Q3の実行回数「512」を分割数「4」で分割した回数「128」を算出する。つぎに、実行制御部1803は、問題Q2について、最適化装置408の制御部504により、算出した回数「128」を各パーティションP1-1~P1-4に割り振る。また、実行制御部1803は、問題Q3について、最適化装置408の制御部504により、算出した回数「128」を各パーティションP2-1~P2-4に割り振る。
また、実行制御部1803は、問題Q2について、最適化装置408の制御部504により、各パーティションP1-1~P1-4に異なるシード値s1~s4を与える。また、実行制御部1803は、問題Q3について、最適化装置408の制御部504により、各パーティションP2-1~P2-4に異なるシード値s1~s4を与える。
そして、実行制御部1803は、問題Q2について、最適化装置408の制御部504により、各パーティションP1-1~P1-4で、128回分の組合せ最適化問題の演算を並列して実行させる。また、実行制御部1803は、問題Q3について、最適化装置408の制御部504により、各パーティションP2-1~P2-4で、128回分の組合せ最適化問題の演算を並列して実行させる。
これにより、512回分の各問題Q2,Q3の演算を1つのパーティションで実行させる場合に比べて、演算効率を4倍高めることができる。
図20Cは、繰り返し回数に応じた組合せ最適化問題の並列実行例を示す説明図(その3)である。図20Cの例では、計算対象の問題を「問題Q4」とし、問題Q4の規模を「2048bit(2K)」、要求精度を「64bit」、繰り返し回数を「512」とする。
また、パーティションモード「FULL(規模:8K、精度:16bit)」において、パーティションP1の実行モードを、問題Q4の規模に応じて、実行モード「FULL」から実行モード「4P」に変更したとする。この場合、パーティションモード「FULL(規模:8K、精度:16bit)」のパーティションP1が分割されて、実行モード「4P」におけるパーティションP1-1~P1-4が形成される。
ここで、パーティションP1における実行モード「4P」に対応した分割数は、「4」である。この場合、実行制御部1803は、問題Q4の実行回数「512」を分割数「4」で分割した回数「128」を算出する。つぎに、実行制御部1803は、最適化装置408の制御部504により、算出した回数「128」を各パーティションP1-1~P1-4に割り振る。
また、実行制御部1803は、最適化装置408の制御部504により、各パーティションP1-1~P1-4に異なるシード値s1~s4を与える。そして、実行制御部1803は、最適化装置408の制御部504により、各パーティションP1-1~P1-4で、128回分の問題Q4の演算を並列して実行させる。
これにより、512回分の問題Q4の演算を1つのパーティションで実行させる場合に比べて、演算効率を4倍高めることができる。
図20Dは、繰り返し回数に応じた組合せ最適化問題の並列実行例を示す説明図(その4)である。図20Dの例では、計算対象の問題を「問題Q5」とし、問題Q5の規模を「4096bit(4K)」、要求精度を「32bit」、繰り返し回数を「256」とする。
また、パーティションモード「FULL(規模:8K、精度:16bit)」において、パーティションP1の実行モードを、問題Q5の規模に応じて、実行モード「FULL」から実行モード「2P」に変更したとする。この場合、パーティションモード「FULL(規模:8K、精度:16bit)」のパーティションP1が分割されて、実行モード「2P」におけるパーティションP1-1,P1-2が形成される。
ここで、パーティションP1における実行モード「2P」に対応した分割数は、「2」である。この場合、実行制御部1803は、問題Q5の実行回数「256」を分割数「2」で分割した回数「128」を算出する。つぎに、実行制御部1803は、最適化装置408の制御部504により、算出した回数「128」を各パーティションP1-1,P1-2に割り振る。
また、実行制御部1803は、最適化装置408の制御部504により、各パーティションP1-1,P1-2に異なるシード値s1,s2を与える。そして、実行制御部1803は、最適化装置408の制御部504により、各パーティションP1-1,P1-2で、128回分の問題Q5の演算を並列して実行させる。
これにより、256回分の問題Q5の演算を1つのパーティションで実行させる場合に比べて、演算効率を2倍高めることができる。
(最適化問題演算装置101の最適化問題演算処理手順)
つぎに、最適化問題演算装置101の最適化問題演算処理手順について説明する。
図21および図22は、最適化問題演算装置101の最適化問題演算処理手順の一例を示すフローチャートである。図21のフローチャートにおいて、まず、最適化問題演算装置101は、計算対象の組合せ最適化問題の情報を受け付ける(ステップS2101)。組合せ最適化問題の情報には、組合せ最適化問題の繰り返し回数が含まれる。
つぎに、最適化問題演算装置101は、最適化装置408の現在のパーティションモードで解くことができる問題の最大規模(スピンビット数)を取得する(ステップS2102)。つぎに、最適化問題演算装置101は、受け付けた組合せ最適化問題の規模を特定する(ステップS2103)。
そして、最適化問題演算装置101は、特定した組合せ最適化問題の規模が、取得した最大規模より大きいか否かを判断する(ステップS2104)。ここで、組合せ最適化問題の規模が最大規模より大きい場合(ステップS2104:Yes)、最適化問題演算装置101は、分割解法使用モードが設定されているか否かを判断する(ステップS2105)。
なお、分割解法使用モードとは、分割解法により問題を分割して解くモードである。分割解法使用モードは、あらかじめ任意に設定可能である。例えば、現在のパーティションモードが「FULL」のときは、問題の規模が「8192bit(8K)」より大きい場合に、分割解法を使用することになる。
ここで、分割解法使用モードが設定されている場合(ステップS2105:Yes)、最適化問題演算装置101は、分割ソルバ等により、受け付けた組合せ最適化問題を分割して(ステップS2106)、ステップS2101に戻る。この結果、ステップS2101において、分割後の問題が計算対象の組合せ最適化問題として受け付けられる。
一方、分割解法使用モードが設定されていない場合(ステップS2105:No)、最適化問題演算装置101は、ユーザに対してエラーを返して(ステップS2107)、本フローチャートによる一連の処理を終了する。
また、ステップS2104において、組合せ最適化問題の規模が最大規模より大きくない場合(ステップS2104:No)、最適化問題演算装置101は、特定した組合せ最適化問題の規模が、現在のパーティションモードよりも一段粒度が小さいモードでの最大規模より小さいか否かを判断する(ステップS2108)。
ここで、組合せ最適化問題の規模が現在のパーティションモードでの最大規模と同じか、または、現在のパーティションモードよりも一段粒度が小さいモードでの最大規模より大きい場合(ステップS2108:No)、最適化問題演算装置101は、図22に示すステップS2201に移行する。一方、組合せ最適化問題の規模が、現在のパーティションモードよりも一段粒度が小さいモードでの最大規模より小さい場合(ステップS2108:Yes)、最適化問題演算装置101は、現在のパーティションモードよりも粒度が小さい実行モードがあるか否かを判断する(ステップS2109)。
例えば、現在のパーティションモードが「FULL」の場合、ステップS2108において、最適化問題演算装置101は、FULLモードよりも一段粒度が小さい2Pモードの最大規模である「4K」より小さいかどうかを判断する。例えば、問題の規模が「5K」、「6K」、「7K」の場合は、最適化問題演算装置101は、FUUモードのまま実行モードの変更は行わない。一方、問題の規模が「4K」以下の場合は、最適化問題演算装置101は、実行モードを変更する。
ここで、粒度が小さい実行モードがある場合(ステップS2109:Yes)、最適化問題演算装置101は、組合せ最適化問題の規模に応じて、最適化装置408の実行モードを決定する(ステップS2110)。ただし、最適化装置408のパーティションモードは、現在のパーティションモードのままとする。すなわち、最適化問題演算装置101は、最適化装置408のパーティションモードを、現在のパーティションモードに決定する。
つぎに、最適化問題演算装置101は、現在のパーティションモードにおける実行モードを、決定した実行モードに変更して(ステップS2111)、図22に示すステップS2201に移行する。具体的には、例えば、最適化問題演算装置101は、モード設定テーブル1700を参照して、決定した現在のパーティションモードにおける実行モードに対応する規模および精度を特定する。そして、最適化問題演算装置101は、特定した規模および精度を最適化装置408に入力することにより、現在のパーティションモードの実行モードを変更する。
また、ステップS2109において、粒度が小さい実行モードがない場合(ステップS2109:No)、最適化問題演算装置101は、演算に時間がかかることを許容するか否かを判断する(ステップS2112)。演算に時間がかかることを許容するか否かは、あらかじめ任意に設定可能である。
ここで、演算に時間がかかることを許容しない場合(ステップS2112:No)、最適化問題演算装置101は、ユーザに対してエラーを返して(ステップS2113)、本フローチャートによる一連の処理を終了する。一方、演算に時間がかかることを許容する場合(ステップS2112:Yes)、最適化問題演算装置101は、図22に示すステップS2201に移行する。
図22のフローチャートにおいて、まず、最適化問題演算装置101は、現在のパーティションモードで解くことができる問題の最大精度(重み係数のビット数)を取得する(ステップS2201)。つぎに、最適化問題演算装置101は、受け付けた組合せ最適化問題の要求精度を特定する(ステップS2202)。
そして、最適化問題演算装置101は、特定した組合せ最適化問題の要求精度が、取得した最大精度の範囲内であるか否かを判断する(ステップS2203)。ここで、組合せ最適化問題の要求精度が最大精度の範囲外の場合(ステップS2203:No)、最適化問題演算装置101は、自動スケーリングモードが設定されているか否かを判断する(ステップS2204)。
なお、自動スケーリングモードとは、最大精度の範囲内にスケーリングして問題を解くモードである。自動スケーリングモードは、あらかじめ任意に設定可能である。
ここで、自動スケーリングモードが設定されていない場合(ステップS2204:No)、最適化問題演算装置101は、ユーザに対してエラーを返して(ステップS2205)、本フローチャートによる一連の処理を終了する。
一方、自動スケーリングモードが設定されている場合(ステップS2204:Yes)、最適化問題演算装置101は、組合せ最適化問題を現在のパーティションモードで解くことができる問題の最大精度の範囲内にスケーリング(N倍)する(ステップS2206)。
つぎに、最適化問題演算装置101は、現在のパーティションモードおよび実行モードで、最適化装置408でスケーリングした問題の演算を並列して実行させる並列演算処理を実行する(ステップS2207)。並列演算処理の具体的な処理手順については、図23を用いて後述する。そして、最適化問題演算装置101は、元の問題に合うようにエネルギーは再計算(1/N倍)して(ステップS2208)、ステップS2210に移行する。
また、ステップS2203において、組合せ最適化問題の要求精度が最大精度の範囲内の場合(ステップS2203:Yes)、最適化問題演算装置101は、現在のパーティションモードおよび実行モードで、最適化装置408で組合せ最適化問題の演算を並列して実行させる並列演算処理を実行する(ステップS2209)。並列演算処理の具体的な処理手順については、図23を用いて後述する。
つぎに、最適化問題演算装置101は、ステップS2111において変更した実行モードを初期モードに戻す(ステップS2210)。ただし、ステップS2111において実行モードの変更が行われていない場合、最適化問題演算装置101は、ステップS2210をスキップする。
そして、最適化問題演算装置101は、ユーザに組合せ最適化問題の演算結果を返して(ステップS2211)、本フローチャートによる一連の処理を終了する。これにより、組合せ最適化問題の規模に応じた適切なハードウェアリソースを使用して演算を行うことができ、組合せ最適化問題を効率的に解くことができる。
なお、ステップS2203において、組合せ最適化問題の精度が最大精度の範囲外の場合(ステップS2203:No)、最適化問題演算装置101は、最適化装置408のパーティションモードを変更することにしてもよい。具体的には、例えば、最適化問題演算装置101は、最適化装置408のパーティションモードを、組合せ最適化問題の精度以上の精度の問題を解くことができるパーティションモードに変更する。
つぎに、図22に示したステップS2207,S2209の並列演算処理の具体的な処理手順について説明する。
図23は、並列演算処理の具体的処理手順の一例を示すフローチャートである。図23のフローチャートにおいて、まず、最適化問題演算装置101は、パーティションモードにおけるパーティションの実行モードに対応した分割数を取得する(ステップS2301)。
つぎに、最適化問題演算装置101は、組合せ最適化問題の繰り返し回数を、取得した分割数で分割して、実行モードにおけるパーティション当たりの繰り返し回数を算出する(ステップS2302)。そして、最適化問題演算装置101は、最適化装置408の制御部504により、実行モードにおける各パーティションに、算出した繰り返し回数を割り振る(ステップS2303)。
つぎに、最適化問題演算装置101は、最適化装置408の制御部504により、実行モードにおける各パーティションに、それぞれ異なるシード値を与える(ステップS2304)。そして、最適化問題演算装置101は、最適化装置408の制御部504により、実行モードにおける各パーティションに、繰り返し回数分の問題の演算を並列して実行させる(ステップS2305)。
つぎに、最適化問題演算装置101は、実行モードにおける各パーティションの演算結果を1つにまとめて(ステップS2306)、並列演算処理を呼び出したステップに戻る。図22に示したステップS2211において、ユーザに返す組合せ最適化問題の演算結果は、ステップS2306において1つにまとめた演算結果である。
これにより、実行モードに対応した並列数で組合せ最適化問題の演算を並列して実行させることができる。
(最適化装置408の装置構成例)
つぎに、最適化装置408のより具体的な装置構成例について説明する。以下に説明する最適化装置408は、図5~図16を用いて説明した最適化装置408と回路構成の一部が異なる。
図24は、最適化装置408の装置構成例を示す説明図である。最適化装置408は、複数のLFBを有する。最適化装置408は、当該複数のLFBを制御する制御部504を有する(図示を省略している)。
ここでは、一例として、1つのLFBに属するLFEの数をm個(mは2以上の整数)とし、最適化装置408は、LFB70a,70b,70c,70d,70e,70f,70g,70hを有するものとする。この場合、最適化装置408は、合計で8m個のLFEを有し、最大規模8mビットを実現可能である。最適化装置408では、例えば、LFB70a,70b,70c,70d,70e,70f,70g,70hのうちの1以上のLFBによってパーティションが実現される。ただし、最適化装置408が備えるLFBの個数は、8個に限らず、他の個数でもよい。
LFB70a,…,70hが備える複数のLFEは、図2に示したビット演算回路1a1,…,1aNの一例である。LFB70a,…,70hの各々は、所定数(m個)のLFEを要素に含む、LFEの1つのグループであると言える。また、LFB70a,…,70hの各々には、識別番号#0~#7が割り当てられている。
最適化装置408は、さらに、規模結合回路91、モード設定レジスタ92、加算器93a,93b,93c,93d,93e,93f,93g,93hおよびE格納レジスタ94a,94b,94c,94d,94e,94f,94g,94hを有する。
ここで、LFB70aは、LFE71a1,…,LFE71am、ランダムセレクタ部72、閾値生成部73、乱数生成部74およびモード設定レジスタ75を有する。LFE71a1,…,LFE71am、ランダムセレクタ部72、閾値生成部73、乱数生成部74およびモード設定レジスタ75は、図8で説明した同名のハードウェアに相当するため、説明を省略する。ただし、ランダムセレクタ部72は、選択した反転ビットに対する状態信号(フラグFx0、スピンビットqx0およびエネルギー変化量ΔEx0)の組を、規模結合回路91に出力する。また、ランダムセレクタ部72は、フラグ制御部52aを有さなくてよい(ただし、有してもよい)。例えば、ランダムセレクタ部72では、各LFEからの状態信号が、フラグ制御部52aを介さずに、ランダムセレクタ部72の初段の各選択回路に2つずつ入力される。なお、LFB70b,…,70hも、LFB70aと同様の回路構成を有する。
規模結合回路91は、LFB70a,…,70hの各々から状態信号を受け付け、状態信号に基づいて反転ビットの選択を行う。規模結合回路91は、反転ビットに関する信号を、LFB70a,…,70hの各LFEに供給する。
具体的には、規模結合回路91は、フラグFy0、ビットqy0および反転ビットを示すindex=y0をLFB70a1のLFE71a1,…,71amに出力する。ここで、以降の図では、ランダムセレクタ部72および規模結合回路91により出力される「index=x0」などの表記を「x0」のように略記することがある。規模結合回路91は、エネルギー変化量ΔEy0を加算器93aに出力する。
また、規模結合回路91は、フラグFy1、ビットqy1および反転ビットを示すindex=y1をLFB70bの各LFEに供給する。エネルギー変化量ΔEy1を加算器93bに出力する。
規模結合回路91は、フラグFy2、ビットqy2および反転ビットを示すindex=y2をLFB70cの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy2を加算器93cに出力する。
規模結合回路91は、フラグFy3、ビットqy3および反転ビットを示すindex=y3をLFB70dの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy3を加算器93dに出力する。
規模結合回路91は、フラグFy4、ビットqy4および反転ビットを示すindex=y4をLFB70eの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy4を加算器93eに出力する。
規模結合回路91は、フラグFy5、ビットqy5および反転ビットを示すindex=y5をLFB70fの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy5を加算器93fに出力する。
規模結合回路91は、フラグFy6、ビットqy6および反転ビットを示すindex=y6をLFB70gの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy6を加算器93gに出力する。
規模結合回路91は、フラグFy7、ビットqy7および反転ビットを示すindex=y7をLFB70hの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy7を加算器93hに出力する。
LFB70a,…,70hの各々が有するランダムセレクタ部(ランダムセレクタ部72を含む)および規模結合回路91は、図2に示した選択回路部2の一例である。
モード設定レジスタ92は、規模結合回路91に対する動作モード(パーティションモード、実行モード)の設定を行う。例えば、モード設定レジスタ92は、最適化問題演算装置101の実行制御部1803から入力される規模(スピンビット数)および精度(重み係数のビット数)に応じて、規模結合回路91に対する動作モード(パーティションモード、実行モード)の設定を行う。モード設定レジスタ92は、モード設定レジスタ75によりLFE71a1,…,71amおよびランダムセレクタ部72に設定される動作モードと同じ動作モードを規模結合回路91に設定する。モード設定レジスタ75,92によるモード設定の詳細は後述される。LFB70a,…,70hの各々が有するモード設定レジスタ(モード設定レジスタ75を含む)およびモード設定レジスタ92は、図2に示した設定変更部5の一例である。
加算器93aは、ΔEy0を、E格納レジスタ94aに格納されているエネルギー値E0に加算することで、当該エネルギー値E0を更新する。E格納レジスタ94aは、例えば、クロック信号(図示を省略している)に同期して(他のE格納レジスタも同様)、加算器93aにより計算されたエネルギー値E0を取り込む。
加算器93bは、ΔEy1を、E格納レジスタ94bに格納されているエネルギー値E1に加算することで、当該エネルギー値E1を更新する。E格納レジスタ94bは、加算器93bにより計算されたエネルギー値E1を取り込む。
加算器93cは、ΔEy2を、E格納レジスタ94cに格納されているエネルギー値E2に加算することで、当該エネルギー値E2を更新する。E格納レジスタ94cは、加算器93cにより計算されたエネルギー値E2を取り込む。
加算器93dは、ΔEy3を、E格納レジスタ94dに格納されているエネルギー値E3に加算することで、当該エネルギー値E3を更新する。E格納レジスタ94dは、加算器93dにより計算されたエネルギー値E3を取り込む。
加算器93eは、ΔEy4を、E格納レジスタ94eに格納されているエネルギー値E4に加算することで、当該エネルギー値E4を更新する。E格納レジスタ94eは、加算器93eにより計算されたエネルギー値E4を取り込む。
加算器93fは、ΔEy5を、E格納レジスタ94fに格納されているエネルギー値E5に加算することで、当該エネルギー値E5を更新する。E格納レジスタ94fは、加算器93fにより計算されたエネルギー値E5を取り込む。
加算器93gは、ΔEy6を、E格納レジスタ94gに格納されているエネルギー値E6に加算することで、当該エネルギー値E6を更新する。E格納レジスタ94gは、加算器93gにより計算されたエネルギー値E6を取り込む。
加算器93hは、ΔEy7を、E格納レジスタ94hに格納されているエネルギー値E7に加算することで、当該エネルギー値E7を更新する。E格納レジスタ94hは、加算器93hにより計算されたエネルギー値E7を取り込む。
E格納レジスタ94a,…,94hの各々は、例えば、フリップフロップである。
つぎに、LFB70aの回路構成例を説明する。LFB70b,…,70hもLFB70aと同様の回路構成である。
図25は、LFBの回路構成例を示す説明図である。LFE71a1,71a2,…,71amの各々は、スピンビットの1ビットとして用いられる。mは、2以上の整数であり、LFB50が備えるLFEの数を示す。図25の例では、一例として、m=1024としている。ただし、mは他の値でもよい。
LFE71a1,71a2,…,71amの各々には、識別情報(index)が対応付けられている。LFE71a1,71a2,…,71amの各々に対して、index=0,1,…,1023である。
以下では、LFE71a1の回路構成を説明する。LFE71a2,…,71amも、LFE71a1と同様の回路構成により実現される。LFE71a2,…,71amの回路構成の説明については、以下の説明における各要素の符号の末尾の「a1」の部分を、「a2」,…,「am」の各々に置換して(例えば、「80a1」の符号を「80am」のように置換して)読み替えればよい。
LFE71a1は、SRAM80a1、精度切替回路81a1、Δh生成部82a1、加算器83a1、h格納レジスタ84a1、反転判定部85a1、ビット格納レジスタ86a1、ΔE生成部87a1、判定部88a1を有する。
ここで、SRAM80a1、精度切替回路81a1、Δh生成部82a1、加算器83a1、h格納レジスタ84a1、反転判定部85a1、ビット格納レジスタ86a1、ΔE生成部87a1、判定部88a1は、各々、図8で説明した同名のハードウェアと同様の機能を有する。ただし、SRAM80a1(または精度切替回路81a1)および反転判定部85a1には、規模結合回路91により出力されたindex=y0および反転可否を示すフラグFy0が供給される。また、Δh生成部82a1には、規模結合回路91により出力された反転ビットqy0が供給される。
モード設定レジスタ75は、精度切替回路81a1,81a2,…,81amに対する重み係数のビット数(精度)の設定を行う。モード設定レジスタ75は、ランダムセレクタ部72に対して設定を行う信号線を有していない(ただし、当該信号線を有してもよい)。ここでは、一例として、上述した5種類のモードを利用可能である。
第1のモードは、規模1kビット/精度128ビットのモードであり、パーティションモード「8P(8分割)」に対応する。規模1kビット/精度128ビットのモードは、LFBを1個使用する。当該モードの各パーティションは、LFB70a,…,70hのいずれか1個だけで実現可能である。
第2のモードは、規模2kビット/精度64ビットのモードであり、パーティションモード「4P(4分割)」に対応する。規模2kビット/精度64ビットのモードは、LFBを2個使用する。例えば、当該モードの各パーティションは、LFB70a,70bの組合せ、LFB70c,70dの組合せ、LFB70e,70fの組合せ、および、LFB70g,70hの組合せのうちのいずれか1つの組合せで実現可能である。
第3のモードは、規模4kビット/精度32ビットのモードであり、パーティションモード「2P(2分割)」に対応する。規模4kビット/精度32ビットのモードは、LFBを4個使用する。例えば、当該モードの各パーティションは、LFB70a,70b,70c,70dの組合せ、および、LFB70e,70f,70g,70hの組合せのうちのいずれか1つの組合せで実現可能である。
第4のモードは、規模8kビット/精度16ビットのモードであり、パーティションモード「FULL(規模:8K、精度:16bit)」に対応する。規模8kビット/精度16ビットのモードは、LFBを8個使用する。当該モードのパーティションは、LFB70a,…,70hの組合せを用いて実現可能である。
第5のモードは、規模4kビット/精度64ビットのモードであり、パーティションモード「FULL(規模:4K、精度:64bit)」に対応する。規模4kビット/精度64ビットのモードは、LFBを8個使用する。当該モードのパーティションは、LFB70a,…,70hの組合せを用いて実現可能である。ただし、図16で説明したように、1つのLFBにおいて使用されるLFEの数は、LFB1つが備えるLFEの数の半分となる。
また、最適化装置408は、上記の規模1kビット/精度128ビットのモード、規模2kビット/精度64ビットのモード、規模4kビット/精度32ビットのモードを組合せて、同一問題または他の問題の演算を並列に実行可能にする。これにより、例えば、あるパーティションモードの複数のパーティションのうちの一部のパーティションだけ実行モードを変更したりすることができる。
そのため、規模結合回路91は、複数のLFB(LFBの組合せ)に対し、モード設定レジスタ92によるスピンビット数の設定に応じて、スピンビット数に相当する数のLFEを含むように、組み合せるLFB数(組み合せるグループ数)を選択する。規模結合回路91は、例えば、次の回路構成を有する。
図26は、規模結合回路の回路構成例を示す説明図である。規模結合回路91は、複数段にわたってツリー状に接続された選択回路91a1,91a2,91a3,91a4,91b1,91b2,91c1と、乱数生成部91dと、モード選択回路91e1,91e2,91e3,91e4,91e5,91e6,91e7,91e8を有する。
初段の選択回路91a1,…,91a4の各々には、LFB70a,…,70hのそれぞれが出力する変数qiとFiとΔEiとindex=iの組(状態信号)が2組ずつ入力される。例えば、選択回路91a1には、LFB70a(#0)が出力する(qx0,Fx0,ΔEx0,index=x0)の組と、LFB70b(#1)が出力する(qx1,Fx1,ΔEx1,index=x1)の組が入力される。また、選択回路91a2には、LFB70c(#2)が出力する(qx2,Fx2,ΔEx2,index=x2)の組とLFB70d(#3)が出力する(qx3,Fx3,ΔEx3,index=x3)の組が入力される。選択回路91a3には、LFB70e(#4)が出力する(qx4,Fx4,ΔEx4,index=x4)の組とLFB70f(#5)が出力する(qx5,Fx5,ΔEx5,index=x5)の組が入力される。選択回路91a4には、LFB70g(#6)が出力する(qx6,Fx6,ΔEx6,index=x6)の組とLFB70h(#7)が出力する(qx7,Fx7,ΔEx7,index=x7)の組が入力される。
そして、選択回路91a1,…,91a4の各々は、乱数生成部91dが出力する1ビット乱数に基づいて、2組のうちの一方の組の(xi,Fi,ΔEi,index=i)を選択する。このとき、選択回路91a1,…,91a4の各々は、Fiが1である組を優先的に選択し、両方の組が1の場合には1ビット乱数に基づいていずれか一方の組を選択する(なお、選択回路91b1,91b2,91c1も同様)。ここで、乱数生成部91dは、1ビット乱数を選択回路ごとに個別に生成し、各選択回路に供給する。また、選択回路91a1,…,91a4の各々は、どちらの組を選択したかを示す識別値を、両組に含まれるindexに基づいて生成し、選択した変数qiとFiとΔEiと識別値とを含む状態信号を出力する。なお、選択回路91a1,…,91a4の各々が出力する識別値は、入力されたindexよりも1ビット増える。
2段目の選択回路91b1,91b2の各々には、選択回路91a1,…,91a4が出力する状態信号が2つずつ入力される。例えば、選択回路91b1には、選択回路91a1,91a2が出力する状態信号が入力され、選択回路91b2には、選択回路91a3,91a4が出力する状態信号が入力される。
そして、選択回路91b1,91b2の各々は、2つの状態信号と、乱数生成部91dが出力する1ビット乱数に基づいて、2つの状態信号のいずれか一方を選択する。また、選択回路91b1,91b2の各々は、選択した状態信号に含まれる識別値について、いずれの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
最終段の選択回路91c1には、選択回路91b1,91b2が出力する状態信号が2つ入力される。選択回路91c1は、2つの状態信号と乱数生成部91dが出力する1ビット乱数に基づいて、2つの状態信号のいずれか一方を選択する。また、選択回路91c1は、選択した状態信号に含まれる識別値について、いずれの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
前述のように、識別値はindexに相当する。規模結合回路91は、変数qiとFiとΔEiと同様にして、各選択回路により、各ランダムセレクタ部から入力されたindexの選択を行うことで、反転ビットに対応するindexを出力してもよい。この場合、各ランダムセレクタ部は、各LFEから変数qやフラグFと共にindexの供給を受けることになる。制御部504は、例えば、各LFEの所定のindex格納用のレジスタに対してLFBの組合せに応じたindexの設定を行う。
モード選択回路91e1,…,91e8の各々は、規模(すなわち、1kビット、2kビット、4kビットおよび8kビット)に応じた入力端子を有する。図中、モード選択回路91e1,…,91e8の各々に表記された「1」は規模1kビットに対応する入力端子を示す。同「2」は規模2kビットに対応する入力端子を示す。同「4」は規模4kビット(ただし、精度32ビット)に対応する入力端子を示す。同「8」は規模8kビット(または規模4kビット/精度64ビット)に対応する入力端子を示す。
モード選択回路91e1の規模1kビットの入力端子には、LFB70a(#0)が出力する状態信号が入力される。モード選択回路91e2の規模1kビットの入力端子には、LFB70b(#1)が出力する状態信号が入力される。モード選択回路91e3の規模1kビットの入力端子には、LFB70c(#2)が出力する状態信号が入力される。モード選択回路91e4の規模1kビットの入力端子には、LFB70d(#3)が出力する状態信号が入力される。モード選択回路91e5の規模1kビットの入力端子には、LFB70e(#4)が出力する状態信号が入力される。モード選択回路91e6の規模1kビットの入力端子には、LFB70f(#5)が出力する状態信号が入力される。モード選択回路91e7の規模1kビットの入力端子には、LFB70g(#6)が出力する状態信号が入力される。モード選択回路91e8の規模1kビットの入力端子には、LFB70h(#7)が出力する状態信号が入力される。
モード選択回路91e1,91e2の各々の規模2kビットの入力端子には、選択回路91a1が出力する状態信号が入力される。モード選択回路91e3,91e4の各々の規模2kビットの入力端子には、選択回路91a2が出力する状態信号が入力される。モード選択回路91e5,91e6の各々の規模2kビットの入力端子には、選択回路91a3が出力する状態信号が入力される。モード選択回路91e7,91e8の各々の規模2kビットの入力端子には、選択回路91a4が出力する状態信号が入力される。
モード選択回路91e1,91e2,91e3,91e4の各々の規模4kビットの入力端子には、選択回路91b1が出力する状態信号が入力される。モード選択回路91e5,91e6,91e7,91e8の各々の規模4kビットの入力端子には、選択回路91b2が出力する状態信号が入力される。
モード選択回路91e1,…,91e8の各々の規模8kビットの入力端子には、選択回路91c1が出力する状態信号が入力される。
モード選択回路91e1,…,91e8の各々は、モード設定レジスタ92による規模(スピンビット数)の設定を受け付ける。ただし、図26では、モード設定レジスタ92からモード選択回路91e2,…,91e8の各々に対する信号線を「…」の表記により略記している。モード選択回路91e1,…,91e8の各々は、設定された規模に応じた入力端子に入力された状態信号を選択して、(xj,Fj,index=j)をLFB70a,…,70hへ出力し、ΔEjを加算器93a,…,93hへ出力する。
例えば、モード選択回路91e1は、(xy0,Fy0,index=y0)をLFB70aへ出力し、ΔEy0を加算器93aへ出力する。加算器93aは、ΔEy0を基にE0を更新する。モード選択回路91e2は、(xy1,Fy1,index=y1)をLFB70bへ出力し、ΔEy1を加算器93bへ出力する。加算器93bは、ΔEy1を基にE1を更新する。モード選択回路91e3は、(xy2,Fy2,index=y2)をLFB70cへ出力し、ΔEy2を加算器93cへ出力する。加算器93cは、ΔEy2を基にE2を更新する。モード選択回路91e4は、(xy3,Fy3,index=y3)をLFB70dへ出力し、ΔEy3を加算器93dへ出力する。加算器93dは、ΔEy3を基にE3を更新する。モード選択回路91e5は、(xy4,Fy4,index=y4)をLFB70eへ出力し、ΔEy4を加算器93eへ出力する。加算器93eは、ΔEy4を基にE4を更新する。モード選択回路91e6は、(xy5,Fy5,index=y5)をLFB70fへ出力し、ΔEy5を加算器93fへ出力する。加算器93fは、ΔEy5を基にE5を更新する。モード選択回路91e7は、(xy6,Fy6,index=y6)をLFB70gへ出力し、ΔEy6を加算器93gへ出力する。加算器93gは、ΔEy6を基にE6を更新する。モード選択回路91e8は、(xy7,Fy7,index=y7)をLFB70hへ出力し、ΔEy7を加算器93hへ出力する。加算器93hは、ΔEy7を基にE7を更新する。
すなわち、最適化装置408は、あるLFB(グループ)に属する各LFEから出力された反転可否を示す信号に基づいていずれかのビットを選択し、選択したビットを示す信号を規模結合回路91に出力するランダムセレクタ部をLFBごとに有する。規模結合回路91は、スピンビット数の設定に応じて1以上のLFBを組合せ、当該1以上のLFBの各々に対応するランダムセレクタ部により選択されたビットを示す信号に基づいて反転させるビットを選択する。規模結合回路91は、反転させるビットを示す信号を当該1以上のLFBに属する各LFEに出力する。
ここで、モード設定レジスタ92は、モード選択回路91e1,…,91e8に対して、個別に規模の設定を行う。ただし、ある規模のモードにおいて、組合せて利用されるLFBに対応するモード選択回路には、共通の規模が設定される。
例えば、モード設定レジスタ92は、LFBの第1の組合せに対応する第1のスピンビット列のスピンビット数とLFBの第2の組合せに対応する第2のスピンビット列のスピンビット数とを、同じビット数、または、異なるビット数に設定してもよい。また、モード設定レジスタ75を含む各LFBのモード設定レジスタは、LFBの第1の組合せに属するLFEに対する重み係数のビット数とLFBの第2の組合せに属するLFEに対する重み係数のビット数とを、同じビット数、または、異なるビット数に設定してもよい。
これにより、最適化装置408において、解くことができる問題の最大規模や最大精度が異なる様々なパーティションモードおよび実行モードを実現することができる。
例えば、LFB70a,70bを組合せて利用して規模2kビットのモードを利用する場合、モード設定レジスタ92からモード選択回路91e1,91e2へ、規模2kビットのモードを選択する選択信号が供給される。このとき、例えば、最適化装置408は、モード設定レジスタ92の設定により残りの6つのLFBを利用して、LFB70a,70bによる演算と同じ問題、または、別の問題を並列に実行することが可能である。
例えば、規模結合回路91は、残りの6つのLFBに対して、6つのLFBのうちの2つずつ組合せにより、規模2kビットのモードを3つ実現してもよい。これにより、パーティションモード「4P(4分割)」の4個のパーティションを実現することができる。
また、規模結合回路91は、残りの6つのLFBに対して、6つのLFBの各々で規模1kビットのモードを6つ実現してもよい。これにより、パーティションモード「4P(4分割)」の4個のパーティションのうち、1個のパーティションの実行モードを実行モード「4P」とし、残り3個のパーティションの実行モードを実行モード「8P」とした状態とすることができる。
さらに、規模結合回路91は、6つのLFBのうち2つのLFBの組合せにより、規模2kビットのモードを実現し、他の4つのLFBの組合せにより、規模4kビットのモードを実現してもよい。これにより、パーティションモード「2P(2分割)」の2個のパーティションのうち、1個のパーティションの実行モードを実行モード「2P」とし、残り1個のパーティションの実行モードを実行モード「4P」とした状態とすることができる。
並列に実現するモードの組合せは、上記の組合せに限らず、例えば、規模1kビットのモードが8つの組合せ、規模2kビットのモードが4つの組合せ、規模1kビットのモードが4つと規模2kビットのモードが2つの組合せなど、種々の組合せが考えられる。
このように、規模結合回路91は、モード設定レジスタ92により複数のスピンビット列の各々に対するスピンビット数の設定を受け付け、複数のスピンビット列の各々のスピンビット数に対して、組み合せるLFB数(グループ数)を選択し、LFBを組み合せる。これにより、1つの最適化装置408上に複数のイジングモデルを実現できる。
なお、組合せて利用されるLFBの組に対応するE格納レジスタの組には、共通のエネルギーが格納される。例えば、LFB70a,70bの組合せで利用する場合、E格納レジスタ94a,94bに格納されるE0,E1は同じ値となる。この場合、当該LFB70a,70bの組に対するエネルギー値を読み出すとき、制御部504は、E格納レジスタ94a,94bのいずれか一方(例えば、LFB70aに対応するE格納レジスタ94a)に格納されたエネルギー値を読み出せばよい。制御部504は、LFBの他の組合せに対しても同様にしてエネルギー値を読み出す。
例えば、制御部504は、最適化問題演算装置101の実行制御部1803から、並列に演算する各問題に対する初期値や動作条件の入力を受け付ける。そして、制御部504は、最適化問題演算装置101の実行制御部1803から入力される各問題に応じた規模/精度を、1つの問題に対して利用するLFBのグループ(すなわち、パーティション)ごとに、LFBのモード設定レジスタおよびモード設定レジスタ92に設定する。
具体的には、例えば、制御部504は、第1の問題について、規模2kビット/精度64ビットをLFB70a,70bのモード設定レジスタに設定するとともに、モード選択回路91e1,91e2に規模2kビットに対する出力を行うようモード設定レジスタ92に設定する。また、制御部504は、第2の問題について、規模2kビット/精度64ビットをLFB70c,70dのモード設定レジスタに設定するとともに、モード選択回路91e3,91e4に規模2kビットに対する出力を行うようモード設定レジスタ92に設定する。
この場合、最適化装置408では、2つの問題(あるいは、両問題は同一問題でもよい)を並列に演算可能である。具体的には、制御部504は、各問題に対応するLFBの組合せに対して、図15で示したフローチャートの手順を行うように各LFBを制御する。
制御部504は、演算終了後、LFB70a,70bの各LFEから第1の問題に対するスピンビット列を読み出して、第1の問題の解とする。また、制御部504は、演算終了後、LFB70c,70dの各LFEから第2の問題に対するスピンビット列を読み出して、第2の問題の解とする。3以上の問題も同様にして、並列に演算可能である。これにより、複数の問題に対する演算を効率的に実行できる。
また、同一問題をLFBの複数の組により並列に解く場合、制御部504は、例えば、レプリカ交換法と呼ばれる手法により、演算を高速化することが考えられる。レプリカ交換法では、LFBの各組(各レプリカ)で異なる温度パラメータによるスピンビット列の更新を行い、所定回数の更新後に、所定確率で温度パラメータをLFBの組の間(すなわち、レプリカ間)で交換することで、解の探索を高速化する。
あるいは、解の探索方法として、図15の開始(START)から終了(END)までの手順を繰り返し行い、複数の演算結果の中から、最小となるエネルギーのスピンビット列を解として求める方法も考えられる。この場合、制御部504は、LFBの複数の組を用いて同一問題を並列に解くことで、上記繰り返し回数を減らし、演算を高速化することができる。
以上説明したように、実施の形態にかかる最適化問題演算装置101によれば、組合せ最適化問題を受け付け、受け付けた組合せ最適化問題の規模または要求精度に応じて、最適化装置408のパーティションモードおよび実行モードを決定することができる。そして、最適化問題演算装置101によれば、決定したパーティションモードおよび実行モードにより、組合せ最適化問題の実行回数を当該実行モードに対応した分割数で分割した回数に基づいて、最適化装置408で組合せ最適化問題の演算を並列して実行させることができる。
これにより、問題の規模や要求精度に応じたパーティションモードおよび実行モードにより、実行回数が指定された組合せ最適化問題の演算を並列して行うことができる。このため、最適化装置408のハードウェアリソースを有効活用して演算効率を高めることができ、複数の問題(同じ問題の繰り返しでも、異なる問題でもよい)の演算処理の高速化を図ることができる。
また、最適化問題演算装置101によれば、並列して実行させる組合せ最適化問題の演算に、それぞれ異なるシード値を設定して実行を開始させることができる。これにより、並列して実行させた組合せ最適化問題の解が同じものとなるのを防いで、ユーザが指定した繰り返し回数に応じた複数通りの異なる解を得ることができる。
また、最適化問題演算装置101によれば、組合せ最適化問題の実行回数が閾値以上の場合に、最適化装置408で組合せ最適化問題の演算を並列して実行させることができる。これにより、組合せ最適化問題の実行回数が少ないときは、複数のパーティションを使用しないで、残りのパーティションを、新たな問題の演算に利用するために待機させることができる。
なお、本実施の形態で説明した最適化問題演算方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本最適化問題演算プログラムは、ハードディスク、フレキシブルディスク、CD、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本最適化問題演算プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明した最適化問題演算装置101の各機能部は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けICやFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く演算ユニットに対する組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に応じて、前記演算ユニットの論理的な分割状態を規定するパーティションモード、および、前記パーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードを決定し、
決定した前記パーティションモードおよび前記実行モードにより、前記組合せ最適化問題の実行回数を当該実行モードに対応した分割数で分割した回数に基づいて、前記演算ユニットで前記組合せ最適化問題の演算を並列して実行させる、
処理をコンピュータに実行させる最適化問題演算プログラム。
(付記2)前記実行させる処理は、
並列して実行させる前記組合せ最適化問題の演算に、それぞれ異なるシード値を設定して実行を開始させる、付記1に記載の最適化問題演算プログラム。
(付記3)前記実行させる処理は、
前記組合せ最適化問題の実行回数が閾値以上の場合に、前記演算ユニットで前記組合せ最適化問題の演算を並列して実行させる、付記1または2に記載の最適化問題演算プログラム。
(付記4)論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く演算ユニットに対する組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に応じて、前記演算ユニットの論理的な分割状態を規定するパーティションモード、および、前記パーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードを決定し、
決定した前記パーティションモードおよび前記実行モードにより、前記組合せ最適化問題の実行回数を当該実行モードに対応した分割数で分割した回数に基づいて、前記演算ユニットで前記組合せ最適化問題の演算を並列して実行させる、
処理をコンピュータが実行する最適化問題演算方法。
(付記5)論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く演算ユニットと、
前記演算ユニットに対する組合せ最適化問題を受け付ける受付部と、
前記組合せ最適化問題の規模または要求精度に応じて、前記演算ユニットの論理的な分割状態を規定するパーティションモード、および、前記パーティションモードにおいて演算の際に利用されるハードウェアリソースの範囲を規定する実行モードを決定する決定部と、
前記決定部が決定した前記パーティションモードおよび前記実行モードにより、前記組合せ最適化問題の実行回数を当該実行モードに対応した分割数で分割した回数に基づいて、前記演算ユニットで前記組合せ最適化問題の演算を並列して実行させる実行制御部と、
を有する最適化問題演算装置。