(57)【要約】【課題】演算効率を向上させる。【解決手段】保持部１１は、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報１１ａを保持し、制御部１２は、各試行における繰り返し回数を計数する繰り返し回数計数部１２ａと、試行回数を計数する試行回数計数部１２ｂとを有し、コンテキスト情報１１ａについて、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における繰り返し回数の更新制御を上記複数の試行の数だけ繰り返し、演算部１３は、生成された乱数と、保持した重みと、スピン情報と、更新制御によって更新された現在の状態及び温度に基づいて、複数のエネルギーの変化値の候補を計算し、選択部は、乱数に基づき、演算部１３が計算した複数のエネルギーの変化値の候補から、更新対象のエネルギーの変化値を選択する。【選択図】図１
2019133517.tif 000002
【特許請求の範囲】
【請求項１】
複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持する保持部と、
各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返す制御部と、
生成された乱数と、保持した重みと、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づいて、複数のエネルギーの変化値の候補を計算する演算部と、
前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、前記更新対象のエネルギーの変化値を選択する選択部と、
を有する最適化装置。
【請求項２】
前記制御部が有する第１のレジスタと、前記演算部が有する第２のレジスタと、前記選択部が有する第３のレジスタとが環状に接続される、請求項１に記載の最適化装置。
【請求項３】
前記コンテキスト情報は、さらに、オフセットを含み、
前記制御部は、さらに、オフセット増分値と前記スピン情報と前記更新対象のエネルギーの変化値とに基づいて、前記コンテキスト情報を更新する、請求項１に記載の最適化装置。
【請求項４】
前記制御部は、さらに、前記複数の試行による組である試行セットを計数する試行セット計数部を有し、前記保持部が保持する前記コンテキスト情報について、前記スピン情報と前記更新対象のエネルギーの変化値とに基づき、各試行セットにおける前記複数の試行の数の前記更新制御を第１の試行セット数だけ繰り返す、請求項１に記載の最適化装置。
【請求項５】
前記制御部と、前記演算部とは、複数のエントリを有するＦＩＦＯを介して接続される、請求項１に記載の最適化装置。
【請求項６】
前記演算部と、前記選択部とは、複数のエントリを有するＦＩＦＯを介して接続される、請求項１に記載の最適化装置。
【請求項７】
前記選択部と、前記制御部とは、複数のエントリを有するＦＩＦＯを介して接続される、請求項１に記載の最適化装置。
【請求項８】
前記制御部と、前記演算部と、前記選択部は、それぞれ、同じクロックサイクルにおいて異なる試行の処理を行う、請求項１に記載の最適化装置。
【請求項９】
最適化装置の制御方法において、
前記最適化装置が有する保持部が、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持し、
前記最適化装置が有する制御部が、各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返し、
前記最適化装置が有する演算部が、生成された乱数と、保持した重みと、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づいて、複数のエネルギーの変化値の候補を計算し、
前記最適化装置が有する選択部が、前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、前記更新対象のエネルギーの変化値を選択する、
最適化装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化装置及び最適化装置の制御方法に関する。
【背景技術】
【０００２】
ノイマン型コンピュータが不得意とする多変数の最適化問題を解く方法として、イジング型のエネルギー関数を用いた最適化装置（イジング装置またはボルツマンマシンと呼ばれる場合もある）を用いる方法がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
【０００３】
最適化装置は、イジングモデルに含まれる各量子ビット（以下単にビットという）のそれぞれの値（＋１または−１（スピンの向きに相当））を、他のビットの値と、他のビットと自身との間の重みを示す重み係数とバイアスに応じて決定する。なお、重み係数とバイアスは、計算対象の最適化問題によって決まる定数である。最適化装置は、たとえば、シミュレーテッド・アニーリング（以下ＳＡと略す）などにより、上記のようなエネルギー関数の最小値が得られる各ビットの値の組み合わせを、解として求める。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−２５０３４６号公報
【特許文献２】特開２０１７−１３８７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところでＳＡでは異なる温度や初期状態などでの各試行において、複数のビットの何れかの値を更新する更新処理が多数回繰り返される。ＳＡを利用して最適化問題を解く最適化装置を論理回路により実現する場合、１回の更新処理当たりに複数の演算処理を行うため、複数クロックサイクルかかり演算効率が悪いという問題があった。
【０００６】
１つの側面では、本発明は、演算効率を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持する保持部と、各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返す制御部と、生成された乱数と、保持した重みと、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づいて、複数のエネルギーの変化値の候補を計算する演算部と、前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、前記更新対象のエネルギーの変化値を選択する選択部と、を有する最適化装置が提供される。
【０００８】
また、１つの実施形態では、最適化装置の制御方法が提供される。
【発明の効果】
【０００９】
１つの側面では、演算効率を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態の最適化装置の一例を示す図である。
【図２】第２の実施の形態の最適化装置の一例を示す図である。
【図３】データフロー制御部の一例を示す図である。
【図４】演算部の一例を示す図である。
【図５】更新対象選択部の一例を示す図である。
【図６】選択処理部の入出力の例を示す真理値表である。
【図７】あるクロックサイクルにおいてパイプライン処理される各試行に関するデータの一例の様子を示す図である。
【図８】図７の状態の１クロックサイクル後においてパイプライン処理される各試行に関するデータの一例の様子を示す図である。
【図９】ＦＩＦＯのエントリ数が３である場合のパイプライン処理の一例を示す図である。
【図１０】最適化装置の全体の動作の一例の流れを示すフローチャートである。
【図１１】更新処理の一例の流れを示すフローチャートである。
【図１２】比較例の最適化装置を示す図である。
【図１３】第２の実施の形態の最適化装置と比較例の最適化装置の更新処理の実行時間を比較した例を示す図である。
【発明を実施するための形態】
【００１１】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
（第１の実施の形態）
以下に示す最適化装置は、イジング型のエネルギー関数を用いて、最適化問題を計算する装置である。イジング型のエネルギー関数Ｅ（ｘ）は、たとえば、以下の式（１）で定義される。
【００１２】
【数１】
2019133517.tif 000003
【００１３】
右辺の１項目は、全ビットから選択可能な２つのビットの全組み合わせについて、漏れと重複なく、２つのビットの値と重み係数との積を積算したものである。ｘｉは、ｉ番目のビットの値（状態変数）、ｘｊは、ｊ番目のビットの値であり、Ｗｉｊは、ｉ番目のビットとｊ番目のビットの間の重み（たとえば結合の強さ）を示す重み係数である。なお、Ｗｉｊ＝Ｗｊｉ、Ｗｉｉ＝０である。
【００１４】
右辺の２項目は、全ビットのそれぞれのバイアスとビットの値との積の総和を求めたものである。ｂｉは、ｉ番目のビットのバイアスを示している。
なお、以下では、論理回路において用いられる信号の値（０，１）と対応付けるために、ビットの２つの値のうち−１を０、＋１を１として説明する。
【００１５】
図１は、第１の実施の形態の最適化装置の一例を示す図である。
最適化装置１０は、保持部１１、制御部１２、演算部１３、選択部１４を有する。
保持部１１は、コンテキスト情報１１ａを保持する。コンテキスト情報１１ａは、複数の試行のそれぞれについての最小エネルギーの状態、現在の状態、最小エネルギー、現在のエネルギー、温度及びバイアスを含む。
【００１６】
最小エネルギーの状態とは、各試行において、これまでの更新処理で、式（１）に示したようなエネルギー関数の値（エネルギー）が最小になったときの、各ビットの値の組み合わせである。現在の状態とは、各試行における、現在の繰り返し回数における各ビットの値の組み合わせである。温度は、各試行におけるＳＡにて用いられる温度パラメータである。バイアスは、上記の式（１）に含まれるバイアス（たとえば、ｂｉ）である。
【００１７】
このようなコンテキスト情報の初期値は、たとえば、最適化装置１０の外部から供給される。また、コンテキスト情報は、各試行におけるＳＡの処理時に更新される。
保持部１１は、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置、または、フラッシュメモリなどの不揮発性の記憶装置である。
【００１８】
制御部１２は、各試行における更新処理の繰り返し回数を計数する繰り返し回数計数部１２ａと、試行回数を計数する試行回数計数部１２ｂとを有する。
ＳＡやその応用となるレプリカ交換法では、異なる温度や異なる初期状態などでの各試行において、複数のビットの何れかの値を更新する更新処理が多数回繰り返される。以下の説明では、試行回数をＭ回、繰り返し回数をＮ回とする。たとえば、Ｎ＝１００００００、Ｍ＝１００などである。
【００１９】
また、制御部１２は、保持部１１が保持するコンテキスト情報１１ａについて、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における繰り返し回数（Ｎ回）の更新制御を試行回数（Ｍ回）だけ繰り返す。
【００２０】
更新制御は、ＳＡを実現するために制御部１２、演算部１３、選択部１４を用いて行われる更新処理についての制御である。更新制御には、ＳＡを実現するために、たとえば、ある繰り返し回数ごとに温度を下げていくような制御や、スピン情報と更新対象のエネルギーの変化値とに基づいてエネルギーや状態（各ビットの値の組み合わせ）の更新を行う制御が含まれる。スピン情報とは、どのビットのスピンの向きを更新するか否か（つまりビットの値を更新するか否か）を示す情報を含む。更新対象のエネルギーの変化値については後述する。
【００２１】
このような制御部１２は、カウンタ、セレクタ、レジスタなどの各種論理回路を用いて実現できる。
演算部１３は、乱数生成部（図示省略）にて生成された乱数と、重み保持部１３ａに保持した重み係数と、上記のスピン情報と、更新制御によって更新された現在の状態及び温度に基づいて、複数のエネルギーの変化値の候補を計算する。
【００２２】
たとえば、ｉ番目のビットのスピン反転に伴うエネルギーの変化値ΔＥｉは、以下の式（２）で表される。
【００２３】
【数２】
2019133517.tif 000004
【００２４】
式（２）において、ｉ番目のビットの値ｘｉが１のとき、２ｘｉ−１は１となり、値ｘｉが０のとき、２ｘｉ−１は−１となる。なお、以下の式（３）で表されるｈｉはローカルフィールド（局所場）と呼ばれ、各ビットにおけるスピンの反転によるエネルギー変化の割合を表している。ローカルフィールドｈｉは、式（１）のバイアスｂｉが更新されたものに相当する（言い換えると、初期状態のローカルフィールドｈｉがバイアスｂｉ）。
【００２５】
【数３】
2019133517.tif 000005
【００２６】
演算部１３は、上記のようなエネルギーの変化値を、各ビットについて計算する。さらに、演算部１３は、乱数に基づいて、エネルギーの変化値のうち、どのビットのエネルギーの変化値を候補（現在のエネルギーから差し引くまたは現在のエネルギーに加える候補）とするか計算する。たとえば、演算部１３は、乱数と現在の温度とから閾値を計算し、エネルギーの変化値がその閾値よりも大きい場合には、そのエネルギーの変化値を候補とする。乱数を用いて閾値を計算することで、ある程度エネルギーが高くなる状態の変化も可能となり、最適化問題を計算したときの解が局所解から脱出することが可能となる。また、制御部１２の制御のもと、温度を徐々に小さくして閾値の変化の幅を徐々に小さくすることで、解が最適解へと収束していく。
【００２７】
このような演算部１３は、演算器（乗算器や加算器など）、セレクタ、レジスタなどの各種論理回路を用いて実現できる。
選択部１４は、乱数に基づいて、演算部１３が計算した複数のエネルギーの変化値の候補から、更新対象のエネルギーの変化値を選択する。なお、イジングモデルのＳＡにおいては、収束性を考慮して、状態遷移に伴い変化するビットの数は１つとするため、選択される更新対象のエネルギーの変化値も１つとする。
【００２８】
選択部１４は、セレクタやレジスタなどの各種論理回路を用いて実現できる。
上記のような最適化装置１０では、保持部１１に保持された複数の試行に関するコンテキスト情報１１ａを用いて複数の試行を同時に処理するパイプライン処理が可能になる。図１には、各パイプライン処理に対応する６つの試行（試行Ｎｏ．１〜試行Ｎｏ．６）が同時に処理される例が示されている。この場合、レイテンシＬは、パイプライン処理の段数に等しいため、Ｌ＝６となる。なお、以下では説明を簡略化するため、制御部１２、演算部１３、選択部１４のそれぞれにおけるパイプライン処理が２クロックサイクルで終わるものとする。
【００２９】
なお、図１には、制御部１２が有するレジスタ１２ｃと、演算部１３が有するレジスタ１３ｂと、選択部１４が有するレジスタ１４ａが、環状に接続されている例が示されている。レジスタ１２ｃ，１３ｂ，１４ａは、制御部１２、演算部１３及び選択部１４において、１クロックサイクルで処理が行われる回路部（図示省略）間に接続されている。
【００３０】
たとえば、あるクロックサイクルにおいて、制御部１２における２クロックサイクル目の処理を行う回路部では試行Ｎｏ．１の試行のデータが処理され、制御部１２における１クロックサイクル目の処理を行う回路部では試行Ｎｏ．２の試行のデータが処理される。また、そのクロックサイクルにおいて、選択部１４における２クロックサイクル目の処理を行う回路部では試行Ｎｏ．３の試行のデータが処理され、選択部１４における１クロックサイクル目の処理を行う回路部では試行Ｎｏ．４の試行のデータが処理される。また、そのクロックサイクルにおいて、演算部１３における２クロックサイクル目の処理を行う回路部では試行Ｎｏ．５の試行のデータが処理され、演算部１３における１クロックサイクル目の処理を行う回路部では試行Ｎｏ．６の試行のデータが処理される。
【００３１】
次のクロックサイクルでは、制御部１２における２クロックサイクル目の処理を行う回路部では試行Ｎｏ．２の試行のデータが処理され、制御部１２における１クロックサイクル目の処理を行う回路部では試行Ｎｏ．３の試行のデータが処理される。また、そのクロックサイクルにおいて、選択部１４における２クロックサイクル目の処理を行う回路部では試行Ｎｏ．４の試行のデータが処理され、選択部１４における１クロックサイクル目の処理を行う回路部では試行Ｎｏ．５の試行のデータが処理される。また、そのクロックサイクルにおいて、演算部１３における２クロックサイクル目の処理を行う回路部では試行Ｎｏ．６の試行のデータが処理され、演算部１３における１クロックサイクル目の処理を行う回路部では試行Ｎｏ．１の試行のデータが処理される。
【００３２】
このように、各試行のデータは、制御部１２、演算部１３、選択部１４によるリング状のパイプラインを、図１の例では、反時計回りに遷移していく。そして、上記のような各試行の処理が繰り返される。
【００３３】
制御部１２は、繰り返し回数計数部１２ａで計数される各試行における繰り返し回数がＮに達すると、各試行の処理を終了する。このとき制御部１２は、各試行におけるＮ回目の更新処理後のエネルギー、状態を出力する。なお、制御部１２は、各試行におけるＮ回の更新処理で得られたエネルギーのうち最小のエネルギーや、最小のエネルギーが得られたときの状態を出力してもよい。
【００３４】
その後、状態、エネルギー、バイアス（ローカルフィールド）、温度などの初期化が行われ、図１の例では、新たな６つの試行において同様の更新処理が繰り返される。Ｍ回の試行のそれぞれにおいてＮ回の更新処理が終了した場合、最適化装置１０は最適化処理を終了する。
【００３５】
たとえば、Ｎ回の更新処理を行うＭ回の試行で得られたＭ個のエネルギーのうち、最小のエネルギーのときの状態が、最適化問題の解となる。
以上のように、第１の実施の形態の最適化装置１０によれば、複数の試行を同時に処理することが可能となるため、制御部１２、演算部１３、選択部１４の各部の稼働率が上がり、演算効率を向上させることができる。
【００３６】
（第２の実施の形態）
図２は、第２の実施の形態の最適化装置の一例を示す図である。
第２の実施の形態の最適化装置２０は、全体制御部２１、入力部２２、メモリ２３ａ，２３ｂ，２３ｃ，２３ｄ，２３ｅ，２３ｆ，２３ｇ、データフロー制御部２４を有する。また、最適化装置２０は、ＦＩＦＯ（First In, First Out）メモリ（以下単にＦＩＦＯという）２５ａ，２５ｂ，２５ｃ、演算部２６、更新対象選択部２７、乱数生成部２８、出力部２９を有する。最適化装置２０は、たとえば、１チップの半導体集積回路により実現できる。
【００３７】
また、最適化装置２０は、バス２０ａを介して、プロセッサ２０ｂ及びメモリ２０ｃに接続される。
プロセッサ２０ｂは、メモリ２０ｃに記憶されているデータを読み出し、バス２０ａを介して最適化装置２０に供給する処理や、最適化装置２０が出力するデータを、バス２０ａを介してメモリ２０ｃに記憶する処理などを行う。プロセッサ２０ｂは、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などの演算処理装置である。ただし、プロセッサ２０ｂの代わりに、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を用いてもよい。プロセッサ２０ｂは、メモリ２０ｃに記憶されたプログラムを実行する。
【００３８】
メモリ２０ｃは、計算対象の最適化問題によって決まる定数である、バイアス及び複数の重み係数の他、状態、エネルギー、最小のエネルギー、後述するオフセットの初期値などのデータを記憶する。メモリ２０ｃは、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などの揮発性の記憶装置、または、フラッシュメモリ、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）やＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置である。
【００３９】
最適化装置２０において、全体制御部２１は、最適化装置２０の起動や終了を制御する。また、全体制御部２１は、データフロー制御部２４に対して、繰り返し回数（Ｎ）や、試行回数（Ｍ）を指定する。
【００４０】
入力部２２は、メモリ２０ｃから読み出されたデータを受け、データフロー制御部２４に供給する。
メモリ２３ａ〜２３ｇは、コンテキスト情報を記憶する。以下の説明では、７つのメモリ２３ａ〜２３ｇのそれぞれが１種類のコンテキスト情報を記憶するものとして説明する。メモリ２３ａは各試行における現在の状態を記憶し、メモリ２３ｂは各試行における現在のエネルギーを記憶する。メモリ２３ｃは各試行における現在の最小エネルギーを記憶し、メモリ２３ｄは各試行における現在の最小エネルギーの状態を記憶する。メモリ２３ｅは各試行における現在の温度を記憶し、メモリ２３ｆは各試行における現在のオフセットを記憶する。メモリ２３ｇは、各試行における現在のバイアス（ローカルフィールド）を記憶する。
【００４１】
メモリ２３ａ〜２３ｇは、たとえば、ＲＡＭなどの揮発性の記憶装置、または、フラッシュメモリなどの不揮発性の記憶装置である。
なお、メモリ２３ａ〜２３ｇの代わりに、１つのメモリが用いられてもよい。
【００４２】
データフロー制御部２４は、第１の実施の形態の制御部１２と同様の機能を有する。すなわち、データフロー制御部２４は、メモリ２３ａ〜２３ｇが保持するコンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における繰り返し回数（Ｎ回）の更新制御を試行回数（Ｍ回）だけ繰り返す。データフロー制御部２４の構成例については後述する。
【００４３】
ＦＩＦＯ２５ａは、データフロー制御部２４が出力するデータを所定のクロックサイクル分保持した後、出力する。ＦＩＦＯ２５ｂは、演算部２６が出力するデータを所定のクロックサイクル分保持した後、出力する。ＦＩＦＯ２５ｃは、更新対象選択部２７が出力するデータを所定のクロックサイクル分保持した後、出力する。上記所定のクロックサイクルは、ＦＩＦＯ２５ａ，２５ｂ，２５ｃのエントリ数（ｄｅｐｔｈと呼ばれる場合もある）に依存する。
【００４４】
なお、ＦＩＦＯ２５ａ〜２５ｃは、それぞれ異なるエントリ数を有していてもよい。また、ＦＩＦＯ２５ａ〜２５ｃのうち、１つ、２つまたは全ては無くてもよい。
演算部２６は、第１の実施の形態の演算部１３と同様の機能を有する。すなわち、演算部２６は、乱数生成部２８にて生成された乱数、重み係数、スピン情報、更新制御によって更新された現在の状態及び温度に基づいて、複数のエネルギーの変化値の候補を計算する。演算部２６の構成例については後述する。なお、スピン情報については、以下では更新対象ビット情報という。
【００４５】
更新対象選択部２７は、第１の実施の形態の選択部１４と同様の機能を有する。すなわち、更新対象選択部２７は、乱数生成部２８が生成した乱数に基づいて、演算部２６が計算した複数のエネルギーの変化値の候補から、更新対象のエネルギーの変化値を１つ選択する。更新対象選択部２７の構成例については後述する。
【００４６】
乱数生成部２８は、演算部２６と更新対象選択部２７に供給する乱数を生成する。乱数生成部２８は、異なるシードに基づいて複数の乱数を生成してもよい。乱数生成部２８は、たとえば、ＬＦＳＲ（Linear Feedback Shift Register）などにより実現できる。
【００４７】
出力部２９は、データフロー制御部２４が生成したデータを最適化装置２０の外部に出力する。
（データフロー制御部２４の一例）
図３は、データフロー制御部の一例を示す図である。
【００４８】
データフロー制御部２４は、試行セットカウンタ３０、試行カウンタ３１、イタレーションカウンタ３２、試行回数分割制御部３３、更新処理部３４を有する。
試行セットカウンタ３０は、試行回数の組（セット）である試行セットのセット数を計数する。試行カウンタ３１は、試行回数を計数する。イタレーションカウンタ３２は、各試行における繰り返し回数を計数する。
【００４９】
試行回数分割制御部３３は、最適化装置２０が、Ｎ（繰り返し回数）×Ｍ（試行回数）の更新処理を、Ｎ×Ｌ回の更新処理を１セットとして、ｃｅｉｌ（Ｍ／Ｌ）セットに分割して実施するように制御する。ｃｅｉｌ（Ｍ／Ｌ）は、ＭをＬで割ったときの商を求め、余りは切り上げる関数である。
【００５０】
Ｌとして、Ｍ／Ｌが最小、且つ、Ｍ／Ｌの余りが０となる値が用いられる。Ｍ／Ｌの余りが０にならない場合は、Ｍ／Ｌが最小となるＬの範囲で、Ｍ／Ｌの余りが最大となるＬが用いられる。
【００５１】
ただ、Ｌの最小値は、データフロー制御部２４、演算部２６、更新対象選択部２７のそれぞれにおけるパイプライン処理にかかるクロックサイクル数（レイテンシ）の和である。また、Ｌの最大値は、メモリ２３ａ〜２３ｇのそれぞれにおいてコンテキスト情報を記憶できる試行回数の上限と、Ｌの最小値とＦＩＦＯ２５ａ〜２５ｃのエントリ数の和のうち、小さい方の値である。
【００５２】
このようにＬを決めることで、一度に処理する試行数をより増やすことができ、より演算効率を向上できる。
試行回数分割制御部３３は、たとえば、全体制御部２１から、ＮとＭを受ける。そして、試行回数分割制御部３３は、更新処理部３４において、たとえば、状態やエネルギーなどの更新が行われるたび、１つの試行の１回の更新処理が行われたことに相当するため、試行カウンタ３１の計数値を＋１カウントアップさせる。さらに、試行回数分割制御部３３は、試行カウンタ３１の計数値が、Ｌ−１になったときに、Ｌ個の試行のそれぞれについて１回の更新処理が行われたことになるため、イタレーションカウンタ３２の計数値を＋１カウントアップさせる。また、試行回数分割制御部３３は、イタレーションカウンタ３２の計数値が、Ｎになったときに、Ｌ個の試行のそれぞれについてＮ回の更新処理が行われたことになるため、試行セットカウンタ３０の計数値を＋１カウントアップさせる。そして、試行回数分割制御部３３は、試行セットカウンタ３０の計数値がｃｅｉｌ（Ｍ／Ｌ）−１になったときに、ｃｅｉｌ（Ｍ／Ｌ）セットの更新処理が終了した旨を全体制御部２１に通知する。
【００５３】
なお、イタレーションカウンタ３２は、０からＮまで計数が行われる。計数値がＮ−１のときに、更新処理部３４がＦＩＦＯ２５ａに出力したＬ個目の試行のデータが、演算部２６などで処理された後、計数値がＮのときに、ＦＩＦＯ２５ｃから供給され、その試行についての更新処理が行われるためである。
【００５４】
また、試行回数分割制御部３３は、更新処理部３４や図２に示した演算部２６が用いるコンテキスト情報が記憶されているメモリ２３ａ〜２３ｇのアドレスを試行カウンタ３１の計数値に基づいて指定し、コンテキスト情報をメモリ２３ａ〜２３ｇから読み出す。また、試行回数分割制御部３３は、更新処理部３４や演算部２６が更新したコンテキスト情報を書き込むメモリ２３ａ〜２３ｇのアドレスを試行カウンタ３１の計数値に基づいて指定し、コンテキスト情報をメモリ２３ａ〜２３ｇに書き込む。
【００５５】
また、試行回数分割制御部３３は、イタレーションカウンタ３２の計数値を、更新処理部３４や、演算部２６に供給する。
更新処理部３４は、入力選択判定部３４ａ、セレクタ３４ｂ，３４ｃ，３４ｄ、状態・エネルギー更新部３４ｅ、最小エネルギー判定・更新部３４ｆ、出力選択部３４ｇ、温度更新部３４ｈ、オフセット増分値保持部３４ｉ、出力選択部３４ｋを有する。
【００５６】
入力選択判定部３４ａは、イタレーションカウンタ３２の計数値を試行回数分割制御部３３から受け、その計数値が初期値（０）のとき、セレクタ３４ｂ〜３４ｄに対して、入力部２２からのデータを選択させる旨の選択信号を出力する。入力選択判定部３４ａは、上記計数値が１以上のとき、セレクタ３４ｂ〜３４ｄに対してメモリ２３ａ〜２３ｃ，２３ｅ，２３ｆの何れかから読み出されたコンテキスト情報を選択させる旨の選択信号を出力する。
【００５７】
セレクタ３４ｂは、入力選択判定部３４ａが出力する選択信号に基づいて、入力部２２から供給されるデータか、メモリ２３ａ〜２３ｃから読み出されたコンテキスト情報の何れか一方を選択して出力する。入力部２２からセレクタ３４ｂに供給されるデータは、初期状態、初期エネルギー及び初期最小エネルギーである。メモリ２３ａ〜２３ｃから読み出され、セレクタ３４ｂに供給されるコンテキスト情報は、各試行における前回の更新処理で得られた状態、エネルギー及び前回までの更新処理で得られた最小エネルギーである。
【００５８】
セレクタ３４ｃは、入力選択判定部３４ａが出力する選択信号に基づいて、入力部２２から供給されるデータか、メモリ２３ｅから読み出されたコンテキスト情報の何れか一方を選択して出力する。入力部２２からセレクタ３４ｃに供給されるデータは、初期温度である。メモリ２３ｅから読み出され、セレクタ３４ｃに供給されるコンテキスト情報は、各試行における前回の更新処理で得られた温度である。
【００５９】
セレクタ３４ｄは、入力選択判定部３４ａが出力する選択信号に基づいて、入力部２２から供給されるデータか、メモリ２３ｆから読み出されたコンテキスト情報の何れか一方を選択して出力する。入力部２２からセレクタ３４ｄに供給されるデータは、初期オフセットである。メモリ２３ｆから読み出され、セレクタ３４ｄに供給されるコンテキスト情報は、各試行における前回の更新処理で得られたオフセットである。
【００６０】
状態・エネルギー更新部３４ｅは、各試行において、イタレーションカウンタ３２の計数値を試行回数分割制御部３３から受け、その計数値が初期値（０）のとき、ＦＩＦＯ２５ｃを介して更新対象選択部２７が出力するデータを取得しない。そして、計数値が初期値（０）のとき、状態・エネルギー更新部３４ｅは、セレクタ３４ｂが出力する初期状態、初期エネルギー及び初期最小エネルギーをそのまま最小エネルギー判定・更新部３４ｆに供給する。
【００６１】
一方、状態・エネルギー更新部３４ｅは、イタレーションカウンタ３２の計数値が１以上のとき、ＦＩＦＯ２５ｃを介して更新対象選択部２７が出力するデータを取得する。更新対象選択部２７が出力するデータは、更新対象ビット情報と、更新対象ビットの値が変わることによるエネルギーの変化値（更新対象のエネルギーの変化値）である。更新対象ビット情報は、更新対象ビットを特定するインデックス情報と、そのビットを更新するか否かのイネーブル情報を含む。
【００６２】
ある試行において、イネーブル情報がｆａｌｓｅの場合、状態・エネルギー更新部３４ｅは、セレクタ３４ｂから供給される、その試行における前回の更新処理で得られた状態、エネルギー及び前回までの更新処理で得られた最小エネルギーを出力する。
【００６３】
ある試行において、イネーブル情報がｔｒｕｅの場合、状態・エネルギー更新部３４ｅは、セレクタ３４ｂから供給されるその試行における前回の更新処理で得られた状態に対して、インデックス情報で特定された更新対象ビットの値を反転させた状態を出力する。また、状態・エネルギー更新部３４ｅは、前回の更新処理で得られたエネルギーからエネルギーの変化値を差し引くことで更新したエネルギーを出力する。また、状態・エネルギー更新部３４ｅは、前回までの更新処理で得られた最小エネルギーを出力する。
【００６４】
最小エネルギー判定・更新部３４ｆは、各試行において、状態・エネルギー更新部３４ｅが出力するエネルギーと前回までの更新処理で得られた最小エネルギーとを比較する。
そして、状態・エネルギー更新部３４ｅが出力するエネルギーが、前回までの更新処理で得られた最小エネルギーよりも小さい場合、最小エネルギー判定・更新部３４ｆは、状態・エネルギー更新部３４ｅが出力するエネルギーを、最小エネルギーとして出力する。また、その場合、最小エネルギー判定・更新部３４ｆは、状態・エネルギー更新部３４ｅが出力する状態を、最小エネルギーの状態として出力する。一方、状態・エネルギー更新部３４ｅが出力するエネルギーが、前回までの更新処理で得られた最小エネルギー以上である場合、最小エネルギー判定・更新部３４ｆは、状態・エネルギー更新部３４ｅが出力する最小エネルギーを、そのまま出力する。また、その場合、最小エネルギー判定・更新部３４ｆは、メモリ２３ｄが出力する最小エネルギーの状態を出力する。
【００６５】
なお、最小エネルギー判定・更新部３４ｆは、状態・エネルギー更新部３４ｅより供給される現在の状態、現在のエネルギーについてもそのまま出力する。
出力選択部３４ｇは、各試行において、試行回数分割制御部３３から供給されるイタレーションカウンタ３２の計数値がＮのとき、最小エネルギー判定・更新部３４ｆが出力する現在の状態、現在のエネルギー、現在の最小エネルギーを出力部２９に供給する。なお、このとき出力選択部３４ｇは、最小エネルギーの状態を出力部２９に供給してもよい。
【００６６】
一方、イタレーションカウンタ３２の計数値がＮ未満のとき、出力選択部３４ｇは、最小エネルギー判定・更新部３４ｆが出力する現在の状態、現在のエネルギー、現在の最小エネルギー、現在の最小エネルギーの状態をメモリ２３ａ〜２３ｄに供給する。これにより、試行回数分割制御部３３の制御のもと、これらのコンテキスト情報がメモリ２３ａ〜２３ｄに書き込まれる。また、出力選択部３４ｇは、現在の状態をＦＩＦＯ２５ａに供給する。
【００６７】
温度更新部３４ｈは、各試行において、試行回数分割制御部３３から供給されるイタレーションカウンタ３２の計数値が所定の回数に達するたびに、温度を更新する。たとえば、温度更新部３４ｈは、イタレーションカウンタ３２が１０００回のカウントアップを行うたびに、温度を下げる。たとえば、温度更新部３４ｈは、現在の温度をＴｎとすると、更新後の温度Ｔｎ＋１をＴｎ＋１＝Ｔｎ×０．９９などとする。
【００６８】
オフセット増分値保持部３４ｉは、オフセットの増分値を保持する。
オフセット更新部３４ｊは、各試行において、イタレーションカウンタ３２の計数値を試行回数分割制御部３３から受け、その計数値が初期値（０）のとき、セレクタ３４ｄが出力する初期オフセットをそのまま出力選択部３４ｋに供給する。
【００６９】
一方、オフセット更新部３４ｊは、イタレーションカウンタ３２の計数値が１以上のとき、ＦＩＦＯ２５ｃを介して更新対象選択部２７から供給される更新対象ビット情報に含まれるイネーブル情報に基づいてオフセットを更新する。イネーブル情報がｆａｌｓｅの場合、オフセット更新部３４ｊは、セレクタ３４ｄから供給される前回の更新処理で得られたオフセットに、オフセット増分値を加算して出力する。イネーブル情報がｔｒｕｅの場合、オフセット更新部３４ｊは、オフセットを０にリセットする。
【００７０】
出力選択部３４ｋは、各試行において、イタレーションカウンタ３２の計数値を試行回数分割制御部３３から受け、計数値がＮ未満の場合に、データの出力を行う。出力選択部３４ｋは、ＦＩＦＯ２５ｃを介して更新対象選択部２７から供給される更新対象ビット情報を、演算部２６に供給し、現在の温度をメモリ２３ｅ及びＦＩＦＯ２５ａに供給し、現在のオフセットをメモリ２３ｆ及びＦＩＦＯ２５ａに供給する。メモリ２３ｅ，２３ｆに供給される現在の温度や現在のオフセットは、試行回数分割制御部３３の制御のもと、メモリ２３ｅ，２３ｆに書き込まれる。
【００７１】
上記のようなデータフロー制御部２４の更新処理部３４におけるデータの流れは、一方向となる。そのため、更新処理部３４をパイプライン化することが可能である。
なお、第１の実施の形態の最適化装置１０の制御部１２も、図３に示したようなデータフロー制御部２４と同様の構成で実現できる。
【００７２】
（演算部２６の一例）
図４は、演算部の一例を示す図である。
演算部２６は、重み行列メモリ４０、セレクタ４１、入力選択判定部４２、ノイズ生成部４３、ローカルフィールド処理部４４ａ０，４４ａ１，４４ａ２，…，４４ａｎを有する。
【００７３】
重み行列メモリ４０は、各ビット間の重みを示す重み係数を含む重み行列を保持する。重み行列は、全試行の動作開始前に、予めメモリ２０ｃから読み出されて、入力部２２を介して重み行列メモリ４０に供給される。
【００７４】
そして、各試行において、重み行列メモリ４０は、ＦＩＦＯ２５ａを介してデータフロー制御部２４から供給される更新対象ビット情報に含まれるインデックス情報に基づいて、重み係数を読み出す。たとえば、インデックス情報において、ｉ番目のビットが指定されている場合、ｉ番目のビットと、イジングモデルに含まれる全ビットとの間の重みを示す重み係数が読み出される。イジングモデルに含まれるビット数が１０２４、重み行列の各要素（重み係数）がｓｉｇｎｅｄ  １６ビット（符号付１６ビット）である場合、１６ビット×１０２４のビット幅で、重み係数が重み行列メモリ４０から同時に読み出される。
【００７５】
重み行列メモリ４０は、たとえば、１６ビット×１０２４ワードのデータを記憶できる１０２４個のＳＲＡＭ（Static Random Access Memory）、または２５６ビット×１０２４ワードのデータを記憶できる６４個のＳＲＡＭなどである。
【００７６】
セレクタ４１は、入力選択判定部４２が出力する選択信号と、入力部２２が出力する初期バイアス（メモリ２０ｃから読み出されたもの）と、メモリ２３ｇから読み出される前回の演算部２６の処理により更新されたバイアス（ローカルフィールド）を受ける。そして、セレクタ４１は、各試行において、選択信号に基づいて、初期バイアスと更新されたバイアス（ローカルフィールド）の何れか一方を選択して出力する。
【００７７】
入力選択判定部４２は、各試行において、データフロー制御部２４に含まれるイタレーションカウンタ３２の計数値を受け、その計数値が初期値のとき、セレクタ４１に対して、入力部２２が出力する初期バイアスを選択させる旨の選択信号を出力する。入力選択判定部４２は、上記計数値が１以上のとき、セレクタ４１に対してメモリ２３ｇから読み出されたバイアス（ローカルフィールド）を選択させる旨の選択信号を出力する。
【００７８】
ノイズ生成部４３は、乱数生成部２８が生成する乱数と、ＦＩＦＯ２５ａを介してデータフロー制御部２４から供給される現在の温度から、ノイズを生成する。たとえば、乱数ｒｎが０から１０２４の間の奇数であるとした場合、ノイズｎｏｉｓｅは現在の温度ｔｍｐを用いて以下の式（４）にて表せる。
【００７９】
ｎｏｉｓｅ＝（ｆｌｏａｔ）ｌｏｇ（ｒｎ／１０２４．０ｆ）×ｔｍｐ      （４）
式（４）は、ｎｏｉｓｅ＝｛（ｆｌｏａｔ）ｌｏｇ（ｒｎ）−（ｆｌｏａｔ）ｌｏｇ（１０２４．０ｆ）｝×ｔｍｐと変形できる。
【００８０】
ここで、（ｆｌｏａｔ）ｌｏｇ（ｒｎ）は、ＤＳＰまたはテーブルデータを用いて実現できる。（ｆｌｏａｔ）ｌｏｇ（１０２４．０ｆ）は固定値である。なお、ｆｌｏａｔ演算は、数段のパイプライン処理を行う論理回路を用いて実現可能である。
【００８１】
ローカルフィールド処理部４４ａ０〜４４ａｎは、イジングモデルに含まれるビット数分（図４の例ではビット数＝ｎ＋１）設けられている。以下では、ローカルフィールド処理部４４ａ０の回路例を説明するが、他のローカルフィールド処理部４４ａ１〜４４ａｎも同じ回路である。
【００８２】
ローカルフィールド処理部４４ａ０は、セレクタ５０，５１、乗算器５２、加算器５３、乗算器５４、減算器５５、閾値比較部５６を有する。
セレクタ５０は、ＦＩＦＯ２５ａを介してデータフロー制御部２４から供給される更新対象ビット情報に含まれるイネーブル情報と符号（１から０の変化か、０から１の変化かを示す）を受ける。セレクタ５０は、イネーブル情報がｆａｌｓｅの場合、０を選択して出力する。セレクタ５０は、イネーブル情報がｔｒｕｅの場合、符号が１から０の変化を示す値のときには、−１を選択して出力し、符号が０から１の変化を示す値のときには、１を選択して出力する。なお、セレクタ５０が選択する１、０、−１の値は、たとえば、図示しないレジスタに記憶されている。
【００８３】
セレクタ５１は、ＦＩＦＯ２５ａを介してデータフロー制御部２４から供給される現在の状態の１番目のビットの値ｘ０が１である場合には、１を選択して出力し、現在の状態の１番目のビットの値ｘ０が０である場合には、−１を選択して出力する。なお、セレクタ５１が選択する１、−１の値は、たとえば、図示しないレジスタに記憶されている。
【００８４】
１番目のビットに対応したローカルフィールド処理部４４ａの乗算器５２へは、重み行列から読み出された重み係数のうち、インデックス情報で指定されたビットと１番目のビットの間の重みを示す重み係数が供給される。そして、乗算器５２は、その重み係数と、セレクタ５０が選択した値との積を出力する。
【００８５】
加算器５３は、セレクタ４１が選択した初期バイアスまたはバイアス（ローカルフィールド）と、乗算器５２が出力する積との和を出力する。この和が、式（３）においてｉ＝０とした場合の、１番目のビットに関するローカルフィールドｈ０である。
【００８６】
乗算器５４は、ローカルフィールドｈ０と、セレクタ５１が選択した値との積を出力する。この積が、式（２）においてｉ＝０とした場合の、エネルギーの変化値ΔＥ０である。
【００８７】
減算器５５は、ノイズ生成部４３が生成するノイズから、ＦＩＦＯ２５ａを介してデータフロー制御部２４から供給されるオフセットを差し引いた値（以下閾値ｃｓｔｈという）を出力する。
【００８８】
閾値比較部５６は、エネルギーの変化値ΔＥ０と閾値ｃｓｔｈとを比較し、その比較結果を示す更新可否信号ｅｎ１を出力する。閾値比較部５６は、ΔＥ０＞ｃｓｔｈである場合には、更新可否信号ｅｎ０の値を、１番目のビットの値の更新を許容することを示す値（ｔｒｕｅ（たとえば１））とする。閾値比較部５６は、ΔＥ０＞ｃｓｔｈではない場合には、更新可否信号ｅｎ０の値を、１番目のビットの値の更新を許容しないことを示す値（ｆａｌｓｅ（たとえば０））とする。
【００８９】
前述のように、更新対象ビット情報のイネーブル情報がｆａｌｓｅとなる場合、オフセットがオフセット増分値だけ増加していくため、閾値ｃｓｔｈが小さくなる傾向を示す。そのため、ΔＥ０が小さい値またはマイナスの値となる（エネルギーが増える変化となる）場合でも、ΔＥ０＞ｃｓｔｈとなる可能性が増え、状態更新の頻度が上がる。
【００９０】
ローカルフィールド処理部４４ａ０が生成したエネルギー変化値ΔＥ０は、エネルギーを更新する際に用いるエネルギー変化値の候補として、更新可否信号ｅｎ０とともにＦＩＦＯ２５ｂを介して、更新対象選択部２７に供給される。ローカルフィールドｈ０は、メモリ２３ｇに書き込まれる。なお、図示を省略しているが、ローカルフィールド処理部４４ａ０から更新対象選択部２７に供給されるデータには、エネルギー変化値の候補がどのビットに関するものであるのかを示すインデックス情報が含まれる。
【００９１】
他のローカルフィールド処理部４４ａ１〜４４ａｎにおいても同様の処理が行われ、各ビットに対応したエネルギー変化値の候補を含むデータが、ＦＩＦＯ２５ｂを介して、更新対象選択部２７に供給される。
【００９２】
上記のような演算部２６において、重み行列メモリ４０に重み行列が書き込まれた後は、データの流れが一方向となる。そのため、演算部２６をパイプライン化することが可能である。
【００９３】
なお、第１の実施の形態の最適化装置１０の演算部１３は、図４に示したような演算部２６と同様の構成で実現できる。
（更新対象選択部２７の一例）
図５は、更新対象選択部の一例を示す図である。図５の例では、イジングモデルに含まれるビット数が１０２４である場合の更新対象選択部２７の例が示されている。
【００９４】
更新対象選択部２７は、１０段のバイナリツリー状に接続された複数の選択処理部（図５では“ＳＦ”と表記されている）を有する。
たとえば、初段には、５１２個の選択処理部６０ａ１，６０ａ２，…，６０ａ５１１，６０ａ５１２が設けられ、２段目には、２５６個の選択処理部６０ｂ１〜６０ｂ２５６が設けられている。また、８段目には、４個の選択処理部６０ｃ１，６０ｃ２，６０ｃ３，６０ｃ４が設けられ、９段目には、２個の選択処理部６０ｄ１，６０ｄ２が設けられ、最後段には、選択処理部６０ｅが設けられている。
【００９５】
また、各段の選択処理部には、乱数生成部２８が生成した１ビットの乱数が供給される。図５の例では、段ごとに異なる１ビットの乱数（ｂｉｔ［０］〜ｂｉｔ［９］）が供給される例が示されているが、それぞれの選択処理部ごとに異なる１ビットの乱数が供給されるようにしてもよい。
【００９６】
選択処理部６０ａ１〜６０ａ５１２には、ＦＩＦＯ２５ｂから、ビットごとに算出されたエネルギー変化値の候補（ΔＥ０〜ΔＥ１０２３）と、各ビットについての更新可否信号ｅｎ０〜ｅｎ１０２３と、インデックス情報（０〜１０２３）が供給される。
【００９７】
選択処理部６０ａ１〜６０ａ５１２は、２つのビットについてのエネルギー変化値の候補と更新可否信号とインデックス情報のうち、一方のビットについてのエネルギー変化値の候補と更新可否信号とインデックス情報を乱数と更新可否信号に応じて選択する。
【００９８】
２段目以降の選択処理部は、前段の２つの選択処理部が出力するエネルギー変化値の候補と更新可否信号とインデックス情報のうち、一方の選択処理部が出力するエネルギー変化値の候補と更新可否信号とインデックス情報を乱数と更新可否信号に応じて選択する。
【００９９】
たとえば、選択処理部６０ｂ１は、選択処理部６０ａ１，６０ａ２が出力するエネルギー変化値の候補と更新可否信号とインデックス情報のうち、一方の選択処理部が出力するエネルギー変化値の候補と更新可否信号とインデックス情報の選択を行う。
【０１００】
図６は、選択処理部の入出力の例を示す真理値表である。
図６の真理値表において、更新可否信号ｅｎａ，ｅｎｂは、ある選択処理部に入力されるインデックス情報ａ，ｂで指定される２つのビットについての更新可否信号を表し、“Ｔ”は、ｔｒｕｅ、“Ｆ”は、ｆａｌｓｅを表す。また、ｒは、１ビットの乱数を表し、ｏは、選択処理部が出力するインデックス情報を示す。“ｄ／ｃ”はｄｏｎ‘ｔ  ｃａｒｅを意味する。
【０１０１】
更新可否信号ｅｎａ，ｅｎｂが両方ｔｒｕｅであるとき、乱数ｒが０の場合は、インデックス情報ａ（及びインデックス情報ａで指定されるビットについてのエネルギー変化値の候補と、更新可否信号ｅｎａ）が出力される。一方、乱数ｒが１の場合は、インデックス情報ｂ（及びインデックス情報ｂで指定されるビットについてのエネルギー変化値の候補と、更新可否信号ｅｎｂ）が出力される。
【０１０２】
更新可否信号ｅｎａがｔｒｕｅ、更新可否信号ｅｎｂがｆａｌｓｅであるとき、乱数ｒの値によらず、インデックス情報ａ（及びインデックス情報ａで指定されるビットについてのエネルギー変化値の候補と、更新可否信号ｅｎａ）が出力される。更新可否信号ｅｎａがｆａｌｓｅ、更新可否信号ｅｎｂがｔｒｕｅであるとき、乱数ｒの値によらず、インデックス情報ｂ（及びインデックス情報ｂで指定されるビットについてのエネルギー変化値の候補と、更新可否信号ｅｎｂ）が出力される。
【０１０３】
更新可否信号ｅｎａ，ｅｎｂが両方ｆａｌｓｅであるとき、乱数ｒが０の場合は、インデックス情報ａ（及びインデックス情報ａで指定されるビットについてのエネルギー変化値の候補と、更新可否信号ｅｎａ）が出力される。一方、乱数ｒが１の場合は、インデックス情報ｂ（及びインデックス情報ｂで指定されるビットについてのエネルギー変化値の候補と、更新可否信号ｅｎｂ）が出力される。
【０１０４】
上記のような処理が各選択処理部にて行われる。選択処理部６０ｅが出力するインデックス情報と更新可否信号が、ＦＩＦＯ２５ｃを介してデータフロー制御部２４に供給される更新対象ビット情報である。なお、更新対象ビット情報に含まれるイネーブル情報は選択処理部６０ｅが出力する更新可否信号である。また、最後段の選択処理部６０ｅが出力するエネルギー変化値の候補が、ＦＩＦＯ２５ｃを介してデータフロー制御部２４に供給される更新対象のエネルギーの変化値である。
【０１０５】
上記のような更新対象選択部２７はデータの流れが一方向となる。そのため、更新対象選択部２７をパイプライン化することが可能である。
なお、第１の実施の形態の最適化装置１０の選択部１４は、図５に示したような更新対象選択部２７と同様の構成で実現できる。
【０１０６】
（パイプライン処理の例）
上記のように、データフロー制御部２４、演算部２６、更新対象選択部２７は、パイプライン化が可能である。データフロー制御部２４と、演算部２６と、更新対象選択部２７が、ＦＩＦＯ２５ａ〜２５ｃを介してリング状に接続した最適化装置２０は、Ｌ個の試行をパイプライン処理により同時に処理可能である。
【０１０７】
図７は、あるクロックサイクルにおいてパイプライン処理される各試行に関するデータの一例の様子を示す図である。
図７では、データフロー制御部２４におけるパイプラインがレジスタ２４ａ，２４ｂ，２４ｃ，２４ｄ，２４ｅを用いて表されている。レジスタ２４ａ〜２４ｅのそれぞれは、たとえば、図３に示した更新処理部３４において、１クロックサイクルで処理が行われる回路部間に接続されるレジスタとして実現できる。図７の例では、データフロー制御部２４におけるパイプラインでは、６クロックサイクルの処理が行われる。
【０１０８】
また、図７では、演算部２６におけるパイプラインがレジスタ２６ａ，２６ｂを用いて表されている。レジスタ２６ａ，２６ｂのそれぞれは、たとえば、図４に示した演算部２６において、１クロックサイクルで処理が行われる回路部間に接続されるレジスタとして実現できる。図７の例では、演算部２６におけるパイプラインでは、３クロックサイクルの処理が行われる。
【０１０９】
また、図７では、更新対象選択部２７におけるパイプラインがレジスタ２７ａ，２７ｂを用いて表されている。レジスタ２７ａ，２７ｂのそれぞれは、たとえば、図５に示した更新対象選択部２７において、１クロックサイクルで処理が行われる回路部間に接続されるレジスタとして実現できる。図７の例では、更新対象選択部２７におけるパイプラインでは、３クロックサイクルの処理が行われる。
【０１１０】
また、図７の例では、ＦＩＦＯ２５ａ〜２５ｃのエントリ数が１であり、ＦＩＦＯ２５ａ〜２５ｃは１クロックサイクル分、各試行に関するデータを保持するものとしている。
上記のような例では、１回の更新処理にかかるクロックサイクル数は、６＋３＋３＋１×３＝１５である。メモリ２３ａ〜２３ｇのそれぞれにおいてコンテキスト情報を記憶できる試行回数の上限が１５以上である場合、１５の試行を同時に処理可能である。
【０１１１】
図７では、１５の試行についての１回目の更新処理時のデータが［０］［０］〜［０］［１４］として表されている。なお、［ｎ］［ｍ］は、試行ｍにおけるｎ回目の更新処理時のデータを表す。メモリ２３ａ〜２３ｇには１５の試行についてのコンテキスト情報が記憶される。たとえば、メモリ２３ａには、１５の試行についてのコンテキスト情報２３ａ０〜２３ａ１４が記憶される。
【０１１２】
図７の例では、１つ目の試行の１回目の更新処理時のデータ［０］［０］が、データフロー制御部２４における５クロックサイクル目の処理を行う回路部で処理されている。このとき、２つ目の試行の１回目の更新処理時のデータ［０］［１］は、データフロー制御部２４における４クロックサイクル目の処理を行う回路部で処理されている。また、このとき、たとえば、８つ目の試行の１回目の更新処理時のデータ［０］［７］は、更新対象選択部２７における２クロックサイクル目の処理を行う回路部で処理されている。
【０１１３】
図８は、図７の状態の１クロックサイクル後においてパイプライン処理される各試行に関するデータの一例の様子を示す図である。
図７の状態の１クロックサイクル後には、各試行に関するデータは、次のクロックサイクルの処理を行う回路部（またはＦＩＦＯ２５ａ〜２５ｃ）に遷移する。図８の例では、１つ目の試行の２回目の更新処理時のデータ［１］［０］が、データフロー制御部２４における６クロックサイクル目の処理を行う回路部で処理されている。このとき、２つ目の試行の１回目の更新処理時のデータ［０］［１］は、データフロー制御部２４における５クロックサイクル目の処理を行う回路部で処理されている。また、このとき、たとえば、８つ目の試行の１回目の更新処理時のデータ［０］［７］は、更新対象選択部２７における３クロックサイクル目の処理を行う回路部で処理されている。
【０１１４】
以上のように、各試行のデータは、データフロー制御部２４、演算部２６、更新対象選択部２７、ＦＩＦＯ２５ａ〜２５ｃによるリング状のパイプラインを、図７、図８の例では、反時計回りに遷移していく。
【０１１５】
なお、ＦＩＦＯ２５ａ〜２５ｃのエントリ数が２以上の場合には、より多くの試行を同時に処理できる。
図９は、ＦＩＦＯのエントリ数が３である場合のパイプライン処理の一例を示す図である。
【０１１６】
図９の例では、ＦＩＦＯ２５ａ〜２５ｃのエントリ数が３であり、３つの試行のデータが保持される。このため、全体で２１個の試行のデータを同時に処理可能になる。
（全体の動作例）
以下、第２の実施の形態の最適化装置２０の全体の動作の流れを、フローチャートを用いて説明する。
【０１１７】
図１０は、最適化装置の全体の動作の一例の流れを示すフローチャートである。
まず、最適化装置２０の入力部２２は、重み行列をメモリ２０ｃから取得する（ステップＳ１０）。重み行列は、演算部２６内の重み行列メモリ４０に記憶される。
【０１１８】
次に、データフロー制御部２４の試行回数分割制御部３３は、試行セットカウンタ３０の計数値（ｉｓ）、試行カウンタ３１の計数値（ｉｖ）、イタレーションカウンタ３２の計数値（ｉｔ）を０に初期化する（ステップＳ１１）。その後、ＳＡにおける１回の更新処理が実行される（ステップＳ１２）。更新処理の流れについては後述する。
【０１１９】
試行回数分割制御部３３は、更新処理部３４において、状態やエネルギーなどの更新が行われるたび、１つの試行の１回の更新処理が行われたことに相当するため、ｉｖを＋１カウントアップさせる（ステップＳ１３）。
【０１２０】
そして、試行回数分割制御部３３は、ｉｖがＬ−１であるか否かを判定する（ステップＳ１４）。
試行回数分割制御部３３は、ｉｖが、Ｌ−１になったときに、Ｌ個の試行のそれぞれについて１回の更新処理が行われたことになるため、ｉｔを＋１カウントアップさせる。また、試行回数分割制御部３３は、ｉｖを０に初期化する（ステップＳ１５）。ｉｖがＬ−１に達していない場合には、ステップＳ１２からの処理が繰り返される。
【０１２１】
その後、試行回数分割制御部３３は、ｉｔがＮであるか否かを判定する（ステップＳ１６）。試行回数分割制御部３３は、ｉｔが、Ｎになったときに、Ｌ個の試行のそれぞれについてＮ回の更新処理が行われたことになるため、ｉｓを＋１カウントアップさせる。また、試行回数分割制御部３３は、ｉｔを０に初期化する（ステップＳ１７）。ｉｔがＮに達していない場合には、ステップＳ１２からの処理が繰り返される。
【０１２２】
次に、試行回数分割制御部３３は、ｉｓがｃｅｉｌ（Ｍ／Ｌ）−１であるか否かを判定する（ステップＳ１８）。試行回数分割制御部３３は、ｉｓがｃｅｉｌ（Ｍ／Ｌ）−１になったときに、ｃｅｉｌ（Ｍ／Ｌ）セットの更新処理が終了した旨を全体制御部２１に通知する。これにより、全体制御部２１の制御のもと、出力部２９から外部のプロセッサ２０ｂに対して最適化処理の終了が通知され（ステップＳ１９）、最適化処理が終了する。ｉｓがｃｅｉｌ（Ｍ／Ｌ）−１に達していない場合には、ステップＳ１２からの処理が繰り返される。
【０１２３】
次に、図１０のステップＳ１２の更新処理の流れを説明する。
図１１は、更新処理の一例の流れを示すフローチャートである。
データフロー制御部２４と演算部２６の入力選択判定部３４ａ，４２は、ｉｔが０であるか否かを判定する（ステップＳ２０）。ｉｔが０のとき、入力選択判定部３４ａは、セレクタ３４ｂ〜３４ｄに対して、入力部２２から供給される各種コンテキスト情報の初期値を選択させる。また、入力選択判定部４２は、セレクタ４１に対して、入力部２２から供給されるコンテキスト情報の初期値（初期バイアス）を選択させる。これにより、コンテキスト情報が初期化される（ステップＳ２１）。
【０１２４】
ｉｔが１以上のとき、入力選択判定部３４ａは、セレクタ３４ｂ〜３４ｄに対してメモリ２３ａ〜２３ｃ，２３ｅ，２３ｆの何れかから読み出されたコンテキスト情報を選択させる。また、入力選択判定部４２は、セレクタ４１に対してメモリ２３ｇから読み出されたバイアス（ローカルフィールド）を選択させる。これにより、バイアス（ローカルフィールド）はローカルフィールド処理部４４ａ０〜４４ａｎによって更新される（ステップＳ２２）。
【０１２５】
ステップＳ２１，Ｓ２２の処理後、演算部２６は、ノイズ生成部４３、減算器５５を用いて閾値を生成する（ステップＳ２３）。そして、演算部２６は、ローカルフィールド処理部４４ａ０〜４４ａｎを用いて、エネルギーの変化値の候補を算出する（ステップＳ２４）。
【０１２６】
その後、更新対象選択部２７が、前述の処理により、更新対象ビット情報と、更新対象のエネルギーの変化値を選択する（ステップＳ２５）。
データフロー制御部２４の状態・エネルギー更新部３４ｅは、ステップＳ２５の処理で選択された更新対象ビット情報と、更新対象のエネルギーの変化値に基づいて、状態の更新（ステップＳ２６）と、エネルギーの更新（ステップＳ２７）を行う。
【０１２７】
そして、最小エネルギー判定・更新部３４ｆは、各試行において、更新されたエネルギーが前回までの更新処理で得られた最小エネルギーよりも小さい場合には、最小エネルギーを、そのエネルギーに更新する（ステップＳ２８）。
【０１２８】
また、温度更新部３４ｈは、各試行において、イタレーションカウンタ３２が所定の回数のカウントアップを行うたびに温度を更新する（ステップＳ２９）。オフセット更新部３４ｊは、更新対象ビット情報のイネーブル情報がｆａｌｓｅの場合、オフセットにオフセット増分値を加算することでオフセットを更新する（ステップＳ３０）。
【０１２９】
その後、試行回数分割制御部３３は、ｉｔがＮ−１であるか否かを判定する（ステップＳ３１）。
ｉｔがＮ−１である場合、試行回数分割制御部３３は、たとえば、メモリ２３ａ〜２３ｃに記憶されている状態、エネルギー、最小エネルギーを読み出して、出力部２９に出力させる（ステップＳ３２）。ステップＳ３２の処理後、または、ｉｔがＮ−１未満である場合、１回の更新処理が終了する。
【０１３０】
なお、図１１の処理の順序は適宜入れ替えてもよい。たとえば、ステップＳ２９の処理とステップＳ３０の処理の順序は入れ替えてもよい。
以下、第２の実施の形態の最適化装置２０の効果を説明する前に、パイプライン処理を行わない最適化装置を比較例として説明する。
【０１３１】
（比較例）
図１２は、比較例の最適化装置を示す図である。
最適化装置８０は、エネルギー計算部８１ａ１，…，８１ａｉ，…，８１ａｎ、遷移制御部８２、状態更新部８３を有している。
【０１３２】
エネルギー計算部８１ａ１〜８１ａｎは、第２の実施の形態の最適化装置２０の演算部２６の一部と同様の機能を有し、エネルギーの変化値の候補（ΔＥ１，…，ΔＥｉ，…，ΔＥｎ）を計算し、出力する。
【０１３３】
たとえば、エネルギー計算部８１ａｉは、レジスタ８１ｂ、セレクタ８１ｃ，８１ｄ、乗算器８１ｅ、加算器８１ｆ、レジスタ８１ｇ、セレクタ８１ｈ、乗算器８１ｉを有する。
【０１３４】
レジスタ８１ｂは、ｉ番目のビットと他のビットとの重みを示す重み係数（Ｗｉ，１，Ｗｉ，２，…，Ｗｉ，ｎ）を格納する。
セレクタ８１ｃは、遷移制御部８２が出力するインデックス情報ＩＤに基づき、レジスタ８１ｂに格納されている重み係数のうち１つを選択して出力する。
【０１３５】
セレクタ８１ｄは、状態更新部８３が出力する更新後のビットの値ｘＮに基づき、１または−１を選択して出力する。更新後の値が０のときには、セレクタ８１ｄは、−１を選択して出力し、更新後の値が１のときには、セレクタ８１ｄは、１を選択して出力する。
【０１３６】
乗算器８１ｅは、セレクタ８１ｃが出力する重み係数と、セレクタ８１ｄが出力する値とを乗算した積を出力する。
加算器８１ｆは、乗算器８１ｅが出力する乗算結果と、レジスタ８１ｇに格納されている値とを加算した和を出力する。
【０１３７】
レジスタ８１ｇは、図示しないクロック信号に同期して、加算器８１ｆが出力する値を取り込む。レジスタ８１ｇは、たとえば、フリップフロップである。なお、レジスタ８１ｇに格納される値が、前述のローカルフィールドｈｉである。
【０１３８】
セレクタ８１ｈは、現在の状態のｉ番目のビットの値が１である場合には、１を選択して出力し、現在の状態のｉ番目のビットの値が０である場合には、−１を選択して出力する。
【０１３９】
乗算器８１ｉは、レジスタ８１ｇが出力するローカルフィールドｈｉとセレクタ８１ｈが出力する値とを乗算した積をエネルギーの変化値（ΔＥｉ）として出力する。
遷移制御部８２は、回路部８２ａ１，…，８２ａｉ，…，８２ａｎ、セレクタ８２ｂ、オフセット制御回路８２ｃを有している。
【０１４０】
回路部８２ａ１〜８２ａｎは、第２の実施の形態の最適化装置２０の演算部２６のノイズ生成部４３、減算器５５、閾値比較部５６と同様の機能を有する。セレクタ８２ｂは、第２の実施の形態の最適化装置２０の更新対象選択部２７と同様の機能を有する。また、オフセット制御回路８２ｃは、第２の実施の形態の最適化装置２０のデータフロー制御部２４におけるオフセット更新部３４ｊと同様の機能を有する。なお、図１２において、ｆはイネーブル情報を表し、ｙはオフセットを表す。
【０１４１】
状態更新部８３は、第２の実施の形態の最適化装置２０のデータフロー制御部２４における状態・エネルギー更新部３４ｅの機能を有し、遷移制御部８２が出力するイネーブル情報ｆとインデックス情報ＩＤに基づき、状態（Ｓｔａｔｅ）を更新して出力する。また、状態更新部８３は、更新後のビットの値ｘＮを出力する。
【０１４２】
（第２の実施の形態の最適化装置２０と、最適化装置８０との効果の比較）
以下では、１回の試行当たりの最適化装置２０，８０と、プロセッサ２０ｂやメモリ２０ｃとのデータ転送時間と起動及び終了制御のための通信オーバヘッド時間をＤとする。また、１回の更新処理にかかるクロックサイクル数を最適化装置２０でＲ２、最適化装置８０でＲ１とする。
【０１４３】
この場合、比較例の最適化装置８０におけるＮ×Ｍの更新処理の実行時間Ｔ１はＴ１＝Ｒ１×Ｎ×Ｍ＋Ｄ×Ｍと表せる。
一方、第２の実施の形態の最適化装置２０におけるＮ×Ｍの更新処理の実行時間Ｔ２はＴ２＝Ｌ×Ｎ×ｃｅｉｌ（Ｍ／Ｌ）＋Ｒ２＋Ｄと表せる。最適化装置２０では、Ｌ個の試行について１回の更新処理が行われている期間と、そのＬ個の試行についての次の更新処理が行われる期間がＲ２分重なるため、上記の実行時間Ｔ２の式において、最後の試行についての更新処理の最後に生じるＲ２が加算されている。上記の実行時間Ｔ２の式において、Ｄが加算されている理由は後述する。
【０１４４】
なお、Ｒ２はＮよりも十分小さい値であることが多い（たとえば、Ｒ２＝２０、Ｎ＝１００００００）。そのため、上記の実行時間Ｔ２の式は、Ｔ２＝Ｌ×Ｎ×ｃｅｉｌ（Ｍ／Ｌ）＋Ｄ、と近似できる。さらに、Ｌが前述した最小値と最大値の間で調整可能であり、ＭがＬで割り切れる場合、Ｔ２＝Ｎ×Ｍ＋Ｄと表せる。このため、実行時間Ｔ２は、最適化装置８０の実行時間Ｔ１の約１／Ｒ１となる。また、起動及び終了制御のための通信オーバヘッド時間も１／Ｍに短縮できる。
【０１４５】
図１３は、第２の実施の形態の最適化装置と比較例の最適化装置の更新処理の実行時間を比較した例を示す図である。
図１３では、Ｍ＝１００、Ｌ＝２０、Ｎ＝１００００００とした場合の、実行時間Ｔ１，Ｔ２の比較例が示されている。
【０１４６】
Ｄｉは、１回の試行当たりの最適化装置２０，８０におけるメモリ２０ｃからのデータの入力時間と起動制御のための通信オーバヘッド時間を表す。Ｄｏは、１回の試行当たりの最適化装置２０，８０からメモリ２０ｃへのデータの出力時間と終了制御のための通信オーバヘッド時間を表す。Ｄｉ＋Ｄｏ＝Ｄである。
【０１４７】
Ｅｘは、最適化装置８０においては、試行ｍ（０≦ｍ≦９９）をそれぞれＮ＝１００００００回繰り返したときの処理時間を表す。たとえば、Ｅｘ（０）は、試行０の更新処理をＮ＝１００００００回繰り返したときの処理時間を表す。最適化装置２０において、Ｅｘは、２０個ずつの試行を同時にＮ＝１００００００回繰り返したときの処理時間を表す。たとえば、Ｅｘ（０−１９）は、試行０から試行１９の更新処理をＮ＝１００００００回繰り返したときの処理時間を表す。
【０１４８】
最適化装置８０では、試行０から試行９９のそれぞれの試行において、ＤｉとＤｏが生じる。このため、実行時間Ｔ１は、Ｔ１＝Ｒ１×１００００００×１００＋Ｄ×１００となる。
【０１４９】
これに対し、最適化装置２０では、２０個ずつの試行が同時に行われ、さらに、試行１から試行９９までの試行におけるＤｉと、試行０から試行９８までの試行におけるＤｏは、Ｅｘの期間内に隠蔽される。図１１に示したように、データ入力（コンテキスト情報の初期化）は、初回（ｉｔが０のとき）の更新処理にて行われ、データ出力（状態、エネルギー最小エネルギーの出力）は、ｉｔがＮ−１の更新処理にて行われるためである。
【０１５０】
このため、実行時間Ｔ２はＴ２＝１００００００×１００＋Ｒ２＋Ｄとなる。
以上のように最適化装置２０は、データフロー制御部２４、演算部２６、更新対象選択部２７の稼働率を１００％に近づけることができるため、演算効率を向上でき、パイプライン処理を行わない最適化装置８０よりも演算時間を短縮できる。
【０１５１】
以上、実施の形態に基づき、本発明の最適化装置及び最適化装置の制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０１５２】
１０  最適化装置
１１  保持部
１１ａ  コンテキスト情報
１２  制御部
１２ａ  繰り返し回数計数部
１２ｂ  試行回数計数部
１２ｃ，１３ｂ，１４ａ  レジスタ
１３  演算部
１３ａ  重み保持部
１４  選択部
【図１】
2019133517.tif 000006
【図２】
2019133517.tif 000007
【図３】
2019133517.tif 000008
【図４】
2019133517.tif 000009
【図５】
2019133517.tif 000010
【図６】
2019133517.tif 000011
【図７】
2019133517.tif 000012
【図８】
2019133517.tif 000013
【図９】
2019133517.tif 000014
【図１０】
2019133517.tif 000015
【図１１】
2019133517.tif 000016
【図１２】
2019133517.tif 000017
【図１３】
2019133517.tif 000018
【手続補正書】
【提出日】平成30年11月20日(2018.11.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持する保持部と、
各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づき、複数の第１の回路部を用いて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返す制御部と、
前記複数の第１の回路部の間に設けられ、前記複数の試行の処理に必要なデータを保持する第１のレジスタと、
生成された乱数と、保持した重み係数と、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づき、複数の第２の回路部を用いて、複数のエネルギーの変化値の候補を計算する演算部と、
前記複数の第２の回路部の間に設けられ、前記複数のエネルギーの変化値の候補の計算に必要なデータを保持する第２のレジスタと、
前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、複数の第３の回路部を用いて、前記更新対象のエネルギーの変化値を選択する選択部と、
前記複数の第３の回路部の間に設けられ、前記更新対象のエネルギーの変化値の選択に必要なデータを保持する第３のレジスタと、
を有する最適化装置。
【請求項２】
前記第１のレジスタと、前記第２のレジスタと、前記第３のレジスタとが環状に接続される、請求項１に記載の最適化装置。
【請求項３】
前記コンテキスト情報は、さらに、オフセットを含み、
前記制御部は、さらに、オフセット増分値と前記スピン情報と前記更新対象のエネルギーの変化値とに基づいて、前記コンテキスト情報を更新する、請求項１に記載の最適化装置。
【請求項４】
前記制御部は、さらに、前記複数の試行による組である試行セットを計数する試行セット計数部を有し、前記保持部が保持する前記コンテキスト情報について、前記スピン情報と前記更新対象のエネルギーの変化値とに基づき、各試行セットにおける前記複数の試行の数の前記更新制御を第１の試行セット数だけ繰り返す、請求項１に記載の最適化装置。
【請求項５】
前記制御部と、前記演算部とは、複数のエントリを有するＦＩＦＯを介して接続される、請求項１に記載の最適化装置。
【請求項６】
前記演算部と、前記選択部とは、複数のエントリを有するＦＩＦＯを介して接続される、請求項１に記載の最適化装置。
【請求項７】
前記選択部と、前記制御部とは、複数のエントリを有するＦＩＦＯを介して接続される、請求項１に記載の最適化装置。
【請求項８】
前記制御部と、前記演算部と、前記選択部は、それぞれ、同じクロックサイクルにおいて異なる試行の処理を行う、請求項１に記載の最適化装置。
【請求項９】
最適化装置の制御方法において、
前記最適化装置が有する保持部が、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持し、
前記最適化装置が有する制御部が、各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づき、複数の第１の回路部と、前記複数の第１の回路部の間に設けられるとともに前記複数の試行の処理に必要なデータを保持する第１のレジスタとを用いて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返し、
前記最適化装置が有する演算部が、生成された乱数と、保持した重み係数と、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づき、複数の第２の回路部と、前記複数の第２の回路部の間に設けられるとともに複数のエネルギーの変化値の候補の計算に必要なデータを保持する第２のレジスタとを用いて、前記複数のエネルギーの変化値の候補を計算し、
前記最適化装置が有する選択部が、前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、複数の第３の回路部と、前記複数の第３の回路部の間に設けられるとともに前記更新対象のエネルギーの変化値の選択に必要なデータを保持する第３のレジスタとを用いて、前記更新対象のエネルギーの変化値を選択する、
最適化装置の制御方法。