(57)【要約】【課題】解精度を向上させること。【解決手段】温度調整部２１は、探索部１０ａ１〜１０ａＮの各々における温度値の遷移に関する統計情報である温度統計情報を取得するとともに、取得した温度統計情報に基づいて探索部１０ａ１〜１０ａＮの各々に設定する温度値を決定する。温度制御部２２は、決定した温度値を探索部１０ａ１〜１０ａＮの各々に対して設定する。交換制御部２３は、エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、複数の探索部間で温度値又は複数の状態変数の値を入れ替える。【選択図】図１
2020086821.tif 000002
【特許請求の範囲】
【請求項１】
複数の探索部と前記複数の探索部を制御する制御部を有する最適化装置において、
前記複数の探索部の各々は、
エネルギー値を表す評価関数に含まれる複数の状態変数の値をそれぞれ保持する状態保持部と、
前記複数の状態変数の値の何れかが変化することに応じて状態遷移が起こる場合、前記エネルギー値の変化値を複数の状態遷移のそれぞれに対して計算することにより基底状態探索を行うエネルギー計算部と、
設定された温度値と前記変化値と乱数値とに基づいて、前記エネルギー値の変化値と熱励起エネルギーとの相対関係によって前記複数の状態遷移の何れかを受け入れるか否かを確率的に決定する遷移制御部とを有し、
前記制御部は、
前記複数の探索部の各々における温度値の遷移に関する統計情報である温度統計情報を取得するとともに、取得した温度統計情報に基づいて前記複数の探索部の各々に設定する前記温度値を決定する温度調整部と、
決定した前記温度値を前記複数の探索部の各々に対して設定する温度制御部と、
前記エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、前記複数の探索部間で前記温度値又は前記複数の状態変数の値を入れ替える交換制御部と、
を有する最適化装置。
【請求項２】
前記温度調整部は、取得した温度統計情報のうち、温度値の遷移に関し、各温度値の出現頻度を計数した温度頻度情報において、前記出現頻度の最大値に対応する温度値を前記複数の探索部の各々に設定する、
請求項１記載の最適化装置。
【請求項３】
前記温度調整部は、取得した温度統計情報のうち、温度値の遷移に関し、各温度値の出現頻度を累積した累積頻度を表す温度累積頻度情報において、前記累積頻度の最大値に所定係数を乗じて得られた頻度に対応する温度値を前記複数の探索部の各々に設定する、
請求項１記載の最適化装置。
【請求項４】
前記所定係数は、外部から入力される、
請求項３記載の最適化装置。
【請求項５】
前記遷移制御部は、前記温度値と前記変化値と乱数値とに基づいて、前記変化値と熱励起エネルギーとの相対関係によって前記複数の状態遷移の何れかを受け入れるか否かを確率的に決定する際、前記エネルギー値の変化値に所定のオフセット値を加算する、
請求項１乃至４のいずれか一項に記載の最適化装置。
【請求項６】
前記温度調整部は、取得した温度統計情報から、前記複数の探索部の各々に設定する前記温度値の最高値を決定し、前記最高値に基づいて前記複数の探索部の各々に設定する前記最高値以外の温度値を決定する、
請求項１乃至５の何れか一項に記載の最適化装置。
【請求項７】
前記温度調整部は、いずれかの探索部で前記エネルギー値の最小値が更新された場合に、前記エネルギー値の最小値の前回の更新から今回の更新までに、前記探索部又は前記探索部における前記複数の状態変数の値に対して設定された最高の温度値を、温度統計情報として取得する、
請求項１乃至６のいずれか一項に記載の最適化装置。
【請求項８】
前記温度調整部は、前記エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、前記複数の探索部の各々から前記エネルギー値を取得し、前記エネルギー値の最小値が更新されたか否かを、前記複数の探索部の各々、又は前記複数の探索部の各々における前記複数の状態変数の値に対して確認する、
請求項７記載の最適化装置。
【請求項９】
前記温度調整部は、前記複数の探索部の各々に第１の温度値が設定されている所定期間で温度統計情報を取得し、前記所定期間の終了後に、温度統計情報に基づいて前記複数の探索部の各々に設定する第２の温度値を決定する、
請求項１乃至８のいずれか一項に記載の最適化装置。
【請求項１０】
複数の探索部と前記複数の探索部を制御する制御部を有する最適化装置の制御方法において、
前記複数の探索部の各々が有する状態保持部が、エネルギー値を表す評価関数に含まれる複数の状態変数の値をそれぞれ保持し、
前記複数の探索部の各々が有するエネルギー計算部が、前記複数の状態変数の値の何れかが変化することに応じて状態遷移が起こる場合、前記エネルギー値の変化値を複数の状態遷移のそれぞれに対して計算することにより基底状態探索を行い、
前記複数の探索部の各々が有する遷移制御部が、設定された温度値と前記変化値と乱数値とに基づいて、前記エネルギー値の変化値と熱励起エネルギーとの相対関係によって前記複数の状態遷移の何れかを受け入れるか否かを確率的に決定し、
前記制御部が有する温度調整部が、前記複数の探索部の各々における温度値の遷移に関する統計情報である温度統計情報を取得するとともに、取得した温度統計情報に基づいて前記複数の探索部の各々に設定する前記温度値を決定し、
前記制御部が有する温度制御部が、決定した前記温度値を前記複数の探索部の各々に対して設定し、
前記制御部が有する交換制御部が、前記エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、前記複数の探索部間で前記温度値又は前記複数の状態変数の値を入れ替える、
最適化装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は最適化装置および最適化装置の制御方法に関する。
【背景技術】
【０００２】
現在の社会ではあらゆる分野で情報処理が行われている。これらの情報処理はコンピュータなどの演算装置で行われており、様々なデータを演算、加工し、意味のある結果を得ることにより、予測、決定、制御などが行われる。これらの情報処理の１つとして最適化というものがあり重要な分野となっている。例えばあることを行うのに必要な資源やコストを最小化したり、その効果を最大化する解を求める問題などであり、これらが非常に重要であるのは明らかであろう。
【０００３】
最適化問題の中でも離散最適化問題、組合せ最適化問題などと呼ばれている問題の多くは、変数が連続値ではなく離散的な値を取るため解くのが非常に難しいことが知られている。離散最適化問題を解くのを困難にしている最大の原因は、最適解ではないが局所的近傍のなかで最小値をとる局所解と呼ばれる状態が非常に多数存在することである。
【０００４】
離散最適化問題を解く効率の良い一般解法は存在しないため、問題に固有な性質を利用した近似解法や、問題の性質にあまり頼らないメタヒューリステックと呼ばれる方法を用いる必要がある。
【０００５】
以下に説明する内容は、後者のうちマルコフ連鎖モンテカルロ法を用いた解法に関するもので、特に交換モンテカルロ法、又はレプリカ交換法と呼ばれる広い意味での疑似焼き鈍し法に関するものである。
【０００６】
疑似焼き鈍し法は、乱数を用いて確率的に状態（変数ベクトルの値）を変化させることで最適解を求める方法である。以下では最適化したい評価関数の値を最小化する問題を例に説明し、評価関数の値をエネルギーと呼ぶことにする。最大化の場合は、評価関数の符号を変えればよい。
【０００７】
疑似焼き鈍し法においては、状態遷移の受け入れ（許容）確率を、その遷移に伴うエネルギー変化と温度を用いて次のように決めれば、時刻（反復回数）無限大の極限で状態が最適解に到達することが証明されている。
【０００８】
【数１】
2020086821.tif 000003
【０００９】
【数２】
2020086821.tif 000004
【００１０】
【数３】
2020086821.tif 000005
【００１１】
式（２）はメトロポリス法である。式（３）はギブス法である。式（２），（３）は何れか一方が用いられる。
ここで、Ｔは温度を表すパラメータであり、その初期値は問題に応じて十分大きくとり、十分ゆっくり下げていくことが必要となる。
【００１２】
上記のように疑似焼き鈍し法では、反復回数を無限に取れば最適解が得られるが、現実には有限の反復回数で解を得る必要があるため、最適解を確実に求めることはできない。また上記のように温度の下がり方が非常にゆっくりであるため、有限時間では十分に温度が下がらない。したがって実際の疑似焼き鈍し法では理論的に収束することが保証される温度変化ではなくより速く温度を下げることが多い。
【００１３】
実際の疑似焼き鈍し法では、初期状態から始めて、温度を下げながら上記反復が繰り返され、一定の反復回数に達したり、エネルギーが一定の値を下回るなどの終了判定条件が満たされたとき、動作が終了する。出力する答えは終了時の状態である。ただし、実際には有限の反復回数では温度が０にならないため、終了時においても状態の占有確率はボルツマン分布などで表される分布をもっており、必ずしも最適値や良い解になっているとは限らない。したがって、反復の途中でこれまでに得られたエネルギーが最低の状態を保持し、最後にそれを出力するのが現実的な解法となる。
【００１４】
上記の説明からある程度想像できると思われるが、疑似焼き鈍し法は汎用的で非常に魅力的ではあるが、温度をゆっくり下げる必要があるため計算時間が比較的長くなってしまうという問題がある。さらにその温度の下げ方を問題に合わせて適切に調節することが難しいという問題もある。温度の下げ方が遅すぎると有限時間ではあまり温度が下がらないため、最終的な熱分布のエネルギー範囲が広くなることから良い解の占有確率が上がらない。逆に速く下げすぎると、局所解を脱出する前に温度が下がってしまい、悪い解に捕まったままになってしまうため、良い解が得られる確率が下がってしまう。
【００１５】
レプリカ交換法は複数の温度を用いたモンテカルロ探索（以下、「確率的探索」という）を同時に行い、ある反復回数ごとに、それぞれの状態のエネルギーを比較し、適切な確率で２つの温度に対する状態を交換するという操作を行う方法である。
【００１６】
図２５は、通常のレプリカ交換法を用いた最適化装置の構成例を示す図である。最適化装置５０は、通常の疑似焼き鈍し法を用いた最適化装置と異なり、複数のレプリカ（図２５では探索部５１ａ１，５１ａ２，…，５１ａｉ，…，５１ａｎ）と、交換制御部５２とを有する。交換制御部５２は、探索部５１ａ１〜５１ａｎに温度情報（以下では逆温度βｉ（Ｔの逆数）（１≦ｉ≦ｎ）とする）を与える。
【００１７】
図２５には、探索部５１ａｉの例が示されている。他の探索部も同様の構成である。探索部５１ａｉは、状態保持部６０、エネルギー計算部６１、遷移制御部６２を有する。
状態保持部６０は、評価関数に含まれる複数の状態変数の値を保持する。また、状態保持部６０は、状態遷移の可否を示すフラグｆと、そのフラグｆが示す状態変数の番号（インデックス）Ｎに基づいて、複数の状態変数の値（上記変数ベクトルの値）である状態ｓｉを更新する。
【００１８】
エネルギー計算部６１は、状態変数の変化（状態遷移）に伴うエネルギー変化を計算する。例えば、評価関数が２つの状態変数間の結合で表されるイジングモデルで表され、しかも一度に１つの状態変数の遷移のみを許す場合、エネルギー計算部６１は、各状態変数の値と、状態変数間の結合の強さを示す結合係数と、番号Ｎと、フラグｆとに基づいて、複数の状態変数のそれぞれの変化（状態遷移）に伴うエネルギー変化を計算する。エネルギー変化ΔＥｉｊは、ｊ番目の状態変数の変化に伴うエネルギー変化を示す。なお、計算したい最適化問題に応じた結合係数の値は、予めメモリ又はレジスタなどに記憶されている。評価関数がイジングモデルでない場合、及び一度に複数の状態変数の遷移を許す場合には、状態遷移の番号と変化する状態変数の番号は必ずしも一致しないが、状態遷移の番号に対するエネルギー変化を適切に計算できればよい。エネルギー計算部６１は、例えば、積和演算回路などの論理回路を用いて実現できる。
【００１９】
遷移制御部６２は、通常の疑似焼き鈍し法と同様に、エネルギー変化ΔＥｉｊと交換制御部５２により割り当てられた逆温度βｉを用いて、ｊ番目の状態変数の状態遷移の受け入れ確率を以下の式（４）により決定することで、確率的探索を行う。
【００２０】
【数４】
2020086821.tif 000006
【００２１】
なお、式（４）において、関数ｆは式（１）と同じものであり、例えば式（２）のメトロポリス法のものが用いられる。遷移制御部６２は、上記の状態遷移の受け入れ確率に基づいて、状態遷移の可否を示すフラグｆと、そのフラグｆが示す状態遷移の番号を出力する。また、遷移制御部６２は、エネルギー変化ΔＥｉｊに基づいて、エネルギーＥｉを更新して出力する。
【００２２】
交換制御部５２は、一定の反復回数ごとに各探索部におけるエネルギーＥを観測し、探索部５１ａ１〜５１ａｎのうちの２つにおけるエネルギーＥと逆温度βを用い、以下の式（５）で表される交換確率に基づいて２つの探索部における各状態変数の値を交換する。状態変数の値の代りに、２つの探索部の各々に供給される逆温度を交換してもよい。
【００２３】
【数５】
2020086821.tif 000007
【００２４】
なお、式（５）では、βｉを探索部５１ａｉに与えられた逆温度、βｊを図示しないｊ番目の探索部に与えられた逆温度、Ｅｉを探索部５１ａｉにおけるエネルギー、Ｅｊをｊ番目の探索部におけるエネルギーとしている。また、式（５）において、関数ｆは式（１）と同じものであり、例えば式（２）のメトロポリス法のものが用いられる。
【００２５】
このような交換を行ってもそれぞれの温度の状態の確率分布はその温度に対するボルツマン分布に収束する。そして、この分布に収束するのに必要とされる緩和時間は、交換を行わない時より著しく短縮することができる。
【００２６】
なお、交換が行われる２つの探索部は、交換確率が小さくなりすぎないように、供給される温度が近いもの（例えば、隣接温度が供給されるもの）が選択される。
最適化装置５０において、多数回の反復処理を行う探索部５１ａ１〜５１ａｎを専用の回路で実現し、交換制御部５２の機能をソフトウェアで実現する場合、ポインタ渡しにより、温度が近い２つの探索部の各状態変数の値（又は温度情報）を交換すればよい。この場合、交換ごとに温度の低い順又は高い順に探索部５１ａ１〜５１ａｎを識別する情報を並べるソート処理などを行わなくてよい。
【００２７】
例えば、異なる温度が設定された複数のネットワーク（アンサンブルと呼ばれる）で確率的探索を行う情報処理装置が提案されている（例えば、特許文献１参照）。提案の情報処理装置は、温度が隣接して設定されているアンサンブル間で各アンサンブルのエネルギーの差分に応じ、各アンサンブルのノードの状態を交換する。これにより、局所解に陥ることが防止され、より高速に最適値に収束させる。
【００２８】
また、シミュレーティド・アニーリング処理手段が第１の温度の下で効率的に動作するように、シミュレーティド・アニーリングのアルゴリズムの実行を制御するパラメータを変更する温度並列シミュレーティド・アニーリング用恒温槽装置が提案されている（例えば、特許文献２参照）。提案の装置は、設定された条件でシミュレーティド・アニーリング処理を行い、このシミュレーティド・アニーリング処理の結果得られた状態を、第２の温度の下でシミュレーティド・アニーリング処理を行うことにより得られた状態と確率的に交換する。
【００２９】
なお、初期世代又は第２世代以降の任意の世代に属する遺伝子毎にハミング距離と適合度との２軸で張られた平面上の頻度分布を求め、この頻度分布に応じて遺伝的アルゴリズムのパラメータを変更する解析システムの提案もある（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【００３０】
【特許文献１】特開２０１８−５５４１号公報
【特許文献２】特開平９−２３１１９７号公報
【特許文献３】特開平９−３２５９４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００３１】
上記のように異なる温度が設定された複数の探索部で確率的探索を行う場合、各探索部に設定される温度によっては求解性能が低下するという問題がある。
１つの側面では、本発明は、解精度を向上させることが可能な最適化装置および最適化装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００３２】
１つの態様では、複数の探索部と複数の探索部を制御する制御部を有する最適化装置が提供される。複数の探索部の各々は、エネルギー値を表す評価関数に含まれる複数の状態変数の値をそれぞれ保持する状態保持部と、複数の状態変数の値の何れかが変化することに応じて状態遷移が起こる場合、エネルギー値の変化値を複数の状態遷移のそれぞれに対して計算することにより基底状態探索を行うエネルギー計算部と、設定された温度値と変化値と乱数値とに基づいて、エネルギー値の変化値と熱励起エネルギーとの相対関係によって複数の状態遷移の何れかを受け入れるか否かを確率的に決定する遷移制御部とを有する。制御部は、複数の探索部の各々における温度値の遷移に関する統計情報である温度統計情報を取得するとともに、取得した温度統計情報に基づいて複数の探索部の各々に設定する温度値を決定する温度調整部と、決定した温度値を複数の探索部の各々に対して設定する温度制御部と、エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、複数の探索部間で温度値又は複数の状態変数の値を入れ替える交換制御部と、を有する。
【００３３】
また、１つの態様では、最適化装置の制御方法が提供される。
【発明の効果】
【００３４】
１つの側面では、解精度を向上できる。
【図面の簡単な説明】
【００３５】
【図１】第１の実施の形態の最適化装置を示す図である。
【図２】最適化装置の回路構成例を示す図である。
【図３】状態遷移判定回路の回路構成例を示す図である。
【図４】セレクタ部の回路構成例を示す図である。
【図５】温度調整部の回路構成例を示す図である。
【図６】レジスタに格納されるデータ例を示す図である。
【図７】データ取得のアルゴリズムの例を示す図である。
【図８】最低エネルギーおよび温度の変化例を示す図である。
【図９】温度ヒストグラムの例を示す図である。
【図１０】累積ヒストグラムの例を示す図である。
【図１１】レプリカ交換の全体制御例を示すフローチャートである。
【図１２】探索部処理例を示すフローチャートである。
【図１３】データ収集処理例を示すフローチャートである。
【図１４】交換制御例を示すフローチャートである。
【図１５】処理の流れの例（その１）を示す図である。
【図１６】処理の流れの例（その２）を示す図である。
【図１７】最適化装置の他のハードウェア例を示す図である。
【図１８】第２の実施の形態の最適化装置の回路構成例を示す図である。
【図１９】温度調整部の回路構成例を示す図である。
【図２０】レジスタに格納されるデータ例を示す図である。
【図２１】レプリカ交換の全体制御例を示すフローチャートである。
【図２２】データ収集処理例を示すフローチャートである。
【図２３】交換制御例を示すフローチャートである。
【図２４】解の個数の例を示す図である。
【図２５】通常のレプリカ交換法を用いた最適化装置の構成例を示す図である。
【発明を実施するための形態】
【００３６】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００３７】
図１は、第１の実施の形態の最適化装置を示す図である。
最適化装置１は、複数の探索部（探索部１０ａ１，１０ａ２，…，１０ａＮ）および制御部２０を有する。Ｎは２以上の整数であり、探索部の数に相当する。探索部１０ａ１〜１０ａＮの各々は、状態保持部とエネルギー計算部と遷移制御部とを有する。例えば、探索部１０ａ１は、状態保持部１１とエネルギー計算部１２と遷移制御部１３とを有する。
【００３８】
状態保持部１１は、エネルギー値を表す評価関数に含まれる複数の状態変数の値をそれぞれ保持する。図１では、探索部１０ａ１におけるエネルギー値をＥ１で表し、探索部１０ａ１における複数の状態変数の値をｓ１で表している。
【００３９】
エネルギー計算部１２は、複数の状態変数の値の何れかが変化することに応じて状態遷移が起こる場合、エネルギー値の変化値（ΔＥ１ｊ）を複数の状態遷移のそれぞれに対して計算することにより基底状態探索を行う。
【００４０】
遷移制御部１３は、設定された温度値と変化値と乱数値とに基づいて、エネルギー値の変化値と熱励起エネルギーとの相対関係によって複数の状態遷移の何れかを受け入れるか否かを確率的に決定する。遷移制御部１３は、前述のように、式（４）に基づいて、状態遷移の可否を判定し、状態遷移の可否を示すフラグｆと、そのフラグｆが示す状態遷移の番号を出力する。図１では、フラグｆが示す状態遷移の番号をｉｎｄｅｘで表している。
【００４１】
探索部１０ａ１〜１０ａＮは、並列に動作して、上記の基底状態探索を行う。
制御部２０は、探索部１０ａ１〜１０ａＮを制御する。制御部２０は、温度調整部２１、温度制御部２２および交換制御部２３を有する。
【００４２】
温度調整部２１は、探索部１０ａ１〜１０ａＮの各々における温度値の遷移に関する統計情報である温度統計情報を取得するとともに、取得した温度統計情報に基づいて探索部１０ａ１〜１０ａＮの各々に設定する温度値を決定する。探索部１０ａ１〜１０ａＮの数はＮ個なので、設定される温度値の数はＮ個である。Ｎ個の温度値は互いに異なる。例えば、温度値は、温度Ｔ１，Ｔ２，…，ＴＮの逆数である逆温度β１，β２，…，βＮ（βｉ＝１／Ｔｉ）でもよい。
【００４３】
温度制御部２２は、決定した温度値を探索部１０ａ１〜１０ａＮの各々に対して設定する。
交換制御部２３は、エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、複数の探索部間で温度値又は複数の状態変数の値を入れ替える。交換制御部２３は、探索部１０ａ１〜１０ａＮの各々からエネルギー値Ｅ１，Ｅ２，…，ＥＮを取得し、前述のように、式（５）に基づいて、探索部間で温度値を入れ替えるか否かを決定する。又は、交換制御部２３は、探索部間で温度値を入れ替えるか否かの決定に代えて、式（５）に基づいて、探索部間で複数の状態変数の値を入れ替えるか否かを決定してもよい。
【００４４】
ここで、温度調整部２１による温度決定例を説明する。例えば、温度調整部２１は、取得した温度統計情報のうち、温度値の遷移に関し、各温度値の出現頻度を計数した温度頻度情報において、出現頻度の最大値に対応する温度値を探索部１０ａ１〜１０ａＮの各々に設定してもよい。
【００４５】
より具体的には、温度調整部２１は、いずれかの探索部でエネルギー値の最小値が更新された場合に、当該エネルギー値の最小値の前回の更新から今回の更新までに該当の探索部に設定された温度のうちの最高の温度値を、温度統計情報として取得する。例えば、温度調整部２１は、取得した温度値の出現頻度を温度値毎に計数したヒストグラムにおいて、出現頻度が最大である温度値を特定し、特定した温度値に基づいて、探索部１０ａ１〜１０ａＮの各々に設定する温度値を計算する。
【００４６】
一例では、温度調整部２１は、式（６），（７）により、Ｎ個の温度値のうちのｉ番目の温度ｔｍｐ［ｉ］（ｉ＝１，２，…，Ｎ）を計算する。
【００４７】
【数６】
2020086821.tif 000008
【００４８】
【数７】
2020086821.tif 000009
【００４９】
ｍａｘ＿ｔｍｐは、設定温度の最高値であり、上記ヒストグラムにおいて出現頻度が最大である温度値である。ｍｉｎ＿ｔｍｐは、設定温度の最低値であり、予め与えられる。このように、温度調整部２１は、取得した温度統計情報から温度値の最高値ｍａｘ＿ｔｍｐを決定し、最高値ｍａｘ＿ｔｍｐに基づいて探索部１０ａ１〜１０ａＮの各々に設定する温度値を決定する。設定温度の最高値ｍａｘ＿ｔｍｐを、上記のように温度統計情報において出現頻度が最大である温度値とする理由は、当該出現頻度が最大である温度値を最高値として用いることで探索部のエネルギー値の最小値を更新できる可能性が高いと推定されるからである。ただし、最高値ｍａｘ＿ｔｍｐを、例えば、出現頻度が最大である温度値よりも所定値（あるいは所定割合）だけ高い温度としてもよい。
【００５０】
あるいは、温度調整部２１は、取得した温度統計情報のうち、温度値の遷移に関し、各温度値の出現頻度を累積した累積頻度を表す温度累積頻度情報において、累積頻度の最大値に所定係数を乗じて得られた頻度に対応する温度値を探索部１０ａ１〜１０ａＮの各々に設定してもよい。
【００５１】
より具体的には、温度調整部２１は、上記ヒストグラムにおける各温度値の出現頻度を、温度値の小さい方から累積した累積頻度を温度累積頻度情報として取得する。そして、温度調整部２１は、当該累積頻度を表す累積ヒストグラムにおける累積頻度の最大値に所定係数を乗じた頻度に対応する温度値を特定し、特定した温度値に基づいて、探索部１０ａ１〜１０ａＮの各々に設定する温度値を計算する。すなわち、温度調整部２１は、当該特定した温度値を最高値ｍａｘ＿ｔｍｐとして、式（６），（７）により、温度ｔｍｐ［ｉ］を計算する。
【００５２】
なお、温度調整部２１により決定された温度ｔｍｐ［ｉ］（温度値）は、温度制御部２２により、探索部１０ａ１〜１０ａＮの各々に設定されてもよい。
また、温度調整部２１は、エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、探索部１０ａ１〜１０ａＮの各々からエネルギー値を取得し、エネルギー値の最小値が更新されたか否かを、複数の探索部の各々に対して確認する。例えば、温度調整部２１は、エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後における、交換制御部２３による複数の探索部間での温度値（又は複数の状態変数の値）の入れ替えの前に、エネルギー値の最小値が更新されたか否かの確認を行う。
【００５３】
そして、温度調整部２１は、探索部１０ａ１〜１０ａＮの各々に第１の温度値が設定されている所定期間で温度統計情報を取得し、所定期間の終了後に、温度統計情報に基づいて探索部１０ａ１〜１０ａＮの各々に設定する第２の温度値を決定する。
【００５４】
例えば、温度調整部２１は、探索部１０ａ１〜１０ａＮによる基底状態探索の全期間のうちの初期の一部期間において温度統計情報を取得し、当該温度統計情に基づいて温度ｔｍｐ［ｉ］を決定する。制御部２０は、決定した温度ｔｍｐ［ｉ］を用いて、残りの期間での探索部１０ａ１〜１０ａＮによる基底状態探索を継続させる。
【００５５】
あるいは、温度調整部２１は、探索部１０ａ１〜１０ａＮによる基底状態探索の全期間に関して所定の部分期間毎に温度統計情報を取得し、部分期間後に温度ｔｍｐ［ｉ］を決定してもよい。そして、制御部２０は、前回の部分期間で取得した温度統計情報を基に決定した温度ｔｍｐ［ｉ］を、次回の部分期間で用いて、探索部１０ａ１〜１０ａＮによる基底状態探索を継続させてもよい。
【００５６】
ここで、「期間」は、探索部１０ａ１〜１０ａＮによる基底状態探索の繰り返し回数により定められてもよいし、時間間隔により定められてもよい。
ところで、上記のようにレプリカ交換法を用いて最適化演算を行うことが考えられる。レプリカ交換法は、複数のレプリカと呼ばれる系において各々異なる温度で基底状態探索を行い、ある周期で、エネルギーと温度から決定される遷移確率に従って、例えば隣接する系の温度、又は状態（複数の状態変数の値）を交換する方法である。レプリカ交換法によれば、温度が低下したときに局所解に陥っても、レプリカ交換により一度高い温度まで上がって再び大域解を探索でき、複雑な温度スケジューリングを考えなくても、高速に解を求められる。しかし、各レプリカに設定する温度を適切に決める必要があり、温度（特に、温度の最高値）が高過ぎても低過ぎても解精度が低下し、探索に時間がかかる問題がある。また、温度を適切に決定するために、幾つもの温度のパラメータで何度も最適化演算を行っていると非常に大きな手間と時間を要し、ユーザの利便性を損なう問題もある。
【００５７】
最適化装置１では、上記のように、レプリカ（例えば、探索部）の最低エネルギーが更新される間に当該レプリカが到達した最高温度の統計情報を取得し、統計情報に基づいて探索部１０ａ１〜１０ａＮの設定温度を決定する。このように、最適化装置１は、実際の演算過程で取得された温度の統計情報により、その後の演算に用いる温度を適応的に決定することで、解精度の向上を図れる。また、演算の高速化を図れる。すなわち、求解性能が向上する。更に、温度調整の手間を省くことができ、ユーザの利便性を向上できる。
【００５８】
次に、最適化装置１の回路構成例を説明する。以下では、最適化問題がイジングモデルで表される場合を例示する。まず、探索部１０ａ１〜１０ａＮにおける温度を交換する場合を例示する。その後、第２の実施の形態として、探索部１０ａ１〜１０ａＮにおける複数の状態変数の値を交換する場合を例示する。
【００５９】
図２は、最適化装置の回路構成例を示す図である。
最適化装置１は、計算対象の最適化問題を変換したイジングモデルに含まれる複数のスピンに対応する複数のスピンビットのそれぞれの値の組合せ（状態）のうち、評価関数が最小値となるときの各スピンビットの値（基底状態）を探索する。
【００６０】
イジング型の評価関数Ｅ（ｘ）は、例えば、以下の式（８）で定義される。
【００６１】
【数８】
2020086821.tif 000010
【００６２】
右辺第１項は、イジングモデルに含まれる全スピンビットから選択可能な２つのスピンビットの全組合せについて、漏れと重複なく、２つのスピンビットの値（０又は１）と結合係数との積を積算したものである。イジングモデルに含まれる全スピンビット数をｎ個（ｎは２以上の整数）とする。例えば、ｎ＝１０２４である。また、ｉ，ｊの各々を、１以上ｎ以下の整数とする。ｘｉは、ｉ番目のスピンビットの値を表す変数（状態変数とも呼ばれる）である。ｘｊは、ｊ番目のスピンビットの値を表す変数である。Ｗｉｊは、ｉ番目とｊ番目のビットの相互作用の大きさを示す重み係数である。なお、Ｗｉｉ＝０である。また、Ｗｉｊ＝Ｗｊｉであることが多い（すなわち、重み係数による係数行列は対称行列である場合が多い）。
【００６３】
右辺第２項は、全スピンビットのそれぞれのバイアス係数とスピンビットの値との積の総和を求めたものである。ｂｉは、ｉ番目のスピンビットのバイアス係数を示している。
また、変数ｘｉの値が変化して１−ｘｉとなると、変数ｘｉの増加分は、δｘｉ＝（１−ｘｉ）−ｘｉ＝１−２ｘｉと表せる。したがって、スピン反転（値の変化）に伴うエネルギー変化ΔＥｉは、以下の式（９）で表される。
【００６４】
【数９】
2020086821.tif 000011
【００６５】
ｈｉはローカルフィールド（局所場）と呼ばれ、式（１０）で表される。
【００６６】
【数１０】
2020086821.tif 000012
【００６７】
δｘｉに応じてローカルフィールドｈｉに符号（＋１又は−１）を乗じたものがエネルギー変化ΔＥｉとなる。ある変数ｘｊが変化したときのローカルフィールドｈｉの変化分δｈｉ（ｊ）は式（１１）で表される。
【００６８】
【数１１】
2020086821.tif 000013
【００６９】
ある変数ｘｊが変化したときのローカルフィールドｈｉを更新する処理は各変数に対して並列に行われる。
最適化装置１は、例えば、ＦＰＧＡ（Field Programmable Gate Array）などの半導体集積回路を用いて実現される。最適化装置１は、図１で例示した探索部１０ａ１〜１０ａＮ、温度調整部２１、温度制御部２２および交換制御部２３に加えて、全体制御部２４を有する。なお、図２の例では、交換制御部２３は温度制御部２２に含まれるため、交換制御部２３の図示を省略している。
【００７０】
探索部１０ａ１〜１０ａＮの各々は、式（８）で表されるイジング型の評価関数に基づく基底状態探索を下記のような回路により実現する。以下では、探索部１０ａ１を主に説明するが、探索部１０ａ２〜１０ａＮも同様の回路構成となる。
【００７１】
探索部１０ａ１は、状態保持部１１、レジスタ１２ａ１，１２ａ２，…，１２ａｎ，ｈ計算部１２ｂ１，１２ｂ２，…，１２ｂｎ、ΔＥ生成部１２ｃ１，１２ｃ２，…，１２ｃｎ、加算器１３ａ１，１３ａ２，…，１３ａｎ、状態遷移判定回路１３ｂ１，１３ｂ２，…，１３ｂｎ、セレクタ部１３ｃ、オフセット制御部１３ｄおよびＥ計算部１４を有する。
【００７２】
図２では、ｈ計算部１２ｂ１〜１２ｂｎに対し、ｉ番目のスピンビットに対応することが分かり易い様に「ｈｉ」計算部のように添え字を付して名称を表記している。また、図２では、ΔＥ生成部１２ｃ１〜１２ｃｎに対し、ｉ番目のスピンビットに対応することが分かり易い様に「ΔＥｉ」計算部のように添え字を付して名称を表記している。
【００７３】
ある探索部においてスピンビット列に含まれる何れかのスピンビットを反転させるかの判定および反転させる場合に該当のスピンビットを反転させる処理が、当該探索部による基底状態探索（確率的探索と言うこともある）の１回分の処理に相当する。
【００７４】
レジスタ１２ａ１〜１２ａｎ、ｈ計算部１２ｂ１〜１２ｂｎおよびΔＥ生成部１２ｃ１〜１２ｃｎは、エネルギー計算部１２に相当する。すなわち、エネルギー計算部１２は、レジスタ１２ａ１〜１２ａｎ、ｈ計算部１２ｂ１〜１２ｂｎおよびΔＥ生成部１２ｃ１〜１２ｃｎを有する。また、加算器１３ａ１〜１３ａｎ、状態遷移判定回路１３ｂ１〜１３ｂｎ、セレクタ部１３ｃおよびオフセット制御部１３ｄは、遷移制御部１３に相当する。すなわち、遷移制御部１３は、加算器１３ａ１〜１３ａｎ、状態遷移判定回路１３ｂ１〜１３ｂｎ、セレクタ部１３ｃおよびオフセット制御部１３ｄを有する。
【００７５】
ｎ個のスピンビットのうち、レジスタ１２ａ１、ｈ計算部１２ｂ１、ΔＥ生成部１２ｃ１、加算器１３ａ１および状態遷移判定回路１３ｂ１が１番目のスピンビットに関する演算を行う。また、レジスタ１２ａ２、ｈ計算部１２ｂ２、ΔＥ生成部１２ｃ２、加算器１３ａ２および状態遷移判定回路１３ｂ２が２番目のスピンビットに関する演算を行う。同様に、「１２ａ１」、「１２ｂ１」などの符号の末尾の数値ｉがｉ番目のスピンビットに対応する演算を行うことを示す。すなわち、１つの探索部は、レジスタ、ｈ計算部、ΔＥ生成部、加算器および状態遷移判定回路のセット（１スピンビットに関する演算を行う演算処理回路の一単位であり、「ニューロン」と呼ばれることもある）を、ｎ個有する。ｎ個のセットが並列に、各セットに対応するスピンビットに関する演算を行う。
【００７６】
以下では、主に、レジスタ１２ａ１、ｈ計算部１２ｂ１、ΔＥ生成部１２ｃ１、加算器１３ａ１および状態遷移判定回路１３ｂ１を例示して説明する。同名の構成であるレジスタ１２ａ２〜１２ａｎ、ｈ計算部１２ｂ２〜１２ｂｎ、ΔＥ生成部１２ｃ２〜１２ｃｎ、加算器１３ａ２〜１３ａｎおよび状態遷移判定回路１３ｂ２〜１３ｂｎも同様の機能である。
【００７７】
ここで、レジスタ１２ａ１、ｈ計算部１２ｂ１、ΔＥ生成部１２ｃ１、加算器１３ａ１および状態遷移判定回路１３ｂ１のセットに対応するスピンビットを自スピンビット、探索部１０ａ１で演算されるそれ以外のスピンビットを他スピンビットと称する。各スピンビットは、ｉｎｄｅｘと呼ばれる識別情報により識別される。例えば、ｉ番目のスピンビットのｉｎｄｅｘは、ｉである。
【００７８】
レジスタ１２ａ１は、自スピンビットと他スピンビットとの間の重み係数Ｗ１ｊ（ｊ＝１〜ｎ）を記憶する。ここで、スピンビット数ｎに対して、重み係数の総数はｎ２である。レジスタ１２ａ１にはｎ個の重み係数が格納される。また、重み係数Ｗｉｊの添え字ｉは、自スピンビットのｉｎｄｅｘを示し、同添え字ｊは、自スピンビットを含む何れかのスピンビットのｉｎｄｅｘを示す。
【００７９】
レジスタ１２ａ１は、自スピンビットに対して、ｎ個の重み係数Ｗ１１，Ｗ１２，…，Ｗ１ｎを記憶する。なお、Ｗｉｉ＝Ｗ１１＝０である。レジスタ１２ａ１は、セレクタ部１３ｃにより出力されるｉｎｄｅｘ＝ｊに対応する重み係数Ｗ１ｊをｈ計算部１２ｂ１に出力する。
【００８０】
ｈ計算部１２ｂ１は、レジスタ１２ａ１から供給される重み係数Ｗ１ｊを用いて、式（１０），（１１）に基づくローカルフィールドｈ１を計算する。例えば、ｈ計算部１２ｂ１は、前回計算されたローカルフィールドｈ１を保持するレジスタを有し、ｉｎｄｅｘ＝ｊで示されるスピンビットの反転方向に応じたδｈ１（ｊ）を、ｈ１に積算することで、当該レジスタに格納されるｈ１を更新する。ｉｎｄｅｘ＝ｊで示されるスピンビットの反転方向を示す信号は、状態保持部１１からｈ計算部１２ｂ１に供給されてもよい。ｈ１の初期値は、問題に応じて、ｈ計算部１２ｂ１のレジスタに予め設定される。また、ｂ１の値も、問題に応じて、ｈ計算部１２ｂ１のレジスタに予め設定される。ｈ計算部１２ｂ１は、計算したローカルフィールドｈ１をΔＥ生成部１２ｃ１およびＥ計算部１４に出力する。
【００８１】
ΔＥ生成部１２ｃ１は、ローカルフィールドｈ１を用いて、式（９）に基づき、自スピンビットの反転に応じたイジングモデルのエネルギー変化値ΔＥ１を生成する。ΔＥ生成部１２ｃ１は、例えば、状態保持部１１から供給される自スピンビットの現在の値から、自スピンビットの反転方向を判別してもよい（現在の値が０なら０から１が反転方向となり、現在の値が１なら１から０が反転方向となる）。ΔＥ生成部１２ｃ１は、生成したエネルギー変化値ΔＥ１を、加算器１３ａ１に出力する。ここで、後段の加算器１３ａ１での加算処理および状態遷移判定回路１３ｂ１での判定処理に応じて、ΔＥ生成部１２ｃ１は、エネルギー変化値ΔＥ１の符号を逆転したエネルギー変化値−ΔＥ１を、加算器１３ａ１に出力してもよい。本例では、ΔＥ生成部１２ｃ１は、エネルギー変化値として、−ΔＥ１を加算器１３ａ１に出力するものとする。
【００８２】
加算器１３ａ１は、ΔＥ生成部１２ｃ１から供給される−ΔＥ１とオフセット制御部１３ｄから供給されるオフセット値Ｅｏｆｆとを加算する。オフセット値Ｅｏｆｆは、後述されるように、状態遷移を促すためのパラメータであり、オフセット制御部１３ｄにより制御される。本例では、Ｅｏｆｆ≧０である。加算器１３ａ１は、加算結果（−ΔＥ１＋Ｅｏｆｆ）を状態遷移判定回路１３ｂ１に出力する。
【００８３】
状態遷移判定回路１３ｂ１は、加算器１３ａ１から供給されるエネルギー変化値とオフセットΔＥｏｆｆとの和（−ΔＥ１＋Ｅｏｆｆ）に応じて、自スピンビットの反転可否を示すフラグｆ１をセレクタ部１３ｃに出力する。具体的には、状態遷移判定回路１３ｂ１は、−ΔＥ１＋Ｅｏｆｆと閾値との比較に応じて、自スピンビットの反転可否を判定する。
【００８４】
ここで、状態遷移判定回路１３ｂ１による判定について説明する。
シミュレーテッド・アニーリングでは、あるエネルギー変化ΔＥを引き起こす状態遷移の許容確率ｐ（ΔＥ，Ｔ）を前述の式（１）のように決める。式（１）においてＴは、前述の温度情報Ｔである。温度情報Ｔは、温度制御部２２により状態遷移判定回路１３ｂ１に設定される。また、関数ｆとしては、式（２）（メトロポリス法）、または、式（３）（ギブス法）が用いられる。
【００８５】
例えば、許容確率ｐ（ΔＥ，Ｔ）でエネルギー変化ΔＥを引き起こす状態遷移を許容することを示すフラグ（ｆｌｇ＝１）を出力する回路は、ｆ（−ΔＥ／Ｔ）と、区間［０，１）の値をとる一様乱数ｕとの比較に応じた値を出力する比較器により実現できる。
【００８６】
ただし、次のような変形を行っても同じ機能を実現可能である。２つの数に同じ単調増加関数を作用させても大小関係は変化しない。したがって、比較器の２つの入力に同じ単調増加関数を作用させても比較器の出力は変わらない。例えば、ｆ（−ΔＥ／Ｔ）に作用させる単調増加関数としてｆ（−ΔＥ／Ｔ）の逆関数ｆ−１（−ΔＥ／Ｔ）、一様乱数ｕに作用させる単調増加関数としてｆ−１（−ΔＥ／Ｔ）の−ΔＥ／Ｔをｕとしたｆ−１（ｕ）を用いることができる。その場合、上記の比較器と同様の機能を有する回路は、−ΔＥ／Ｔがｆ−１（ｕ）より大きいとき１を出力する回路でよい。更に、温度パラメータＴが正であることから、状態遷移判定回路１３ｂ１は、−ΔＥがＴ・ｆ−１（ｕ）以上のとき（あるいは、ΔＥが−（Ｔ・ｆ−１（ｕ））以下のとき）、ｆｌｇ＝１を出力する回路でよい。
【００８７】
状態遷移判定回路１３ｂ１は、一様乱数ｕを生成し、上記のｆ−１（ｕ）の値に変換する変換テーブルを用いて、ｆ−１（ｕ）の値を生成する。メトロポリス法が適用される場合、ｆ−１（ｕ）は、式（１２）で与えられる。また、ギブス法が適用される場合、ｆ−１（ｕ）は、式（１３）で与えられる。
【００８８】
【数１２】
2020086821.tif 000014
【００８９】
【数１３】
2020086821.tif 000015
【００９０】
変換テーブルは、例えば、状態遷移判定回路１３ｂ１が有するレジスタに記憶される。状態遷移判定回路１３ｂ１は、温度パラメータＴと、ｆ−１（ｕ）との積（Ｔ・ｆ−１（ｕ））を閾値として生成し、−ΔＥ１＋Ｅｏｆｆと比較する。ここで、Ｔ・ｆ−１（ｕ）は、熱励起エネルギーに相当する。状態遷移判定回路１３ｂ１は、（−ΔＥ１＋Ｅｏｆｆ）≧Ｔ・ｆ−１（ｕ）の場合にフラグｆ１＝１（遷移可）をセレクタ部１３ｃに出力する。状態遷移判定回路１３ｂ１は、（−ΔＥ１＋Ｅｏｆｆ）＜Ｔ・ｆ−１（ｕ）の場合にフラグｆ１＝０（遷移不可）をセレクタ部１３ｃに出力する。
【００９１】
セレクタ部１３ｃは、状態遷移判定回路１３ｂ１〜１３ｂｎの各々から出力された遷移可否を示すフラグを受け付ける。セレクタ部１３ｃは、状態遷移判定回路１３ｂ１〜１３ｂｎの各々から出力されたフラグに遷移可を示すフラグがある場合には、遷移可を示す何れか１つのフラグを選択する。セレクタ部１３ｃは、状態遷移判定回路１３ｂ１〜１３ｂｎの各々から出力されたフラグに遷移可を示すフラグがない場合には、１つの所定のフラグを選択する。
【００９２】
セレクタ部１３ｃは、遷移可否を示すフラグと、選択したフラグに対応するスピンビットを示すｉｎｄｅｘ＝ｊとを含む更新信号（ｕｐｄａｔｅ）を状態保持部１１に出力する。それとともに、セレクタ部１３ｃは、選択した遷移可否を示すフラグをオフセット制御部１３ｄに出力し、選択したフラグに対応するｉｎｄｅｘ＝ｊを、レジスタ１２ａ１〜１２ａｎの各々に出力する。
【００９３】
オフセット制御部１３ｄは、セレクタ部１３ｃから出力される遷移可否を示すフラグに基づいて、加算器１３ａ１〜１３ａｎの各々に供給するオフセット値を制御する。具体的には、オフセット制御部１３ｄは、セレクタ部１３ｃから出力されるフラグが遷移可を示す場合、オフセット値を０にリセットする。オフセット制御部１３ｄは、セレクタ部１３ｃから出力されるフラグが遷移不可を示す場合、オフセット値に増分値ΔＥｏｆｆを加算する。当該フラグが連続して遷移不可を示す場合、オフセット制御部１３ｄは、ΔＥｏｆｆを積算することで、ＥｏｆｆをΔＥｏｆｆずつ増加させる。
【００９４】
セレクタ部１３ｃから出力されるフラグが遷移不可を示す場合、現在の状態が局所解に陥っていると考えられる。−ΔＥ１へのオフセット値の加算やオフセット値の増加により、状態遷移が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
【００９５】
状態保持部１１は、セレクタ部１３ｃから出力されるフラグとｉｎｄｅｘとに基づいて、状態保持部１１が有するレジスタにより保持されるビットステート（ｘ１，ｘ２，…，ｘｎ）を更新する。ここで、ビットステートは、探索部１０ａ１におけるｎ個のスピンビットを含むスピンビット列（複数の状態変数の値）である。図中、ビットステートをＢＳ（Bit States）と略記することがある。状態保持部１１は、現在のビットステートをＥ計算部１４に出力する。状態保持部１１は、探索部１０ａ１における探索処理の完了時におけるビットステートを全体制御部２４に出力する。
【００９６】
Ｅ計算部１４は、ｈ計算部１２ｂ１〜１２ｂｎの各々から出力されるローカルフィールドｈ１〜ｈｎおよび状態保持部１１から出力されるビットステート（ｘ１〜ｘｎ）に基づいて、探索部１０ａ１におけるイジングモデルの現在のエネルギー値Ｅ１を計算する。エネルギー値Ｅ１は、式（８）の評価関数で定義されるエネルギー値（単にエネルギーと言うこともある）である。Ｅ計算部１４は、計算したエネルギー値Ｅ１を温度調整部２１に出力する。また、Ｅ計算部１４は、探索部１０ａ１における所定回数または所定期間の探索処理が完了すると、計算したエネルギー値Ｅ１を、温度制御部２２に出力する。
【００９７】
温度調整部２１は、探索部１０ａ１〜１０ａＮの各々から出力されるエネルギー値Ｅ１〜ＥＮを受け付ける。また、温度調整部２１は、探索部１０ａ１〜１０ａＮの各々に設定されている温度の情報を、温度制御部２２から取得する。図２では、探索部１０ａ１に温度Ｔ１、探索部１０ａ２に温度Ｔ２、…、探索部１０ａＮに温度ＴＮが設定されている例が示されている。温度調整部２１は、エネルギー値Ｅ１〜ＥＮの変化と探索部１０ａ１〜１０ａＮに設定される温度の変化とに応じて、探索部１０ａ１〜１０ａＮの各々に設定する新規温度を示す新規温度情報を決定する。温度調整部２１は、決定した新規温度情報と、新規温度の設定信号（Ｔ  ｓｅｔ  ｓｉｇ．（ｓｉｇ．はsignalの略））を、温度制御部２２に出力する。
【００９８】
温度制御部２２は、探索部１０ａ１〜１０ａＮの各々に供給する温度を制御する。温度制御部２２は、温度を示す温度情報と、温度の設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）とを、探索部１０ａ１〜１０ａＮの各々が有する状態遷移回路に供給する。また、温度制御部２２は、交換制御部２３の機能を有し、探索部１０ａ１〜１０ａＮにおける温度の交換（温度交換）を制御する（図２では交換制御部２３の図示を省略している）。交換制御部２３は、式（５）の交換確率に基づいて、探索部のペア（２つの探索部）に関し、温度交換を行うか否かを判定する。温度制御部２２は、交換後の温度を、各探索部に供給する。
【００９９】
例えば、交換制御部２３は、温度の識別情報（温度インデックス又は温度番号と言う）と、温度とを対応付けた第１の対応情報を、交換制御部２３が有するレジスタに保持する。例えば、温度インデックスは、温度の昇順に温度に対応付けられる（温度インデックスが大きいほど温度も高い）。更に、交換制御部２３は、例えば昇順に配列された温度インデックスと探索部１０ａ１〜１０ａＮの各々の識別番号とを対応付けた第２の対応情報を、交換制御部２３が有するレジスタに保持する。この場合、第２の対応情報で隣接する温度インデックスに対応する探索部のペアは、設定された温度が隣接することになる。交換制御部２３は、第１の対応情報および第２の対応情報に基づいて、探索部１０ａ１〜１０ａＮに対する温度交換を制御し、交換に応じて、第２の対応情報を更新する。温度制御部２２は、第１の対応情報および第２の対応情報に基づいて、各探索部に温度を供給する。なお、第１の対応情報において温度インデックスに対応付けられる温度は、温度調整部２１による新規温度の計算結果に応じて更新される。
【０１００】
ただし、交換制御部２３は、探索部１０ａ１〜１０ａＮの各々の識別番号と温度値とを対応付けた対応情報を保持し、当該対応情報を温度値でソートすることで、設定された温度が隣接する探索部のペアを特定することもできる。その場合、温度調整部２１による新規温度の計算結果に応じて、当該対応情報における温度値が更新される。
【０１０１】
全体制御部２４は、最適化装置１の全体の動作を制御する。全体制御部２４は、起動信号の入力を受け付けると、温度制御部２２に起動信号を出力し、探索部１０ａ１〜１０ａＮを起動させて、最適化問題に関する基底状態探索の演算を開始させる。全体制御部２４は、演算が終了すると、探索部１０ａ１〜１０ａＮの各々からビットステートを取得し、最適化問題に対する解を得る。全体制御部２４は、演算の終了を示す終了信号を出力する。終了信号は、演算により得られた解を示す情報を含み得る。例えば、全体制御部２４は、最適化装置１に接続された表示装置に、解を示す画像情報を出力し、解を示す画像情報を表示装置により表示させることで、得られた解の内容をユーザに提示してもよい。
【０１０２】
次に、状態遷移判定回路１３ｂ１〜１３ｂｎの回路構成を説明する。以下では、状態遷移判定回路１３ｂ１を例示して説明するが、他の状態遷移判定回路も同様の回路構成である。
【０１０３】
図３は、状態遷移判定回路の回路構成例を示す図である。
状態遷移判定回路１３ｂ１は、乱数生成部１１１、閾値生成部１１２および比較部１１３を有する。
【０１０４】
乱数生成部１１１は、一様乱数ｕを生成し、閾値生成部１１２に出力する。
閾値生成部１１２は、一様乱数ｕと、温度制御部２２により供給された温度Ｔ１を示す温度情報とを用いて、前述の変換テーブルにより、式（１２）（または、式（１３））に基づく閾値Ｔ・ｆ−１（ｕ）を生成する。閾値生成部１１２は、生成した閾値Ｔ・ｆ−１（ｕ）を、比較部１１３に出力する。
【０１０５】
比較部１１３は、加算器１３ａ１により出力された（−ΔＥ１＋Ｅｏｆｆ）と閾値Ｔ・ｆ−１（ｕ）とを比較し、遷移可否を示すフラグを、セレクタ部１３ｃに出力する。前述のように、例えば、比較部１１３は、（−ΔＥ１＋Ｅｏｆｆ）≧Ｔ・ｆ−１（ｕ）の場合に遷移可をセレクタ部１３ｃに出力する。状態遷移判定回路１３ｂ１は、（−ΔＥ１＋Ｅｏｆｆ）＜Ｔ・ｆ−１（ｕ）の場合に遷移不可をセレクタ部１３ｃに出力する。
【０１０６】
次に、セレクタ部１３ｃの回路構成例を説明する。
図４は、セレクタ部の回路構成例を示す図である。
セレクタ部１３ｃは、複数段にわたってツリー状に接続された複数の選択回路および乱数ビット生成部３２ａ，３２ｂ，３２ｃ，…，３２ｒを有する。乱数ビット生成部３２ａ〜３２ｒは、ツリー状に接続された複数の選択回路の段毎に設けられる。乱数ビット生成部３２ａ〜３２ｒの各々は、０または１の値をとる１ビット乱数を生成し、各段の選択回路に供給する。１ビット乱数は、入力されたフラグのペアのうちの何れか一方を選択するために用いられる。
【０１０７】
初段の選択回路３１ａ１，３１ａ２，３１ａ３，３１ａ４，…，３１ａｐの各々には、状態遷移判定回路１３ｂ１〜１３ｂｎの各々が出力する遷移可否を示すフラグの組が入力される。例えば、選択回路３１ａ１には、１番目の状態遷移判定回路１３ｂ１が出力するフラグと、２番目の状態遷移判定回路１３ｂ２が出力するフラグとのペアが入力される。また、選択回路３１ａ２には、３番目の状態遷移判定回路が出力するフラグと、４番目の状態遷移判定回路が出力するフラグとのペアが入力される。以降、同様にして、選択回路３１ａｐには、ｎ−１番目の状態遷移判定回路が出力するフラグと、ｎ番目の状態遷移判定回路１３ｂｎが出力するフラグとのペアが入力される。このように、隣り合う状態遷移判定回路が出力するフラグとのペアが初段の選択回路に入力される。初段の選択回路３２ａ１〜３１ａｐの数は、ｎ／２となる。以降、段を経る毎に選択回路の数は半分になる。
【０１０８】
選択回路３１ａ１〜３１ａｐの各々は、入力されたフラグのペアと、乱数ビット生成部３２ａが出力する１ビット乱数に基づいて、入力されたフラグのペアのうちの一方を選択する。選択回路３１ａ１〜３１ａｐの各々は、選択したフラグと選択したフラグに対応する１ビットの識別値とを含む状態信号を、２段目の選択回路３１ｂ１〜３１ｂｑに出力する。例えば、選択回路３１ａ１が出力する状態信号と、選択回路３１ａ２が出力する状態信号とが選択回路３１ｂ１に入力される。同様に、選択回路３１ａ１〜３１ａｐの隣り合う選択回路が出力する状態信号のペアが、２段目の選択回路に入力される。
【０１０９】
選択回路３１ｂ１〜３１ｂｑの各々は、入力された状態信号のペアと、乱数ビット生成部３２ｂが出力する１ビット乱数に基づいて、入力された状態信号のうちの一方を選択する。選択回路３１ｂ１〜３１ｂｑの各々は、選択した状態信号を、３段目の選択回路３１ｃ１，…に出力する。ここで、選択回路３１ｂ１〜３１ｂｑは、選択した方の状態信号に含まれる状態信号について、何れの状態信号を選択したかを示すように１ビットを付加して更新し、選択した状態信号を出力する。
【０１１０】
３段目以降の選択回路においても同様の処理が行われ、各段の選択回路で１ビットずつ識別値のビット幅が増えていき、最終段の選択回路３１ｒから、セレクタ部１３ｃの出力である状態信号が出力される。セレクタ部１３ｃが出力する状態信号に含まれる識別値が、２進数で表されたｉｎｄｅｘに対応する。ただし、図４で示す回路構成例では、探索部のｉｎｄｅｘを０〜１０２３とする場合としている。選択回路３１ｒが出力する識別値に１を加算した値が、図２で示されるｊに相当する。
【０１１１】
例えば、図４では、選択回路３１ｂｑの回路構成例が示されている。２段目以降の他の選択回路も、選択回路３１ｂｑと同様の回路構成により実現される。
選択回路３１ｂｑの入力は、１つ目の状態信号（ｓｔａｔｕｓ＿１）と、２つ目の状態信号（ｓｔａｔｕｓ＿２）である。選択回路３１ｂ１の出力は、状態信号（ｓｔａｔｕｓ）である。選択回路３１ｂｑは、ＯＲ回路１３１、ＮＡＮＤ回路１３２およびセレクタ１３３，１３４を有する。
【０１１２】
ＯＲ回路１３１には、状態信号（ｓｔａｔｕｓ＿１）に含まれるフラグ（ｆｌａｇ１）と、状態信号（ｓｔａｔｕｓ＿２）に含まれるフラグ（ｆｌａｇ２）とが入力される。例えば、状態信号（ｓｔａｔｕｓ＿１）が前段の２つの選択回路のうちの上位側（ｉｎｄｅｘの大きい側）の出力、状態信号（ｓｔａｔｕｓ＿２）が前段の２つの選択回路のうちの下位側（ｉｎｄｅｘの小さい側）の出力である。ＯＲ回路１３１は、ｆｌａｇ１とｆｌａｇ２とのＯＲ演算結果（ｆｌａｇ）を出力する。
【０１１３】
ＮＡＮＤ回路１３２には、ｆｌａｇ１とｆｌａｇ２とが入力される。ＮＡＮＤ回路１３２は、ｆｌａｇ１とｆｌａｇ２とのＮＡＮＤ演算結果を、セレクタ１３３の選択信号入力端子に出力する。
【０１１４】
セレクタ１３３には、ｆｌａｇ１と１ビット乱数（ｒａｎｄ）とが入力される。セレクタ１３３は、ＮＡＮＤ回路１３２から入力されるＮＡＮＤ演算結果に基づいて、ｆｌａｇ１又はｒａｎｄの何れかを選択し、出力する。例えば、セレクタ１３３は、ＮＡＮＤ回路１３２のＮＡＮＤ演算結果が「１」の場合、ｆｌａｇ１を選択し、ＮＡＮＤ回路１３２のＮＡＮＤ演算結果が「０」の場合、ｒａｎｄを選択する。
【０１１５】
セレクタ１３４には、状態信号（ｓｔａｔｕｓ＿１）に含まれるｉｎｄｅｘ１と、状態信号（ｓｔａｔｕｓ＿２）に含まれるｉｎｄｅｘ２とが入力される。セレクタ１３４の選択信号入力端子には、セレクタ１３３の選択結果が入力される。セレクタ１３４は、セレクタ１３３の選択結果に基づいて、ｉｎｄｅｘ１またはｉｎｄｅｘ２の何れかを選択し、出力する。例えば、セレクタ１３４は、セレクタ１３３の選択結果が「１」の場合、ｉｎｄｅｘ１を選択し、セレクタ１３３の選択結果が「０」の場合、ｉｎｄｅｘ２を選択する。
【０１１６】
ＯＲ回路１３１およびセレクタ１３３，１３４の出力の組が、選択回路３１ｂｑが出力する状態信号（ｓｔａｔｕｓ）となる。
なお、初段の選択回路の入力は識別値を含まない。このため、初段の選択回路は、識別値（図中ではｉｎｄｅｘと表記）として、選択した方に対応するビット値（下位側の場合に「０」、上位側の場合に「１」）を追加して出力する回路となる。
【０１１７】
このように、セレクタ部１３ｃは、遷移可であるスピンビットから１つをトーナメント方式で選択する。トーナメントの各試合（すなわち、各選択回路での選択）では、勝った方（すなわち、選択された方）のエントリ番号（０又は１）をｉｎｄｅｘ  ｗｏｒｄの上位ビットに付け加えていく。最終段の選択回路３１ｒが出力するｉｎｄｅｘが選ばれたスピンビットを示す。例えば、１つの探索部におけるスピンビットの数が１０２４個の場合、最終段の選択回路３１ｒが出力する状態信号は、遷移可否を示すフラグと、１０ビットで表されるｉｎｄｅｘとを含む。
【０１１８】
ただし、ｉｎｄｅｘの出力方法は、上記のようにセレクタ部１３ｃで生成する方法以外の方法も考えられる。例えば、状態遷移判定回路１３ｂ１〜１３ｂｎの各々からセレクタ部１３ｃに各状態遷移判定回路に対応するｉｎｄｅｘを供給し、セレクタ部１３ｃにより遷移可否を示すフラグとともに、当該フラグに対応するｉｎｄｅｘを選択してもよい。この場合、状態遷移判定回路１３ｂ１〜１３ｂｎの各々は、自身に対応するｉｎｄｅｘを格納するｉｎｄｅｘレジスタを更に有し、ｉｎｄｅｘレジスタからセレクタ部１３ｃにｉｎｄｅｘを供給する。
【０１１９】
図５は、温度調整部の回路構成例を示す図である。
温度調整部２１は、レジスタ２１０、最低エネルギー更新確認回路２２０、最高温度更新確認回路２３０、温度ヒストグラム計算回路２４０および温度計算回路２５０を有する。
【０１２０】
レジスタ２１０は、探索部１０ａ１〜１０ａＮの各々に対応付けて、到達した最低エネルギーと、設定された温度の最高値（最高温度）とを記憶する。
最低エネルギー更新確認回路２２０は、所定のデータ取得タイミングにおいて、探索部１０ａ１〜１０ａＮの各々からエネルギー値Ｅを受け付ける。最低エネルギー更新確認回路２２０は、受け付けた探索部毎のエネルギー値Ｅをレジスタ２１０に記憶された探索部毎の最低エネルギーと比較することで、最低エネルギーが更新されたか否かを、探索部毎に確認する。最低エネルギー更新確認回路２２０は、最低エネルギーが更新されたか否かの探索部毎の確認結果を示す信号を、最高温度更新確認回路２３０および温度ヒストグラム計算回路２４０に出力する。最低エネルギー更新確認回路２２０は、ある探索部において最低エネルギーが更新された場合、レジスタ２１０に記録された該当の探索部の最低エネルギーを、該当の探索部から今回取得したエネルギーに更新する。
【０１２１】
最高温度更新確認回路２３０は、ある探索部について、最低エネルギー更新確認回路２２０による確認結果が、最低エネルギーが更新されていないことを示す場合、温度制御部２２から供給される温度をレジスタ２１０に記憶された該当の探索部の最高温度と比較する。最高温度更新確認回路２３０は、当該比較に応じて、該当の探索部について、前回の最低エネルギーの更新から、最高温度が更新されたか否かを確認する。最高温度更新確認回路２３０は、最高温度が更新された場合、該当の探索部に設定されている温度で、レジスタ２１０に記録されている最高温度の情報を更新する。
【０１２２】
温度ヒストグラム計算回路２４０は、ある探索部について、最低エネルギー更新確認回路２２０による確認結果が、最低エネルギーが更新されたことを示す場合、レジスタ２１０に記憶されている該当の探索部の最高温度を、温度ヒストグラム上にカウントする。温度ヒストグラムは、探索部１０ａ１〜１０ａＮの全体に対して１つ生成される。
【０１２３】
温度計算回路２５０は、温度ヒストグラム計算回路２４０により生成された温度ヒストグラムに基づいて、探索部１０ａ１〜１０ａＮに設定するＮ個の新規温度を計算する。温度計算回路２５０は、新規温度の計算に、式（６）、（７）を用いる。最低温度ｔｍｐ＿ｍｉｎは、温度計算回路２５０に予め設定される。最高温度ｔｍｐ＿ｍａｘは、温度ヒストグラムに基づいて温度計算回路２５０により決定される。温度計算回路２５０には、新規温度の計算に用いられる所定係数αが外部から入力され得る。温度計算回路２５０は、計算した新規温度を示す新規温度情報と、温度設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）とを温度制御部２２に出力する。
【０１２４】
図６は、レジスタに格納されるデータ例を示す図である。
レジスタ２１０の各アドレスは、何れかの探索部に対応付けられており、当該探索部に関するデータが格納される。例えば、レジスタ２１０のアドレス「０ｘＸＸＸＸＸＸ００」は、探索部１０ａ１に対応付けられており、当該アドレスには探索部１０ａ１が到達した最低エネルギーが格納される。例えば、最低エネルギーは、１２８ビット幅で表される。以降、同様に、例えば１２８ビット幅毎に、２番目の探索部１０ａ２の最低エネルギー、３番目の探索部の最低エネルギーというように、各探索部に関する最低エネルギーが、レジスタ２１０に格納される。
【０１２５】
また、レジスタ２１０のアドレス「０ｘＸＸＸＸＸＸＹ０」は、探索部１０ａ１に対応付けられており、当該アドレスには探索部１０ａ１において前回の最低エネルギーの更新から、探索部１０ａ１に設定された最高の温度が格納される。例えば、温度は３２ビット幅で表される。以降、同様に、例えば３２ビット幅毎に、２番目の探索部１０ａ２の温度の情報、３番目の探索部の温度の情報というように、各探索部について前回の最低エネルギーの更新時から設定された最高の温度が、レジスタ２１０に格納される。
【０１２６】
上記の構成例では、温度調整部２１を専用の電子回路を用いて実現する場合であるが、温度調整部２１の機能をＣＰＵ（Central Processing Unit）などのプロセッサが実行するソフトウェアの処理によって実現することもできる。そこで、温度調整部２１によるデータ取得のアルゴリズムの例を説明する。
【０１２７】
図７は、データ取得のアルゴリズムの例を示す図である。
コードＣ１は、変数の定義を示す。
ｍｉｎ＿ｅｇは、データ取得タイミングで得られたエネルギーを示す。
【０１２８】
ｍｉｎ＿ｅｇ＿ｐｒｅは、現在までの最低エネルギーを示す。
ｔｍｐ＿ｉｄｘは、現在の温度値（あるいは温度に対応する温度インデックス）を示す。温度インデックスは、番号が大きいほど、温度が高いことを示すものとする。
【０１２９】
ｔｍｐ＿ｉｄｘ＿ｐｒｅは、過去の温度の最高値を示す。ｔｍｐ＿ｉｄｘ＿ｐｒｅに対して言う「過去」は、前回の最低エネルギーの更新時を起点とした現在までの期間を示す。
【０１３０】
ｈｉｓｔｏｇｒａｍは、温度のヒストグラム（温度ヒストグラム）を示す。
変数ｍｉｎ＿ｅｇ、ｍｉｎ＿ｅｇ＿ｐｒｅ、ｔｍｐ＿ｉｄｘ、ｔｍｐ＿ｉｄｘ＿ｐｒｅは、探索部毎に設けられる。ｈｉｓｔｏｇｒａｍは、探索部１０ａ１〜１０ａＮに対して１つである。
【０１３１】
コードＣ２は、コードＣ１で定義される変数を用いて記述された温度調整部２１のアルゴリズムを示す。コードＣ２は、探索部毎に繰り返し、あるいは並列に、実行される。
１行目では、ｍｉｎ＿ｅｇ＜ｍｉｎ＿ｅｇ＿ｐｒｅを判定する。すなわち、１行目は、最低エネルギーが更新されたか否かの判定である。ｍｉｎ＿ｅｇ＜ｍｉｎ＿ｅｇ＿ｐｒｅの場合、２行目〜４行目が順番に実行され、処理が終了する。ｍｉｎ＿ｅｇ≧ｍｉｎ＿ｅｇ＿ｐｒｅの場合、６行目が実行される。
【０１３２】
２行目では、ｔｍｐ＿ｉｄｘ＿ｐｒｅの頻度を温度ヒストグラムに加算する（ｔｍｐ＿ｉｄｘ＿ｐｒｅの度数（頻度）が１加算される）。
３行目では、ｍｉｎ＿ｅｇ＿ｐｒｅに、ｍｉｎ＿ｅｇの値が設定される。すなわち、これまでの最低エネルギーが更新される。
【０１３３】
４行目では、ｔｍｐ＿ｉｄｘ＿ｐｒｅに、ｔｍｐ＿ｉｄｘの値が設定される。すなわち、ｔｍｐ＿ｉｄｘ＿ｐｒｅが、最低エネルギーが更新されたときの温度インデックスにリセットされる。
【０１３４】
６行目では、ｔｍｐ＿ｉｄｘ＞ｔｍｐ＿ｉｄｘ＿ｐｒｅを判定する。すなわち、６行目は、過去の温度の最高値が更新されたか否かの判定である。ｔｍｐ＿ｉｄｘ＞ｔｍｐ＿ｉｄｘ＿ｐｒｅの場合、７行目が実行される。ｔｍｐ＿ｉｄｘ≦ｔｍｐ＿ｉｄｘ＿ｐｒｅの場合、処理が終了する。
【０１３５】
７行目では、ｔｍｐ＿ｉｄｘ＿ｐｒｅに、ｔｍｐ＿ｉｄｘの値が設定される。すなわち、ｔｍｐ＿ｉｄｘ＿ｐｒｅが、該当の探索部に対して設定されている現在の温度に更新される。
【０１３６】
図８は、最低エネルギーおよび温度の変化例を示す図である。
グラフ７０は、ある探索部における最低エネルギーの変化例を示す。グラフ７１は、当該探索部における温度の変化例を示す。
【０１３７】
グラフ７０，７１の横軸は時間であり、左側から右側へ向かう方向が時間の正方向である。グラフ７０，７１の横軸の同一位置は、同一時刻を示す。グラフ７０の縦軸は、エネルギーである。グラフ７１の縦軸は温度である。グラフ７１の縦軸には温度Ｔａ，Ｔｂ，Ｔｃ，Ｔｄが示されている。ここで、Ｔａ＞Ｔｂ＞Ｔｃ＞Ｔｄである。
【０１３８】
グラフ７０は、系列７０ａを含む。系列７０ａによれば、期間７０ｂ，７０ｃの２つの期間で、最低エネルギーが更新されている。
グラフ７１は、系列７１ａを含む。系列７１ａによれば、期間７０ｂで最低エネルギーが更新された時点と期間７０ｃで最低エネルギーが更新された時点との間に該当の探索部が到達した最高温度は、Ｔａである。
【０１３９】
グラフ７０，７１の例では、該当の探索部において、最低エネルギーを更新するために、最高温度Ｔａまで一旦上がることが必要であることを示している。そこで、温度調整部２１は、このように最低エネルギーを更新するために達した最高温度を統計情報として取得し、当該統計情報に基づいて、各探索部に設定する温度を決定する。
【０１４０】
図９は、温度ヒストグラムの例を示す図である。
温度ヒストグラム８０は、温度ヒストグラム計算回路２４０により生成される。また、ＣＰＵなどのプロセッサを用いて温度調整を行う場合、温度ヒストグラム８０は、図７の「ｈｉｓｔｏｇｒａｍ」に相当する。
【０１４１】
温度ヒストグラム８０の横軸は温度インデックスを示し、縦軸は頻度を示す。
例えば、温度計算回路２５０は、温度ヒストグラム８０において最大頻度の温度インデックスに対応する温度を、最高温度ｔｍｐ＿ｍａｘと決定する。具体的には、温度計算回路２５０は、温度ヒストグラム８０のうち、頻度の高い温度の中から、最高温度ｔｍｐ＿ｍａｘを決定する。一例では、温度計算回路２５０は、ピークｐ１で示される最大頻度の温度を、最高温度ｔｍｐ＿ｍａｘと決定する。なお、温度計算回路２５０は、温度インデックスに対して温度ヒストグラム８０を作成した場合、温度インデックスに対応する温度値を、例えば、前述の第１の対応情報を参照することで特定する。この場合、例えば、温度制御部２２が保持する前述の第１の対応情報を、温度計算回路２５０により参照可能にすることが考えられる。温度計算回路２５０は、決定した最高温度ｔｍｐ＿ｍａｘを用いて、式（６）、（７）により、新規温度ｔｍｐ［ｉ］（１≦ｉ≦Ｎ）を計算する。
【０１４２】
ただし、問題によっては、上記のようなピークｐ１が出現しない場合やピークが複数出現する場合もある。そのような場合に、例えば、温度計算回路２５０は、次のように、温度ヒストグラム８０に基づく累積ヒストグラムを用いて、最高温度ｔｍｐ＿ｍａｘを決定する。
【０１４３】
図１０は、累積ヒストグラムの例を示す図である。
累積ヒストグラム８１は、温度ヒストグラム８０で示される頻度を温度の小さい方から累積したヒストグラムである。累積ヒストグラム８１は、温度計算回路２５０により生成される。累積ヒストグラム８１の横軸は温度インデックスを示し、縦軸は累積頻度を示す。
【０１４４】
温度計算回路２５０は、累積ヒストグラムの割合（累積割合）により最高温度ｔｍｐ＿ｍａｘを決定する。例えば、累積割合を、一例として、７０％（係数α＝０．７）とする。累積ヒストグラム８１には、累積割合７０％を示す直線８２が示されている。この場合、温度計算回路２５０は、累積ヒストグラム８１における累積頻度の最大値に累積割合を示す係数αを乗じた累積頻度に対応する温度（点ｐ２の累積頻度に対応する温度）を特定し、当該温度を、最高温度ｔｍｐ＿ｍａｘと決定する。本例の場合、累積頻度の最大値は、温度インデックスの最大値に対応する累積頻度である。累積頻度の最大値は、各探索部の最低エネルギーが更新された総回数に相当する。
【０１４５】
温度計算回路２５０は、決定した最高温度ｔｍｐ＿ｍａｘを用いて、式（６）、（７）により、新規温度ｔｍｐ［ｉ］（１≦ｉ≦Ｎ）を計算する。なお、累積割合として用いられる係数αは、前述のように、外部から入力されてもよい。
【０１４６】
上記のように、温度計算回路２５０は、温度ヒストグラム８０においてピークｐ１が検出されない場合や複数のピークが検出される場合などに、累積ヒストグラム８１を用いて、最高温度ｔｍｐ＿ｍａｘを決定してもよい。あるいは、温度ヒストグラム８０を用いるか、累積ヒストグラム８１を用いるかを、温度計算回路２５０に予め設定可能としてもよい。
【０１４７】
次に、最適化装置１による処理手順を説明する。
図１１は、レプリカ交換の全体制御例を示すフローチャートである。
（Ｓ１）全体制御部２４は、外部から入力データとして初期温度を示す温度情報を受け取り、当該温度情報とともに起動信号を温度制御部２２に出力する。
【０１４８】
（Ｓ２）温度制御部２２は、全体制御部２４からの起動信号を受けて、探索部１０ａ１〜１０ａＮの各々に温度情報および温度設定信号を出力することで、温度を設定し、探索部１０ａ１〜１０ａＮの各々による確率的探索の処理を実行させる。探索部１０ａ１〜１０ａＮの各々による処理（探索処理）の詳細は後述される。
【０１４９】
（Ｓ３）温度調整部２１は、探索部１０ａ１〜１０ａＮの各々で規定の時間、又は規定のイタレーション数の確率的探索が実行されると、探索部１０ａ１〜１０ａＮの各々で計算されたエネルギー値の取得を含むデータ収集処理を行う。データ収集処理の詳細は後述される。
【０１５０】
（Ｓ４）探索部１０ａ１〜１０ａＮは、隣接探索部毎のエネルギー値を温度制御部２２に伝達する。温度制御部２２は、探索部１０ａ１〜１０ａＮで計算されたエネルギー値を、温度が隣接する探索部毎に取得する。
【０１５１】
（Ｓ５）交換制御部２３は、温度が隣接する探索部間でのエネルギー差を用いた式（５）に基づく交換確率により、温度の交換制御を行う。交換制御部２３は、温度が隣接する探索部のペア毎に、温度の交換制御を行う。交換制御の詳細は後述される。
【０１５２】
（Ｓ６）温度調整部２１は、温度調整用のデータ取得期間内であるか否かを判定する。温度調整用のデータ取得期間内である場合、ステップＳ２に処理が進む。温度調整用のデータ取得期間内でない場合、ステップＳ７に処理が進む。
【０１５３】
（Ｓ７）温度調整部２１は、ステップＳ３のデータ収集処理の結果として生成される温度ヒストグラム８０（または累積ヒストグラム８１）に基づいて、式（６）、（７）で用いられる最高温度ｔｍｐ＿ｍａｘを計算する。温度調整部２１は、計算した最高温度ｔｍｐ＿ｍａｘを用いて、式（６）、（７）に基づき、新規温度ｔｍｐ［ｉ］を計算する。温度調整部２１は、計算した新規温度を示す新規温度情報と温度設定信号とを温度制御部２２に出力する。温度制御部２２は、温度調整部２１により出力された新規温度情報と温度設定信号とを受け付け、温度制御部２２が保持する前述の第１の対応情報における各温度インデックスに対応付けられた温度を更新する。
【０１５４】
（Ｓ８）温度制御部２２は、探索部１０ａ１〜１０ａＮの各々に新規温度情報および温度設定信号を出力することで、温度を設定し、探索部１０ａ１〜１０ａＮの各々による確率的探索（基底状態探索）の処理を実行させる。
【０１５５】
（Ｓ９）探索部１０ａ１〜１０ａＮは、探索部１０ａ１〜１０ａＮで規定の時間、又は規定のイタレーション数の確率的探索が実行されると、隣接探索部毎のエネルギー値を交換制御部２３に伝達する。交換制御部２３は、探索部１０ａ１〜１０ａＮで計算されたエネルギー値を、温度が隣接する探索部毎に取得する。
【０１５６】
（Ｓ１０）交換制御部２３は、温度が隣接する探索部間でのエネルギー差を用いた式（５）に基づく交換確率により、温度の交換制御を行う。交換制御部２３は、温度が隣接する探索部のペア毎に、温度の交換制御を行う。
【０１５７】
（Ｓ１１）探索部１０ａ１〜１０ａＮは、規定回数、最低温度の探索部におけるビットステートに変化がなくなったか否かを判定する。最低温度の探索部におけるビットステートに変化がなくなると、探索部１０ａ１〜１０ａＮは、全体制御部２４にビットステートを出力し、レプリカ交換の全体制御処理を終了する。最低温度の探索部におけるビットステートに変化がある場合、探索部１０ａ１〜１０ａＮは、ステップＳ８に処理を進め、確率的探索の処理を継続する。
【０１５８】
図１２は、探索部処理例を示すフローチャートである。
探索部処理は、ステップＳ２，Ｓ８に相当する。
（Ｓ２０）温度制御部２２は、探索部１０ａ１〜１０ａＮの各々に温度を設定する。例えば、温度制御部２２は、前述の温度インデックスと温度とを対応付けた第１の対応情報および温度インデックスと探索部の識別情報とを対応付けた第２の対応情報に基づいて、探索部１０ａ１〜１０ａＮの各々に温度を設定する。あるいは、温度制御部２２は、前述のように、探索部の識別情報と温度とを対応付けた対応情報に基づいて、探索部１０ａ１〜１０ａＮの各々に温度を設定してもよい。なお、探索部１０ａ１〜１０ａＮの各々に設定される温度の初期値は、問題などに応じて予め定められる。
【０１５９】
（Ｓ２１）探索部１０ａ１〜１０ａＮの各々は、スピンビット毎にローカルフィールドｈを計算する。例えば、探索部１０ａ１に着目すると、ｈ計算部１２ｂ１〜１２ｂｎは、ローカルフィールドｈ１〜ｈｎを計算する。ローカルフィールドｈは、式（１０）に基づいて計算される。なお、式（１０）によりローカルフィールドｈが計算された後は、例えば、式（１１）で示される差分δｈをローカルフィールドｈに加算することで、更新後のローカルフィールドｈ＝ｈ＋δｈを求めることができる。
【０１６０】
（Ｓ２２）探索部１０ａ１〜１０ａＮの各々は、計算したローカルフィールドｈに基づいて、スピンビット毎にエネルギーの変化値ΔＥを計算する。例えば、探索部１０ａ１に着目すると、ΔＥ生成部１２ｃ１〜１２ｃｎは、エネルギーの変化値ΔＥ１〜ΔＥｎを計算する。ΔＥは、式（９）に基づいて計算される。
【０１６１】
（Ｓ２３）探索部１０ａ１〜１０ａＮの各々は、エネルギーの変化値−ΔＥにオフセット値Ｅｏｆｆを加算する。例えば、探索部１０ａ１に着目すると、加算器１３ａ１〜１３ａｎは、−ΔＥ１〜−ΔＥｎに対して、オフセット値Ｅｏｆｆを加算する。オフセット値Ｅｏｆｆは、前述のように、オフセット制御部１３ｄにより制御される。例えば、オフセット制御部１３ｄは、セレクタ部１３ｃにより出力される遷移可否を示すフラグが遷移不可を示す場合に、０より大きいオフセット値Ｅｏｆｆを加算器１３ａ１〜１３ａｎに供給する。オフセット制御部１３ｄは、当該フラグが遷移可を示す場合に、オフセット値Ｅｏｆｆ＝０を加算器１３ａ１〜１３ａｎに供給する。なお、オフセット値Ｅｏｆｆの初期値は０である。
【０１６２】
（Ｓ２４）探索部１０ａ１〜１０ａＮの各々は、反転候補のスピンビットのうち、反転させるスピンビットを選択する。例えば、探索部１０ａ１に着目すると、状態遷移判定回路１３ｂ１〜１３ｂｎの各々は、該当の状態遷移判定回路に対応するスピンビットの遷移可否を示すフラグをセレクタ部１３ｃに出力する。セレクタ部１３ｃは、入力されたフラグの中から１つを選択し、選択したフラグと、選択したフラグに対応するスピンビットを示すｉｎｄｅｘとを出力する。
【０１６３】
（Ｓ２５）探索部１０ａ１〜１０ａＮの各々は、選択されたスピン（スピンビット）を反転させる。例えば、探索部１０ａ１に着目すると、状態保持部１１は、セレクタ部１３ｃにより出力されたフラグと、ｉｎｄｅｘとに基づいて、ビットステートに含まれるスピンビットのうち、ｉｎｄｅｘで示されるスピンビットの値を更新する。
【０１６４】
（Ｓ２６）探索部１０ａ１〜１０ａＮの各々は、ステップＳ２０の直後の確率的探索の開始時点から、規定のイタレーション回数に到達したか、または、規定時間が経過したか否かを判定する。規定のイタレーション回数に到達した、または、規定時間が経過した場合、ステップＳ２７に処理が進む。規定のイタレーション回数に到達しておらず、かつ、規定時間も経過していない場合、ステップＳ２１に処理が進む。
【０１６５】
（Ｓ２７）探索部１０ａ１〜１０ａＮの各々は、該当の探索部におけるエネルギー値（Ｅ１〜ＥＮ）を計算し、温度調整部２１および温度制御部２２に出力する。
上記のように、探索部１０ａ１〜１０ａＮの各々は、温度値とエネルギーの変化値と乱数値とに基づいて、当該変化値と熱励起エネルギーとの相対関係によって複数の状態遷移の何れかを受け入れるか否かを確率的に決定する。当該決定の際、探索部１０ａ１〜１０ａＮの各々の遷移制御部（例えば、遷移制御部１３）は、エネルギー値の変化値に所定のオフセット値を加算する。これにより、局所解からの脱出が促進され、演算の高速化を図れる。
【０１６６】
図１３は、データ収集処理例を示すフローチャートである。
データ収集処理は、ステップＳ３に相当する。以下では、温度調整部２１による探索部１０ａ１に対する手順を説明するが、探索部１０ａ２〜１０ａＮに対しても同様の手順となる。下記のステップＳ３１〜Ｓ３４は、探索部１０ａ１〜１０ａＮの各々に対して実行される。ステップＳ３４の温度ヒストグラム８０は、探索部１０ａ１〜１０ａＮに対して１つ計算される。
【０１６７】
（Ｓ３０）最低エネルギー更新確認回路２２０は、データ収集タイミングであるか否かを判定する。データ収集タイミングである場合、ステップＳ３１に処理が進む。データ収集タイミングでない場合、データ収集処理が終了する。ここで、データ収集タイミングは、探索部１０ａ１〜１０ａＮの探索処理（図１２の手順）の完了毎のタイミングでもよいし、当該探索処理の複数回の完了毎のタイミングでもよい。データ収集タイミングをどのようなタイミングとするかは、温度調整部２１に対して予め設定される。
【０１６８】
（Ｓ３１）最低エネルギー更新確認回路２２０は、探索部１０ａ１からエネルギーＥ１を取得する。最低エネルギー更新確認回路２２０は、レジスタ２１０に格納された探索部１０ａ１の最低エネルギーと、取得したエネルギーＥ１とを比較し、最低エネルギーが更新されたか否かを判定する。探索部１０ａ１に関して最低エネルギーが更新された場合とは、探索部１０ａ１から取得したエネルギーＥ１がレジスタ２１０に格納された探索部１０ａ１の最低エネルギーよりも低い場合である。最低エネルギーが更新された場合、最低エネルギー更新確認回路２２０は、レジスタ２１０に格納された探索部１０ａ１の最低エネルギーの記録を、探索部１０ａ１から今回取得されたエネルギーＥ１に更新し、ステップＳ３４に処理が進む。最低エネルギーが更新されていない場合、ステップＳ３２に処理が進む。
【０１６９】
（Ｓ３２）最高温度更新確認回路２３０は、温度制御部２２から探索部１０ａ１に設定されている温度を取得し、レジスタ２１０に格納されている探索部１０ａ１に対する最高温度が更新されたか否かを判定する。探索部１０ａ１に関して最高温度が更新された場合とは、探索部１０ａ１に設定されている温度が、レジスタ２１０に格納されている探索部１０ａ１に対する最高温度よりも高い場合である。最高温度が更新された場合、ステップＳ３３に処理が進む。最高温度が更新されていない場合、探索部１０ａ１に関するデータ収集処理が終了する。
【０１７０】
（Ｓ３３）最高温度更新確認回路２３０は、レジスタ２１０に格納された探索部１０ａ１の最高温度の記録を、温度制御部２２から取得される、探索部１０ａ１に現在設定されている温度に更新する。そして、探索部１０ａ１に関するデータ収集処理が終了する。
【０１７１】
（Ｓ３４）温度ヒストグラム計算回路２４０は、レジスタ２１０から探索部１０ａ１に対応する最高温度を読み出し、温度ヒストグラム８０における当該最高温度の度数（頻度）に１を加算する。なお、前述のように、温度ヒストグラム８０は、探索部１０ａ１〜１０ａＮに対して１つ生成される。また、最高温度更新確認回路２３０は、レジスタ２１０に格納された探索部１０ａ１の最高温度の記録を、温度制御部２２から取得される、探索部１０ａ１に現在設定されている温度に更新する。そして、探索部１０ａ１に関するデータ収集処理が終了する。
【０１７２】
なお、温度調整部２１は、ステップＳ３１〜Ｓ３４の処理を、探索部１０ａ１〜１０ａＮの各々に対して並列に実行してもよい。あるいは、温度調整部２１は、探索部１０ａ１〜１０ａＮの中から何れか１つを順番に選択して、ステップＳ３１〜Ｓ３４の処理を繰り返して実行してもよい。
【０１７３】
図１４は、交換制御例を示すフローチャートである。
交換制御は、ステップＳ５，Ｓ１０に相当する。
（Ｓ４０）交換制御部２３は、偶数番目の探索部に関し、式（５）で示される交換確率に基づいて、隣接する上位（又は下位）温度の探索部と温度を交換するか否かを判定する。温度の交換の判定は、探索部のペア毎に行われる。式（５）の関数ｆには、式（２）のメトロポリス法の関数、または、式（３）のギブス法の関数が用いられる。温度を交換すると判定された探索部のペアがある場合、ステップＳ４１に処理が進む。温度を交換すると判定された探索部のペアがない場合、ステップＳ４２に処理が進む。
【０１７４】
（Ｓ４１）交換制御部２３は、ステップＳ４０で温度を交換すると判定された探索部のペアについて、温度を交換する。交換制御部２３は、温度の交換に応じて、交換制御部２３が保持する前述の第２の対応情報を更新する。
【０１７５】
（Ｓ４２）交換制御部２３は、奇数番目の探索部に関し、式（５）で示される交換確率に基づいて、隣接する上位（又は下位）温度の探索部と温度を交換するか否かを判定する。温度の交換の判定は、探索部のペア毎に行われる。式（５）の関数ｆには、式（２）のメトロポリス法の関数、または、式（３）のギブス法の関数が用いられる。また、交換制御部２３は、ステップＳ４０において、偶数番目の探索部について上位温度の探索部と温度を交換するか否かを判定した場合、ステップＳ４２では奇数番目の探索部について上位温度の探索部と温度を交換するか否かを判定する。交換制御部２３は、ステップＳ４０において、偶数番目の探索部について下位温度の探索部と温度を交換するか否かを判定した場合、ステップＳ４２では奇数番目の探索部について下位温度の探索部と温度を交換するか否かを判定する。温度を交換すると判定された探索部のペアがある場合、ステップＳ４３に処理が進む。温度を交換すると判定された探索部のペアがない場合、交換制御が終了する。
【０１７６】
（Ｓ４３）交換制御部２３は、ステップＳ４２で温度を交換すると判定された探索部のペアについて、温度を交換する。交換制御部２３は、温度の交換に応じて、交換制御部２３が保持する第２の対応情報を更新する。そして、交換制御が終了する。
【０１７７】
なお、上記の例では、偶数番目の探索部の次に奇数番目の探索部に着目して、温度の交換制御を行うものとしたが、奇数番目の探索部の次に偶数番目の探索部に着目して、温度の交換制御を行ってもよい。すなわち、ステップＳ４２，Ｓ４３の後に、ステップＳ４０，Ｓ４１を実行してもよい。
【０１７８】
次に、最適化装置１による処理の流れの例を説明する。以下では、ＣＰＵによるソフトウェア処理で温度調整を行う場合と、温度調整部２１で示されるハードウェア処理で温度調整を行う場合とを例示する。
【０１７９】
まず、ＣＰＵによるソフトウェア処理で温度調整を行う場合を例示する。この場合、例えば、温度調整部２１の機能は、ＣＰＵにより実行されるソフトウェアの機能として最適化装置１に実装される。また、温度制御部２２（交換制御部２３を含む）の機能は、ハードウェアとしてだけでなく、ＣＰＵにより実行されるソフトウェアの機能としても、最適化装置１に実装される。そして、図１１のステップＳ３〜Ｓ７は、ＣＰＵにより実行されるソフトウェア処理として実行され、図１１のステップＳ２，Ｓ８〜Ｓ１１は、ハードウェア処理として実行される。
【０１８０】
図１５は、処理の流れの例（その１）を示す図である。
図１５の横軸は、イタレーション回数（又は時間）を示し、左側から右側へ向かう方向が正方向である。
【０１８１】
ＣＰＵによるデータ取得期間は、ＨＷ（Hardware）起動単位の期間ｔ１１，ｔ１２，ｔ１３，ｔ１４を含む。ＨＷ起動単位の期間とは、探索部１０ａ１〜１０ａＮを起動して、探索処理（基底状態探索）を実行させる単位期間である。温度調整後の確率的探索を行う期間（コアインターバル）は、ＨＷ起動単位の期間ｔ１５を含む。図中、「Ｘ」印は、レプリカ交換（すなわち、温度交換）を行うタイミングを示す。ＣＰＵによるデータ取得は、データ取得期間におけるレプリカ交換の直前に行われる。
【０１８２】
例えば、ＣＰＵは、期間ｔ１１の完了直後に、探索部１０ａ１〜１０ａＮにおけるエネルギー（最低エネルギーが更新されていない場合は温度も）を取得する。ＣＰＵは、最低エネルギーの更新に応じて、温度ヒストグラム８０を作成する。その後、ＣＰＵによりレプリカ交換（温度の交換制御）が行われる。そして、次の期間ｔ１２における探索部１０ａ１〜１０ａＮによる確率的探索が行われる。こうして、データ取得期間において、期間ｔ１１，ｔ１２，ｔ１３，ｔ１４の各々の直後に、ＣＰＵにより探索部１０ａ１〜１０ａＮに関するデータ取得および温度ヒストグラム８０の作成が行われる。データ取得期間が完了すると、ＣＰＵにより、温度ヒストグラム８０に基づいて、新規温度ｔｍｐ［ｉ］が決定される。なお、データ取得期間の長さは、ＣＰＵが実行するソフトウェアに対して予め設定される（例えば、確率的探索のための総イタレーション数が定められる場合、総イタレーション数の１％程度とするなど）。
【０１８３】
そして、新規温度ｔｍｐ［ｉ］を用いて、コアインターバルの期間ｔ１５が開始される。コアインターバルでは、ＣＰＵが処理に介入せず、探索部１０ａ１〜１０ａＮおよびハードウェアで実装された温度制御部２２（交換制御部２３を含む）によって、確率的探索およびレプリカ交換が実行される。このため、コアインターバルの期間は、ＨＷ起動単位の期間ｔ１５に相当する。
【０１８４】
なお、上記の例では、探索部１０ａ１〜１０ａＮによる確率的探索の全期間の初めのデータ取得期間後は、調整後の温度を変えずに確率的探索を実行する。一方、データ取得期間を定期的に設けて、ＣＰＵはデータ取得および取得したデータに基づく温度決定を繰り返し実行し、その都度、探索部１０ａ１〜１０ａＮに設定する温度を変更してもよい。
【０１８５】
次に、ハードウェア処理で温度調整を行う場合の処理の流れを説明する。
図１６は、処理の流れの例（その２）を示す図である。
図１６の横軸は、イタレーション回数（又は時間）を示し、左側から右側へ向かう方向が正方向である。
【０１８６】
温度調整をハードウェア処理で行う場合、データ取得期間およびコアインターバルを含む全期間が、ＨＷ起動単位の期間となる。
温度調整部２１によるデータ取得期間は、単位期間ｔ２１，ｔ２２，ｔ２３，ｔ２４を含む。期間ｔ２５は、コアインターバルである。また、図中、「Ｘ」印は、レプリカ交換（すなわち、温度交換）を行うタイミングを示す。温度調整部２１によるデータ取得は、データ取得期間におけるレプリカ交換の直前に行われる。
【０１８７】
例えば、温度調整部２１は、期間ｔ２１の完了直後に、探索部１０ａ１〜１０ａＮにおけるエネルギー（最低エネルギーが更新されていない場合は温度も）を取得する。温度調整部２１は、最低エネルギーの更新に応じて、温度ヒストグラム８０を作成する。その後、交換制御部２３によりレプリカ交換（温度の交換制御）が行われる。そして、次の期間ｔ２２における探索部１０ａ１〜１０ａＮによる確率的探索が行われる。こうして、データ取得期間において、期間ｔ２１，ｔ２２，ｔ２３，ｔ２４の各々の直後に、温度調整部２１により探索部１０ａ１〜１０ａＮに関するデータ取得および温度ヒストグラム８０の作成が行われる。データ取得期間が完了すると、温度調整部２１により、温度ヒストグラム８０に基づいて、新規温度ｔｍｐ［ｉ］が決定される。
【０１８８】
なお、データ取得期間の長さは、温度調整部２１に対して予め設定される（例えば、確率的探索のための総イタレーション数が定められる場合、総イタレーション数の１％程度とするなど）。そして、新規温度ｔｍｐ［ｉ］を用いて、コアインターバルの期間ｔ２５が開始される。
【０１８９】
なお、上記の例では、探索部１０ａ１〜１０ａＮによる確率的探索の全期間の初めのデータ取得期間後は、調整後の温度を変えずに確率的探索を実行する。一方、データ取得期間を定期的に設けて、温度調整部２１は、データ取得および取得したデータに基づく温度決定を繰り返し実行し、その都度、探索部１０ａ１〜１０ａＮに設定する温度を変更してもよい。
【０１９０】
最適化装置１によれば、探索部１０ａ１〜１０ａＮに設定する温度を適切に決定できる。具体的には、データ取得期間における最低エネルギーの更新、および、設定された最高温度の統計情報に基づいて、新規温度ｔｍｐ［ｉ］の最高値を決定することで、各探索部に設定する温度が高過ぎたり、低過ぎたりすることを抑えられる。このため、最適化装置１における解精度を向上させることができる。また、解精度の向上により、より早く適切な解に到達する可能性を高められ、演算の高速化を図れる。
【０１９１】
また、適切な最高温度（ｔｍｐ＿ｍａｘに相当する温度）を決定するために、最適化装置１による最適化処理を繰り返し実行して、ユーザが手作業で調整することも考えられるが、この作業には膨大な手間がかかる。一方、上記のように、温度の統計情報に基づいて、最高温度ｔｍｐ＿ｍａｘを決定することで、ユーザ作業による温度調整の手間を軽減できる。
【０１９２】
なお、温度調整をハードウェア処理で行う場合、ソフトウェア処理で行う場合に比べて、ＣＰＵに対するデータ出力やＣＰＵからのデータ入力に伴うオーバヘッドを軽減できるため、演算が高速化される。
【０１９３】
ここで、最適化装置１のハードウェア構成として、次の例も考えられる。
図１７は、最適化装置の他のハードウェア例を示す図である。
最適化装置１ａは、ＣＰＵ１０１、ＲＡＭ（Random Access Memory）１０２、ＨＤＤ（Hard Disk Drive）１０３、ＮＩＣ（Network Interface Card）１０４、出力ＩＦ（Interface）１０５、入力ＩＦ１０６、媒体リーダ１０７および確率的探索部１０８を有する。
【０１９４】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、最適化装置１ａは複数のプロセッサを有してもよい。複数のプロセッサの集合を「マルチプロセッサ」又は単に「プロセッサ」と言うことがある。ＣＰＵ１０１は、例えば、全体制御部２４として機能させることができる。また、前述のように、制御部２０（すなわち、温度調整部２１、温度制御部２２および交換制御部２３）の機能をＣＰＵ１０１により実行されるソフトウェア（制御プログラム）の処理で実現することもできる。
【０１９５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、最適化装置１ａは、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【０１９６】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、最適化装置１ａは、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【０１９７】
ＮＩＣ１０４は、ネットワーク４０に接続され、ネットワーク４０を介して他のコンピュータと通信を行うインタフェースである。ＮＩＣ１０４は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
【０１９８】
出力ＩＦ１０５は、ＣＰＵ１０１からの命令に従って、最適化装置１ａに接続されたディスプレイ４１に画像を出力する。ディスプレイ４１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【０１９９】
入力ＩＦ１０６は、最適化装置１ａに接続された入力デバイス４２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス４２としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、最適化装置１ａに、複数の種類の入力デバイスが接続されていてもよい。
【０２００】
媒体リーダ１０７は、記録媒体４３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体４３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【０２０１】
媒体リーダ１０７は、例えば、記録媒体４３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体４３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体４３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【０２０２】
確率的探索部１０８は、レプリカ交換の方法により、組合せ最適化問題に対する演算をハードウェアにより行うアクセラレータである。確率的探索部１０８は、探索部１０ａ１〜１０ａＮ、温度調整部２１、温度制御部２２および交換制御部２３を有し、前述の図１１〜図１４の手順により、イジングモデルの基底状態を探索する確率的探索を行う。
【０２０３】
上記の最適化装置１ａにより、最適化装置１と同様の機能を実現することができる。
［第２の実施の形態］
次に、第２の実施の形態を説明する。
【０２０４】
第２の実施の形態では、探索部１０ａ１〜１０ａＮにおける複数の状態変数の値（スピンビット列）を交換する点が、第１の実施の形態で説明した図２以降の構成と異なる。第２の実施の形態では、探索部１０ａ１〜１０ａＮに設定される温度は、温度調整が行われない限り、一定である。例えば、探索部１０ａ１〜１０ａＮに対して、昇順、または、降順に温度が設定される。
【０２０５】
図１８は、第２の実施の形態の最適化装置の回路構成例を示す図である。
最適化装置２は、例えば、ＦＰＧＡなどの半導体集積回路を用いて実現される。最適化装置２は、探索部１０ａ１〜１０ａＮ、温度調整部２１ａ、状態制御部２３ａおよび全体制御部２４ａを有する。
【０２０６】
探索部１０ａ１〜１０ａＮは、図２で例示した探索部１０ａ１〜１０ａＮと同様の回路構成であるため、説明を省略する。
ただし、第２の実施の形態では、各探索部の状態保持部に対して、状態制御部２３ａによりビットステート（スピンビット列）およびビットステートの識別情報であるレプリカ番号が設定される。探索部１０ａ１〜１０ａＮの数は、Ｎ個なので、最適化装置２におけるビットステートの総数もＮ個である。また、各探索部のｈ計算部に対して、状態制御部２３ａにより、ローカルフィールドが設定される。
【０２０７】
また、各探索部のＥ計算部は、温度調整部２１ａおよび状態制御部２３ａに対して、エネルギーＥを出力する。各探索部のＥ計算部は、エネルギーＥとともに、各探索部に設定されたレプリカ番号を温度調整部２１ａに出力する。例えば、図１８では、探索部１０ａ１からレプリカ番号「ｒｅｐ＿１」が出力され、探索部１０ａ２からレプリカ番号「ｒｅｐ＿２」が出力され、探索部１０ａＮからレプリカ番号「ｒｅｐ＿Ｎ」が出力される場合が例示されている。
【０２０８】
更に、状態保持部１１は、状態制御部２３ａに対して、ビットステートとｈ計算部１２ｂ１〜１２ｂｎに設定されたローカルフィールド（図中、ＬＦ（Local Field）と略記することがある）とを出力する。
【０２０９】
温度調整部２１ａは、探索部１０ａ１〜１０ａＮの各々から出力されるエネルギー値とレプリカ番号とを受け付ける。温度調整部２１ａは、探索部１０ａ１〜１０ａＮの各々に設定されている温度を取得する。図１８では、探索部１０ａ１に温度Ｔ１、探索部１０ａ２に温度Ｔ２、…、探索部１０ａＮに温度ＴＮが設定されている例が示されている。温度調整部２１ａは、エネルギー値の変化とビットステートに対応する温度の変化とに応じて、探索部１０ａ１〜１０ａＮの各々に設定する新規温度を示す新規温度情報を決定する。温度調整部２１ａは、決定した新規温度情報と、新規温度の設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）を、図示を省略している温度制御部を介して、探索部１０ａ１〜１０ａＮに出力する。新規温度情報は、各探索部の状態遷移判定回路（例えば、状態遷移判定回路１３ｂ１〜１３ｂｎ）に設定される。
【０２１０】
状態制御部２３ａは、探索部１０ａ１〜１０ａＮにおけるステート（ビットステートとローカルフィールドとを含む）の交換制御を行う。状態制御部２３ａは、交換制御部２３の一例である。
【０２１１】
状態制御部２３ａは、ビットステートと、ビットステートの設定信号（ＢＳ  ｓｅｔ  ｓｉｇ．）とを探索部１０ａ１〜１０ａＮの各々が有する状態保持部に供給する。ビットステートの設定信号は、ビットステートに対応するレプリカ番号を含む。また、状態制御部２３ａは、ローカルフィールドとローカルフィールドの設定信号（ＬＦ  ｓｅｔ  ｓｉｇ．）とを探索部１０ａ１〜１０ａＮの各々が有するｈ計算部に供給する。
【０２１２】
状態制御部２３ａは、式（５）の交換確率に基づいて、温度が隣接する２つの探索部のペアに関し、ステートの交換を行うか否かを判定する。状態制御部２３ａは、交換後のビットステートおよびローカルフィールドを、各探索部に供給する。
【０２１３】
例えば、状態制御部２３ａは、温度インデックスと温度とを対応付けた第１の対応情報を、状態制御部２３ａが有するレジスタに保持する。例えば、温度インデックスは、温度の昇順に温度に対応付けられる（温度インデックスが大きいほど温度も高い）。第２の実施の形態では、温度インデックスは、探索部の識別情報でもある。更に、状態制御部２３ａは、例えば、温度の昇順に配列された温度インデックスとビットステートの識別番号（レプリカ番号）とを対応付けた第３の対応情報を、状態制御部２３ａが有するレジスタに保持する。状態制御部２３ａは、第１の対応情報および第３の対応情報に基づいて、探索部１０ａ１〜１０ａＮに対するステートの交換を制御し、交換に応じて、第３の対応情報を更新する。第２の対応情報において温度インデックスが隣接する探索部のペアに対して、ステートの交換が行われ得る。状態制御部２３ａは、第３の対応情報に基づいて、探索部１０ａ１〜１０ａＮにビットステートおよびローカルフィールドを供給する。
【０２１４】
ただし、状態制御部２３ａは、レプリカ番号と温度値（探索部に対応する順序で昇順、または降順に配列された温度値）とを対応付けた対応情報を保持し、当該対応情報に基づいてステートの交換制御を行ってもよい。その場合、温度調整部２１ａによる新規温度の計算結果に応じて、当該対応情報における温度値が更新される。
【０２１５】
全体制御部２４ａは、最適化装置２の全体の動作を制御する。全体制御部２４ａは、起動信号の入力を受け付ける。すると、全体制御部２４ａは、探索部１０ａ１〜１０ａＮに初期の温度情報と温度の設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）とを出力し、探索部１０ａ１〜１０ａＮの各々に初期温度を設定する。そして、全体制御部２４ａは、状態制御部２３ａに起動信号を出力し、探索部１０ａ１〜１０ａＮを起動させて、最適化問題に対する演算を開始させる。
【０２１６】
全体制御部２４ａは、演算が終了すると、探索部１０ａ１〜１０ａＮの各々からビットステートを取得し、最適化問題に対する解を得る。全体制御部２４ａは、演算の終了を示す終了信号を出力する。終了信号は、演算により得られた解を示す情報を含み得る。例えば、全体制御部２４ａは、最適化装置２に接続された表示装置に、解を示す画像情報を出力し、解を示す画像情報を表示装置により表示させることで、得られた解の内容をユーザに提示してもよい。
【０２１７】
図１９は、温度調整部の回路構成例を示す図である。
温度調整部２１ａは、レジスタ３１０、最低エネルギー更新確認回路３２０、最高温度更新確認回路３３０、温度ヒストグラム計算回路３４０および温度計算回路３５０を有する。また、最適化装置２は、更に、温度制御部２２ａを有する。
【０２１８】
レジスタ３１０は、Ｎ個のビットステートの各々のレプリカ番号に対応付けて、到達した最低エネルギーと、設定された温度の最高値（最高温度）とを記憶する。
最低エネルギー更新確認回路３２０は、所定のデータ取得タイミングにおいて、探索部１０ａ１〜１０ａＮの各々から、エネルギー値Ｅと各探索部におけるビットステートのレプリカ番号とを受け付ける。最低エネルギー更新確認回路３２０は、受け付けたレプリカ番号毎のエネルギー値Ｅを、レジスタ３１０に記憶されたレプリカ番号毎の最低エネルギーと比較することで、最低エネルギーが更新された否かを、レプリカ番号毎に確認する。最低エネルギー更新確認回路３２０は、最低エネルギーが更新されたか否かのレプリカ番号毎の確認結果を示す信号を、最高温度更新確認回路３３０および温度ヒストグラム計算回路３４０に出力する。最低エネルギー更新確認回路３２０は、あるレプリカ番号において最低エネルギーが更新された場合、レジスタ３１０に記録された該当のレプリカ番号の最低エネルギーを、該当のレプリカ番号に対して今回取得したエネルギーに更新する。
【０２１９】
最高温度更新確認回路３３０は、あるレプリカ番号について、最低エネルギー更新確認回路３２０による確認結果が、最低エネルギーが更新されていないことを示す場合、該当のレプリカ番号（ビットステート）に対する現在の温度を、レジスタ３１０に記憶された該当のレプリカ番号の最高温度と比較する。最高温度更新確認回路３３０は、当該比較に応じて、該当のレプリカ番号について、前回の最低エネルギーの更新からの最高温度が今回の設定温度により更新されたか否かを確認する。最高温度更新確認回路３３０は、最高温度が更新された場合、該当のレプリカ番号に対応する現在の設定温度で、レジスタ３１０に記録されている当該レプリカ番号の最高温度の情報を更新する。
【０２２０】
温度ヒストグラム計算回路３４０は、あるレプリカ番号について、最低エネルギー更新確認回路３２０による確認結果が、最低エネルギーが更新されたことを示す場合、レジスタ３１０に記憶されている該当のレプリカ番号の最高温度を、温度ヒストグラム上にカウントする。温度ヒストグラムは、Ｎ個のビットステートの全体に対して１つ生成される。
【０２２１】
温度計算回路３５０は、温度ヒストグラム計算回路３４０により生成された温度ヒストグラムに基づいて、探索部１０ａ１〜１０ａＮに設定するＮ個の新規温度を計算する。温度計算回路３５０は、新規温度の計算に、式（６）、（７）を用いる。最低温度ｔｍｐ＿ｍｉｎは、温度計算回路３５０に予め設定される。最高温度ｔｍｐ＿ｍａｘは、温度ヒストグラムに基づいて温度計算回路３５０により決定される。温度計算回路３５０には、新規温度の計算に用いられる係数αが外部から入力され得る。温度計算回路３５０は、計算した新規温度を示す新規温度情報と、温度設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）とを温度制御部２２ａに出力する。更に、温度計算回路３５０は、新規温度情報を状態制御部２３ａに出力し、状態制御部２３ａが保持する第１の対応情報において温度インデックスに対応付けられる温度を更新させる。なお、温度計算回路３５０による温度計算方法は、温度計算回路２５０による温度計算方法と同様である。
【０２２２】
ここで、温度制御部２２ａは、温度計算回路３５０から新規温度情報と温度設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）とを受け付ける。すると、温度制御部２２ａは、新規温度情報と温度設定信号（Ｔ  ｓｅｔ  ｓｉｇ．）とを探索部１０ａ１〜１０ａＮに出力することで、探索部１０ａ１〜１０ａＮに対して新規温度を設定する。
【０２２３】
また、温度調整部２１ａは、基底状態探索の全期間において、所定周期などで繰り返し温度調整を行う場合、温度制御部２２ａまたは状態制御部２３ａから、探索部１０ａ１〜１０ａＮの各々に現在設定される温度の情報を取得してもよい。
【０２２４】
図２０は、レジスタに格納されるデータ例を示す図である。
レジスタ３１０では、所定オフセットを隔てた３つのアドレスが、１組のレコードに対応付けられる。例えば、アドレス「０ｘＸＸＸＸＸＸ００」、「０ｘＸＸＸＸＸＸＹ０」、「０ｘＸＸＸＸＸＸＺ０」は、アドレス「０ｘＸＸＸＸＸＸＺ０」に格納されたレプリカ番号に対応する１組のレコードである。アドレス「０ｘＸＸＸＸＸＸ００」には、該当のレプリカ番号に対応するビットステートが到達した最低エネルギーが格納される。例えば、最低エネルギーは、１２８ビット幅で表される。アドレス「０ｘＸＸＸＸＸＸＹ０」には、該当のレプリカ番号のビットステートにおいて前回の最低エネルギーの更新から、当該ビットステートに設定された最高の温度が格納される。例えば、温度は３２ビット幅で表される。また、例えば、レプリカ番号は１６ビット幅で表される。
【０２２５】
同様に、他のレプリカ番号のビットステートに対しても、最低エネルギーと、温度と、レプリカ番号とが、レジスタ３１０に格納される。
このように、温度調整部２１ａは、探索部に設定されるビットステート（複数の状態変数）の識別情報（レプリカ番号）に対応付けて、当該ビットステートに対して到達したエネルギー値の最小値と、当該ビットステートに対して設定された最高温度を記録する。そして、温度調整部２１ａは、いずれかの探索部でエネルギー値の最小値が更新された場合に、当該エネルギー値の最小値の前回の更新から今回の更新までに該当の探索部におけるビットステート（複数の状態変数）に対して設定された温度のうちの最高の温度値を、温度統計情報として取得する。
【０２２６】
次に、最適化装置２による処理手順を説明する。
図２１は、レプリカ交換の全体制御例を示すフローチャートである。
（Ｓ１ａ）全体制御部２４ａは、外部から入力データとして初期温度を示す温度情報を受け取り、当該温度情報を探索部１０ａ１〜１０ａＮに出力するとともに起動信号を状態制御部２３ａに出力する。
【０２２７】
（Ｓ２ａ）状態制御部２３ａは、全体制御部２４ａからの起動信号を受けて、探索部１０ａ１〜１０ａＮの各々による確率的探索の処理を実行させる。探索部１０ａ１〜１０ａＮの各々による処理（探索処理）手順は、図１２で例示した手順と同様である。
【０２２８】
（Ｓ３ａ）温度調整部２１ａは、探索部１０ａ１〜１０ａＮで規定の時間、又は規定のイタレーション数の確率的探索が実行されると、探索部１０ａ１〜１０ａＮで計算されたエネルギー値およびレプリカ番号の取得を含むデータ収集処理を行う。データ収集処理の詳細は後述される。
【０２２９】
（Ｓ４ａ）探索部１０ａ１〜１０ａＮは、隣接探索部毎のエネルギー値、ビットステートおよびローカルフィールドを状態制御部２３ａに伝達する。状態制御部２３ａは、探索部１０ａ１〜１０ａＮで計算されたエネルギー値、ビットステートおよびローカルフィールドを、隣接探索部のペア毎に取得する。隣接探索部のペアは、設定されている温度が隣接する探索部のペアである。当該探索部のペアにおける２つのビットステートは、温度が隣接していることになる。
【０２３０】
（Ｓ５ａ）状態制御部２３ａは、温度が隣接する探索部間でのエネルギー差を用いた式（５）に基づく交換確率により、ステートの交換制御を行う。状態制御部２３ａは、温度が隣接する探索部のペア毎に、ステートの交換制御を行う。交換制御の詳細は後述される。
【０２３１】
（Ｓ６ａ）温度調整部２１ａは、温度調整用のデータ取得期間内であるか否かを判定する。温度調整用のデータ取得期間内である場合、ステップＳ２ａに処理が進む。温度調整用のデータ取得期間内でない場合、ステップＳ７ａに処理が進む。
【０２３２】
（Ｓ７ａ）温度調整部２１ａは、ステップＳ３ａのデータ収集処理の結果として生成される温度ヒストグラム８０（または累積ヒストグラム８１）に基づいて、式（６）、（７）で用いられる最高温度ｔｍｐ＿ｍａｘを計算する。温度調整部２１ａは、計算した最高温度ｔｍｐ＿ｍａｘを用いて、式（６）、（７）に基づき、新規温度ｔｍｐ［ｉ］を計算する。温度調整部２１ａは、計算した新規温度を示す新規温度情報と温度設定信号とを温度制御部２２ａおよび状態制御部２３ａに出力する。状態制御部２３ａは、温度調整部２１ａにより出力された新規温度情報と温度設定信号とを受け付け、状態制御部２３ａが保持する第１の対応情報における各温度インデックスに対応付けられた温度を更新する。
【０２３３】
（Ｓ８ａ）温度制御部２２ａは、探索部１０ａ１〜１０ａＮの各々に新規温度情報および温度設定信号を出力することで、温度を設定し、探索部１０ａ１〜１０ａＮの各々による確率的探索の処理を実行させる。
【０２３４】
（Ｓ９ａ）探索部１０ａ１〜１０ａＮは、探索部１０ａ１〜１０ａＮで規定の時間、又は規定のイタレーション数の確率的探索が実行されると、隣接探索部毎のエネルギー値、ビットステートおよびローカルフィールドを状態制御部２３ａに伝達する。状態制御部２３ａは、探索部１０ａ１〜１０ａＮで計算されたエネルギー値、ビットステートおよびローカルフィールドを、隣接探索部毎に取得する。
【０２３５】
（Ｓ１０ａ）状態制御部２３ａは、温度が隣接する探索部間でのエネルギー差を用いた式（５）に基づく交換確率により、ステートの交換制御を行う。状態制御部２３ａは、温度が隣接する探索部のペア毎に、ステートの交換制御を行う。
【０２３６】
（Ｓ１１ａ）探索部１０ａ１〜１０ａＮは、規定回数、最低温度の探索部におけるビットステートに変化がなくなったか否かを判定する。最低温度の探索部におけるビットステートに変化がなくなると、探索部１０ａ１〜１０ａＮは、全体制御部２４ａにビットステートを出力し、レプリカ交換の全体制御処理を終了する。最低温度の探索部におけるビットステートに変化がある場合、探索部１０ａ１〜１０ａＮは、ステップＳ８ａに処理を進め、確率的探索の処理を継続する。
【０２３７】
図２２は、データ収集処理例を示すフローチャートである。
データ収集処理は、ステップＳ３ａに相当する。以下では、温度調整部２１ａによる探索部１０ａ１に対する手順を説明するが、探索部１０ａ２〜１０ａＮに対しても同様の手順となる。下記のステップＳ３１ａ〜Ｓ３４ａは、探索部１０ａ１〜１０ａＮの各々に対して実行される。ステップＳ３４ａの温度ヒストグラム８０は、探索部１０ａ１〜１０ａＮに対して１つ計算される。
【０２３８】
（Ｓ３０ａ）最低エネルギー更新確認回路３２０は、データ収集タイミングであるか否かを判定する。データ収集タイミングである場合、ステップＳ３１ａに処理が進む。データ収集タイミングでない場合、データ収集処理が終了する。前述のように、データ収集タイミングは、探索部１０ａ１〜１０ａＮの探索処理（図１２の手順）の完了毎のタイミングでもよいし、当該探索処理の複数回の完了毎のタイミングでもよい。
【０２３９】
（Ｓ３１ａ）最低エネルギー更新確認回路３２０は、探索部１０ａ１からエネルギーＥ１とレプリカ番号とを取得する。最低エネルギー更新確認回路３２０は、レジスタ３１０に格納された該当のレプリカ番号の最低エネルギーと、取得したエネルギーＥ１とを比較し、最低エネルギーが更新されたか否かを判定する。最低エネルギーが更新された場合、最低エネルギー更新確認回路３２０は、レジスタ３１０に格納された該当のレプリカ番号の最低エネルギーの記録を、探索部１０ａ１から今回取得されたエネルギーＥ１に更新し、ステップＳ３４ａに処理が進む。最低エネルギーが更新されていない場合、ステップＳ３２ａに処理が進む。
【０２４０】
（Ｓ３２ａ）最高温度更新確認回路３３０は、探索部１０ａ１に設定されている温度を取得し、レジスタ３１０に格納されている該当のレプリカ番号に対する最高温度が更新されたか否かを判定する。最高温度が更新された場合、ステップＳ３３ａに処理が進む。最高温度が更新されていない場合、該当のレプリカ番号に関するデータ収集処理が終了する。
【０２４１】
（Ｓ３３ａ）最高温度更新確認回路３３０は、レジスタ３１０に格納された該当のレプリカ番号の最高温度の記録を、探索部１０ａ１に設定されている温度に更新する。そして、該当のレプリカ番号に関するデータ収集処理が終了する。
【０２４２】
（Ｓ３４ａ）温度ヒストグラム計算回路３４０は、レジスタ３１０から該当のレプリカ番号に対応する最高温度を読み出し、温度ヒストグラム８０における当該最高温度の度数（頻度）に１を加算する。なお、前述のように、温度ヒストグラム８０は、探索部１０ａ１〜１０ａＮ（Ｎ個のビットステート）に対して１つ生成される。また、最高温度更新確認回路３３０は、レジスタ３１０に格納された該当のレプリカ番号の最高温度の記録を、探索部１０ａ１に現在設定されている温度に更新する。そして、該当のレプリカ番号に関するデータ収集処理が終了する。
【０２４３】
なお、温度調整部２１ａは、ステップＳ３１ａ〜Ｓ３４ａの処理を、探索部１０ａ１〜１０ａＮの各々に対して並列に実行してもよい。あるいは、温度調整部２１ａは、探索部１０ａ１〜１０ａＮの中から何れか１つを順番に選択して、ステップＳ３１ａ〜Ｓ３４ａの処理を繰り返して実行してもよい。
【０２４４】
このように、温度調整部２１ａは、エネルギー値の基底状態探索の繰り返し回数到達又は一定時間経過後に、探索部１０ａ１〜１０ａＮの各々からエネルギー値を取得する。そして、温度調整部２１ａは、エネルギー値の最小値が更新されたか否かを、探索部１０ａ１〜１０ａＮの各々におけるビットステート（複数の状態変数の値）に対して確認することで、データ収集処理を行う。
【０２４５】
図２３は、交換制御例を示すフローチャートである。
交換制御は、ステップＳ５ａ，Ｓ１０ａに相当する。
（Ｓ４０ａ）状態制御部２３ａは、偶数番目の探索部に関し、式（５）で示される交換確率に基づいて、隣接する上位（又は下位）温度の探索部とビットステートおよびローカルフィールドを交換するか否かを判定する。ビットステートおよびローカルフィールドの交換の判定は、探索部のペア毎に行われる。式（５）の関数ｆには、式（２）のメトロポリス法の関数、または、式（３）のギブス法の関数が用いられる。ビットステートおよびローカルフィールドを交換すると判定された探索部のペアがある場合、ステップＳ４１ａに処理が進む。ビットステートおよびローカルフィールドを交換すると判定された探索部のペアがない場合、ステップＳ４２ａに処理が進む。
【０２４６】
（Ｓ４１ａ）状態制御部２３ａは、ステップＳ４０ａでビットステートおよびローカルフィールドを交換すると判定された探索部のペアについて、ビットステートおよびローカルフィールドを交換する。状態制御部２３ａは、ステートの交換に応じて、状態制御部２３ａが保持する前述の第３の対応情報を更新する。
【０２４７】
（Ｓ４２ａ）状態制御部２３ａは、奇数番目の探索部に関し、式（５）で示される交換確率に基づいて、隣接する上位（又は下位）温度の探索部とビットステートおよびローカルフィールドを交換するか否かを判定する。ビットステートおよびローカルフィールドの交換の判定は、探索部のペア毎に行われる。式（５）の関数ｆには、式（２）のメトロポリス法の関数、または、式（３）のギブス法の関数が用いられる。また、状態制御部２３ａは、ステップＳ４０ａにおいて、偶数番目の探索部について上位温度の探索部とステートを交換するか否かを判定した場合、ステップＳ４２ａでは奇数番目の探索部について上位温度の探索部とステートを交換するか否かを判定する。状態制御部２３ａは、ステップＳ４０ａにおいて、偶数番目の探索部について下位温度の探索部と温度を交換するか否かを判定した場合、ステップＳ４２ａでは奇数番目の探索部について下位温度の探索部とステートを交換するか否かを判定する。ビットステートおよびローカルフィールドを交換すると判定された探索部のペアがある場合、処理がステップＳ４３ａに進む。ビットステートおよびローカルフィールドを交換すると判定された探索部のペアがない場合、交換制御が終了する。
【０２４８】
（Ｓ４３ａ）状態制御部２３ａは、ステップＳ４２ａでビットステートおよびローカルフィールドを交換すると判定された探索部のペアについて、ビットステートおよびローカルフィールドを交換する。状態制御部２３ａは、ステートの交換に応じて、状態制御部２３ａが保持する第３の対応情報を更新する。そして、交換制御が終了する。
【０２４９】
なお、上記の例では、偶数番目の探索部の次に奇数番目の探索部に着目して、ステートの交換制御を行うものとしたが、奇数番目の探索部の次に偶数番目の探索部に着目して、ステートの交換制御を行ってもよい。すなわち、ステップＳ４２ａ，Ｓ４３ａの後に、ステップＳ４０ａ，Ｓ４１ａを実行してもよい。
【０２５０】
このように、最適化装置２は、レプリカ交換において、探索部間でステートを交換することで、イジングモデルの基底状態探索を行ってもよい。
最適化装置２によれば、探索部１０ａ１〜１０ａＮに設定する温度を適切に決定できる。具体的には、データ取得期間における最低エネルギーの更新、および、設定された最高温度の統計情報に基づいて、新規温度ｔｍｐ［ｉ］の最高値を決定することで、各探索部に設定する温度が高過ぎたり、低過ぎたりすることを抑えられる。このため、最適化装置２における解精度を向上させることができる。また、解精度の向上により、より早く適切な解に到達する可能性を高められ、演算の高速化を図れる。
【０２５１】
また、適切な最高温度（ｔｍｐ＿ｍａｘに相当する温度）を決定するために、最適化装置２による最適化処理を繰り返し実行して、ユーザが手作業で調整することも考えられるが、この作業には膨大な手間がかかる。一方、上記のように、温度の統計情報に基づいて、最高温度ｔｍｐ＿ｍａｘを決定することで、ユーザ作業による温度調整の手間を軽減できる。
【０２５２】
更に、第１の実施の形態と同様に、最適化装置２における温度調整の機能は、ＣＰＵによるソフトウェア処理によって実現されてもよい。最適化装置２は、最適化装置１ａと同様のハードウェア構成とすることもできる。ただし、確率的探索部では、レプリカ交換において、探索部間でステートを交換する制御を行う。
【０２５３】
図２４は、解の個数の例を示す図である。
グラフ９０は、比較例の方法で温度を決定して演算を行った場合に得られた組合せ最適化問題の解の個数と、最適化装置１，２（または最適化装置１ａ）により温度調整を行って演算を行った場合に得られた組合せ最適化問題の解の個数とを例示する。グラフ９０の横軸は問題を示し、縦軸は解の個数を示す。比較例の方法は、演算開始時に、スピンビット間の結合を表す係数行列Ｗに基づいて、所定の演算により最高温度を決定し、各探索部に設定する温度を決定する方法である。
【０２５４】
実験条件は次の通りである。基底状態探索の総イタレーション数は、１０００万回である。レプリカ数（探索部１０ａ１〜１０ａＮの数に相当）は、１００である。各探索部のオフセット制御部により局所解脱出のために用いるオフセット値の増分値は１０００である。実験では、組合せ最適化問題として、解が予め判明しているものを用い、基底状態探索の総イタレーション数の完了後に、その解の得られた探索部の個数をカウントする。
【０２５５】
ここで、横軸に付された文字列は問題の名称であり、アルファベットまたはアルファベットと数字との組で示される接頭辞は、問題の種類を示す。例えば、接頭辞「ｍｃｐ」は、最大カット問題を示す。接頭辞「ｍｏｌｓｉｍ」は、分子類似性問題を示す。接頭辞「ｔｓｐ３２」は、巡回セールスマン問題を示す。更に、接頭辞に後続する文字列は、該当の種類の問題でのバリエーションを示す。
【０２５６】
グラフ９０によれば、分子類似性問題（「ｍｏｌｓｉｍ＿９５０＿ＸＸ」）および巡回セールスマン問題（「ｔｓｐ３２＿ｍａｐＸＸ」）において、解が増加することが分かる。また、最大カット問題については、幾つかのバリエーション（例えば、ｍｃｐ＿Ｇ５１〜ｍｃｐ＿Ｇ５４）において、比較例の方法とほぼ同等の求解性能であることが分かる。グラフ９０に関して、総合的にみれば、最適化装置１，２の方法によれば、比較例の方法に対して改善傾向にあり、求解性能が向上することが分かる。また、解の個数が増すことから、比較例の方法よりも早く最適解に到達する可能性が高まり、演算の高速化を図れる。
【符号の説明】
【０２５７】
１  最適化装置
１０ａ１，１０ａ２，…，１０ａＮ  探索部
１１  状態保持部
１２  エネルギー計算部
１３  遷移制御部
２０  制御部
２１  温度調整部
２２  温度制御部
２３  交換制御部
【図１】
2020086821.tif 000016
【図２】
2020086821.tif 000017
【図３】
2020086821.tif 000018
【図４】
2020086821.tif 000019
【図５】
2020086821.tif 000020
【図６】
2020086821.tif 000021
【図７】
2020086821.tif 000022
【図８】
2020086821.tif 000023
【図９】
2020086821.tif 000024
【図１０】
2020086821.tif 000025
【図１１】
2020086821.tif 000026
【図１２】
2020086821.tif 000027
【図１３】
2020086821.tif 000028
【図１４】
2020086821.tif 000029
【図１５】
2020086821.tif 000030
【図１６】
2020086821.tif 000031
【図１７】
2020086821.tif 000032
【図１８】
2020086821.tif 000033
【図１９】
2020086821.tif 000034
【図２０】
2020086821.tif 000035
【図２１】
2020086821.tif 000036
【図２２】
2020086821.tif 000037
【図２３】
2020086821.tif 000038
【図２４】
2020086821.tif 000039
【図２５】
2020086821.tif 000040