(57)【要約】【課題】扱える状態変数の数の制限を改善すること。【解決手段】更新回路１１ａ１〜１１ａＫのそれぞれは、記憶部と状態更新部とスコア更新部とを有する。記憶部は、変化候補の状態変数と他の状態変数との組毎の結合係数、複数の状態変数の値、および、複数の局所場の値を記憶する。状態更新部は、変化候補の状態変数の局所場の値に基づくエネルギー値の変化値と温度値と乱数値とによる状態変数の値を変化させるか否かの判定に応じて、状態変数の値を変化させるとともに結合係数に基づき他の状態変数の局所場の値を更新する。スコア更新部は、複数の状態変数の値に対するエネルギー値と温度値とに応じたスコア値を更新する。選択回路１２は、更新回路１１ａ１〜１１ａＫに対応する複数のスコア値に基づいて、所定数の更新回路のそれぞれにより保持される複数の状態変数の値の組を選択し、選択した複数の状態変数の値の組を出力する。【選択図】図１
2020204929.tif 000002
【特許請求の範囲】
【請求項１】
エネルギー値を表す評価関数に含まれる複数の状態変数のうち、変化候補の状態変数と他の状態変数との組毎の結合係数、前記複数の状態変数の値、および、前記複数の状態変数に対応する複数の局所場の値を記憶する記憶部と、
変化候補の前記状態変数の前記局所場の値に基づいて前記エネルギー値の変化値を計算し、設定された温度値と乱数値と前記変化値とによる前記状態変数の値を変化させるか否かの判定に応じて、前記状態変数の値を変化させるとともに前記結合係数に基づき前記他の状態変数の前記局所場の値を更新する状態更新部と、
前記複数の状態変数の値に対する前記エネルギー値と前記温度値とに応じたスコア値を更新するスコア更新部と、
をそれぞれが備える複数の更新回路と、
前記複数の更新回路に対応する複数の前記スコア値に基づいて、前記複数の更新回路の数よりも少ない所定数の更新回路のそれぞれにより保持される前記複数の状態変数の値の組を選択し、選択された前記複数の状態変数の値の組を出力する選択回路と、
を有するサンプリング装置。
【請求項２】
前記選択回路は、第１の温度値における前記複数のスコア値に基づいて選択された前記複数の状態変数の値の組により、前記複数の更新回路のそれぞれが備える前記記憶部に記憶された前記複数の状態変数の値を更新し、
前記複数の更新回路のそれぞれが備える前記状態更新部は、前記第１の温度値よりも低い第２の温度値において、前記選択回路による更新後の前記複数の状態変数の値を起点にして、前記状態変数の値を変化させる、
請求項１記載のサンプリング装置。
【請求項３】
前記選択回路は、前記複数のスコア値の和に対する前記スコア値の割合で、前記スコア値に対応する更新回路により保持される前記複数の状態変数の値を選択する、請求項２記載のサンプリング装置。
【請求項４】
前記選択回路は、前記温度値が目標値に達すると、前記複数のスコア値に基づいて、前記複数の状態変数の値の組を選択する、
請求項１記載のサンプリング装置。
【請求項５】
前記複数の状態変数のうちの２つの状態変数の全ての組に対する前記結合係数を記憶するメモリから、変化候補の前記状態変数と前記他の状態変数との間の前記結合係数を、変化候補の前記状態変数が選択される順序で読み出し、前記複数の更新回路のそれぞれが備える前記記憶部に、読み出した前記結合係数を格納するメモリ制御回路、
を更に有する請求項１乃至４の何れか１項に記載のサンプリング装置。
【請求項６】
前記所定数の更新回路に対応する所定数の前記スコア値に基づいて、所定の状態関数の平均値を計算する平均値計算回路、
を更に有する請求項１乃至５の何れか１項に記載のサンプリング装置。
【請求項７】
前記複数の更新回路に前記温度値を設定し、前記温度値を漸減させる制御回路、
を更に有する請求項１乃至６の何れか１項に記載のサンプリング装置。
【請求項８】
前記温度値が目標値に達すると、前記複数の更新回路のそれぞれにより得られた前記複数の状態変数の値のうち、最低のエネルギー値に対応する前記複数の状態変数の値を出力する制御回路、
を更に有する請求項１乃至７の何れか１項に記載のサンプリング装置。
【請求項９】
前記記憶部は、前記複数の状態変数のうちの第１の部分の状態変数と変化候補の前記状態変数との組に対する前記結合係数を記憶する第１の記憶部と、前記複数の状態変数のうちの第２の部分の状態変数と変化候補の前記状態変数との組に対する前記結合係数を記憶する第２の記憶部と、を含み、
前記状態更新部は、前記第１の部分の状態変数の値および前記第１の部分の状態変数に対応する前記局所場の値を更新する第１の状態更新部と、前記第２の部分の状態変数の値および前記第２の部分の状態変数に対応する前記局所場の値を更新する第２の状態更新部と、を含み、
前記第１の記憶部と前記第１の状態更新部とを有する第１のチップと、
前記第２の記憶部と前記第２の状態更新部とを有する第２のチップと、
を更に有する請求項１乃至８の何れか１項に記載のサンプリング装置。
【請求項１０】
複数の更新回路のそれぞれが有する状態更新部が、エネルギー値を表す評価関数に含まれる複数の状態変数のうち、変化候補の状態変数の局所場の値に基づいて前記エネルギー値の変化値を計算し、設定された温度値と乱数値と前記変化値とによる前記状態変数の値を変化させるか否かの判定に応じて、前記状態変数の値を変化させるとともに、記憶部に記憶された、変化候補の前記状態変数と他の状態変数との組毎の結合係数に基づき前記他の状態変数の前記局所場の値を更新し、
前記複数の更新回路のそれぞれが有するスコア更新部が、前記複数の状態変数の値に対する前記エネルギー値と前記温度値とに応じたスコア値を更新し、
選択回路が、前記複数の更新回路に対応する複数の前記スコア値に基づいて、前記複数の更新回路の数よりも少ない所定数の更新回路のそれぞれにより保持される前記複数の状態変数の値の組を選択し、選択された前記複数の状態変数の値の組を出力する、
サンプリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はサンプリング装置およびサンプリング方法に関する。
【背景技術】
【０００２】
組合せ最適化問題を解くための手法として、組合せ最適化問題を磁性体のスピンの振る舞いを表すイジングモデルに変換し、マルコフ連鎖モンテカルロ法を用いて、イジングモデルの状態をエネルギーの低い状態に遷移させていく手法がある。例えば、マルコフ連鎖モンテカルロ法の一種として、シミュレーテッド・アニーリング法が知られている。シミュレーテッド・アニーリング法では、温度をパラメータとして用い、温度を徐々に下げながら状態を遷移させることで最低エネルギーの状態（最適解）を探索する。
【０００３】
例えば、シミュレーテッド・アニーリング法を、デジタル回路を用いて実行する情報処理装置の提案がある（例えば、特許文献１参照）。提案の情報処理装置は、次のように複数の状態遷移を同時に遷移候補として、１つの状態遷移を選択する並列探索を行う。
【０００４】
情報処理装置は、複数の状態変数に対応する複数のニューロンを有し、ニューロン間の結合係数に応じた状態遷移毎のエネルギー変化と温度値とに基づき、所定の受入確率で各状態遷移を許容する。情報処理装置は、許容された状態遷移の中から１つを選択し、状態を更新する。状態遷移の受入確率には、例えば、メトロポリス法やギブス法で規定される確率が用いられる。
【０００５】
また、イジングモデルの基底状態探索を実行する１又は複数の半導体チップが搭載された情報処理システムの提案もある（例えば、特許文献２参照）。
更に、相互作用モデルの１つのノードの状態を示す値と他のノードからの相互作用係数と当該１つのノードのバイアス係数とに基づいて、当該１つのノードの次状態を示す値を決定する演算回路を有する半導体装置の提案もある（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１８−４１３５１号公報
【特許文献２】特開２０１６−５１３５０号公報
【特許文献３】特開２０１６−５１３２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
メトロポリス法やギブス法で状態遷移の受入確率を決めると、平衡状態では、各状態の占有確率はボルツマン分布に従う。そこで、マルコフ連鎖モンテカルロ法を用いて、ある温度で状態遷移の複数試行により得られた状態または状態に基づいた値をサンプルとして出力することで、ボルツマン分布に従うサンプルを発生するサンプラーを実現できる。発生したサンプルは、例えば、機械学習などでの期待値の計算に用いられる。
【０００８】
ここで、上記の情報処理装置のように、複数の状態変数に対する並列探索により次の状態遷移を決定することでサンプリングを実行することが考えられる。この方法では、次に反転させる状態変数は予測不能（実質的にランダム）である。反転させる状態変数に応じて局所場を更新するタイミングで、結合係数の値を保持したメモリに対してランダムなアクセスが生ずる。そこで、高速動作のために、ランダムアクセス可能な記憶部をサンプラーに内蔵し、全ての結合係数を当該記憶部に予め格納することが考えられる。
【０００９】
一方、状態変数の数の増加とともに結合係数の数は増加する。このため、例えば、１または複数チップの半導体集積回路でサンプラーを実現する場合、結合係数を格納する記憶部の容量により、扱える状態変数の数が制限されてしまうという問題がある。
【００１０】
１つの側面では、本発明は、扱える状態変数の数の制限を改善できるサンプリング装置およびサンプリング方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、サンプリング装置が提供される。このサンプリング装置は、複数の更新回路と選択回路とを有する。複数の更新回路のそれぞれは、記憶部と状態更新部とスコア更新部とを有する。記憶部は、エネルギー値を表す評価関数に含まれる複数の状態変数のうち、変化候補の状態変数と他の状態変数との組毎の結合係数、複数の状態変数の値、および、複数の状態変数に対応する複数の局所場の値を記憶する。状態更新部は、変化候補の状態変数の局所場の値に基づいてエネルギー値の変化値を計算し、設定された温度値と乱数値と変化値とによる状態変数の値を変化させるか否かの判定に応じて、状態変数の値を変化させるとともに結合係数に基づき他の状態変数の局所場の値を更新する。スコア更新部は、複数の状態変数の値に対するエネルギー値と温度値とに応じたスコア値を更新する。選択回路は、複数の更新回路に対応する複数のスコア値に基づいて、複数の更新回路の数よりも少ない所定数の更新回路のそれぞれにより保持される複数の状態変数の値の組を選択し、選択した複数の状態変数の値の組を出力する。
【００１２】
また、１つの態様では、サンプリング方法が提供される。
【発明の効果】
【００１３】
１つの側面では、扱える状態変数の数の制限を改善できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態のサンプリング装置を示す図である。
【図２】第２の実施の形態のサンプリング装置の回路構成例を示す図である。
【図３】レプリカ更新回路の回路構成例を示す図である。
【図４】判定部の回路構成例を示す図である。
【図５】リサンプリング回路の回路構成例を示す図である。
【図６】選択回路の回路構成例を示す図である。
【図７】サンプリング装置の処理例を示すフローチャートである。
【図８】リサンプリングの例を示すフローチャートである。
【図９】第３の実施の形態のサンプリング装置の回路構成例を示す図である。
【図１０】スコア順選択回路の回路構成例を示す図である。
【図１１】選択回路の回路構成例を示す図である。
【図１２】サンプリング装置の処理例を示すフローチャートである。
【図１３】状態変数の分割例を示す図である。
【図１４】第４の実施の形態のサンプリング装置の回路構成例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１６】
図１は、第１の実施の形態のサンプリング装置を示す図である。
サンプリング装置１０は、マルコフ連鎖モンテカルロ（ＭＣＭＣ：Markov-Chain Monte Carlo）法を用いて、メトロポリス法やギブス法の基準でイジングモデルの状態を遷移させることで、ボルツマン分布に従う状態のサンプリングを行う。サンプリング装置１０は組合せ最適化問題に対する求解を行うこともできる。サンプリング装置１０は、例えばＦＰＧＡ（Field Programmable Gate Array）などの半導体集積回路（半導体チップ）を用いて実現される。
【００１７】
ここで、イジング型のエネルギー関数Ｅ（ｘ）は、例えば式（１）で定義される。
【００１８】
【数１】
2020204929.tif 000003
【００１９】
式（１）の右辺第１項は、全状態変数から選択可能な２つの状態変数の全組合せについて、漏れと重複なく、２つの状態変数の値と結合係数との積を積算したものである。ｘｉは、ｉ番目の状態変数である。ｘｊは、ｊ番目の状態変数である。状態変数は０または１の値を取る。状態変数は、バイナリ変数やビットなどと呼ばれることもある。結合係数Ｗｉｊは、ｉ番目の状態変数とｊ番目の状態変数との間の重み（例えば、結合の強さ）を示す。なお、行列Ｗ＝｛Ｗｉｊ｝について、Ｗｉｊ＝Ｗｊｉ、Ｗｉｉ＝０である。添え字ｉ，ｊは、状態変数の識別情報であり、インデックスと呼ばれる。状態変数の全ての組合せに対する結合係数は、サンプリング装置１０に接続された外部メモリ５０に記憶されている。外部メモリ５０は、例えばＤＲＡＭ（Dynamic Random Access Memory）により実現される。
【００２０】
式（１）の右辺第２項は、全状態変数のそれぞれのバイアス値と状態変数の値との積の総和である。ｂｉは、ｉ番目の状態変数に対するバイアス値を示す。
例えば、イジングモデルにおけるスピンの「−１」は、状態変数の値「０」に対応する。イジングモデルにおけるスピンの「＋１」は、状態変数の値「１」に対応する。
【００２１】
状態変数ｘｉの値が変化して１−ｘｉとなると、状態変数ｘｉの増加分は、δｘｉ＝（１−ｘｉ）−ｘｉ＝１−２ｘｉと表せる。したがって、エネルギー関数Ｅ（ｘ）に対して、状態変数ｘｉのスピン反転（値の変化）に伴うエネルギー変化ΔＥｉは、式（２）で表される。
【００２２】
【数２】
2020204929.tif 000004
【００２３】
ｈｉは局所場（ローカルフィールド）と呼ばれ、式（３）で表される。
【００２４】
【数３】
2020204929.tif 000005
【００２５】
状態変数ｘｊが変化（ビット反転）したときの局所場ｈｉの変化分δｈｉ（ｊ）は、式（４）で表される。
【００２６】
【数４】
2020204929.tif 000006
【００２７】
サンプリング装置１０は、状態変数ｘｉに対する局所場ｈｉを保持し、他の状態変数ｘｊの値が変化したときに変化分δｈｉ（ｊ）を、ｈｉに加算することで、ビット反転後の状態に対応するｈｉを得る。サンプリング装置１０は、式（２）に基づいて、局所場ｈｉにより状態変数ｘｉを変化候補としたときのエネルギー変化値ΔＥｉを求めることができる。
【００２８】
サンプリング装置１０は、前述のように、エネルギー変化がΔＥｉとなる状態遷移（状態変数ｘｉの値の変化）を許容するか否かを決定するためにメトロポリス法やギブス法を用いる。これにより、ある状態から当該状態よりもエネルギーの低い他の状態への遷移を探索する近傍探索において、エネルギーが下がる状態だけでなく、エネルギーが上がる状態への遷移が確率的に許容される。例えば、エネルギー変化ΔＥの状態変数の値の変化を受け入れる確率（受入確率）Ａは式（５）で表される。
【００２９】
【数５】
2020204929.tif 000007
【００３０】
ここで、βは温度値Ｔの逆数（逆温度値）であり、β＝１／Ｔである。ｍｉｎ演算子は、引数のうちの最小値を取ることを示す。例えば、メトロポリス法を用いる場合、サンプリング装置１０は、一様乱数ｕ（０＜ｕ≦１）に対して、エネルギー変化ΔＥが式（６）を満たす場合に、該当の状態変数の値の変化を許容する。
【００３１】
【数６】
2020204929.tif 000008
【００３２】
サンプリング装置１０は、変化が許容された状態変数の値を変化させるとともに状態変数間の結合係数により他の状態変数の局所場を更新することで、状態を遷移させる。
サンプリング装置１０は、複数の状態変数に対応するレプリカを複数有し、上記の確率的探索プロセスを並列に動作させる。サンプリング装置１０では、複数のレプリカの情報を統合する手法として、Jarzynski-Nealの原理の応用であるAnnealed Importance Sampling（ＡＩＳと略記する）、あるいは、Population Annealing（ＰＡと略記する）の手法が用いられる。
【００３３】
Jarzynski-Nealの原理については文献１を参考にすることができる。ＡＩＳについては文献２を参考にすることができる。ＰＡについては文献３を参考にすることができる。
文献１：Jarzynski, C., “Equilibrium Free Energies from Nonequilibrium Processes,” Acta Phys. Pol. B, vol.29(6), 1998., p.1609-1622.
文献２：Neal, R. M., “Annealed Importance Sampling,” Statistics and Computing volume 11 Issue2, 2001., p.125-139.
文献３：K. Hukushimaand Y. Iba, “Population annealing and its application to a spin glass,” AIP Conference Proceedings vol.690, 2003., p.200-206.
ここで、１つのレプリカに属する状態変数の数をＮ（Ｎは２以上の整数）個とする。この場合、外部メモリ５０に保持される結合係数の総数は、Ｎ２個である。また、サンプリング装置１０が有するレプリカの数をＫ（Ｋは２以上の整数）個とする。更に、レプリカの状態を、状態ベクトル｛ｘｐｋ｝（ｋは１以上Ｋ以下の整数）で表す。なお、状態ベクトルの下付きの添え字ｐは０以上の整数であり、時間ステップを示す。状態ベクトルの上付きの添え字ｋは、レプリカを示す。添え字ｐ，ｋの表記は省略されることがある。状態ベクトル｛ｘｐｋ｝は、式（７）で表される（添え字ｔは転置を示す）。
【００３４】
【数７】
2020204929.tif 000009
【００３５】
サンプリング装置１０は、レプリカの重みを示すスコアＳｋを各レプリカに与える。サンプリング装置１０は、スコアＳ０ｋ＝１としてＭＣＭＣ法を使用してレプリカの状態をランダムな初期状態ｘ０ｋから、ｘ１ｋ，ｘ２ｋ，…と更新していく。スコアＳｐｋは式（８）で表される。
【００３６】
【数８】
2020204929.tif 000010
【００３７】
ここで、逆温度βｐの初期値β０＝０，スコアＳｐｋの初期値Ｓ０ｋ＝１である。
サンプリング装置１０は、状態ｘｐｋを逆温度βｐで所定回数（例えば全状態変数のそれぞれに対する１回の試行で計Ｎ回）だけＭＣＭＣ法により更新すると、ｐ＝ｐ＋１とし、逆温度を式（９）により更新して、スコアＳｐｋを求める。逆温度は係数α（＞１）により等比的に増加する。この手順の繰り返しにより各レプリカのスコアＳｐｋが更新される。
【００３８】
【数９】
2020204929.tif 000011
【００３９】
サンプリング装置１０は、スコアＳｐｋに基づいてサンプリングを行う。
サンプリング装置１０は、更新回路１１ａ１，１１ａ２，…，１１ａＫ、選択回路１２、制御回路１３およびメモリ制御回路１４を有する。
【００４０】
更新回路１１ａ１〜１１ａＫは、それぞれがイジングモデルのレプリカに対応し、各レプリカにおける確率的探索プロセスを実行する。図１では、更新回路１１ａ１の構成が例示されている。更新回路１１ａ２〜１１ａＫも更新回路１１ａ１と同様の構成である。更新回路１１ａ１は、記憶部１１１、状態更新部１１２およびスコア更新部１１３を有する。例えば、更新回路１１ａ１はｋ＝１のレプリカに相当する（ｐ，ｋの添え字を省略する）。また、変化候補の状態変数のインデックス（あるいは変化候補のインデックス）をｊとする。
【００４１】
記憶部１１１は、エネルギー値を表す評価関数に含まれる複数の状態変数（ｘ１〜ｘＮ）のうち、変化候補の状態変数ｘｊと他の状態変数｛ｘｉ｝との組毎の結合係数｛Ｗｉｊ｝（Ｗｊｊ＝０が含まれてもよい）を記憶する。また、記憶部１１１は、複数の状態変数の値、および、複数の状態変数に対応する複数の局所場（ｈ１〜ｈＮ）の値を記憶する。記憶部１１１は、例えばＳＲＡＭ（Static Random Access Memory）により実現される。今回の変化候補のインデックスｊは、更新回路１１ａ１〜１１ａＫで共通の１つのインデックスである。変化候補のインデックスｊは所定の順序（例えば、インデックス順）で、状態更新部１１２などにより選択される。
【００４２】
状態更新部１１２は、変化候補の状態変数ｘｊの局所場ｈｊの値に基づいてエネルギー値の変化値ΔＥｊを、式（２）により計算する。状態更新部１１２は、設定された温度値Ｔと乱数値ｕと変化値ΔＥｊとによる状態変数ｘｊの値を変化させるか否かの判定に応じて、状態変数の値を変化させるとともに結合係数｛Ｗｉｊ｝に基づき他の状態変数｛ｘｉ｝の局所場｛ｈｉ｝の値を更新する。ここで、当該判定は、式（６）に基づく判定である。また、例えば、状態更新部１１２は、状態変数ｘｊの値を変化させる場合、現在のエネルギー値に変化値ΔＥｊを積算することで、現在の状態に対するエネルギー値を計算する。状態更新部１１２は、ある温度値Ｔにおいて、変化候補の状態変数ｘｊを順次変更して、状態変数、局所場およびエネルギー値の更新を所定回数（あるいは所定期間）繰り返す。状態更新部１１２は、制御回路１３により温度値Ｔが減少されると、減少後の温度で状態変数、局所場およびエネルギーの更新を更に繰り返す。
【００４３】
スコア更新部１１３は、複数の状態変数（ｘ１〜ｘＮ）の値に対するエネルギー値Ｅ（ｘ）と温度値Ｔ（あるいは逆温度値β＝１／Ｔ）とに応じたスコア値Ｓを更新する。スコア値Ｓは、式（８）により求められる。
【００４４】
選択回路１２は、複数の更新回路（更新回路１１ａ１〜１１ａＫ）から複数のスコア値（スコア値Ｓ１〜ＳＫ）を取得する。選択回路１２は、更新回路１１ａ１〜１１ａＫに対応するスコア値Ｓ１〜ＳＫに基づいて、複数の更新回路の数Ｋよりも少ない所定数Ｌ（Ｌは１以上Ｋ未満の整数）の更新回路のそれぞれにより保持される複数の状態変数の組を選択する。複数の状態変数の値の組は、複数の状態ベクトル（Ｌ個の状態ベクトル）に相当する。選択回路１２により選択された状態ベクトルを｛ｘＳ｝と表す。選択回路１２は、選択した複数の状態変数の値の組を出力する。
【００４５】
制御回路１３は、更新回路１１ａ１〜１１ａＫ、選択回路１２およびメモリ制御回路１４の動作を制御する。例えば、制御回路１３は、更新回路１１ａ１〜１１ａＫに対して、状態、局所場、温度値（あるいは逆温度値）およびスコア値の初期値やバイアス値などを設定する。また、例えば、制御回路１３は、更新回路１１ａ１〜１１ａＫおよび選択回路１２にクロックを供給する。なお、式（９）に基づく温度値の更新は、制御回路１３により行われてもよいし、各更新回路の状態更新部により行われてもよい。例えば、制御回路１３は、更新回路１１ａ１〜１１ａＫに温度値を設定する。制御回路１３は、設定する温度値を漸減させる（「逆温度値を漸増させる」とも言える）。
【００４６】
制御回路１３は、変化候補の状態変数ｘｊに対応する結合係数｛Ｗｉｊ｝の外部メモリ５０からのメモリ制御回路１４による読み出し、および、結合係数｛Ｗｉｊ｝の更新回路１１ａ１〜１１ａＫのそれぞれの記憶部に対する書き込みを制御する。例えば、外部メモリ５０には変化候補として選択されるインデックスの順序で、結合係数Ｗが予め格納される。制御回路１３は、変化候補のインデックスｊのインクリメントに応じて、外部メモリ５０からの結合係数｛Ｗｉｊ｝の読み出し、および、更新回路１１ａ１〜１１ａＫの記憶部への｛Ｗｉｊ｝の書き込みの命令をメモリ制御回路１４に出力する。
【００４７】
メモリ制御回路１４は、制御回路１３からの命令に応じて、外部メモリ５０から、変化候補の状態変数と他の状態変数との間の結合係数｛Ｗｉｊ｝（＝Ｗ１ｊ，Ｗ２ｊ，…，ＷＮｊ）を順番に（変化候補のインデックスｊが選択される順序で）読み出す。メモリ制御回路１４は、更新回路１１ａ１〜１１ａＫのそれぞれが備える記憶部に、読み出した結合係数｛Ｗｉｊ｝（＝Ｗ１ｊ，Ｗ２ｊ，…，ＷＮｊ）を格納する。
【００４８】
ここで、ＡＩＳを用いる場合、例えば、選択回路１２は、温度値（あるいは逆温度値）が目標値に到達した段階で、Ｌ個の状態ベクトル｛ｘＳ｝の選択を行い、サンプリングされた状態として、当該状態ベクトル｛ｘＳ｝を出力する。選択回路１２による状態ベクトルの選択方法としては、スコア値Ｓｋの上位Ｌ個を選択する方法が考えられる。例えば、選択回路１２（あるいは制御回路１３）は、選択回路１２により出力される状態ベクトル｛ｘＳ｝を、外部メモリ５０またはその他のメモリに書き込んでもよい。
【００４９】
また、選択回路１２により選択されたＬ個の状態ベクトル｛ｘＳ｝に対して観察したい状態関数の平均値をスコア値Ｓに基づいて計算して出力することも考えられる。この場合、サンプリング装置１０は、所定数の更新回路に対応する所定数のスコア値に基づいて、所定の状態関数の平均値を計算する平均値計算回路を更に備えてもよい。例えば、レプリカｋに対する状態関数をＡｐｋとすると、平均値＜Ａ＞は、式（１０）により表される。
【００５０】
【数１０】
2020204929.tif 000012
【００５１】
また、ＰＡを用いる場合、例えば、選択回路１２は、時間ステップｐに応じたタイミング（例えば、ｐ＝０（ｍｏｄ  Ｍ）（Ｍは１以上の整数）のタイミング）で、スコア値Ｓｐｋを計算後、スコア値Ｓｐｋに基づくリサンプリングと呼ばれるステップを実行する。ここで、「ｐ＝０（ｍｏｄ  Ｍ）」は、ｐをＭで割った剰余が０であることを示す。リサンプリングのステップでは、選択回路１２は、式（１１）で表される確率で、レプリカｋの状態を選択し、次の時間ステップでの探索に引き継ぐ。
【００５２】
【数１１】
2020204929.tif 000013
【００５３】
この場合、選択回路１２は、Ｋの約数であるｍ（２≦ｍ＜Ｋ）に対し、式（１１）の確率でＫ／ｍ回の選択を行うことで、更新回路１１ａ１〜１１ａＫにより保持される状態のうち、引き継ぎ対象の状態を、重複を許して選択する。選択回路１２は、更新回路１１ａ１〜１１ａＫのそれぞれの記憶部に、選択した状態を格納することで、各レプリカの状態を引き継ぎ対象の状態に更新する。当該記憶部に保持されるエネルギー値や局所場の値も、各更新回路または選択回路１２により、それぞれ引き継ぎ対象の状態に対応する値に更新される。例えば、選択回路１２は、引き継ぎ元の更新回路の記憶部から、状態ベクトルとともにエネルギー値や各局所場の値を読み出して、引き継ぎ先の更新回路の記憶部に格納する。選択回路１２は、リサンプリングが完了すると、全てのレプリカのスコア値Ｓｐｋを１にリセットする。そして、更新回路１１ａ１〜１１ａＫによる探索が再開される。
【００５４】
ＰＡの場合、例えば選択回路１２は、温度値（あるいは逆温度値）が目標値に到達した段階で、式（１１）で表される確率で、Ｌ個（Ｌ＝ｍでもよい）の状態ベクトル｛ｘＳ｝の選択を行い、サンプリングされた状態として、当該状態ベクトル｛ｘＳ｝を出力する。また、ＡＩＳを用いる場合と同様に、サンプリング装置１０は、選択回路１２により選択されたＬ個の状態ベクトル｛ｘＳ｝に対して観察したい状態関数の平均値を、スコア値Ｓに基づいて式（１０）により計算して出力する平均値計算回路を備えてもよい。
【００５５】
更に、例えば、制御回路１３は、温度値（あるいは逆温度値）が目標値に到達した段階で、更新回路１１ａ１〜１１ａＫのそれぞれにより得られた複数の状態変数の値のうち、最低のエネルギー値に対応する複数の状態変数の値を出力してもよい。一例として、制御回路１３は、温度値が目標値に到達した段階で選択回路１２により選択された状態のうち、最低のエネルギーに対応する複数の状態変数の値を、組合せ最適化問題に対する解として出力してもよい。
【００５６】
サンプリング装置１０では、更新回路１１ａ１〜１１ａＫのそれぞれが備える記憶部において、全結合係数のうち、少なくとも今回の変化候補のインデックスｊに対応する結合係数｛Ｗｉｊ｝を保持すればよい。例えば、当該記憶部において、全結合係数のうち、今回の変化候補のインデックスｊに対応する結合係数｛Ｗｉｊ｝のみを保持するようにしてもよい。
【００５７】
すると、更新回路１１ａ１〜１１ａＫのそれぞれの記憶部において結合係数の保持に所要される容量を、最小で、Ｎ個（ただし、インデックスｊの分を除けばＮ−１個）の結合係数のサイズに抑えられる。よって、更新回路１１ａ１〜１１ａＫのそれぞれの記憶部の限られた容量の中で、Ｎ２個の結合係数を保持するよりも、結合係数のビット数を変えずに（問題表現の精度を落とさずに）、多くの状態変数を扱えるようになる。このように、サンプリング装置１０によれば、扱える状態変数の数（問題規模）の制限を改善できる。また、更新回路１１ａ１〜１１ａＫを用いた並列試行により、サンプリングの高速化を図れる。
【００５８】
以下では、上記で説明したＡＩＳおよびＰＡを用いる場合のサンプリング装置の構成例を更に具体的に説明する。まず、ＰＡを用いる場合を例示する。
［第２の実施の形態］
次に、第２の実施の形態を説明する。
【００５９】
図２は、第２の実施の形態のサンプリング装置の回路構成例を示す図である。
サンプリング装置２０は、レプリカ更新回路２１ａ１，２１ａ２，…，２１ａＫ、リサンプリング回路２２、平均値計算ブロック２３、制御回路２４、メモリＩ／Ｆ（InterFace）マクロ２５およびＦＩＦＯ（First In, First Out）２６を有する。サンプリング装置２０は、外部メモリ５１に接続されている。サンプリング装置２０は、例えばＦＰＧＡなどの半導体集積回路を用いて実現される。
【００６０】
外部メモリ５１は、例えばＤＲＡＭである。外部メモリ５１は、イジングモデルに含まれる２つの状態変数の全ての組に対する結合係数を記憶する。例えば、外部メモリ５１には、変化候補のインデックスｊの発生順に対応する順序で、全ての結合係数Ｗが予め格納される。状態変数の数がＮ個のとき、外部メモリ５１に格納される状態変数の数はＮ２個である。
【００６１】
レプリカ更新回路２１ａ１〜２１ａＫは、レプリカの状態（状態ベクトル）、および、状態に応じたエネルギー値を、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれが備える内部メモリに保持する。レプリカ更新回路２１ａ１〜２１ａＫによりＫ個のレプリカが実現される。また、レプリカ更新回路２１ａ１〜２１ａＫは、状態ベクトルに属する状態変数に対応する局所場を、内部メモリに保持する。更に、レプリカ更新回路２１ａ１〜２１ａＫは、変化候補のインデックスｊに対する結合係数｛Ｗｉｊ｝を、内部メモリに保持する。レプリカ更新回路２１ａ１〜２１ａＫは、複数のレプリカの状態を並列に更新する。１回に発生する変化候補のインデックスｊは、１つであり、レプリカ更新回路２１ａ１〜２１ａＫで共通である。
【００６２】
レプリカ更新回路２１ａ１〜２１ａＫは、第１の実施の形態の更新回路１１ａ１〜１１ａＫの一例である。レプリカ更新回路２１ａ１〜２１ａＫのそれぞれは、レプリカに関する演算を行う演算回路と呼ばれてもよい。
【００６３】
リサンプリング回路２２は、レプリカ更新回路２１ａ１〜２１ａＫにより更新される複数のスコア値Ｓｐｋ（単にスコアと言うことがある）に基づいて、リサンプリングを実行する。リサンプリング回路２２は、レプリカ更新回路２１ａ１〜２１ａＫのうち、リサンプリングにより選択されたレプリカ更新回路に保持される状態ベクトルをレプリカ更新回路２１ａ１〜２１ａＫに出力する。
【００６４】
平均値計算ブロック２３は、リサンプリング回路２２により選択されたレプリカ更新回路のスコアＳｐｋを用いて、式（１１）などにより状態関数の平均値を計算する回路である。
【００６５】
制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫ、リサンプリング回路２２および平均値計算ブロック２３にクロック信号（ｃｌｋ）を供給し、レプリカ更新回路２１ａ１〜２１ａＫ、リサンプリング回路２２および平均値計算ブロック２３の動作を制御する。制御回路２４は、メモリＩ／Ｆマクロ２５により外部メモリ５１から結合係数｛Ｗｉｊ｝を読み出すタイミングを制御する。制御回路２４は、メモリＩ／Ｆマクロ２５に対して、外部メモリ５１からの結合係数｛Ｗｉｊ｝の読み出しのリクエストを出力する。制御回路２４は、第１の実施の形態の制御回路１３の一例である。
【００６６】
メモリＩ／Ｆマクロ２５は、制御回路２４から受け付けるリクエストに応じて、外部メモリ５１にメモリ制御信号を発行する。メモリ制御信号は、結合係数｛Ｗｉｊ｝の読み出しのコマンドを含む。メモリＩ／Ｆマクロ２５は、メモリ制御信号に応じて外部メモリ５１から結合係数｛Ｗｉｊ｝のデータを受け付ける。
【００６７】
メモリＩ／Ｆマクロ２５は、外部メモリ５１からのデータ同期や並べ替え等を行うＦＩＦＯ機能も有する。メモリＩ／Ｆマクロ２５は、受け付けた結合係数｛Ｗｉｊ｝のデータを、ＦＩＦＯ２６に出力する。また、メモリＩ／Ｆマクロ２５は、レプリカ更新回路２１ａ１〜２１ａＫへのデータ送信の同期を得るためのＦＩＦＯ制御信号をＦＩＦＯ２６に出力する。
【００６８】
ＦＩＦＯ２６は、メモリＩ／Ｆマクロ２５から結合係数｛Ｗｉｊ｝のデータを受け付ける。ＦＩＦＯ２６は、メモリＩ／Ｆマクロ２５からのＦＩＦＯ制御信号に基づいて、レプリカ更新回路２１ａ１〜２１ａＫの内部メモリ（図示を省略している）に、結合係数｛Ｗｉｊ｝のデータを出力する。
【００６９】
メモリＩ／Ｆマクロ２５およびＦＩＦＯ２６のセットは、第１の実施の形態のメモリ制御回路１４の一例である。
次に、レプリカ更新回路２１ａ１の回路構成を例示する。レプリカ更新回路２１ａ２〜２１ａＫもレプリカ更新回路２１ａ１と同様の回路構成である。
【００７０】
図３は、レプリカ更新回路の回路構成例を示す図である。
レプリカ更新回路２１ａ１は、インデックス生成部２１１、更新部２１２、エネルギー変化計算部２１３、判定部２１４およびスコア計算部２１５を有する。インデックス生成部２１１、更新部２１２、エネルギー変化計算部２１３および判定部２１４のセットは、第１の実施の形態の状態更新部１１２（あるいは状態更新回路）の一例である。すなわち、インデックス生成部２１１、更新部２１２、エネルギー変化計算部２１３および判定部２１４を有する回路ブロックを状態更新部あるいは状態更新回路と称してもよい。スコア計算部２１５は、第１の実施の形態のスコア更新部１１３（あるいはスコア更新回路）の一例である。
【００７１】
インデックス生成部２１１は、制御回路２４から供給されるクロック信号に同期して、変化候補のインデックスｊを生成し、更新部２１２に供給する。例えば、インデックス生成部２１１は、今回の変化候補のインデックスｊに対して、次回の変化候補のインデックスをｊ＋１とする。状態変数の総数はＮであるため、インデックスはｊ＝１〜Ｎの順に、１つずつ生成される。ｊ＝Ｎに到達すると、ｊ＝１から再び生成される。このように、インデックス生成部２１１は、変化候補の状態変数のインデックスｊを順番に発生させる。インデックス生成部２１１により、次の変化候補の状態変数が選択されているとも言える。このように、レプリカ更新回路２１ａ１では、変化候補の状態変数のインデックスの発生順を制御可能である。
【００７２】
更新部２１２は、外部メモリ５１から読み出された結合係数｛Ｗｉｊ｝＝Ｗ１ｊ，Ｗ２ｊ，…，ＷＮｊを保持する。更新部２１２は、制御回路２４から供給されるクロック信号に同期して、変化候補の状態変数ｘｊの値、および、状態変数ｘｊに対応する局所場ｈｊの値を、エネルギー変化計算部２１３に出力する。
【００７３】
エネルギー変化計算部２１３は、状態変数ｘｊの値、および、局所場ｈｊの値に基づいて、イジングモデルにおけるエネルギー値の変化値ΔＥｋｊを計算する。エネルギー値に対する下付きの添え字ｋは、レプリカを示す。ΔＥｋｊは、式（２）に基づいて計算され、ΔＥｋｊ＝−δｘｊｈｊ＝（２ｘｊ−１）ｈｊである。エネルギー変化計算部２１３は、計算した変化値ΔＥｋｊを判定部２１４に出力する。
【００７４】
判定部２１４は、変化値ΔＥｋｊと逆温度値βｐと乱数値ｕとに基づいて、状態変数ｘｊの値の変化を受け入れるか否かを判定する。当該判定は、式（６）に基づく判定である。判定部２１４は、変化候補のインデックスｊと、状態変数ｘｊの変化分δｘｊとを更新部２１２に出力する。ここで、状態変数ｘｊの値の変化を受け入れる場合、δｘｊ＝１−２ｘｊであり、δｘｊ＝−１、または、δｘｊ＝＋１である。状態変数ｘｊの値の変化を受け入れない場合、δｘｊ＝０である。
【００７５】
更新部２１２は、判定部２１４により出力された変化分δｘｊに基づいて、レプリカの状態を更新する。更新部２１２は、インデックスｉ≠ｊについて、式（４）に基づき、局所場ｈｉをｈｉ＝ｈｉ＋δｘｊＷｉｊに更新する。δｘｊ＝０の場合（ｘｊを反転させない場合）には、更新前後でｈｉは同じ値となる。
【００７６】
また、更新部２１２は、インデックスｉ＝ｊについて、状態変数ｘｊをｘｊ＝ｘｊ＋δｘｊに更新する。δｘｊ＝０の場合（ｘｊを反転させない場合）には、更新前後でｘｊは同じ値となる。更に、更新部２１２は、δｘｊ≠０の場合、エネルギー値Ｅｋ＝Ｅ（ｘｐｋ）を、Ｅｋ＝Ｅｋ＋ΔＥｋｊ＝Ｅｋ＋（２ｘｊ−１）ｈｊに更新する。δｘｊ＝０の場合、エネルギー値Ｅｋは変化しない。
【００７７】
スコア計算部２１５は、制御回路２４から供給されるクロック信号に同期して（例えば、更新部２１２におけるｊ＝１〜Ｎの一巡の処理に対して１回の頻度）、更新部２１２からエネルギー値Ｅｋを取得し、スコアＳｋを更新する。Ｓｋ＝Ｓｋ（−（βｐ−βｐ−１）Ｅｋ）は式（８）により与えられる。式（８）によれば、エネルギー値Ｅｋが低い程、スコアＳｋは大きい値になる傾向となる。なお、スコア計算部２１５は、スコア計算部２１５の内部メモリ（図示を省略している）にＳｐ−１ｋを保持しておく。また、スコア計算部２１５は、αに基づいてβｐからβｐ−１を計算するか、βｐ−１を内部メモリに保持しておく。
【００７８】
図４は、判定部の回路構成例を示す図である。
判定部２１４は、オフセット値生成部２１４ａ、乱数生成部２１４ｂ、ノイズ値生成部２１４ｃ、符号反転回路２１４ｄ、加算器２１４ｅ，２１４ｆ、比較器２１４ｇおよびセレクタ２１４ｈを有する。
【００７９】
オフセット値生成部２１４ａは、比較器２１４ｇにより出力されるフラグＦｊに基づいて、オフセット値Ｅｏｆｆ（Ｅｏｆｆ≧０）を生成し、加算器２１４ｅに供給する。具体的には、オフセット値生成部２１４ａは、比較器２１４ｇから出力されるフラグＦｊが遷移可（Ｆｊ＝１）を示す場合、オフセット値Ｅｏｆｆを０にリセットする。オフセット値生成部２１４ａは、比較器２１４ｇから出力されるフラグＦｊが遷移不可（Ｆｊ＝０）を示す場合、オフセット値Ｅｏｆｆに増分値ΔＥｏｆｆを加算する。フラグＦｊが連続して０を示す場合、オフセット値生成部２１４ａは、ΔＥｏｆｆを積算することで、ＥｏｆｆをΔＥｏｆｆずつ増加させる。
【００８０】
乱数生成部２１４ｂは、０＜ｕ≦１の一様乱数ｕを生成し、ノイズ値生成部２１４ｃに出力する。
ノイズ値生成部２１４ｃは、一様乱数ｕと、制御回路２４により供給された逆温度値βｐとに対して式（６）の左辺の値を生成するための変換テーブルを保持する。ノイズ値生成部２１４ｃは、当該変換テーブルにより、式（６）に基づくノイズ値（熱ノイズ）である−ｌｎ（ｕ）／βｐの値を生成する。ノイズ値生成部２１４ｃは、生成した−ｌｎ（ｕ）／βｐの値を加算器２１４ｆに出力する。
【００８１】
符号反転回路２１４ｄは、エネルギー変化計算部２１３から供給されるエネルギー値の変化値ΔＥｋｊの符号を反転させ、加算器２１４ｅに供給する。
加算器２１４ｅは、符号反転回路２１４ｄから供給される−ΔＥｋｊにオフセット値Ｅｏｆｆを加算し、加算器２１４ｆに供給する。
【００８２】
加算器２１４ｆは、加算器２１４ｅから供給される−ΔＥｋｊ＋Ｅｏｆｆに、熱ノイズ−ｌｎ（ｕ）／βｐを加算し、比較器２１４ｇに供給する。
比較器２１４ｇは、加算器２１４ｅにより出力された評価値−ΔＥｋｊ＋Ｅｏｆｆ−ｌｎ（ｕ）／βｐを閾値（具体的には０）と比較することで、式（６）に基づく判定を行う。比較器２１４ｇは、評価値が０以上の場合、遷移可を示すフラグ（Ｆｊ＝１）を、セレクタ２１４ｈおよびオフセット値生成部２１４ａに出力する。図４では、比較器２１４ｇとオフセット値生成部２１４ａとの関連線の図示を省略している。比較器２１４ｇは、評価値が０未満の場合、遷移不可を示すフラグ（Ｆｊ＝０）を、セレクタ２１４ｈおよびオフセット値生成部２１４ａに出力する。
【００８３】
セレクタ２１４ｈは、比較器２１４ｇから出力されるフラグがＦｊ＝１の場合、δｘｊ＝１−２ｘｊを、更新部２１２に出力する。また、セレクタ２１４ｈは、比較器２１４ｇから出力されるフラグがＦｊ＝０の場合、δｘｊ＝０を、更新部２１２に出力する。
【００８４】
ここで、比較器２１４ｇから出力されるフラグＦｊが遷移不可を示す場合、現在の状態が局所解に陥っていると考えられる。オフセット値生成部２１４ａによる、−ΔＥｋｊへのＥｏｆｆの加算やＥｏｆｆの漸増により、状態遷移が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
【００８５】
図５は、リサンプリング回路の回路構成例を示す図である。
リサンプリング回路２２は、選択回路２２１およびメモリ２２２を有する。
選択回路２２１は、ｐ＝０（ｍｏｄ  Ｍ）のタイミングで、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれのスコア計算部により計算されたスコアＳｋを取得し、式（１１）で示される確率Ｐｋに基づいて、リサンプリングを行う。選択回路２２１は、第１の実施の形態の選択回路１２の一例である。
【００８６】
選択回路２２１は、式（１１）で示される確率Ｐｋで状態を次のステップに引き継ぐ計算を、計算式に従ってそのまま実行することが考えられる。ただし、この場合、指数関数と重み算出と重み正規化の計算を伴う。この計算は計算量が多いことがある。
【００８７】
そこで、選択回路２２１は、例えば、Reservoir samplingと呼ばれる手法を用いて、リサンプリングを高速化してもよい。この方法では、スコアＳｐｋの式に現れるエネルギーの値に、［０−１］に一様分布する確率変数ｒｉ（ｉ＝１，…，Ｋ）から発生される変数ｌｏｇ（−ｌｏｇ（ｒｉ））（ｌｏｇは自然対数を示す）をオフセットとして加算し、加算後の値が小さい方からｍ個を選択する。ここで、前述のように、ｍはレプリカ数Ｋの約数（ただし、２≦ｍ＜Ｋ）である。この選択をＫ／ｍ回行うことで、次のステップに引き継ぐレプリカを決定する。一例では、Ｋ＝１０２４のとき、ｍ＝３２とする。
【００８８】
Reservoir samplingについては文献４を参考にすることができる。
文献４：Pavlos S. Efraimidis, Paul G. Spirakis, “Weighted random sampling with a reservoir,” Information Processing Letters 97, issue 5, 2006., p.181-185.
１回の選択数ｍは、例えば、制御回路２４またはサンプリング装置２０の外部から選択回路２２１に対して指定される。選択回路２２１は、選択したｍ個のレプリカにより保持される状態ベクトル｛ｘｋ｝を取得し、メモリ２２２に格納する。選択回路２２１は、Ｋ／ｍ回の選択が完了すると、メモリ２２２に蓄積されたＫ個の状態ベクトル｛ｘＳ｝をレプリカ更新回路２１ａ１〜２１ａＫに書き戻す。Ｋ／ｍ回の各回の選択において、選択される状態ベクトルが重複することもある。
【００８９】
これにより、レプリカ更新回路２１ａ１〜２１ａＫの内部メモリ（例えば、更新部２１２のメモリ２１２ａ）に保持される状態ベクトルが、スコアＳｋに基づいて選択された状態ベクトル｛ｘＳ｝に更新される。ここで、メモリ２１２ａは、例えばＳＲＡＭであり、第１の実施の形態の記憶部１１１の一例である。
【００９０】
なお、選択回路２２１は、更新後の状態ベクトルに対応するエネルギー値や各状態変数に対応する局所場の値を引き継ぎ元のレプリカ更新回路から取得して、引き継ぎ先のレプリカ更新回路の内部メモリに格納することで、エネルギー値や局所場の値も更新する。ただし、更新後の状態ベクトルに対応するエネルギー値および局所場の値とする更新は、例えば、各レプリカ更新回路の更新部（例えば、更新部２１２）により行われてもよい。
【００９１】
こうしてリサンプリングが完了すると、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれのスコア計算部２１５が保持するスコアＳｋは、１にリセットされる。
メモリ２２２は、例えばＳＲＡＭであり、選択回路２２１により選択された状態ベクトルを蓄積するための記憶部である。
【００９２】
図６は、選択回路の回路構成例を示す図である。
選択回路２２１は、乱数生成部２２１ａ、オフセット生成部２２１ｂ、加算器２２１ｃおよび選択部２２１ｄを有する。
【００９３】
乱数生成部２２１ａは、Ｋ個の乱数ｒｉ（ｉ＝１，…，Ｋ）を発生させる。乱数生成部２２１ａは、Ｋ個の乱数ｒｉをオフセット生成部２２１ｂに出力する。
オフセット生成部２２１ｂは、乱数ｒｉに対してｌｏｇ（−ｌｏｇ（ｒｉ））を発生させるための変換テーブルを有し、当該テーブルに基づいて、Ｋ個の乱数ｒｉに対するＫ個の変数ｌｏｇ（−ｌｏｇ（ｒｉ））を、加算器２２１ｃに出力する。
【００９４】
加算器２２１ｃは、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれから供給されるスコアＳｋに、オフセット生成部２２１ｂから供給される変数ｌｏｇ（−ｌｏｇ（ｒｉ））を加算し、選択部２２１ｄに出力する。加算器２２１ｃにより、Ｋ個のスコアＳｋとＫ個の変数ｌｏｇ（−ｌｏｇ（ｒｉ））とが１対１に対応付けられて、両者の合計値が計算される（全部でＫ個の合計値が得られる）。
【００９５】
選択部２２１ｄは、加算器２２１ｃから出力されたＫ個の合計値のうち、下位のｍ個に対応するレプリカ更新回路を選択し、当該ｍ個のレプリカ更新回路のそれぞれにより保持される状態ベクトルをメモリ２２２に蓄積する。選択部２２１ｄは、重複を許した、Ｋ／ｍ回の選択を行うことで、全部でＫ個の状態をメモリ２２２に蓄積する。選択回路２２１は、メモリ２２２に蓄積されたＫ個の状態を、それぞれ、レプリカ更新回路２１ａ１〜２１ａＫに出力し、レプリカ更新回路２１ａ１〜２１ａＫにより保持される状態を更新する。
【００９６】
リサンプリングでは、比較的エネルギーの低い状態が次の探索に引き継がれる可能性が高い。リサンプリングを繰り返し行うことで、各温度において適切なサンプルを生成できる。
【００９７】
次に、サンプリング装置２０の処理手順を説明する。
図７は、サンプリング装置の処理例を示すフローチャートである。
（Ｓ１０）制御回路２４は、イジングモデルに応じた初期化を実行する。例えば、制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれに、初期状態、局所場の初期値、初期温度値（または初期逆温度値）、温度値（または逆温度値）の変化のための係数α、バイアス値、および、初期エネルギー値を設定する。制御回路２４は、温度更新回数をカウントするカウンタｐを１に設定する。制御回路２４は、リサンプリングによる状態の選択個数ｍを外部から受け付け、選択回路２２１に設定する。また、制御回路２４は、リサンプリングを行うまでの温度更新回数Ｍの外部からの設定を受け付ける。
【００９８】
ここで、以下のステップＳ１１〜Ｓ１９について、レプリカ更新回路２１ａ１（ｋ＝１）に着目して説明するが、レプリカ更新回路２１ａ２〜２１ａＫも同様の処理を並列に実行する。
【００９９】
（Ｓ１１）スコア計算部２１５は、スコアＳｐｋを更新する。スコアＳｐｋは、式（８）に基づいて更新される。なお、ステップＳ１０の初期化後、ステップＳ１１を最初に実行する際、スコア計算部２１５は、例えば、β０＝０，Ｓ０ｋ＝１として、スコアＳ１ｋを計算する。
【０１００】
（Ｓ１２）制御回路２４は、ｐ＝０（ｍｏｄ  Ｍ）であるか否かを判定する。ｐ＝０（ｍｏｄ  Ｍ）の場合、ステップＳ１３に処理が進む。ｐ≠０（ｍｏｄ  Ｍ）の場合、ステップＳ１４に処理が進む。
【０１０１】
（Ｓ１３）選択回路２２１は、リサンプリングを実行する。リサンプリングの手順の詳細は後述される。
（Ｓ１４）インデックス生成部２１１は、インデックスｊをｊ＝０に設定する。
【０１０２】
（Ｓ１５）インデックス生成部２１１は、インデックスｊをインクリメントする（ｊ＝ｊ＋１）。更新部２１２は、外部メモリ５１から読み出された結合係数｛Ｗｉｊ｝＝Ｗ１ｊ〜ＷＮｊを受け付け、メモリ２１２ａに格納する。更新部２１２は、状態変数ｘｊの値、および、局所場ｈｊの値を、エネルギー変化計算部２１３に出力する。
【０１０３】
（Ｓ１６）エネルギー変化計算部２１３は、状態変数ｘｊの値および局所場ｈｊの値に基づいてエネルギー値の変化値ΔＥｊを計算する。ΔＥｊは、式（２）に基づいて計算される。エネルギー変化計算部２１３は、計算したΔＥｊを判定部２１４に出力する。
【０１０４】
（Ｓ１７）判定部２１４は、状態変数ｘｊの更新（ビット反転）を受け入れるか否かを判定する。受け入れる場合、ステップＳ１８に処理が進む。受け入れない場合、ステップＳ１９に処理が進む。
【０１０５】
（Ｓ１８）更新部２１２は、インデックスｉ（ｉ≠ｊ）について、メモリ２１２ａに保持される結合係数Ｗｉｊに基づいて、メモリ２１２ａに保持される局所場ｈｉを更新する。更新部２１２は、メモリ２１２ａに格納された状態のうち、状態変数ｘｊの値を変化（ビット反転）させる。更に、更新部２１２は、メモリ２１２ａに格納されたエネルギー値Ｅを更新する。
【０１０６】
（Ｓ１９）インデックス生成部２１１は、ｊ＝Ｎであるか否かを判定する。ｊ＝Ｎの場合、ステップＳ２０に処理が進む。ｊ≠Ｎの場合、ステップＳ１５に処理が進む。
（Ｓ２０）制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫに供給される温度値（または逆温度値）を更新する（温度更新）。温度更新は、式（９）に基づいて実行される。制御回路２４は、ｐをインクリメントする（ｐ＝ｐ＋１）。
【０１０７】
（Ｓ２１）制御回路２４は、温度値が目標温度に達したか否かを判定する。温度値が目標温度に達した場合、ステップＳ２２に処理が進む。温度値が目標温度に達していない場合、ステップＳ１１に処理が進む。なお、制御回路２４は、逆温度値が目標逆温度に達したか否かを判定し、逆温度値が目標逆温度に達した場合にステップＳ２２に進み、逆温度値が目標逆温度に達していない場合にステップＳ１１に進むように制御してもよい。
【０１０８】
（Ｓ２２）制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫに保持される状態のうち、最低エネルギーの状態を取得し、取得した最低エネルギーの状態を出力する。そして、処理が終了する。
【０１０９】
なお、ステップＳ２２において、制御回路２４は、リサンプリング回路２２により選択された状態（例えば、ｍ個の状態）や、選択された状態に対応するスコアを用いて平均値計算ブロック２３により計算された所定の状態関数の平均値を出力してもよい。
【０１１０】
また、ステップＳ１５における前もって決められた順にインデックスを選択する方法に代えて、ｍｏｖｅのインデックスの選択（例えば、２つの状態変数のペアに対してインデックスを付けて選択）することも考えられる。この場合、更新部２１２は、前もって決められた順番で、ｍｏｖｅのインデックスを選択することで、次の変化候補の状態変数を決定する。
【０１１１】
次に、リサンプリングの手順を説明する。
図８は、リサンプリングの例を示すフローチャートである。
リサンプリングの処理は、ステップＳ１３に相当する。
【０１１２】
（Ｓ３０）選択回路２２１は、カウンタＣをＣ＝１に設定する。
（Ｓ３１）選択回路２２１は、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれからスコアＳｋを取得する。選択回路２２１は、レプリカ更新回路２１ａ１〜２１ａＫにより保持されるＫ個の状態のうちから、スコアＳｋに基づいて状態をｍ個選択する。
【０１１３】
（Ｓ３２）選択回路２２１は、選択した状態を、メモリ２２２に蓄積する。
（Ｓ３３）選択回路２２１は、カウンタＣをインクリメントする（Ｃ＝Ｃ＋１）。
（Ｓ３４）選択回路２２１は、Ｃ＝Ｋ／ｍであるか否かを判定する。Ｃ＝Ｋ／ｍの場合、ステップＳ３５に処理が進む。Ｃ≠Ｋ／ｍの場合、ステップＳ３１に処理が進む。
【０１１４】
（Ｓ３５）選択回路２２１は、メモリ２２２に蓄積したＫ個の状態をレプリカ更新回路２１ａ１〜２１ａＫに書き出す。各レプリカ更新回路により保持されるエネルギー値や局所場の値も、更新後の状態に対応する値にそれぞれ更新される（各レプリカ更新回路により更新されてもよいし、選択回路２２１により更新されてもよい）。
【０１１５】
（Ｓ３６）選択回路２２１は、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれのスコア計算部が保持するスコアＳｋを１にリセットする。そして、リサンプリングの処理が終了する。
【０１１６】
このように、選択回路２２１は、第１の温度値における複数のスコア値に基づいて選択された複数の状態変数の値の組（状態ベクトルの組）により、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれが備えるメモリ（記憶部）に記憶された複数の状態変数の値を更新する。レプリカ更新回路２１ａ１〜２１ａＫのそれぞれが備える更新部は、第１の温度値よりも低い第２の温度値において、選択回路２２１による更新後の複数の状態変数の値を起点にして、状態変数の値を変化させる。例えば、選択回路２２１は、式（１１）に基づき、複数のスコア値の和に対するスコア値の割合（確率Ｐｋ）で、当該スコア値に対応するレプリカ更新回路により保持される複数の状態変数の値を選択する。こうして、次の温度ステップに引き継ぐ状態を各レプリカのスコアに応じて選択することで、目的の分布（ボルツマン分布）に従う比較的低いエネルギーを取る状態を、サンプルとして適切に発生させることができる。
【０１１７】
サンプリング装置２０では、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれが備えるメモリにおいて、全結合係数のうち、少なくとも今回の変化候補のインデックスｊに対応する結合係数｛Ｗｉｊ｝を保持すればよい。例えば、当該メモリにおいて、全結合係数のうち、今回の変化候補のインデックスｊに対応する結合係数｛Ｗｉｊ｝のみを保持するようにしてもよい。
【０１１８】
すると、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれのメモリにおいて結合係数の保持に所要される容量を、最小で、Ｎ個（ただし、インデックスｊの分を除けばＮ−１個）の結合係数のサイズに抑えられる。よって、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれの内蔵メモリの限られた容量の中で、Ｎ２個の結合係数を保持する場合よりも、多くの状態変数を扱えるようになる。このように、サンプリング装置２０によれば、扱える状態変数の数（問題規模）の制限を改善できる。
【０１１９】
［第３の実施の形態］
次に第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１２０】
第３の実施の形態では、ＡＩＳを用いるサンプリング装置の例を説明する。
図９は、第３の実施の形態のサンプリング装置の回路構成例を示す図である。
サンプリング装置２０ａは、レプリカ更新回路２１ａ１，２１ａ２，…，２１ａＫ、平均値計算ブロック２３、制御回路２４、メモリＩ／Ｆマクロ２５、ＦＩＦＯ２６およびスコア順選択回路２７を有する。サンプリング装置２０ａは、リサンプリング回路２２に代えて、スコア順選択回路２７を有する点が、サンプリング装置２０と異なる。サンプリング装置２０ａは、例えば、ＦＰＧＡなどの半導体集積回路を用いて実現される。
【０１２１】
レプリカ更新回路２１ａ１，２１ａ２，…，２１ａＫ、平均値計算ブロック２３、制御回路２４、メモリＩ／Ｆマクロ２５およびＦＩＦＯ２６の機能は、第２の実施の形態の同名の構成と同様であるため説明を省略する。ただし、制御回路２４は、リサンプリング回路２２の代わりに、スコア順選択回路２７の動作を制御する。また、平均値計算ブロック２３は、スコア順選択回路２７により選択された状態に対応するスコアを用いて、状態関数の平均値の計算を行う。
【０１２２】
スコア順選択回路２７は、温度値（または逆温度値）が目標値に到達するとレプリカ更新回路２１ａ１〜２１ａＫのそれぞれにより更新されたスコアＳｋを取得する。スコア順選択回路２７は、スコアＳｋに基づいて、レプリカ更新回路２１ａ１〜２１ａＫにより保持される状態のうち、ｍ個の状態を選択し、選択したｍ個の状態を出力する。
【０１２３】
図１０は、スコア順選択回路の回路構成例を示す図である。
スコア順選択回路２７は、選択回路２７１およびメモリ２７２を有する。
選択回路２７１は、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれのスコア計算部により計算されたスコアＳｋを取得する。選択回路２７１は、スコアＳｋの上位ｍ個のレプリカに対応するｍ個の状態｛ｘＳ｝を選択し、メモリ２７２に格納する。選択回路２７１は、選択したｍ個の状態｛ｘＳ｝を出力する。選択回路２７１は、第１の実施の形態の選択回路１２の一例である。
【０１２４】
メモリ２７２は、選択回路２７１により選択された状態ｘＳを保持する記憶部である。
図１１は、選択回路の回路構成例を示す図である。
選択回路２７１は、選択部２７１ａを有する。
【０１２５】
選択部２７１ａは、Ｋ個のスコアＳｋのうち、上位ｍ個のスコアに対応するレプリカ更新回路を選択し、当該ｍ個のレプリカ更新回路のそれぞれにより保持される状態ベクトルを出力する。出力先は、メモリ２７２でもよいし、平均値計算ブロック２３の内部メモリでもよいし、外部メモリ５１でもよい。
【０１２６】
次に、サンプリング装置２０ａの処理手順を説明する。
図１２は、サンプリング装置の処理例を示すフローチャートである。
（Ｓ４０）制御回路２４は、イジングモデルに応じた初期化を実行する。例えば、制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれに、初期状態、局所場の初期値、初期温度値（または初期逆温度値）、温度値（または逆温度値）の変化のための係数α、バイアス値、および、初期エネルギー値を設定する。制御回路２４は、温度更新回数をカウントするカウンタｐを１に設定する。制御回路２４は、目標温度到達時の状態の選択個数ｍを外部から受け付け、選択回路２７１に設定する。
【０１２７】
ここで、以下のステップＳ４１〜Ｓ４７について、レプリカ更新回路２１ａ１（ｋ＝１）に着目して説明するが、レプリカ更新回路２１ａ２〜２１ａＫも同様の処理を並列に実行する。
【０１２８】
（Ｓ４１）スコア計算部２１５は、スコアＳｐｋを更新する。スコアＳｐｋは、式（８）に基づいて更新される。なお、ステップＳ４０の初期化後、ステップＳ４１を最初に実行する際、スコア計算部２１５は、例えば、β０＝０，Ｓ０ｋ＝１として、スコアＳ１ｋを計算する。
【０１２９】
（Ｓ４２）インデックス生成部２１１は、インデックスｊをｊ＝０に設定する。
（Ｓ４３）インデックス生成部２１１は、インデックスｊをインクリメントする（ｊ＝ｊ＋１）。更新部２１２は、外部メモリ５１から読み出された結合係数｛Ｗｉｊ｝＝Ｗ１ｊ〜ＷＮｊを受け付け、メモリ２１２ａに格納する。更新部２１２は、状態変数ｘｊの値、および、局所場ｈｊの値を、エネルギー変化計算部２１３に出力する。
【０１３０】
（Ｓ４４）エネルギー変化計算部２１３は、状態変数ｘｊの値および局所場ｈｊの値に基づいてエネルギー値の変化値ΔＥｊを計算する。ΔＥｊは、式（２）に基づいて計算される。エネルギー変化計算部２１３は、計算したΔＥｊを判定部２１４に出力する。
【０１３１】
（Ｓ４５）判定部２１４は、状態変数ｘｊの更新（ビット反転）を受け入れるか否かを判定する。受け入れる場合、ステップＳ４６に処理が進む。受け入れない場合、ステップＳ４７に処理が進む。
【０１３２】
（Ｓ４６）更新部２１２は、インデックスｉ（ｉ≠ｊ）について、メモリ２１２ａに保持される結合係数Ｗｉｊに基づいて、メモリ２１２ａに保持される局所場ｈｉを更新する。更新部２１２は、メモリ２１２ａに格納された状態のうち、状態変数ｘｊの値を変化（ビット反転）させる。更に、更新部２１２は、メモリ２１２ａに格納されたエネルギー値Ｅを更新する。
【０１３３】
（Ｓ４７）インデックス生成部２１１は、ｊ＝Ｎであるか否かを判定する。ｊ＝Ｎの場合、ステップＳ４８に処理が進む。ｊ≠Ｎの場合、ステップＳ４３に処理が進む。
（Ｓ４８）制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫに供給される温度値（または逆温度値）を更新する（温度更新）。制御回路２４は、ｐをインクリメントする（ｐ＝ｐ＋１）。
【０１３４】
（Ｓ４９）制御回路２４は、温度値が目標温度に達したか否かを判定する。温度値が目標温度に達した場合、ステップＳ５０に処理が進む。温度値が目標温度に達していない場合、ステップＳ４１に処理が進む。なお、制御回路２４は、逆温度値が目標逆温度に達したか否かを判定し、逆温度値が目標逆温度に達した場合にステップＳ５０に進み、逆温度値が目標逆温度に達していない場合にステップＳ４１に進むように制御してもよい。
【０１３５】
（Ｓ５０）スコア順選択回路２７の選択回路２７１は、レプリカ更新回路２１ａ１〜２１ａＫにより更新されたＫ個のスコアＳｋを取得する。選択回路２７１は、Ｋ個のスコアＳｋのうち、上位ｍ個のスコアに対応するレプリカ更新回路を選択し、当該ｍ個のレプリカ更新回路のそれぞれにより保持されるｍ個の状態ベクトルを出力する。また、例えば、選択回路２７１は、上位ｍ個のスコアＳｋを出力する。平均値計算ブロック２３は選択回路２７１により出力されたｍ個のスコアに基づいて、式（１０）により状態関数Ａの平均値の計算を行い、ｍ個の状態ベクトルとともに出力する。
【０１３６】
このように、選択回路２７１は、温度値が目標値に達すると、複数のスコア値に基づいて、所定数のレプリカ更新回路に保持される複数の状態変数の値の組を選択する、サンプリング装置２０ａでは、サンプリング装置２０に比べて、サンプルのばらつきは大きくなるが、回路構成が簡単になり、また、リサンプリングによるオーバーヘッドが無いという利点がある。
【０１３７】
なお、ステップＳ５０において、制御回路２４は、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれにより得られた状態ベクトルのうち、最低のエネルギー値に対応する状態ベクトルを出力してもよい。例えば、制御回路２４は、スコア順選択回路２７により出力されたｍ個の状態ベクトルのうち、最低エネルギー値に対応する状態ベクトルを出力してもよい。これにより、サンプリング装置２０ａを組合せ最適化問題の求解に用いることもできる。
【０１３８】
サンプリング装置２０ａでは、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれが備えるメモリにおいて、全結合係数のうち、少なくとも今回の変化候補のインデックスｊに対応する結合係数｛Ｗｉｊ｝を保持すればよい。例えば、当該メモリにおいて、全結合係数のうち、今回の変化候補のインデックスｊに対応する結合係数｛Ｗｉｊ｝のみを保持するようにしてもよい。
【０１３９】
すると、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれのメモリにおいて結合係数の保持に所要される容量を、最小で、Ｎ個（ただし、インデックスｊの分を除けばＮ−１個）の結合係数のサイズに抑えられる。よって、レプリカ更新回路２１ａ１〜２１ａＫのそれぞれの内蔵メモリの限られた容量の中で、Ｎ２個の結合係数を保持する場合よりも、多くの状態変数を扱えるようになる。このように、サンプリング装置２０ａによれば、扱える状態変数の数（問題規模）の制限を改善できる。
【０１４０】
［第４の実施の形態］
次に第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１４１】
状態変数ｘｊが変化（ビット反転）したとき、その変化分δｘｊ＝１−２ｘｊを用いて、更新後の局所場ｈｉは、ｈｉ＝ｈｉ＋δｘｊＷｉｊのように計算される。このため、分割した局所場を複数チップに分割して保持し、各チップに対して、制御回路により、δｘｊの値（０，＋１あるいは−１の何れか）をブロードキャストすることで、ローカルに局所場を更新でき、多チップ化を図れる。
【０１４２】
図１３は、状態変数の分割例を示す図である。
Ｎ個の状態変数（および当該状態変数に対応する局所場）を複数のグループ（例えば、グループ６１，６２）に分割し、複数のグループのそれぞれを別チップに搭載する。局所場の更新のための加算演算は、これらの各チップで並列に行うことが可能である。
【０１４３】
例えば、第１の記憶部と第１の状態更新部とを第１のチップに搭載し、第２の記憶部と第２の状態更新部とを第２のチップに搭載する。図１３の例の場合、例えば、グループ６１が第１のチップに対応する。グループ６２が第２のチップに対応する。
【０１４４】
第１の記憶部は、グループ６１に対応する第１の部分の状態変数と変化候補の状態変数との組に対する結合係数を記憶する。第１の状態更新部は、第１の部分の状態変数の値および第１の部分の状態変数に対応する局所場の値を更新する。
【０１４５】
第２の記憶部は、グループ６２に対応する第２の部分の状態変数と変化候補の状態変数との組に対する結合係数を記憶する。第２の状態更新部は、第２の部分の状態変数の値および第２の部分の状態変数に対応する局所場の値を更新する。
【０１４６】
グループの数（すなわち、チップの数）は、２個以上とすることができる。
図１４は、第４の実施の形態のサンプリング装置の回路構成例を示す図である。
図１４では、Ｎ個の状態変数をＲ個（Ｒは２以上の整数）のグループに分割した例が示されている。１つのグループに属する状態変数の数はＮ／Ｒ＝ｍ個である。この場合、１個または複数個の外部メモリを用いる。図１４では、Ｒ個の外部メモリ５１ａ１〜５１ａＲが例示されている。外部メモリ５１ａ１〜５１ａＲは、例えば、ＤＲＡＭである。外部メモリ５１ａ１〜５１ａＲのそれぞれについても、Ｒ個のグループに分割された結合係数が、分けて格納される。
【０１４７】
サンプリング装置３０は、チップ３０ａ１，３０ａ２，…，３０ａＲおよび制御回路３１を有する。チップ３０ａ１〜３０ａＲは、外部メモリ５１ａ１〜５１ａＲにそれぞれ接続される。以下の説明では、チップ３０ａ１に着目して説明するが、チップ３０ａ２〜３０ａＲも同様の構成である。
【０１４８】
チップ３０ａ１は、レプリカ更新回路３１ａ１〜３１ａＫ、メモリＩ／Ｆマクロ３１１、ＦＩＦＯ３１２および分配回路３１３を有する。
レプリカ更新回路３１ａ１〜３１ａＫのそれぞれは、ｍ個の状態変数ｘ１１〜ｘｍ１およびｍ個の局所場ｈ１１〜ｈｍ１の更新を担当する。レプリカ更新回路３１ａ１〜３１ａＫのそれぞれは、変化候補の状態変数のインデックスｊに対する結合係数Ｗｉｊ＝Ｗ１ｊ〜ＷＮｊのうち、Ｗ１ｊ〜Ｗｍｊのみを、レプリカ更新回路３１ａ１〜３１ａＫのそれぞれの内部メモリ（図示を省略している）に保持すればよい。この場合、例えば、外部メモリ５１ａ１は、ｍＮ個の結合係数Ｗ１ｉ〜Ｗｍｉ（ｉ＝１〜Ｎ）を保持する。
【０１４９】
変化させる状態変数ｘｊｋがチップ３０ａ１以外のチップにより担当される場合、他のチップのｋ番目のレプリカ更新回路により計算されたδｘｊｋが、制御回路３１を介して、チップ３０ａ１のｋ番目のレプリカ更新回路に供給される。ｋ番目のレプリカは、チップ３０ａ１〜３０ａＲに搭載されたＲ個のレプリカ更新回路（ｋ番目のレプリカ更新回路）によって実現される。
【０１５０】
メモリＩ／Ｆマクロ３１１は、制御回路３１からのコマンドに応じて、外部メモリ５１ａ１に記憶された結合係数Ｗ１ｉ〜Ｗｍｉ（ｉ＝１〜Ｎ）のうち、今回の変化候補のインデックスｊに対応する結合係数Ｗ１ｊ〜Ｗｍｊを読み出し、ＦＩＦＯ３１２に出力する。メモリＩ／Ｆマクロ３１１は、外部メモリ５１ａ１から出力されるデータの同期や並べ替えなどの処理も行う。
【０１５１】
ＦＩＦＯ３１２は、メモリＩ／Ｆマクロ３１１から供給される結合係数Ｗ１ｊ〜Ｗｍｊを、データ送信の同期を取って、分配回路３１３に出力する。
分配回路３１３は、ＦＩＦＯ３１２から供給される結合係数Ｗ１ｊ〜Ｗｍｊをレプリカ更新回路３１ａ１〜３１ａＫの内部メモリに格納する。
【０１５２】
制御回路３１は、第２，第３の実施の形態で例示した制御回路２４の機能を有する。また、制御回路３１は、あるチップで判定されたレプリカｋのインデックスｊに対するδｘｊｋを取得し、他のチップのレプリカｋのレプリカ更新回路に送信する。更に、制御回路３１は、各チップにおけるレプリカｋのレプリカ更新回路により保持される状態変数の値をマージして、レプリカｋの状態ベクトルを作成する。
【０１５３】
また、図１４では図示を省略しているが、サンプリング装置３０は、各レプリカのスコアを計算するスコア計算回路や各レプリカのエネルギーを計算するエネルギー計算回路を有し、リサンプリング回路２２あるいはスコア順選択回路２７に相当する回路を有する。各レプリカのスコアは、制御回路３１によりマージされた各レプリカの状態ベクトルに対して計算される。
【０１５４】
また、制御回路３１は、リサンプリングに伴う状態ベクトルをレプリカ更新回路へ書き出す処理を制御する。すなわち、制御回路３１は、リサンプリングにより選択された状態ベクトルをレプリカｋに反映させる場合、当該状態ベクトルに属するＮ個の状態変数をＲ個のグループに分割して各チップのｋ番目のレプリカ更新回路に書き出す。このとき、制御回路３１は、各状態変数の局所場やレプリカのエネルギー値も更新する。
【０１５５】
このように、サンプリング装置３０におけるＫ個のレプリカを複数のチップ（例えば、チップ３０ａ１〜３０ａＲ）により実現することで、１つのレプリカ更新回路の内部メモリ（記憶部）において結合係数の保持に所要される容量を更に低減できる。このため、より多くの状態変数を扱えるようになり、状態変数の数の制限を改善できる。
【０１５６】
ところで、既存の情報処理装置（例えば、特開２０１８−４１３５１号公報）では状態変数（ビット）が反転したときのエネルギー増分に基づき並列試行により反転する状態変数を決定する。このため、高速性が得られるが、反転するビットは予測不能な形（実質的にランダム）で発生するため、反転ビットに応じて局所場を更新するためには局所場の値を保持したメモリに対してランダムなアクセスが生ずる。情報処理装置を高速に動作させるためには、ランダムアクセス可能なメモリをチップ上に搭載し、全ての結合係数を当該メモリに蓄積する必要が生ずる。したがって、このメモリ容量により扱える変数の数（問題規模に相当）が制限されるという問題が発生する。
【０１５７】
これに対し、高速性の源である並列性を保ちながら、オンチップメモリ容量による問題規模の制約を改善するため、並列試行に変わる効率のよい並列化手法が求められる。
そこで、サンプリング装置１０，２０，２０ａ，３０では、当該並列化手法として、確率的探索プロセス（レプリカ）を並列に動作させ、複数のレプリカの情報を統合する方法を採る。複数のレプリカの情報を統合する方法には、Jarzynski-Nealの原理の応用であるＡＩＰあるいはＰＡが用いられる。
【０１５８】
サンプリング装置１０，２０，２０ａ，３０では、例示したように、インデックス順の試行が行われる。結合係数の読み出しがチップ外のメモリ（外部メモリ）へのシリアルアクセスで行われる。結合係数の１行分がシリアルアクセスで読み出されて、チップ上の複数レプリカで共通に使用されて試行が行われる。レプリカの温度値が段階的に下げられて、レプリカのエネルギーと温度値とにより決まるスコアに応じて、出力対象状態が選択される。例えば、サンプリング装置１０，２０，３０では、次の温度値に引き継がれるレプリカの状態が決定され得る。
【０１５９】
サンプリング装置１０，２０，２０ａ，３０によれば、試行の並列性を保って高速化を図りながら、オンチップメモリ容量による問題規模の制約を改善することができる。
【符号の説明】
【０１６０】
１０  サンプリング装置
１１ａ１，１１ａ２，…，１１ａＫ  更新回路
１２  選択回路
１３  制御回路
１４  メモリ制御回路
１１１  記憶部
１１２  状態更新部
１１３  スコア更新部
【図１】
2020204929.tif 000014
【図２】
2020204929.tif 000015
【図３】
2020204929.tif 000016
【図４】
2020204929.tif 000017
【図５】
2020204929.tif 000018
【図６】
2020204929.tif 000019
【図７】
2020204929.tif 000020
【図８】
2020204929.tif 000021
【図９】
2020204929.tif 000022
【図１０】
2020204929.tif 000023
【図１１】
2020204929.tif 000024
【図１２】
2020204929.tif 000025
【図１３】
2020204929.tif 000026
【図１４】
2020204929.tif 000027