(57)【要約】【課題】最適化装置の大規模化を可能とする。【解決手段】イジングモデルの基底状態の探索を行う環状に接続されたＭ段（図１の例ではＭ＝４）の演算処理部１１〜１４の選択部１１ｃ〜１４ｃは、更新を許容する更新許容ビットのうちから１つの更新候補ビットのインデックスを出力し、２段目以降に設けた選択部１２ｅ〜１４ｅは、自演算処理部の選択部１２ｃ〜１４ｃが出力する第１インデックスと、前段から供給される第２インデックスの何れか一方を選択する際に、自演算処理部における更新許容ビット数の計数結果を、前段までの演算処理部において計数された更新許容ビット数の積算値と上記計数結果との和により割った確率で第１インデックスを選択し、選択した第１インデックスまたは第２インデックスを、後段または自演算処理部がＭ段目の演算処理部１４の場合には、１段目の演算処理部１１に供給する。【選択図】図１
2020057306.tif 000002
【特許請求の範囲】
【請求項１】
最適化問題を変換したイジングモデルの基底状態の探索を行う、環状に接続されたＭ段（Ｍは２以上の整数）の演算処理部と、
前記Ｍ段の演算処理部の各々に設けられ、前記イジングモデルの情報に基づいて、前記イジングモデルの全スピンに対応する複数のビットのビット数をＭで割った数のビットの各々について更新を許容するか否かを判定する判定部と、
前記Ｍ段の演算処理部の各々に設けられ、自身が属す演算処理部である自演算処理部の前記判定部の判定結果に基づいて、更新を許容する更新許容ビットのうちから１つの更新候補ビットを選択し、前記１つの更新候補ビットの識別情報を出力する第１の選択部と、
前記Ｍ段の演算処理部の各々に設けられ、前記自演算処理部における前記更新許容ビットの数を計数する計数部と、
前記Ｍ段の演算処理部のうち２段目以降の演算処理部に設けられ、前記自演算処理部の前記第１の選択部が出力する前記識別情報である第１の識別情報と、前段の演算処理部から供給される前記識別情報である第２の識別情報の何れか一方を選択する際に、前記自演算処理部において計数された前記更新許容ビットの数の計数結果を、前段までの演算処理部において計数された前記更新許容ビットの数の積算値と前記計数結果との和により割った確率で前記第１の識別情報を選択し、選択した前記第１の識別情報または前記第２の識別情報を、後段の演算処理部、または前記自演算処理部がＭ段目の演算処理部の場合には、１段目の演算処理部に供給する第２の選択部と、
前記Ｍ段の演算処理部の各々に設けられ、前記Ｍ段目の演算処理部が前記１段目の演算処理部に供給する前記第１の識別情報または前記第２の識別情報に基づいて、前記複数のビットの何れかの値を更新する状態更新部と、
を有する最適化装置。
【請求項２】
前記Ｍ段の演算処理部は、第１のバスを介して制御装置に接続されるとともに、前記第１のバスよりも通信速度が速い第２のバスにより環状に接続されており、
前記Ｍ段の演算処理部は、前記第２のバスを用いて、前記第１の識別情報または前記第２の識別情報の送受信を行う、
請求項１に記載の最適化装置。
【請求項３】
前記第１の選択部は、
第１の乱数値を発生する第１の乱数発生回路と、
前記第１の乱数値と前記計数結果とに基づいて、前記更新許容ビットのうちの１つを選択する第１の選択信号を生成する第１の選択信号生成回路と、
前記第１の選択信号に基づいて、前記更新許容ビットのうちの１つである前記１つの更新候補ビットの前記識別情報を出力する第１のデータ選択回路と、
を有する、請求項１または２に記載の最適化装置。
【請求項４】
前記第２の選択部は、
第２の乱数値を発生する第２の乱数発生回路と、
前記計数結果を、前記積算値と前記計数結果との和により割った確率で前記第１の識別情報を選択する第２の選択信号を生成する第２の選択信号生成回路と、
前記第２の選択信号に基づいて、前記第１の識別情報または前記第２の識別情報の一方を出力する第２のデータ選択回路と、
を有する、請求項１乃至３の何れか一項に記載の最適化装置。
【請求項５】
最適化問題を変換したイジングモデルの基底状態の探索を行う、環状に接続されたＭ段（Ｍは２以上の整数）の演算処理部と、前記Ｍ段の演算処理部の各々に設けられ、前記イジングモデルの情報に基づいて、前記イジングモデルの全スピンに対応する複数のビットのビット数をＭで割った数のビットの各々について更新を許容するか否かを判定する判定部と、前記Ｍ段の演算処理部の各々に設けられ、自身が属す演算処理部である自演算処理部の前記判定部の判定結果に基づいて、更新を許容する更新許容ビットのうちから１つの更新候補ビットを選択し、前記１つの更新候補ビットの識別情報を出力する第１の選択部と、前記Ｍ段の演算処理部の各々に設けられ、前記自演算処理部における前記更新許容ビットの数を計数する計数部と、前記Ｍ段の演算処理部のうち２段目以降の演算処理部に設けられ、前記自演算処理部の前記第１の選択部が出力する前記識別情報である第１の識別情報と、前段の演算処理部から供給される前記識別情報である第２の識別情報の何れか一方を選択する際に、前記自演算処理部において計数された前記更新許容ビットの数の計数結果を、前段までの演算処理部において計数された前記更新許容ビットの数の積算値と前記計数結果との和により割った確率で前記第１の識別情報を選択し、選択した前記第１の識別情報または前記第２の識別情報を、後段の演算処理部、または前記自演算処理部がＭ段目の演算処理部の場合には、１段目の演算処理部に供給する第２の選択部と、前記Ｍ段の演算処理部の各々に設けられ、前記Ｍ段目の演算処理部が前記１段目の演算処理部に供給する前記第１の識別情報または前記第２の識別情報に基づいて、前記複数のビットの何れかの値を更新する状態更新部と、前記Ｍ段の演算処理部とバスを介して接続される制御装置と、を有する最適化装置における前記制御装置が、
前記Ｍ段の演算処理部を起動し、
前記Ｍ段の演算処理部に前記イジングモデルの情報を送信し、
前記Ｍ段の演算処理部から、前記複数のビットの何れかの値を更新する処理が複数回繰り返されたときの前記複数のビットの値を含む前記基底状態の探索結果を取得し、
取得した前記探索結果を出力する、
最適化装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化装置及び最適化装置の制御方法に関する。
【背景技術】
【０００２】
従来、ノイマン型コンピュータが不得意とする多変数の最適化問題を、イジング型のエネルギー関数を用いた最適化装置（イジングマシンまたはボルツマンマシンと呼ばれる場合もある）によって計算する方法がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
【０００３】
最適化装置は、たとえば、ニューラルネットワークを用いて問題をモデル化することもできる。その場合、イジングモデルに含まれる全スピンに対応した複数のビットのそれぞれが、他のビットの値と、他のビットと自身のビットとの相互作用の大きさを示す重み係数（結合係数とも呼ばれる）とに応じて０または１を出力するニューロンとして機能する。最適化装置は、たとえば、シミュレーテッド・アニーリングなどの確率的探索法により、イジングモデルのエネルギー関数の値（以下エネルギーという）の最小値が得られる各ビットの値の組み合わせを、解として求める。
【０００４】
従来、デジタル回路を用いてシミュレーテッド・アニーリングを行うことでエネルギーが最小となる各ビットの値の組み合わせを計算する最適化装置がある（たとえば、特許文献１参照）。従来の最適化装置では、イジングモデルの全ビットのうち一度に１つのビットを更新対象とした状態の更新が繰り返される。
【０００５】
ところで、最適化問題の規模の増大に応じてイジングモデルのビット数が増えると重み係数の数も増加する。全ビット間の相互作用を考慮する場合、重み係数の数はビット数の２乗となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−２１９９４８号公報
【特許文献２】特開平９−３１９７２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ビット数の増大に対応するために、複数の演算処理部（たとえば、それぞれ１チップの半導体集積回路）に重み係数を分散して保持させ、各演算処理部に全ビットのうちの一部のビットについての演算を担当させることで、最適化装置を大規模化する方法がある。しかし、全ビットから更新対象の１つのビットを選択する処理は、複数の演算処理部が各々独立に行うものではないため、複数の演算処理部を用いた場合、適切に更新対象の１つのビットを選択することは容易ではない。このため一般的には、複数の演算処理部による最適化装置の大規模化は困難である。
【０００８】
１つの側面では、本発明は、大規模化が可能な最適化装置及びその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの実施態様では、最適化問題を変換したイジングモデルの基底状態の探索を行う、環状に接続されたＭ段（Ｍは２以上の整数）の演算処理部と、前記Ｍ段の演算処理部の各々に設けられ、前記イジングモデルの情報に基づいて、前記イジングモデルの全スピンに対応する複数のビットのビット数をＭで割った数のビットの各々について更新を許容するか否かを判定する判定部と、前記Ｍ段の演算処理部の各々に設けられ、自身が属す演算処理部である自演算処理部の前記判定部の判定結果に基づいて、更新を許容する更新許容ビットのうちから１つの更新候補ビットを選択し、前記１つの更新候補ビットの識別情報を出力する第１の選択部と、前記Ｍ段の演算処理部の各々に設けられ、前記自演算処理部における前記更新許容ビットの数を計数する計数部と、前記Ｍ段の演算処理部のうち２段目以降の演算処理部に設けられ、前記自演算処理部の前記第１の選択部が出力する前記識別情報である第１の識別情報と、前段の演算処理部から供給される前記識別情報である第２の識別情報の何れか一方を選択する際に、前記自演算処理部において計数された前記更新許容ビットの数の計数結果を、前段までの演算処理部において計数された前記更新許容ビットの数の積算値と前記計数結果との和により割った確率で前記第１の識別情報を選択し、選択した前記第１の識別情報または前記第２の識別情報を、後段の演算処理部、または前記自演算処理部がＭ段目の演算処理部の場合には、１段目の演算処理部に供給する第２の選択部と、前記Ｍ段の演算処理部の各々に設けられ、前記Ｍ段目の演算処理部が前記１段目の演算処理部に供給する前記第１の識別情報または前記第２の識別情報に基づいて、前記複数のビットの何れかの値を更新する状態更新部と、を有する最適化装置が提供される。
【００１０】
また、１つの実施態様では、最適化装置の制御方法が提供される。
【発明の効果】
【００１１】
１つの側面では、本発明は、最適化装置の大規模化が可能となる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の最適化装置の一例を示す図である。
【図２】第１の実施の形態の最適化装置に対する比較例の最適化装置を示す図である。
【図３】第２の実施の形態の最適化装置の一例を示す図である。
【図４】コアの内部構成例を示す図である。
【図５】判定部の回路例を示す図である。
【図６】コア内の更新候補ビットを選択する選択部の一例を示す図である。
【図７】自コアの更新候補ビットと前段コアの更新候補ビットの一方のインデックスを選択する選択部の一例を示す図である。
【図８】制御装置による最適化装置の制御の一例の流れを示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
以下に示す最適化装置は、計算対象の最適化問題を変換したイジングモデルの全スピンに対応する複数のビットのそれぞれの値の組み合わせのうち、エネルギー関数が最小値となるときの各ビットの値（イジングモデルの基底状態）を探索するものである。
【００１４】
イジング型のエネルギー関数Ｅ（ｘ）は、たとえば、以下の式（１）で定義される。
【００１５】
【数１】
2020057306.tif 000003
【００１６】
右辺の１項目は、イジングモデルの全ビットの全組み合わせについて、漏れと重複なく、２つのビットの値（０または１）と重み係数との積を積算したものである。ｘｉは、識別情報（以下インデックスという）がｉのビットの値を表す変数（状態変数とも呼ばれる）、ｘｊは、インデックス＝ｊのビットの値を表す変数であり、Ｗｉｊは、インデックス＝ｉ，ｊのビットの相互作用の大きさを示す重み係数である。なお、Ｗｉｉ＝０である。また、Ｗｉｊ＝Ｗｊｉであることが多い（つまり、重み係数による係数行列は対称行列である場合が多い）。また重み係数Ｗｉｊは、所定のビット幅（たとえば、１６ビット、３２ビット、６４ビット、１２８ビットなど）をもつ。
【００１７】
右辺の２項目は、全ビットのそれぞれのバイアス係数とビットの値を表す変数との積の総和を求めたものである。ｂｉは、インデックスがｉのビットのバイアス係数を示している。
【００１８】
また、変数ｘｉが変化して１−ｘｉとなると、変数ｘｉの増加分は、Δｘｉ＝（１−ｘｉ）−ｘｉ＝１−２ｘｉと表せる。スピン反転（ビットの値の変化）に伴うエネルギー変化ΔＥｉは、以下の式（２）で表される。
【００１９】
【数２】
2020057306.tif 000004
【００２０】
式（２）において、変数ｘｉが１から０に変化するとき、Δｘｉは−１となり、変数ｘｉが０から１に変化するとき、Δｘｉは１となる。なお、ｈｉはローカルフィールド（局所場）と呼ばれ、Δｘｉに応じてローカルフィールドｈｉに符号（＋１または−１）を乗じたものがエネルギー変化ΔＥｉである。
【００２１】
また、変数ｘｊが０から１に変化したときのローカルフィールドｈｉの変化分Δｈｉは、＋Ｗｉｊ、変数ｘｊが１から０に変化したときの変化分Δｈｉは、−Ｗｉｊと表せる。したがって、ローカルフィールドｈｉは行列演算により毎回計算しなおす必要はなく、状態遷移にともなって変化のあったビットによる変化分だけＷｉｊを加減算すればよい。
【００２２】
（第１の実施の形態）
図１は、第１の実施の形態の最適化装置の一例を示す図である。
第１の実施の形態の最適化装置１０は、イジングモデルの基底状態の探索を行う、環状に接続された４段の演算処理部１１，１２，１３，１４を有する。なお、演算処理部の段数は４段に限定されず、Ｍ段（Ｍは２以上の整数）であればよい。演算処理部１１〜１４の各々は、たとえば、１チップの半導体集積回路（ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field-Programmable Gate Array）など）である。なお、演算処理部１１〜１４は、たとえば、１チップの半導体集積回路内に設けられていてもよい。
【００２３】
最適化装置１０では、イジングモデルの状態を更新する処理が多数回数繰り返されるため、演算処理部１１〜１４の間では高速に情報の送受信が行われることが望ましい。そのため、演算処理部１１〜１４の間は、演算処理部１１〜１４にイジングモデルの情報などを設定するために使用されるバスよりも高速通信が可能な専用バスで接続されていることが望ましい。ただ、専用バスの物理的な制約がある。たとえば、専用バスの通信速度が１００Ｇｂｐｓである場合、演算処理部１１〜１４が２００ＭＨｚのクロック周波数で動作するとき、５００ｂｉｔ／ｃｙｃｌｅが、専用バスのデータ転送速度の上限となる。たとえば、１０２４個のビットの各々のインデックス（１０ビット）と更新を許容するか否かの判定結果（１ビット）の総情報量は、１１２６４ビットとなるため、上記専用バスでは、１クロックサイクルでの送受信を行えない。そのため、演算処理部１１〜１４の各々は、１つの更新候補ビットを選択し、その情報を、専用バスを用いて送受信する。
【００２４】
１段目の演算処理部１１は、状態更新部１１ａ、判定部１１ｂ、選択部１１ｃ、計数部１１ｄを有する。２段目の演算処理部１２は、状態更新部１２ａ、判定部１２ｂ、選択部１２ｃ、計数部１２ｄ、選択部１２ｅを有する。３段目の演算処理部１３も、２段目の演算処理部１２と同様に、状態更新部１３ａ、判定部１３ｂ、選択部１３ｃ、計数部１３ｄ、選択部１３ｅを有する。４段目の演算処理部１４も、２段目及び３段目の演算処理部１２，１３と同様に、状態更新部１４ａ、判定部１４ｂ、選択部１４ｃ、計数部１４ｄ、選択部１４ｅを有する。
【００２５】
状態更新部１１ａ〜１４ａは、後述するように、４段目の演算処理部１４が１段目の演算処理部１１に供給する、インデックスに基づいて、複数のビットの何れかの値を更新する。状態更新部１１ａ〜１４ａの各々は、イジングモデルの全てのスピンに対応した複数のビットを保持している。
【００２６】
判定部１１ｂ〜１４ｂの各々は、イジングモデルの情報に基づいて、イジングモデルの全スピンに対応する複数のビットのビット数を演算処理部１１〜１４の段数である４で割った数のビットの各々について更新を許容するか否かを判定する。イジングモデルの情報は、前述の重み係数を含む。
【００２７】
たとえば、全スピンに対応する複数のビットのビット数が、４０９６の場合、判定部１１ｂは、インデックスが０〜１０２３のビットの各々について更新を許容するか否かを判定する。また、判定部１２ｂは、インデックスが１０２４〜２０４７のビットの各々について更新を許容するか否かを判定し、判定部１３ｂは、インデックスが２０４８〜３０７１のビットの各々について更新を許容するか否かを判定する。また、判定部１４ｂは、インデックスが３０７２〜４０９５のビットの各々について更新を許容するか否かを判定する。判定部１１ｂ〜１４ｂの各々は、１０２４ビットの各々についての更新を許容するか否かの判定結果（以下フラグという）をインデックスとともに出力する。以下では、フラグが１である場合は、そのビットについての更新を許容することを示し、フラグが０である場合は、そのビットについての更新を許容しないことを示す。
【００２８】
判定部１１ｂ〜１４ｂの各々は、たとえば、以下のように、各ビットの更新を許容するか否かを判定する。判定部１１ｂ〜１４ｂの各々は、自身が属す演算処理部が処理を担当する１０２４ビットに関する重み係数群を保持する記憶部（たとえば、レジスタまたはＳＲＡＭ（Static Random Access Memory）など）を有する。たとえば、判定部１１ｂの記憶部は、インデックスが０〜１０２３のビットの各々と、他の全てのビットとの間の相互作用の大きさを示す重み係数群を保持している。そして、判定部１１ｂ〜１４ｂの各々は、その重み係数群と、値が更新されたビットの情報（インデックスと更新後の値）に基づいて、１０２４ビットの各々の値が変化することによるイジングモデルのエネルギー変化を計算する。そして、判定部１１ｂ〜１４ｂの各々は、計算したエネルギー変化と、熱励起エネルギー（熱雑音）との大小関係に基づいて、１０２４ビットの各々の更新を許容するか否かを判定する。熱励起エネルギーは、乱数と、図示しない制御部から供給される温度パラメータとから決定される。シミュレーテッド・アニーリングが行われる場合、温度パラメータは、たとえば、制御部によって、イジングモデルの状態を更新する処理が、所定回数繰り返されるごとに、値が小さくなるように制御される。なお、上記のような判定処理を行う回路の例については、後述する。
【００２９】
選択部１１ｃ〜１４ｃの各々は、上記のフラグに基づいて、更新を許容するビット（以下更新許容ビットという）のうちから１つの更新候補ビットを選択し、更新候補ビットのインデックスを出力する。たとえば、選択部１１ｃは、インデックスが０〜１０２３のビットのうち、フラグが１である更新許容ビットが複数ある場合に、それらの中から、乱数を用いて１つの更新候補ビットを選択してそのインデックスを出力する。なお、インデックスが０〜１０２３のビットのフラグが全て０である場合も、１つの更新候補ビットが選択される。
【００３０】
選択部１１ｃ〜１４ｃの各々は、更新候補ビットのインデックスのほか、更新候補ビットのフラグも出力する。
計数部１１ｄ〜１４ｄの各々は、自身が属す演算処理部における更新許容ビット数を計数する。たとえば、計数部１１ｄは、インデックスが０〜１０２３のビットのうち、フラグが１である更新許容ビット数を計数する。
【００３１】
選択部１２ｅ〜１４ｅの各々は、自身が属す演算処理部の選択部（１２ｃ〜１４ｃの何れか）が出力する更新候補ビットのインデックスと、前段の演算処理部から供給される更新候補ビットのインデックスの何れか一方を、以下のように選択する。
【００３２】
選択部１２ｅ〜１４ｅの各々は、自身が属す演算処理部において計数された更新許容ビット数の計数結果と、前段までの演算処理部において計数された更新許容ビット数の積算値とを受ける。そして、選択部１２ｅ〜１４ｅの各々は、上記計数結果を、積算値と計数結果との和により割った確率で、自身が属す演算処理部の選択部が出力するインデックスを選択する。選択部１２ｅ〜１３ｅの各々は、選択したインデックスを後段の演算処理部に供給する。また、選択部１２ｅ〜１３ｅの各々は、前段の演算処理部から供給される上記積算値に、上記計数結果を加えることで積算値を更新し、後段の演算処理部に供給する。最後段の演算処理部１４に属す選択部１４ｅは、選択したインデックスを１段目の演算処理部１１に供給する。なお、選択されたインデックスで識別される更新候補ビットのフラグについても、インデックスとともに、後段の演算処理部または１段目の演算処理部１１に供給される。
【００３３】
図１に示すように、たとえば、選択部１２ｅはデータ選択回路１２ｅ１を有する。データ選択回路１２ｅ１は、選択信号ｓｅｌ１が１の場合、演算処理部１２の選択部１２ｃが出力する更新候補ビットのインデックスを選択し、選択信号ｓｅｌ１が０の場合、演算処理部１１から供給される更新候補ビットのインデックスを選択する。選択信号ｓｅｌ１は、上記の確率で１になるように生成される。選択部１２ｅは、選択信号ｓｅｌ１を生成する選択信号生成回路を有しているが、図１では図示が省略されている。選択部１３ｅもデータ選択回路１３ｅ１を有し、データ選択回路１２ｅ１と同様の動作を行う。選択部１４ｅもデータ選択回路１４ｅ１を有し、データ選択回路１２ｅ１と同様の動作を行う。
【００３４】
以下、第１の実施の形態の最適化装置１０の動作例を説明する。
図示しない制御部により、状態更新部１１ａ〜１４ａに、各ビットの初期値が設定され、判定部１１ｂ〜１４ｂに重み係数群が設定された後、判定部１１ｂ〜１４ｂは、たとえば、前述の処理により各ビットについて更新を許容するか否かを判定する。そして、判定部１１ｂ〜１４ｂは、その判定結果であるフラグを出力する。選択部１１ｃ〜１４ｃの各々は、フラグに基づいて、更新許容ビットのうちから１つの更新候補ビットを選択し、更新候補ビットのインデックスを出力する。
【００３５】
図１の例では、演算処理部１１の選択部１１ｃはインデックス＝１０２０を出力し、演算処理部１２の選択部１２ｃはインデックス＝２０４６を出力している。演算処理部１３の選択部１３ｃはインデックス＝２０５４を出力し、演算処理部１４の選択部１４ｃはインデックス＝３０７８を出力している。なお、選択部１１ｃ〜１４ｃの各々は、さらに、選択した更新候補ビットのフラグとして１を出力している。
【００３６】
計数部１１ｄ〜１４ｄの各々は、自身が属す演算処理部における更新許容ビット数を計数する。図１の例では、計数部１１ｄは更新許容ビット数として７９０を出力し、計数部１２ｄは更新許容ビット数として３０を出力し、計数部１３ｄは更新許容ビット数として２００を出力し、計数部１４ｄは更新許容ビット数として１を出力している。
【００３７】
１段目の演算処理部１１は、選択した更新候補ビットのインデックス及びフラグと更新許容ビット数を、２段目の演算処理部１２に供給する。
２段目の演算処理部１２の選択部１２ｅは、選択部１２ｃが出力したインデックスと、演算処理部１１から供給されるインデックスの一方を、以下のように選択する。選択部１２ｅは、演算処理部１２において計数された更新許容ビット数の計数結果と、前段までの演算処理部において計数された更新許容ビット数の積算値（演算処理部１１から供給される更新許容ビット数）を受ける。そして、選択部１２ｅは、上記計数結果を、演算処理部１１から供給される更新許容ビット数と上記計数結果との和により割った確率で選択部１２ｃが出力したインデックスを選択する。選択部１２ｅは、選択したインデックスとフラグ及び、演算処理部１１から供給される更新許容ビット数に上記計数結果を加えた積算値を演算処理部１３に供給する。
【００３８】
図１の例では、選択部１２ｅには、演算処理部１１から更新許容ビット数として７９０が供給され、計数部１２ｄが計数した更新許容ビット数として３０が供給される。そのため選択部１２ｅは、３０／８２０の確率で、選択信号ｓｅｌ１を１として、選択部１２ｃが出力したインデックス（図１の例では、２０４６）を選択する。図１の例の選択部１２ｅでは、選択部１２ｃが出力したインデックスよりも、演算処理部１１から供給されるインデックス（図１の例では、１０２０）が選択される確率が高くなる。
【００３９】
３段目の演算処理部１３の選択部１３ｅは、選択部１３ｃが出力したインデックスと、演算処理部１２から供給されるインデックスの一方を、以下のように選択する。選択部１３ｅは、演算処理部１３において計数された更新許容ビット数の計数結果と、前段までの演算処理部において計数された更新許容ビット数の積算値（演算処理部１１，１２における更新許容ビット数の和）を受ける。そして、選択部１３ｅは、上記計数結果を、演算処理部１２から供給される積算値と上記計数結果との和により割った確率で選択部１３ｃが出力したインデックスを選択する。選択部１３ｅは、選択したインデックスとフラグ及び、演算処理部１２から供給される上記積算値を、上記計数結果を加えることで更新して、演算処理部１４に供給する。
【００４０】
図１の例では、選択部１３ｅには、演算処理部１２から更新許容ビット数の積算値として８２０が供給され、計数部１３ｄが計数した更新許容ビット数として２００が供給される。そのため選択部１３ｅは、２００／１０２０の確率で、選択信号ｓｅｌ２を１として、選択部１３ｃが出力したインデックス（図１の例では、２０５４）を選択する。図１の例の選択部１３ｅでは、選択部１３ｃが出力したインデックスよりも、演算処理部１２から供給されるインデックスが選択される確率が高くなる。
【００４１】
４段目の演算処理部１４の選択部１４ｅは、選択部１４ｃが出力したインデックスと、演算処理部１３から供給されるインデックスの一方を、以下のように選択する。選択部１４ｅは、演算処理部１４において計数された更新許容ビット数の計数結果と、前段までの演算処理部において計数された更新許容ビット数の積算値（演算処理部１１，１２，１３における更新許容ビット数の積算値）を受ける。そして、選択部１４ｅは、上記計数結果を、演算処理部１３から供給される積算値と上記計数結果との和により割った確率で選択部１４ｃが出力したインデックスを選択する。選択部１４ｅは、選択したインデックスとフラグを、１段目の演算処理部１１に供給する。
【００４２】
図１の例では、選択部１４ｅには、演算処理部１３から更新許容ビット数の積算値として１０２０が供給され、計数部１４ｄが計数した更新許容ビット数として１が供給される。そのため選択部１４ｅは、１／１０２１の確率で、選択信号ｓｅｌ３を１として、選択部１４ｃが出力したインデックス（図１の例では、３０７８）を選択する。図１の例の選択部１４ｅでは、選択部１４ｃが出力したインデックスよりも、演算処理部１３から供給されるインデックスが選択される確率が高くなる。また、図１の例では、演算処理部１１にて選択された更新候補ビットのインデックスである１０２０が、演算処理部１２の選択部１２ｅ、演算処理部１３の選択部１３ｅ、演算処理部１４の選択部１４ｅにて選択され、演算処理部１１に供給される例が示されている。この場合、インデックスが１０２０の更新候補ビットが、更新対象ビットとなる。
【００４３】
演算処理部１１の状態更新部１１ａは、演算処理部１４から供給されるフラグが１の場合、保持している複数のビットの値のうち、演算処理部１４から供給されるインデックスに対応するビットの値を更新（反転）させる。
【００４４】
演算処理部１４から演算処理部１１に供給されるインデックスとフラグは、状態更新部１１ａから演算処理部１２に供給され、さらに、演算処理部１２から演算処理部１３に供給され、演算処理部１３から演算処理部１４に供給される。そして、状態更新部１２ａ，１３ａ，１４ａでは、状態更新部１１ａと同様の処理が行われる。
【００４５】
上記のような処理が、図示しない制御部による制御のもと、所定回数繰り返され、たとえば、所定回数繰り返された後に状態更新部１１ａ〜１４ａに保持されている各ビットの値が解として出力される。なお、各段の演算処理部１１〜１４は、選択した更新候補ビットのインデックスやフラグとともに、その更新候補ビットに対応するエネルギー変化（判定部１１ｂから１４ｂ）についても後段（演算処理部１４の場合は１段目）の演算処理部に供給してもよい。そして、状態更新部１１ａ〜１４ａは、演算処理部１４から演算処理部１１に供給されるエネルギー変化に基づいて、イジングモデルのエネルギーを更新してもよい。また、状態更新部１１ａ〜１４ａは、更新したエネルギーが、これまでに得られた値よりも小さければ最小エネルギーとして保持しておき、そのときの各ビットの値（イジングモデルの状態）を保持しておいてもよい。その場合、イジングモデルの状態の更新処理が所定回数繰り返されたときに保持されている最小エネルギーが得られたときの各ビットの値が解として出力される。
【００４６】
以下、第１の実施の形態の最適化装置１０の効果を説明する前に、最適化装置１０に対する比較例を説明する。
図２は、第１の実施の形態の最適化装置に対する比較例の最適化装置を示す図である。図２において、図１に示した最適化装置１０と同じ要素については同一符号が付されている。
【００４７】
比較例の最適化装置２０では、演算処理部２１，２２，２３，２４のうち、演算処理部２２〜２４に含まれる選択部２２ａ，２３ａ，２４ａは、１／２の確率で自身が属す演算処理部の選択部（１２ｃ〜１４ｃの何れか）が出力するインデックスを選択する。つまり、選択部２２ａのデータ選択回路１２ｅ１に供給される選択信号ｓｅｌ１と、選択部２３ａのデータ選択回路１３ｅ１に供給される選択信号ｓｅｌ２と、選択部２４ａのデータ選択回路１４ｅ１に供給される選択信号ｓｅｌ３は１／２の確率で１となる。
【００４８】
このため、より後段の演算処理部において選択される更新候補ビットのインデックスが優先されてしまい、更新対象ビットの選択確率の偏りが発生し、適切に更新ビットを選択できなくなる。たとえば、図２の例では、インデックスが３０７２〜４０９５のビットが更新対象ビットとして選択される確率が他のビットよりも高くなる。このような選択確率の偏りによって、解の計算精度が悪化する可能性がある。
【００４９】
これに対して、第１の実施の形態の最適化装置１０では、演算処理部２２〜２４の各々は前段の演算処理部から送られる更新許容ビットの積算値を用いて、上記のような確率で更新候補ビットを選択することで、更新対象ビットの選択確率の偏りを解消できる。
【００５０】
以下、図１の例を用いて選択確率の算出例を説明する。なお、選択部１１ｃ〜１４ｃの各々は、１０２４のビットのうちフラグが１のビットが複数ある場合に、それらの中から１つのビットを均等な確率で選択するものとする。
【００５１】
たとえば、図１の例では、４段目の演算処理部１４の選択部１４ｅがインデックスとして０〜１０２３の何れかを出力する確率は、（１／７９０）×（７９０／８２０）×（８２０／１０２０）×（１０２０／１０２１）＝１／１０２１となる。選択部１４ｅがインデックスとして１０２４〜２０４７の何れかを出力する確率は、（１／３０）×（３０／８２０）×（８２０／１０２０）×（１０２０／１０２１）＝１／１０２１となる。選択部１４ｅがインデックスとして２０４８〜３０７１の何れかを出力する確率は、（１／２００）×（２００／１０２０）×（１０２０／１０２１）＝１／１０２１となる。選択部１４ｅがインデックスとして３０７２〜４０９５の何れかを出力する確率は、１×（１／１０２１）＝１／１０２１となる。
【００５２】
つまり、上記の例では、各更新許容ビットが更新対象ビットとなる確率を、１／１０２１とすることができ、全更新許容ビットから均等な確率で更新対象ビットを選択することができる。
【００５３】
以上のように、第１の実施の形態の最適化装置１０では、更新対象ビットの選択確率の偏りを生じさせることなく、環状に接続した複数の演算処理部を用いた大規模化が可能となる。
【００５４】
また、演算処理部１１〜１４が環状に接続され、演算処理部１１〜１４の各々では、１つの更新候補ビット（または更新対象ビット）が選択され、その情報が演算処理部の間で送受信される。このため、演算処理部１１〜１４の間のバスのインタフェース数やデータ転送量を増加させることなく、演算処理部の数を増加させることができる。
【００５５】
（第２の実施の形態）
図３は、第２の実施の形態の最適化装置の一例を示す図である。
第２の実施の形態の最適化装置３０は、制御装置３１、記憶装置３２、Ｍ段のコア３３ａ１，３３ａ２，…，３３ａＭ、共有バス３４、専用バス３５ａ１，３５ａ２，…，３５ａＭを有する。
【００５６】
制御装置３１は、コア３３ａ１〜３３ａＭの制御を行う。制御装置３１は、たとえば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）など、プログラムの命令を実行する演算回路を含むプロセッサである。制御装置３１は、たとえば、記憶装置３２に記憶されたプログラムを実行する。なお、制御装置３１は、複数のプロセッサまたは複数のプロセッサコアを備えてもよく、コア３３ａ１〜３３ａＭの制御を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。
【００５７】
記憶装置３２は、イジングモデルの情報などを記憶する。なお、記憶装置３２は、制御装置３１が実行するプログラムを記憶してもよい。記憶装置３２は、たとえば、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などの揮発性の記憶装置、または、フラッシュメモリ、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）やＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置、またはこれらの組み合わせであってもよい。
【００５８】
コア３３ａ１〜３３ａＭの各々は、第１の実施の形態の最適化装置１０の演算処理部１１〜１４の何れかと同様の機能を有している。コア３３ａ１〜３３ａＭの各々は、たとえば、１チップの半導体集積回路である。コア３３ａ１〜３３ａＭの内部構成例については後述する。
【００５９】
共有バス３４は、コア３３ａ１〜３３ａＭと制御装置３１とを接続するバスである。共有バス３４は、制御装置３１がコア３３ａ１〜３３ａＭを制御するための制御信号、イジングモデルの情報、コア３３ａ１〜３３ａＭによる探索結果などの通信に用いられる。共有バス３４として、たとえば、ＰＣＩ（Peripheral Component Interconnect）−Ｅｘｐｒｅｓｓなどが用いられる。
【００６０】
専用バス３５ａ１〜３５ａＭは、コア３３ａ１〜３３ａＭの間を環状に接続するバスである。たとえば、専用バス３５ａ１は、コア３３ａ１の出力端子と、コア３３ａ２の入力端子とを接続するバスであり、専用バス３５ａＭは、コア３３ａＭの出力端子と、コア３３ａ１の入力端子とを接続するバスである。専用バス３５ａ１〜３５ａＭは、更新候補ビットのインデックスやフラグなどの情報をコア３３ａ１〜３３ａＭの間で送受信するために用いられる。専用バス３５ａ１〜３５ａＭは、たとえば、メタルケーブルまたは光ケーブルである。光ケーブルとして、たとえば、通信速度が１００Ｇｂｐｓの、ＱＳＦＰ（Quad Small Form-Factor Pluggable）ケーブルなどを用いることができる。コア３３ａ１〜３３ａＭの間が、専用バス３５ａ１〜３５ａＭにより、ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ接続されているため、高いデータ転送帯域が確保できる。
【００６１】
図４は、コアの内部構成例を示す図である。図４では、コア３３ａ２の内部構成の例が示されているが、他のコアも同様である。
コア３３ａ２は、制御部４０、入力処理部４１、状態更新部４２、判定部４３、計数部４４、選択部４５，４６、出力処理部４７を有する。
【００６２】
制御部４０は、イジングモデルの状態の更新処理を開始する前に、制御装置３１から各種の情報を受信する。制御部４０が制御装置３１から受信する情報として、たとえば、イジングモデルの情報、各ビットの初期値、後述するオフセット値の増分値、シミュレーテッド・アニーリングを行うための温度スケジュール情報、更新処理の繰り返し回数がある。さらに、制御部４０が制御装置３１から受信する情報として、コア種別を判断するための情報（コア３３ａ２が何段目のコアなのか判定するための情報）である、コア数（＝Ｍ）と値ｍがある。たとえば、コア３３ａ１は、ｍ＝０、コア３３ａＭは、ｍ＝Ｍ−１と表される。コア３３ａ２に含まれる制御部４０には、制御装置３１からｍ＝１と、Ｍが送信される。
【００６３】
そして、制御部４０は、イジングモデルの情報を判定部４３に設定するとともに、温度スケジュール情報に基づいた温度パラメータを判定部４３に設定し、各ビットの初期値を状態更新部４２に保持させる。また、制御部４０は、オフセット値の初期値（＝０）と、オフセット値の増分値を状態更新部４２に設定する。
【００６４】
その後、制御部４０は、たとえば、コア３３ａ２の各部にクロック信号を供給して、イジングモデルの状態の更新処理を開始する。また、制御部４０は、更新処理の回数を計数し、更新処理の回数が所定回数に達するたびに、温度スケジュール情報に基づいて、判定部４３に設定する温度パラメータの値を小さくしていく。さらに、制御部４０は、更新処理の回数が、制御装置３１から受信した繰り返し回数に達した場合、更新処理の終了通知を制御装置３１に対して送信する。
【００６５】
また、制御部４０は、制御装置３１から探索結果の出力要求を受信した場合、更新処理の回数が、上記繰り返し回数に達したときの最小エネルギーと、そのときの各ビットの値を、状態更新部４２から取得して、制御装置３１に送信する。なお、制御装置３１は、更新処理の回数が、上記繰り返し回数に達したときのエネルギーと、そのときの各ビットの値を、状態更新部４２から取得して、制御装置３１に送信してもよい。
【００６６】
また、制御部４０は、イジングモデルの状態の更新処理を開始する前に、制御装置３１から、以前の上記繰り返し回数の更新処理の終了時に得られたエネルギーと各ビットの値及び最小エネルギーと最小エネルギーが得られたときの各ビットの値を受信してもよい。そして、制御部４０は、受信したエネルギーと各ビットの値及び、最小エネルギーと最小エネルギーが得られたときの各ビットの値を、状態更新部４２に設定してから今回の更新処理を開始してもよい。
【００６７】
制御部４０は、たとえば、ＡＳＩＣやＦＰＧＡなどの特定用途の電子回路にて実現できる。なお、制御部４０は、ＣＰＵやＤＳＰなどのプロセッサであってもよい。その場合、プロセッサは、メモリに記憶されたプログラムを実行することで、上記のような制御部４０の処理を行う。
【００６８】
入力処理部４１は、前段のコア３３ａ１から更新対象ビット情報と、更新候補ビット情報を受信する。そして、入力処理部４１は、受信した更新対象ビット情報を状態更新部４２に供給し、受信した更新候補ビット情報を選択部４６に供給する。
【００６９】
更新対象ビット情報には、更新対象ビットのインデックス、フラグ、その更新対象ビットの値を反転させたときのエネルギー変化が含まれる。更新候補ビット情報には、更新候補ビットのインデックス、フラグ、その更新候補ビットの値を反転させたときのエネルギー変化のほかに、前段までのコアにおける更新許容ビット数の積算値が含まれる。入力処理部４１が受信する更新候補ビット情報の上記積算値は、コア３３ａ１における更新許容ビット数に相当する。
【００７０】
なお、図示を省略しているが、１段目のコア３３ａ１に含まれる入力処理部には、コア３３ａＭから更新候補ビット情報は供給されず、更新対象ビット情報が供給される。
状態更新部４２は、現在の各ビットの値、現在のエネルギー、最小エネルギー、最小エネルギーが得られたときの各ビットの値、現在のオフセット値、オフセット値の増分値を保持する。そして、状態更新部４２は、入力処理部４１から供給される更新対象ビット情報に基づいて、現在の各ビットの値、現在のエネルギーを更新する。また、状態更新部４２は、更新された現在のエネルギーが最小エネルギーよりも小さい場合には、最小エネルギーと最小エネルギーが得られたときの各ビットの値を更新する。また、状態更新部４２は、更新対象ビット情報に含まれるフラグが０の場合には、現在のオフセット値に増分値を加算して、判定部４３に供給する。また、状態更新部４２は、更新対象ビット情報を、出力処理部４７に供給する。
【００７１】
判定部４３は、イジングモデルの情報に基づいて、イジングモデルの全スピンに対応する複数のビットのビット数をコア３３ａ１〜３３ａＭの段数であるＭで割った数のビットの各々について更新を許容するか否かを判定し、その判定結果を示すフラグを出力する。たとえば、Ｍ＝４、全ビット数が４０９６である場合、２段目のコア３３ａ２に含まれる判定部４３は、インデックスが１０２４〜２０４７のビットについて更新を許容するか否かを判定する。判定部４３の回路例については後述する。
【００７２】
計数部４４は、判定部４３によって判定された更新許容ビットの数（更新許容ビット数）を計数する。
選択部４５は、上記のフラグと更新許容ビット数に基づいて、乱数を用いて、更新許容ビットのうちから１つの更新候補ビットを選択し、更新候補ビットのインデックスとフラグを出力する。選択部４５の回路例については後述する。
【００７３】
選択部４６は、入力処理部４１から供給される更新候補ビット情報と、自身が属すコア３３ａ２において計数された更新許容ビット数の計数結果とに基づいて、積算値を更新する。更新候補ビット情報に含まれる積算値をＣ［ｍ−１］、計数部４４が出力する計数結果をＵ［ｍ］とした場合、更新された積算値Ｃ［ｍ］は、Ｃ［ｍ］＝Ｃ［ｍ−１］＋Ｕ［ｍ］と表せる。そして、選択部４６は、Ｕ［ｍ］／Ｃ［ｍ］の確率で、選択部４５が出力するインデックスを選択する。また、選択部４６は、１−Ｕ［ｍ］／Ｃ［ｍ］の確率で、更新候補ビット情報に含まれる更新候補ビットのインデックスを選択する。
【００７４】
選択部４６は、選択したインデックスとそれに対応するフラグ及び更新した積算値を含む更新候補ビット情報を出力処理部４７に供給する。選択部４６の回路例については後述する。
【００７５】
なお、図示を省略しているが、１段目のコア３３ａ１も選択部４６に対応する選択部を有していてもよいが、その選択部は、１／１の確率で、コア３３ａ１において選択された更新候補ビットのインデックスを選択する。
【００７６】
出力処理部４７は、状態更新部４２から供給される更新対象ビット情報を、後段のコア（図示が省略されている）に送信し、その後、選択部４６から供給される更新候補ビット情報を、後段のコアに送信する。
【００７７】
なお、図示を省略しているが、Ｍ段目のコア３３ａＭに含まれる出力処理部は、コア３３ａＭにおいて選択部４６に対応する選択部が出力する更新候補ビット情報のうち、積算値を除いた情報を、新たな更新対象ビット情報として１段目のコア３３ａ１に送信する。
【００７８】
（判定部４３の回路例）
図５は、判定部の回路例を示す図である。図５には、判定部４３において、インデックス＝ｉのビットに関して更新を許容するか否かを判定する回路部が示されている。他のビットに関しても同様の回路部が設けられる。Ｍ＝４、全ビット数Ｎが４０９６である場合、２段目のコア３３ａ２に含まれる判定部４３において、ｉは、１０２４〜２０４７の何れかの値である。
【００７９】
判定部４３は、レジスタ４３ａ、選択回路４３ｂ、ΔＥ計算回路４３ｃ、更新判定回路４３ｄを有する。
レジスタ４３ａは、インデックス＝ｉのビットと、インデックス＝０〜Ｎ−１のビットとの相互作用の大きさを表す重み係数Ｗｉ０，Ｗｉ２，…，Ｗｉ（Ｎ−１）を保持する。
【００８０】
選択回路４３ｂは、状態更新部４２から更新対象ビットのインデックス＝ｊ（０〜Ｎ−１の何れかの値）を受け、重み係数Ｗｉ０〜Ｗｉ（Ｎ−１）から、更新対象ビットとインデックス＝ｉのビットとの間の相互作用の大きさを表す重み係数Ｗｉｊを選択して出力する。
【００８１】
ΔＥ計算回路４３ｃは、選択回路５０、乗算器５１、加算器５２、レジスタ５３、乗算器５４、選択回路５５を有する。
選択回路５０は、更新対象ビットの値の変化分の演算を実現するものである。インデックス＝ｊのビットの値（変数ｘｊ）が、１から０に変化するとき、変化分Δｘｊは−１となり、変数ｘｊが０から１に変化するとき、Δｘｊは１となる。選択回路５０は、状態更新部４２から供給される変数ｘｊの更新後の値が０のときには、−１を選択して出力し、変数ｘｊの更新後の値が１のときには、１を選択して出力する。
【００８２】
乗算器５１は、選択回路４３ｂが出力する重み係数と、選択回路５０が出力する値との積を出力する。図５の例では、乗算器５１には、重み係数Ｗｉｊが入力されている。乗算器５１の出力は、変数ｘｊが変化したことによるローカルフィールドｈｉの変化分Δｈｉを表す。
【００８３】
加算器５２は、乗算器５１が出力する値と、レジスタ５３に格納されている値とを加算して出力する。
レジスタ５３は、図示しないクロック信号に同期して、加算器５２が出力する値（ローカルフィールドｈｉ）を取り込む。レジスタ５３は、たとえば、フリップフロップである。なお、レジスタ５３に格納されるローカルフィールドｈｉの初期値は、たとえば、全変数ｘの初期値を０とした場合、バイアス係数ｂｉである。
【００８４】
乗算器５４は、レジスタ５３が出力するローカルフィールドｈｉと選択回路５５が出力する値との積を出力する。この積が、式（２）に示した、インデックス＝ｉのビットの値が変化することによるエネルギー変化ΔＥｉである。
【００８５】
選択回路５５は、式（２）の−Δｘｉの演算を実現するものである。選択回路５５は、状態更新部４２から供給される現在のインデックス＝ｉのビットの値を示す変数ｘｉが０のときは、−１を出力し、変数ｘｉが１のときは１を出力する。
【００８６】
更新判定回路４３ｄは、符号反転部６０、加算器６１、乱数発生回路６２、選択法則適用部６３、乗算器６４、比較回路６５、レジスタ６６を有する。
符号反転部６０は、ΔＥ計算回路４３ｃが出力するエネルギー変化ΔＥｉに−１を掛けて符号を反転させる。
【００８７】
加算器６１は、符号反転部６０の出力値に、状態更新部４２から供給されるオフセット値ｏｆｆを加える。前述のように、更新対象ビット情報に含まれるフラグが０の場合（ビットの更新が生じない場合）、状態更新部４２がオフセット値ｏｆｆを大きくすることで、ビットの更新が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
【００８８】
乱数発生回路６２は、０以上、１以下の一様乱数ｒを発生する。乱数発生回路６２は、ＬＦＳＲ（Linear Feedback Shift Register）や、メルセンヌ・ツイスタなどにより実現される。
【００８９】
選択法則適用部６３は、シミュレーテッド・アニーリングを行うための選択法則（メトロポリス法またはギブス法）に基づいた値を出力する。
シミュレーテッド・アニーリングが行われる場合、あるエネルギー変化ΔＥを引き起こす状態遷移の許容確率Ａ（ΔＥ，Ｔ）を以下の式（３），（４）のように決めれば、時刻（反復回数）無限大の極限で状態が最適解に到達することが証明されている。
【００９０】
【数３】
2020057306.tif 000005
【００９１】
【数４】
2020057306.tif 000006
【００９２】
式（３），（４）においてＴは、前述の温度パラメータである。
式（３）で表される許容確率Ａ（ΔＥ，Ｔ）を用いた場合、十分な反復後に定常状態に達したとすると、各状態の占有確率は熱力学における熱平衡状態に対するボルツマン分布にしたがう。そして、高い温度から徐々に下げていくとエネルギーの低い状態の占有確率が増加するため、十分温度が下がるとエネルギーの低い状態が得られるはずである。この様子が材料を焼き鈍したときの状態変化とよく似ているため、この方法はシミュレーテッド・アニーリングと呼ばれるのである。このとき、エネルギーが上がる状態遷移が確率的に起こることは、物理学における熱励起に相当する。
【００９３】
許容確率Ａ（ΔＥ，Ｔ）でエネルギー変化ΔＥを引き起こす状態遷移を許容することを示すフラグ（＝１）を出力する回路は、式（３），（４）のｆ（−ΔＥ／Ｔ）と、一様乱数ｒとの比較結果に基づいた値を出力する比較器によって実現できる。
【００９４】
ただ、次のような変形を行っても同じ機能が実現できる。２つの数に同じ単調増加関数を作用させても大小関係は変化しない。したがって比較器の２つの入力に同じ単調増加関数を作用させても比較器の出力は変わらない。たとえば、ｆ（−ΔＥ／Ｔ）に作用させる単調増加関数としてｆ（−ΔＥ／Ｔ）の逆関数ｆ−１（−ΔＥ／Ｔ）、一様乱数ｒに作用させる単調増加関数としてｆ−１（−ΔＥ／Ｔ）の−ΔＥ／Ｔをｒとしたｆ−１（ｒ）を用いることができる。その場合、上記の比較器と同様の機能を有する回路は、−ΔＥ／Ｔがｆ−１（ｒ）より大きいとき１を出力する回路でよいことがわかる。さらに温度パラメータＴが正であることから、その回路は、−ΔＥがＴ・ｆ−１（ｒ）より大きいとき１を出力する回路でよい。
【００９５】
図５の選択法則適用部６３は、入力される一様乱数ｒを上記のｆ−１（ｒ）の値に変換する変換テーブルを用いて、ｆ−１（ｒ）の値を出力する。メトロポリス法が適用される場合、ｆ−１（ｒ）は、ｌｏｇ（ｒ）である。変換テーブルは、たとえば、ＲＡＭ（Random Access Memory）、フラッシュメモリなどのメモリに記憶されている。
【００９６】
乗算器６４は、制御部４０から供給される温度パラメータＴと、ｆ−１（ｒ）との積（Ｔ・ｆ−１（ｒ））を出力する。Ｔ・ｆ−１（ｒ）は、熱励起エネルギーに相当する。
比較回路６５は、加算器６１による加算結果と、Ｔ・ｆ−１（ｒ）とを比較し、加算結果がＴ・ｆ−１（ｒ）より大きい場合、フラグとして１（更新を許容することを示す値）を出力する。また、比較回路６５は、加算結果がＴ・ｆ−１（ｒ）以下の場合、フラグとして０（更新を許容しないことを示す値）を出力する。
【００９７】
レジスタ６６は、インデックス＝ｉを保持している。
エネルギー変化ΔＥｉ、インデックス＝ｉ及びフラグが、インデックス＝ｉのビットの更新を許容するか否かの情報として、図４の選択部４５に供給される。
【００９８】
（選択部４５の回路例）
図６は、コア内の更新候補ビットを選択する選択部の一例を示す図である。
選択部４５は、乱数発生回路４５ａ、選択信号生成回路４５ｂ、データ選択回路４５ｃを有する。
【００９９】
乱数発生回路４５ａは、たとえば、０〜６５５３５の１６ビットの一様乱数ｒｎｄ１を生成する。乱数発生回路４５ａは、ＬＦＳＲや、メルセンヌ・ツイスタなどにより実現される。
【０１００】
選択信号生成回路４５ｂは、計数部４４から供給される更新許容ビット数Ｕ［ｍ］と、一様乱数ｒｎｄ１とに基づいて、選択信号ＳＥＬ１を生成する。
一様乱数ｒｎｄ１が、０〜６５５３５の値である場合、選択信号生成回路４５ｂは、Ｕ［ｍ］≧２のとき、（Ｕ［ｍ］×ｒｎｄ１）＞＞１６の値を、選択信号ＳＥＬ１として出力する。なお、“＞＞１６”は、１６ビット右シフトを表し、（Ｕ［ｍ］×ｒｎｄ１）＞＞１６は、Ｕ［ｍ］×ｒｎｄ１／６５５３６を演算することと同じである（小数点以下は切り捨てる）。Ｕ［ｍ］＜２のとき、選択信号生成回路４５ｂは、選択信号ＳＥＬ１として０を出力する。
【０１０１】
データ選択回路４５ｃには、判定部４３から、各ビットのインデックス、フラグ、エネルギー変化が供給される。そして、データ選択回路４５ｃは、判定部４３が出力する各ビットのフラグのうち、値が１であるフラグ（つまり更新許容ビットのフラグ）を全て選択する。その後、データ選択回路４５ｃは、更新許容ビットのインデックスの小さいほうから数えて、ＳＥＬ１（選択信号ＳＥＬ１の値）番目のインデックスの更新許容ビットの情報（インデックス、フラグ、エネルギー変化）を出力する。
【０１０２】
また、データ選択回路４５ｃは、判定部４３が出力する各ビットのフラグが全て０である場合、コア３３ａ２内で、最も小さいインデックスのビットのインデックス、フラグ、エネルギー変化を出力する。
【０１０３】
このような選択部４５では、更新許容ビットの計数結果と乱数に基づいて選択を行うことで、コア３３ａ２内における全更新許容ビットの中から比較的均一の割合で、１つの更新候補ビットを選択できる。
【０１０４】
（選択部４６の回路例）
図７は、自コアの更新候補ビットと前段コアの更新候補ビットの一方のインデックスを選択する選択部の一例を示す図である。
【０１０５】
選択部４６は、乱数発生回路４６ａ、加算器４６ｂ、選択信号生成回路４６ｃ、データ選択回路４６ｄ、付加回路４６ｅを有する。
乱数発生回路４６ａは、たとえば、０〜６５５３５の１６ビットの一様乱数ｒｎｄ２を生成する。乱数発生回路４６ａは、ＬＦＳＲや、メルセンヌ・ツイスタなどにより実現される。
【０１０６】
加算器４６ｂは、入力処理部４１から供給される更新候補ビット情報に含まれる積算値Ｃ［ｍ−１］に、更新許容ビット数Ｕ［ｍ］を加算することで更新した積算値Ｃ［ｍ］を出力する。
【０１０７】
選択信号生成回路４６ｃは、更新許容ビット数Ｕ［ｍ］と、積算値Ｃ［ｍ］と、一様乱数ｒｎｄ２とに基づいて選択信号ＳＥＬ２を生成する。
一様乱数ｒｎｄ２が、０〜６５５３５の値である場合、選択信号生成回路４６ｃは、Ｃ［ｍ］が０より大きいとき、ｒｎｄ２＜６５５３６×Ｕ［ｍ］／Ｃ［ｍ］ならば、選択信号ＳＥＬ２として１を出力する。選択信号生成回路４６ｃは、ｒｎｄ２＜６５５３６×Ｕ［ｍ］／Ｃ［ｍ］を満たさない場合には、選択信号ＳＥＬ２として０を出力する。
【０１０８】
また、選択信号生成回路４６ｃは、Ｃ［ｍ］＝０の場合は、選択信号ＳＥＬ２として１を出力する。
データ選択回路４６ｄは、選択信号ＳＥＬ２が１の場合、選択部４５が出力する情報を選択して出力する。データ選択回路４６ｄは、選択信号ＳＬ２が０の場合、入力処理部４１から供給される更新候補ビット情報のうち積算値Ｃ［ｍ−１］を除いたものを、選択して出力する。
【０１０９】
付加回路４６ｅは、データ選択回路４６ｄが出力する情報に積算値Ｃ［ｍ］を付加した更新候補ビット情報を出力する。
以下、最適化装置３０の動作例を説明する。
【０１１０】
まず、図３に示した制御装置３１は、共有バス３４を介して、コア３３ａ１〜３３ａＭを起動し、イジングモデルの情報などの各種情報をコア３３ａ１〜３３ａＭに送信する。
コア３３ａ１〜３３ａＭは、各種情報を制御装置３１から受信し、受信した各種情報に基づいて、たとえば、前述の処理によって、各ビットについて更新を許容するか否かを判定する。たとえば、Ｍ＝４、全ビット数が４０９６である場合、２段目のコア３３ａ２に含まれる判定部４３は、インデックスが１０２４〜２０４７のビットについて更新を許容するか否かを判定する。
【０１１１】
その後、コア３３ａ１〜３３ａＭは、更新を許容するか否かの判定結果を示すフラグと、更新許容ビット数に基づいて、乱数を用いて、更新許容ビットのうちから１つの更新候補ビットを選択する。
【０１１２】
１段目のコア３３ａ１は、選択した更新候補ビットのインデックス、フラグ、エネルギー変化及び更新許容ビット数を含む更新候補ビット情報をコア３３ａ２に、専用バス３５ａ１を介して送信する。２段目以降のコア３３ａ２〜３３ａＭは、前段のコアが送信した更新候補ビット情報と、自身のコアで計数された更新許容ビット数Ｕ［ｍ］に基づいて、更新許容ビット数の積算値Ｃ［ｍ］を更新する。そして、コア３３ａ２〜３３ａＭは、Ｕ［ｍ］／Ｃ［ｍ］の確率で、自身のコアで選択された更新候補ビットのインデックスを選択し、１−Ｕ［ｍ］／Ｃ［ｍ］の確率で、更新候補ビット情報に含まれる更新候補ビットのインデックスを選択する。
【０１１３】
その後、コア３３ａ２〜３３ａＭのコア３３ａＭ以外は、選択した更新候補ビットのインデックス、フラグ、エネルギー変化及び更新した積算値を含む更新候補ビット情報を、後段のコアに送信する。コア３３ａＭは、選択した更新候補ビットのインデックス、フラグ及びエネルギー変化を含む更新対象ビット情報を、１段目のコア３３ａ１に送信する。
【０１１４】
コア３３ａ１は、更新対象ビット情報に基づいて、現在の各ビットの値、現在のエネルギーを更新する。また、コア３３ａ１は、更新された現在のエネルギーが最小エネルギーよりも小さい場合には、最小エネルギーと最小エネルギーが得られたときの各ビットの値を更新する。更新対象ビット情報は、コア３３ａ２〜３３ａＭにも前段のコアから供給され、同様の更新が行われる。
【０１１５】
また、コア３３ａ１〜３３ａＭは、更新対象ビット情報に含まれるフラグが０の場合には、現在のオフセット値に増分値を加算する。
コア３３ａ１〜３３ａＭは、以上のようなイジングモデルの状態の更新処理を繰り返し、更新処理の回数が所定回数に達するたびに、温度スケジュール情報に基づいて、温度パラメータの値を小さくしていく。さらに、コア３３ａ１〜３３ａＭは、更新処理の回数が、制御装置３１から受信した繰り返し回数に達した場合、共有バス３４を介して、更新処理の終了通知を制御装置３１に対して送信する。
【０１１６】
制御装置３１は、コア３３ａ１〜３３ａＭから終了通知を受信した場合、共有バス３４を介して、探索結果の出力要求をコア３３ａ１〜３３ａＭに対して送信する。コア３３ａ１〜３３ａＭは、探索結果の出力要求を受信した場合、イジングモデルの基底状態の探索結果（最適化問題の計算結果）を、制御装置３１に送信する。探索結果は、たとえば、更新処理の回数が、制御装置３１から受信した繰り返し回数に達したときに状態更新部４２で保持されている最小エネルギーが得られたときの各ビットの値である。または、探索結果は、更新処理の回数が上記繰り返し回数に達したときの各ビットの値であってもよい。また、探索結果にはエネルギーや最小エネルギーが含まれていてもよい。
【０１１７】
なお、エネルギー、最小エネルギー及び最小エネルギーが得られたときの各ビットの値の更新については、コア３３ａ１〜３３ａＭのうち、１つのコアが行ってもよい。その場合、制御装置３１は、その１つのコアから探索結果を取得する。
【０１１８】
制御装置３１は、取得した探索結果を、たとえば、図示しない表示装置に出力（表示）する。なお、制御装置３１は、探索結果を記憶装置３２に記憶してもよい。
図８は、制御装置による最適化装置の制御の一例の流れを示すフローチャートである。
【０１１９】
制御装置３１は、共有バス３４を介して、各コア（コア３３ａ１〜３３ａＭ）を起動し（ステップＳ１）、イジングモデルの情報などの各種情報を各コアに送信する（ステップＳ２）。
【０１２０】
その後、制御装置３１は、各コアから更新処理の終了通知を受信したか否かを判定する（ステップＳ３）。終了通知を受信するまでステップＳ３の処理が繰り返される。
制御装置３１は、各コアから終了通知を受信した場合、前述の探索結果を取得し（ステップＳ４）、探索結果を出力し（ステップＳ５）、処理を終える。なお、制御装置３１は、温度スケジュール情報などの計算条件を変えて、ステップＳ２〜Ｓ５の処理を繰り返してもよい。
【０１２１】
以上のような、第２の実施の形態の最適化装置３０によれば、コア３３ａ１〜３３ａＭの各々は前段のコアから送られる更新許容ビットの積算値を用いて、上記のような確率で更新候補ビットを選択する。これにより、更新対象ビットの選択確率の偏りを生じさせることなく、環状に接続したコア３３ａ１〜３３ａＭを用いた大規模化が可能となる。
【０１２２】
なお、上記の説明では、コア３３ａ１を１段目のコア、コア３３ａＭをＭ段目のコアとしたがこれに限定されない。コア３３ａ１〜３３ａＭに制御装置３１から供給されるコア種別を判断するための情報に基づいて、たとえば、制御部４０が、選択部４６を１段目のコアの選択部として機能させてもよいし、出力処理部４７をＭ段目の出力処理部として機能させてもよい。
【０１２３】
以上、実施の形態に基づき、本発明の最適化装置及び最適化装置の制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０１２４】
１０  最適化装置
１１〜１４  演算処理部
１１ａ〜１４ａ  状態更新部
１１ｂ〜１４ｂ  判定部
１１ｃ〜１４ｃ，１２ｅ〜１４ｅ  選択部
１１ｄ〜１４ｄ  計数部
１２ｅ１〜１４ｅ１  データ選択回路
【図１】
2020057306.tif 000007
【図２】
2020057306.tif 000008
【図３】
2020057306.tif 000009
【図４】
2020057306.tif 000010
【図５】
2020057306.tif 000011
【図６】
2020057306.tif 000012
【図７】
2020057306.tif 000013
【図８】
2020057306.tif 000014