(57)【要約】  最適化装置においてアニール処理の断続的実行時に乱数生成器に適切な乱数を生成させる。最適化装置は、初期化動作を実行後に一連の乱数を生成する第１動作モードと初期化動作無しで一連の乱数を生成する第２動作モードとのいずれかで動作する乱数生成器と、乱数生成器が生成する乱数を利用してアニール処理を実行するアニール計算部と、アニール計算部がアニール処理を開始する際には第１動作モードで乱数生成器を動作開始させ、アニール計算部がアニール処理を中断する際には乱数生成器を動作停止させ、アニール計算部がアニール処理を再開する際には第２動作モードで乱数生成器を動作再開させる動作指示部とを含む。
2020054021.tif 000002
【特許請求の範囲】
【請求項１】
初期化動作を実行後に一連の乱数を生成する第１動作モードと前記初期化動作無しで一連の乱数を生成する第２動作モードとのいずれかで動作する乱数生成器と、
前記乱数生成器が生成する乱数を利用してアニール処理を実行するアニール計算部と、
前記アニール計算部が前記アニール処理を開始する際には前記第１動作モードで前記乱数生成器を動作開始させ、前記アニール計算部が前記アニール処理を中断する際には前記乱数生成器を動作停止させ、前記アニール計算部が前記アニール処理を再開する際には前記第２動作モードで前記乱数生成器を動作再開させる動作指示部と
を含む最適化装置。
【請求項２】
前記アニール計算部が前記アニール処理を中断する際に、前記乱数生成器は動作を中断すると共に中断時の内部状態をそのまま保持し、前記アニール計算部が前記アニール処理を再開する際に、前記乱数生成器は前記初期化動作無しで前記中断時の前記内部状態から動作を再開する請求項１記載の最適化装置。
【請求項３】
前記アニール計算部が前記アニール処理を中断して再開する前後において、前記乱数生成器が生成する複数の乱数と前記アニール計算部が利用する複数の乱数とは、過不足なく一対一に対応している請求項１又は２記載の最適化装置。
【請求項４】
前記乱数生成器は線形帰還シフトレジスタであり、前記初期化動作は前記線形帰還シフトレジスタへシード値を設定する動作である請求項１乃至３いずれか記載の最適化装置。
【請求項５】
前記乱数生成器はメルセンヌツイスタであり、前記初期化動作はシード値に基づいて順次計算された初期値をメモリ中の複数のワードへ設定する動作を含む請求項１乃至３いずれか一項記載の最適化装置。
【請求項６】
初期化動作を実行後に一連の乱数を生成する第１動作モードで乱数生成器を動作させ、
前記乱数生成器による乱数生成と同期してアニール処理を実行し、
前記アニール処理の実行を停止するのと同期して前記乱数生成器の動作を停止させ、
前記アニール処理の実行を再開するのと同期して、前記初期化動作無しで一連の乱数を生成する第２動作モードで前記乱数生成器を動作させる
各段階を含む最適化装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、最適化装置及び最適化装置の制御方法に関する。
【背景技術】
【０００２】
最適化問題は、探索空間上で定義された目的関数の値を最小にする探索空間に属する点（解）を見つける問題である。探索空間が有限個の要素を有する離散集合である場合、探索空間に属する全ての点について計算した目的関数値を互いに比較することにより、総当たり的に最小値を見つけることができる。しかしながら、探索空間の次元数が増えると集合の要素の数が爆発的に大きくなり、総当たり的な探索が実質的に不可能になる。【０００３】
シミュレーテッド・アニール処理（Simulated Annealing）は、金属を徐々に冷却して欠陥の少ない結晶を得る金属の焼き鈍し工程を模擬するものであり、探索空間に属する各点が物理現象の各状態に対応し、目的関数が各状態の有する系のエネルギーに対応する。また各状態の出現する確率に温度の概念を導入し、ある任意の温度においてはエネルギーが小さいほど状態の出現確率が高く、温度が低くなるほど異なる２つのエネルギー間の出現確率の比が大きくなるような確率分布を考える。当該確率分布を実現するように各状態を発生させながら状態を徐々に変化させ、充分に遅い速度で温度を低くしていくことにより、最小のエネルギー値を有する最適解に状態が収束することが期待できる。【０００４】
現在の状態のエネルギーから次の状態のエネルギーへの変化をΔＥとしたとぎ、現在の状態から次の状態に遷移する確率Ｐは、ΔＥと温度とを変数とする関数値として計算できる。確率Ｐで状態を遷移させながら、充分に遅い速度で温度を低くしていくことにより、最小のエネルギー値を有する最適解に状態を収束させることができる。一般にアニール処理においては、確率Ｐで次の状態に遷移する動作を実現するために、一様乱数ｒ（０＜ｒ＜１）が用いられる。確率Ｐと一様乱数ｒとを比較した結果、Ｐ＞ｒであれば状態遷移させ、Ｐ≦ｒであれば状態遷移しないように、状態遷移を制御すればよい。【０００５】
真性乱数を回路により発生させることは困難であり、通常、線形帰還シフトレジスタやメルセンヌツイスタ等の疑似乱数生成器により、確定的な計算を実行して生成した疑似乱数が用いられる。このような疑似乱数では、初期値設定（シード）が決定すれば、その後に生成される乱数値のシーケンスはシードに応じた確定的なシーケンスとなる。従って、シードが互いに同一な２つの乱数値のシーケンスがあれば、これらは完全に同一の乱数値のシーケンスとなる。【０００６】
最適化装置においては、アニール処理のチューニング等の目的のために、アニール処理の途中経過を確認したいことがある。例えば、１０００回のイタレーション（１０００回の状態遷移）により状態が最適解に近い解に収束する問題に対し、１００イタレーション毎にスピン値及びエネルギー値等のパラメータを最適化装置から読み出すことを考える。この際、パラメータ読み出しのためには最適化装置によるアニール処理を一旦中断し、装置内部のレジスタからパラメータを外部に読み出すことになる。【０００７】
１０００回のイタレーション実行後に得られる最終結果に到る途中経過を知ることが目的なので、１０００回のイタレーションを連続して実行した場合と、１００イタレーションずつ断続的に実行した場合とで、最終結果及び途中経過が一致することが好ましい。しかしながら、従来の最適化装置においては、パラメータ読み出し等のアニール処理以外の最適化装置の動作時にも、乱数生成器は動作を続けて乱数を発生し続けている。即ち、アニール処理の実行及び中断とは独立して、乱数生成器による乱数生成動作が実行されている。その結果、１０００回のイタレーションを連続して実行した場合と、１００イタレーションずつ断続的に実行した場合とで、アニール処理に使用される乱数値のシーケンスが異なることになり、最終結果及び途中経過が異なってしまうという不都合が生じていた。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−１４１３２３号公報
【特許文献２】特開平７−２４９０２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
以上を鑑みると、最適化装置においてアニール処理の断続的実行時に乱数生成器に適切な乱数を生成させることが望まれる。
【課題を解決するための手段】
【００１０】
最適化装置は、初期化動作を実行後に一連の乱数を生成する第１動作モードと前記初期化動作無しで一連の乱数を生成する第２動作モードとのいずれかで動作する乱数生成器と、前記乱数生成器が生成する乱数を利用してアニール処理を実行するアニール計算部と、前記アニール計算部が前記アニール処理を開始する際には前記第１動作モードで前記乱数生成器を動作開始させ、前記アニール計算部が前記アニール処理を中断する際には前記乱数生成器を動作停止させ、前記アニール計算部が前記アニール処理を再開する際には前記第２動作モードで前記乱数生成器を動作再開させる動作指示部とを含む。
【発明の効果】
【００１１】
少なくとも１つの実施例によれば、最適化装置においてアニール処理の断続的実行時に乱数生成器に適切な乱数を生成させることができる。
【図面の簡単な説明】
【００１２】
【図１】最適化装置の構成の一例を示す図である。
【図２】乱数生成＆初期値設定部が内蔵する乱数生成器の構成の一例を示す図である。
【図３】乱数生成＆初期値設定部が内蔵する乱数生成器の構成の別の一例を示す図である。
【図４】アニール処理のイタレーションを連続的に実行した場合におけるアニール処理と乱数生成処理とのステップ数の同期関係を示す図である。
【図５】アニール処理を一旦中断して再開する場合におけるアニール処理と乱数生成処理とのステップ数の同期関係を示す図である。
【図６】図１に示す最適化装置の動作の一例を示すフローチャートである。
【図７】最適化装置のより詳細な構成の一例を示す図である。
【図８】図７に示す最適化装置の動作の一例を示すフローチャートである。
【図９】通常動作モードにおける図７に示す最適化装置の動作状態の遷移を示す状態遷移図である。
【図１０】継続動作モードにおける図７に示す最適化装置の動作状態の遷移を示す状態遷移図である。
【発明を実施するための形態】
【００１３】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１４】
図１は、最適化装置の構成の一例を示す図である。図１及び以下の同様の図において、各ボックスで示される各回路又は機能ブロックと他の回路又は機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各回路又は機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。
【００１５】
図１に示される最適化装置は、制御部１０と焼鈍部２０とを含む。制御部１０は、動作指示部１１、初期値送信部１２、及び制御データ保持部１３を含む。焼鈍部２０は、乱数生成＆初期値設定部２１とアニール計算部２２とを含む。
【００１６】
焼鈍部２０のアニール計算部２２は、内部レジスタに保持される状態を変化させていくことにより、アニール処理を実行する。アニール計算部２２は、各状態のエネルギーとして各状態に応じた評価関数値を計算し、現在の温度と評価関数値とに基づいて、現在の状態から次の状態への遷移を制御する。
【００１７】
具体的には、アニール計算部２２は、現在の状態Ｓの評価関数値Ｅを計算すると共に、現在の状態Ｓから僅かに変化した次の状態の候補である状態Ｓ'に対する評価関数値Ｅ'を計算し、更に両者の差分ΔＥ（＝Ｅ'−Ｅ）を計算する。状態Ｓの確率分布として例えばボルツマン分布を想定し、メトロポリス法を用いる場合、次の状態Ｓ'に遷移する確率Ｐを以下の式で定めることができる。
Ｐ＝ｍｉｎ［１，ｅｘｐ（−βΔＥ）］              （１）
ここでβは逆温度（絶対温度Ｔの逆数）であり、β＝１／Ｔである。関数ｍｉｎ［１，ｘ］は値１と値ｘとのいずれか小さい方の関数値を有する。上式によれば、ΔＥ≦０のときに確率１で次の状態に遷移し、０＜ΔＥのときに確率Ｐ（＝ｅｘｐ（−βΔＥ））で次の状態に遷移する。なおメトロポリス法は限定的でない一例であり、例えばギブス・サンプリング法等の他の遷移制御アルゴリズムを用いてもよい。
【００１８】
上記の評価関数の形式は特定の形式に限定されないが、例えばイジングモデルに基づく以下のエネルギー関数であってよい。
Ｅ（Ｓ）＝−ΣΣＷｉｊｘｉｘｊ−Σｂｉｘｉ                      （２）
ここでΣは添字ｉ又はｊに対する１からＭ（Ｍ：正の整数）までの総和であり、状態Ｓは以下のようにＭ個のスピンを有する状態である。
Ｓｉ＝（ｘ１，ｘ２，・・・，ｘＭ）                              （３）
各スピンは−１又は＋１の値をとる。Ｗｉｊはスピン間の結合の重み係数であり、Ｗｊｊ＝０であってよい。またｂｉはバイアスである。
【００１９】
式（１）の確率Ｐ及び式（２）の評価関数Ｅは一例であり、アニール処理に用いる確率及び評価関数はこれらの確率及び評価関数に限定されない。また焼鈍部２０では、１つのアニール計算部２２により１つの系の状態遷移を計算するのではなく、複数のアニール計算部２２により複数の系の状態遷移を並列に計算してもよい。
【００２０】
アニール計算部２２が実行するアニール処理においては、確率Ｐで次の状態に遷移する動作を実現するために、乱数生成＆初期値設定部２１が生成する一様乱数ｒ（０＜ｒ＜１）を利用する。確率Ｐと一様乱数ｒとを比較した結果、Ｐ＞ｒであれば状態遷移させ、Ｐ≦ｒであれば状態遷移しないように、状態遷移を制御すればよい。例えば、上記式（３）におけるスピンｘｉ（ｉ＝１〜Ｍ）の各々についての反転確率Ｐｉとして、当該１つのスピンを反転させたときの上記式（１）の確率Ｐを計算し、Ｐｉ＞ｒであればスピン反転可とし、Ｐｉ≦ｒであればスピン反転不可と判定してよい。この場合、スピン反転可であると判定されたスピンのうちの１つをランダムに選択し、当該スピンを反転させることにより、状態を遷移させてよい。
【００２１】
アニール計算部２２が確率Ｐと一様乱数ｒとを比較する演算を一回実行する度に、当該一様乱数ｒとして、乱数生成＆初期値設定部２１が新たに生成した乱数値を用いてよい。乱数生成＆初期値設定部２１は、アニール処理の進行と同期して一連の乱数を生成すると共に、アニール処理の開始時には、状態Ｓの初期値（各スピンの初期値）、スピン間の結合の重み係数Ｗｉｊ及バイアスｂｉ、及び温度値等をアニール計算部２２に設定してよい。
【００２２】
制御部１０は、焼鈍部２０の動作を制御する。制御部１０の初期値送信部１２は、外部から設定された初期パラメータ（状態Ｓの初期値、スピン間の結合の重み係数Ｗｉｊ及バイアスｂｉ、及び温度値等）を、焼鈍部２０の乱数生成＆初期値設定部２１に送信する。制御部１０の制御データ保持部１３は、外部から設定された制御データ（イタレーション回数及び動作モード識別データ）を保持する。制御部１０の動作指示部１１は、制御データ保持部１３に保持される制御データに応じて、乱数生成＆初期値設定部２１の乱数生成動作とアニール計算部２２のアニール処理とを制御する。
【００２３】
乱数生成＆初期値設定部２１における乱数を生成する部分（乱数生成器）は、初期化動作を実行後に一連の乱数を生成する第１動作モードと、前記初期化動作無しで一連の乱数を生成する第２動作モードとのいずれかで動作する。一般に乱数生成器では、一連の乱数を生成する動作を実行する前に、シード値設定やメモリ領域初期化等の初期化動作を実行する。上記の第１動作モードでは、この初期化動作を実行してから、その後、一連の乱数を生成する動作が実行される。また第２動作モードでは、初期化動作を実行することなく、その時点での内部レジスタやメモリ等の状態に基づいて、一連の乱数を生成する動作が実行される。従って、一旦乱数生成動作を中断してその後乱数生成動作を再開する際に第２動作モードを使用すれば、中断無く継続して乱数生成動作を実行していた場合と同一の乱数値のシーケンスを生成することが可能となる。
【００２４】
なおアニール計算部２２がアニール処理を中断する際に、乱数生成器は動作を中断すると共に中断時の内部状態をそのまま保持し、アニール計算部２２がアニール処理を再開する際に、乱数生成器は初期化動作無しで中断時の内部状態から動作を再開してよい。これにより、中断無く継続して乱数生成動作を実行していた場合と同一の乱数値のシーケンスを確実に生成することができる。
【００２５】
以下の説明においては、説明を分かりやすくするために第１動作モードを通常動作モードと称し、第２動作モードを継続動作モードと称する。
【００２６】
いずれの動作モードで乱数生成器を動作させるかは、動作指示部１１が制御データ保持部１３からの制御データに基づいて決定する。動作指示部１１は、アニール計算部２２にアニール処理を初期状態から実行させる際には、通常動作モードで乱数生成器を動作開始させる。乱数生成部を通常動作モードで動作させるためには、例えば、ユーザが、最適化装置の外部から明示的に通常動作モードを指定するデータを制御データ保持部１３に設定しておけばよい。或いは例えば、特定のアニール処理で既に実行したイタレーション回数を記録しておき、当該アニール処理の開始又は再開時に当該回数が０である場合には通常動作モードで乱数生成器を動作させるような制御を行ってもよい。
【００２７】
動作指示部１１は更に、アニール計算部２２が所定のイタレーション回数を実行終了してアニール処理を中断する際には、乱数生成器の動作を停止させる。ここでイタレーションの回数とは、アニール計算部２２が実行する状態遷移の回数である。
【００２８】
動作指示部１１は更に、アニール計算部２２にアニール処理を再開させる際には、継続動作モードで乱数生成器を動作再開させる。乱数生成部を継続動作モードで動作させるためには、例えば、ユーザが、最適化装置の外部から明示的に継続動作モードを指定するデータを、アニール処理再開時に制御データ保持部１３に設定すればよい。或いは例えば、特定のアニール処理で既に実行したイタレーション回数を記録しておき、当該アニール処理の開始又は再開時に当該回数が０でない場合には継続動作モードで乱数生成器を動作させるような制御を行ってもよい。
【００２９】
図２は、乱数生成＆初期値設定部２１が内蔵する乱数生成器の構成の一例を示す図である。図２に示す乱数生成器は線形帰還シフトレジスタであり、１６個のフリップフロップ３０−１乃至３０−１６、１６個のセレクタ３１、及びＸＯＲ回路３２乃至３４を含む。
【００３０】
フリップフロップ３０−１乃至３０−１６はデータ出力Ｑがデータ入力Ｄに接続されるように縦続接続されることにより、クロック信号ＣＬＫに同期して動作するシフトレジスタを形成している。ＸＯＲ回路３２乃至３４は、シフトレジスタの１１番目、１３番目、１４番目、及び１６番目のフリップフロップのデータ出力Ｑの排他的論理和を計算し、計算結果をシフトレジスタの１番目のフリップフロップ３０−１に帰還入力として印加している。この帰還入力により、線形帰還シフトレジスタが形成される。
【００３１】
セレクタ３１は、フリップフロップ３０−１乃至３０−１６の各々に対応して設けられ、シフト動作時の入力と初期設定時のシード値ＳＥＥＤ（１６ビット）とのいずれかを選択する。セレクタ３１が選択した値が、クロック信号ＣＬＫに同期して、フリップフロップ３０−１乃至３０−１６に取り込まれる。初期化動作時には、初期化信号ＩＮＩＳＥＴが例えば１に設定される。これに応じて、１６個のセレクタ３１がシード値ＳＥＥＤの１６個のビットをそれぞれ選択し、シード値入力ＳＥＥＤの１６個のビットが１６個のフリップフロップ３０−１乃至３０−１６にそれぞれ格納される。シフト動作時には、初期化信号ＩＮＩＳＥＴが例えば０に設定される。これに応じて、セレクタ３１がシフト動作入力（前段のフリップフロップの出力又は帰還入力）を選択し、選択された値がフリップフロップ３０−１乃至３０−１６に取り込まれる。
【００３２】
初期化動作によりシード値を設定後、クロック信号ＣＬＫに同期してシフト動作を順次実行させることにより、線形帰還シフトレジスタにより一連の疑似乱数を生成することができる。一様乱数ｒとしてＮビットの乱数を出力するのであれば、順次出力されるＸＯＲ回路３２の出力をＮ個纏めることにより、一様乱数ｒとしてよい。また或いは、フリップフロップ３０−１乃至３０−１６のうちの所定の複数のフリップフロップのデータ出力ＱのＸＯＲを演算するＸＯＲ回路を設け、順次出力される当該ＸＯＲ回路の出力をＮ個纏めることにより、一様乱数ｒとしてよい。
【００３３】
前述の通常動作モード時には、初期化信号ＩＮＩＳＥＴを例えば１に設定し、クロック信号ＣＬＫに同期してシード値ＳＥＥＤをフリップフロップ３０−１乃至３０−１６に設定することにより、初期化動作を実行してよい。初期化動作の実行後、初期化信号ＩＮＩＳＥＴを例えば０に設定し、クロック信号ＣＬＫに同期してシフト動作を順次実行することにより、一連の乱数を発生してよい。
【００３４】
乱数生成動作を中断する際には、クロック信号ＣＬＫのパルスの供給を停止し、フリップフロップ３０−１乃至３０−１６に格納されるビット値をそのまま保持すればよい。初期化信号ＩＮＩＳＥＴは０に設定した状態をそのまま維持すればよい。
【００３５】
前述の継続動作モード時には、初期化信号ＩＮＩＳＥＴを０に設定した状態のままクロック信号ＣＬＫのパルスの供給を再開し、クロック信号ＣＬＫに同期してシフト動作を順次実行することにより、一連の乱数を発生してよい。即ち、中断時に格納されていたフリップフロップ３０−１乃至３０−１６の格納値から継続してシフト動作を順次実行することにより、一連の乱数を発生してよい。
【００３６】
乱数生成器として図２に示すような線形帰還シフトレジスタを用いることにより、単純で小規模の回路構成により、疑似乱数を生成することができる。図２に示す線形帰還シフトレジスタの場合、疑似乱数の周期は６５５３５である。
【００３７】
図３は、乱数生成＆初期値設定部２１が内蔵する乱数生成器の構成の別の一例を示す図である。図３に示す乱数生成器はメルセンヌツイスタであり、初期化ブロック４０、メモリ回路４１、セレクタ回路４２、組み合わせ論理回路４３、アドレスカウンタ４４、及びフリップフロップ４５を含む。
【００３８】
メモリ回路４１において、１番地から６２４番地までの各番地に１ワード（３２ビット）のデータが格納される。初期化動作時には、初期化信号ＩＮＩＳＥＴを例えば１に設定することにより、セレクタ回路４２が初期化ブロック４０の出力値を選択する状態となる。初期化ブロック４０は、シード値ＳＥＥＤに基づいて乗算、加算、及びシフト演算を含む所定の演算を実行することにより、メモリ回路４１の各番地に格納すべき値を計算して出力する。初期化ブロック４０が計算した出力値は、初期化動作の第１サイクルから第６２４サイクルにおいて、メモリ回路４１の１番地から６２４番地までの各番地にセレクタ回路４２を介して順次格納される。この際、アドレスカウンタ４４が示すアドレス値は、クロック信号ＣＬＫに同期して１から６２４まで順次増加する。初期化動作の第１サイクルにおいて、初期化ブロック４０は、シード値ＳＥＥＤに対する所定の演算により出力値を計算する。初期化ブロック４０が計算した出力値は、メモリ回路４１に格納されると共にフリップフロップ４５にも格納される。第２サイクルから第６２４サイクルにおいては、初期化ブロック４０は、フリップフロップ４５の格納値に対する所定の演算により出力値を計算する。
【００３９】
上記の処理後に更なる初期化動作として、初期化信号ＩＮＩＳＥＴを例えば０に設定することにより、セレクタ回路４２が組み合わせ論理回路４３の出力値を選択する状態とし、メモリ回路４１の各番地の値に対して組み合わせ論理回路４３による演算を施してよい。具体的には、アドレスカウンタ４４の指定するアドレス値に応じてメモリ回路４１から格納値を読み出し、組み合わせ論理回路４３によりシフト、ＥＸＯＲ、乗算、及び加算を含む演算を行い、演算結果をメモリ回路４１に書き戻してよい。以上で初期化動作を完了する。
【００４０】
初期化動作後の乱数生成動作時には、初期化信号ＩＮＩＳＥＴを例えば０に設定することにより、セレクタ回路４２が組み合わせ論理回路４３の出力値を選択する状態とする。クロック信号ＣＬＫに同期してアドレスカウンタ４４がアドレスを出力すると、このアドレスに応じてメモリ回路４１から格納値が読み出される。当該読み出し値を入力としてＡＮＤ、ＯＲ、シフト、及びＸＯＲ等を含む所定の演算を実行することにより組み合わせ論理回路４３が計算した値は、セレクタ回路４２を介して、メモリ回路４１におけるアドレスカウンタ４４が示すアドレスに格納される。６２４ｎ＋１回目（ｎ：０以上の整数）の乱数生成においては、このようにしてメモリ回路４１における１番地から６２４番地の各番地の格納値を更新する処理を実行する。その後、アドレスカウンタ４４が１から６２４まで順次増加するアドレスを出力し、メモリ回路４１の当該アドレスから格納値が読み出され、この読み出し値に対してシフト、ＡＮＤ、及びＸＯＲを含む所定の演算を実行することにより、乱数値が生成される。これにより、６２４ｎ＋ｍ回目（ｍ：１〜６２４の整数）の乱数生成が行われる。その後は上記の処理を繰り返す。
【００４１】
前述の通常動作モード時には、初期化信号ＩＮＩＳＥＴを例えば１に設定し、クロック信号ＣＬＫに同期して初期設定値をメモリ回路４１の１番地から６２４番地の各番地に格納することにより、初期化動作を実行してよい。初期化動作の実行後、初期化信号ＩＮＩＳＥＴを例えば０に設定し、クロック信号ＣＬＫに同期してメモリ回路４１からの読み出し処理及び組み合わせ論理回路４３による演算処理を順次実行することにより、一連の乱数を発生してよい。
【００４２】
乱数生成動作を中断する際には、クロック信号ＣＬＫのパルスの供給を停止し、メモリ回路４１に格納される格納値をそのまま保持すればよい。またアドレスカウンタ４４の内部状態（即ち出力アドレス値）もそのまま維持すればよい。更に、初期化信号ＩＮＩＳＥＴは０に設定した状態をそのまま維持すればよい。
【００４３】
前述の継続動作モード時には、初期化信号ＩＮＩＳＥＴを０に設定した状態のままクロック信号ＣＬＫのパルスの供給を再開し、クロック信号ＣＬＫに同期してメモリ回路４１からの読み出し処理及び演算処理を順次実行することにより、一連の乱数を発生してよい。即ち、中断時に維持されたメモリ回路４１の格納値及びアドレスカウンタ４４の出力アドレス値から継続してメモリ回路４１からの読み出し処理及び演算処理を順次実行することにより、一連の乱数を発生してよい。
【００４４】
乱数生成器として図３に示すようなメルセンヌツイスタを用いることにより、高品質な疑似乱数を生成することができる。図３に示すメルセンヌツイスタの場合、疑似乱数の周期は２１９３３７−１という非常に長い周期となる。
【００４５】
図４は、アニール処理のイタレーションを連続的に実行した場合におけるアニール処理と乱数生成処理とのステップ数の同期関係を示す図である。図４に示すように、アニール処理のイタレーションを例えば１回目から２００回目まで連続して実行した場合、アニール処理のイタレーション数（図４に示すステップ数）が増加するのに同期して、乱数生成処理のステップ数が増加していく。なおここで乱数生成処理のステップ数とは、アニール処理の一回のイタレーションで使用する個数の乱数を生成する乱数生成処理を１ステップとして計数した数のことである。
【００４６】
図５は、アニール処理を一旦中断して再開する場合におけるアニール処理と乱数生成処理とのステップ数の同期関係を示す図である。図５に示すように、アニール処理のイタレーションを１００回目まで実行してから中断した場合、アニール処理のステップ数が１から１００まで順に増加してから中断するのに同期して、乱数生成処理のステップ数も１から１００まで順に増加してから中断する。中断後、例えば５００クロックサイクルかけてアニール計算部２２の内部レジスタの値を外部に読み出し、その後、１０１回目のイタレーションからアニール処理を再開する。アニール処理のステップ数が１０１から２００まで順に増加してから終了するのに同期して、乱数生成処理のステップ数も１から１００まで順に増加してから終了する。
【００４７】
なお本開示の最適化装置において、アニール処理と乱数生成処理とが同期して動作開始、中断、再開する際の「同期」した動作とは、必ずしも最適化装置全体で使用される共通のクロックに同期した動作である必要はない。例えば、「同期して動作中断」という場合、共通のクロックの同一のサイクルにおいてアニール処理と乱数生成処理とが動作を停止する必要はない。「同期」した動作とは、乱数生成処理により生成された乱数とアニール処理で用いる乱数とが一対一に対応が取れている状態を保持できる動作であればよい。即ち、中断前後において、アニール処理に使用されない余分の乱数を乱数生成処理が生成したり、乱数生成処理が生成した１つの乱数をアニール処理で誤って２回重複して使用したり、といった一対一の対応関係が崩れることがない状態であればよい。
【００４８】
即ち、アニール計算部がアニール処理を中断して再開する前後において、乱数生成器が生成する複数の乱数とアニール計算部が利用する複数の乱数とは、過不足なく一対一に対応していればよい。これにより、クロックパルス単位での同期を確立しなくとも、ステップ単位或いは乱数単位での同期を確立することにより、連続実行時と断続実行時とで同一のアニール処理の結果を生成するという目的を、より容易に達成することができる。
【００４９】
図１に示される最適化装置では、乱数生成処理について前述の通常動作モードと継続動作モードとを用意して適宜使い分けることができる。その結果、図５に示されるようにアニール処理と乱数生成処理とを中断の前後で同期させた場合、図４に示されるようにアニール処理を連続実行した場合と同一の乱数値のシーケンスを生成することが可能となる。従って、アニール処理を連続的に実行した場合とアニール処理を断続的に実行した場合とで、アニール計算部による最終計算結果及び途中経過を完全に一致させることができる。
【００５０】
図６は、図１に示す最適化装置の動作の一例を示すフローチャートである。この動作例では、ユーザが適宜動作モードを指定する場合における最適化装置の動作を示している。
【００５１】
図６及び以降の図において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、Ａステップの次にＢステップを実行することが可能なだけでなく、Ｂステップの次にＡステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Ｂステップの次にＡステップが実行されてもよいことは自明である。Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
【００５２】
ステップＳ１で、最適化装置のユーザが動作モードを選択する。最適化装置においてアニール処理動作を最初に開始させる場合には、ユーザは通常動作モードを選択し、最適化装置の制御データ保持部１３に通常動作モードを示すデータを設定する。
【００５３】
ステップＳ２で、最適化装置が動作を開始すると、動作指示部１１は制御データ保持部１３に格納された動作モードを示すデータを参照し、設定動作モードが継続動作モードであるか否かを判定する。設定動作モードが継続動作モードでないと判定された場合、処理はステップＳ３に進む。
【００５４】
ステップＳ３で、動作指示部１１は通常動作モードでの乱数生成の開始を乱数生成＆初期値設定部２１に指示する。この指示に応答して、乱数生成＆初期値設定部２１の乱数生成部は、まず最初に初期化動作を実行する。ステップＳ４で、乱数生成部は、初期化動作が完了したか否かを判定する。初期化動作が完了するまで、ステップＳ４の判定動作が繰り返される。初期化動作が完了すると処理はステップＳ５に進み、動作指示部１１がアニール計算部２２にアニール処理の開始を指示し、アニール計算部２２がアニール処理を開始すると共に、乱数生成部がアニール処理に使用される一連の乱数を生成する。
【００５５】
ステップＳ２で設定動作モードが継続動作モードであると判定された場合、処理はステップＳ６に進む。ステップＳ６では、動作指示部１１がアニール計算部２２にアニール処理の実行を指示すると共に、乱数生成＆初期値設定部２１に乱数生成を指示する。これらの指示に応答して、アニール計算部２２がアニール処理を再開すると共に、乱数生成＆初期値設定部２１の乱数生成部がアニール処理に使用される一連の乱数を生成する。ここでアニール計算部２２によるアニール処理と乱数生成部による乱数生成処理とは互いに同期して進行するように制御される。
【００５６】
ステップＳ７で、アニール計算部２２は終了条件を満たすまでアニール処理を実行する。ここで終了条件としては、制御データ保持部１３に格納されているイタレーション回数であってよい。終了条件が満たされると、アニール計算部２２によるアニール処理を停止すると共に、アニール処理の停止と同期して、乱数生成＆初期値設定部２１の乱数生成部による乱数生成処理を停止する。
【００５７】
ステップＳ６及びステップＳ７における同期制御は、アニール計算部２２と乱数生成＆初期値設定部２１との間の通信により実現されてもよいし、或いは動作指示部１１からの指示（例えば一回ずつイタレーションを指示）することにより実現されてもよい。或いは乱数生成部が、所定のイタレーション回数を予め動作指示部１１から通知されており、当該回数に対応する所定数の乱数を生成した後に乱数生成動作を停止してもよい。同期制御の形態については特に限定されない。
【００５８】
ステップＳ８で、アニール計算部２２及び乱数生成＆初期値設定部２１は、それぞれの動作停止状態における内部状態をそのまま保持する。アニール計算部２２では、現在の状態の各スピンの値、結合係数値、温度、評価関数値等の内部レジスタに格納される全ての値をそのまま保持すればよい。或いはアニール計算部２２の内部レジスタの値を乱数生成＆初期値設定部２１に一旦待避し、乱数生成＆初期値設定部２１内部のレジスタにアニール処理に係るパラメータを保持するようにしてもよい。乱数生成＆初期値設定部２１の乱数生成部では、乱数生成に係る内部状態（線形帰還シフトレジスタの各フリップフロップの格納値やメルセンヌツイスタのメモリ回路の格納値等）をそのまま保持すればよい。
【００５９】
ステップＳ９で、アニール計算部２２の演算結果、即ち内部レジスタに格納されるパラメータ値（現在の状態の各スピンの値及び評価関数値等）を外部に出力する。この外部に出力された演算結果に基づいて、ユーザは、アニール処理を継続するか否かを決定する。アニール処理を継続する場合、ユーザは、最適化装置の制御データ保持部１３に継続動作モードを示すデータを設定する。
【００６０】
ステップＳ１０で、動作指示部１１は設定動作モードが変更されたか否かを判定し、通常動作モードのままで変更されていない場合にはそのまま処理を終了する。設定動作モードを継続動作モードに変更した場合、ステップＳ１１で、ユーザは、継続動作モードでのアニール処理の再実行を最適化装置に指示する。その後、処理はステップＳ２に戻り以降の処理を繰り返す。
【００６１】
図７は、最適化装置のより詳細な構成の一例を示す図である。図７に示す最適化装置は、制御部１０と焼鈍部２０とを含む。
【００６２】
制御部１０は、動作指示部１１、初期値送信部１２、制御データ保持部１３、及びシード保持部１４を含む。動作指示部１１は、アニール初期値指示部５１、乱数生成動作指示部５２、及びアニール処理指示部５３を含む。制御データ保持部１３は、イタレーション数保持部５４と動作モード記憶部５５とを含む。
【００６３】
焼鈍部２０は、乱数生成＆初期値設定部２１とアニール計算部２２とを含む。乱数生成＆初期値設定部２１は、乱数生成部６０、入力選択部６４、及び初期値保持部６５を含む。乱数生成部６０は、動作制御部６１、生成部６２、及びレジスタ６３を含む。アニール計算部２２は、演算部７１とレジスタ７２とを含む。
【００６４】
動作指示部１１の乱数生成動作指示部５２は、動作モード記憶部５５からの設定動作モードを指定するデータに基づいて、通常動作モード又は継続動作モードのいずれかの指定された動作モードで乱数生成部６０を動作させる。アニール処理指示部５３がアニール計算部２２にアニール処理を初期状態から実行させる際には、乱数生成動作指示部５２は通常動作モードで乱数生成器を動作させることになる。具体的には、動作制御部６１の制御下において、生成部６２が、シード保持部１４からのシード値に基づいて初期化動作を実行し、その後一連の乱数を生成する動作を実行する。生成部６２により生成された乱数値は、レジスタ６３に順次格納される。
【００６５】
アニール初期値指示部５１は、動作モード記憶部５５が通常動作モードを指定している場合、即ちアニール処理が初期状態から実行される場合、初期値送信部１２から供給される初期パラメータを入力選択部６４に選択させる。これにより入力選択部６４は、初期値送信部１２からの初期パラメータを出力し、当該初期パラメータが初期値保持部６５に格納される。
【００６６】
アニール処理指示部５３は、イタレーション数保持部５４からのイタレーション回数を指定するデータに基づいて、指定されたイタレーション回数のアニール処理をアニール計算部２２に実行させる。具体的には、レジスタ７２に初期値保持部６５からの初期パラメータを格納した後、演算部７１が、乱数生成部６０のレジスタ６３から供給される乱数値を用いて状態遷移を制御しながら、アニール処理のイタレーションを進行させていく。アニール処理の進行に応じてレジスタ７２に格納されるパラメータは更新されていく。アニール計算部２２が所定のイタレーション回数を実行終了してアニール処理を中断する際には、アニール処理の中断と同期して、乱数生成動作指示部５２が乱数生成部６０の動作を停止させる。この中断後に、レジスタ７２に格納される現在状態のパラメータ値を最適化装置の外部に読み出してよい。
【００６７】
アニール処理中断後にアニール処理指示部５３がアニール計算部２２にアニール処理を再開させる際には、動作モード記憶部５５には継続動作モードが設定されていてよい。アニール処理再開時に、乱数生成動作指示部５２は、動作モード記憶部５５からの継続動作モードを指定するデータに基づいて、継続動作モードで乱数生成部６０を動作させる。具体的には、動作制御部６１の制御下において、生成部６２が、初期化動作を実行することなく、現在の内部状態から一連の乱数を生成する動作を再開する。生成部６２により生成された乱数値は、レジスタ６３に順次格納される。
【００６８】
アニール初期値指示部５１は、動作モード記憶部５５が継続動作モードを指定している場合、即ちアニール処理が中断状態から再開される場合、アニール計算部２２のレジスタ７２から供給される中断状態でのパラメータを入力選択部６４に選択させる。これにより入力選択部６４は、レジスタ７２からの中断状態でのパラメータを出力し、当該パラメータが初期値保持部６５に格納される。
【００６９】
中断後の再開時においても初期状態からの開始時と同様に、アニール処理指示部５３は、イタレーション数保持部５４からのイタレーション回数を指定するデータに基づいて、指定されたイタレーション回数のアニール処理をアニール計算部２２に実行させる。具体的には、レジスタ７２に初期値保持部６５からのパラメータを格納した後、演算部７１が、乱数生成部６０のレジスタ６３から供給される乱数値を用いて状態遷移を制御しながら、アニール処理のイタレーションを進行させていく。アニール処理の進行に応じてレジスタ７２に格納されるパラメータは更新されていく。
【００７０】
図８は、図７に示す最適化装置の動作の一例を示すフローチャートである。
【００７１】
ステップＳ２１で、ユーザは通常動作モードを指定して最適化装置にアニール処理の開始を指示する。この際、ユーザは、初期パラメータを初期値送信部１２に設定すると共に、イタレーション回数と通常動作モードとを制御データ保持部１３に設定する。
【００７２】
ステップＳ２２で、制御部１０の初期値送信部１２から送信された初期パラメータが、焼鈍部２０の入力選択部６４を介して初期値保持部６５に格納される。ステップＳ２３で、制御部１０の乱数生成動作指示部５２が乱数生成部６０に初期化動作の実行を指示し、これに応答して乱数生成部６０が初期化動作を実行する。
【００７３】
ステップＳ２４で、アニール計算部２２がアニール処理を実行する。具体的には、制御部１０のアニール処理指示部５３が、アニール計算部２２にアニール処理の開始を指示する。この指示に応じて、アニール計算部２２は、初期値保持部６５からの初期パラメータを取り込んだ後、乱数生成部６０から供給される一連の乱数に基づいて状態遷移を制御しながらアニール処理を実行する。
【００７４】
ステップＳ２５で、アニール処理指示部５３又はアニール計算部２２が、所定のイタレーション回数だけ状態更新が実行されたか否かを判定する。所定のイタレーション回数に到達するまで、アニール計算部２２はアニール処理を実行する。所定のイタレーション回数に到達すると、処理はステップＳ２６に進む。
【００７５】
ステップＳ２６で、アニール計算部２２はアニール処理を終了し、それと同期して乱数生成部６０が乱数生成処理を一時停止する。この同期制御は、アニール計算部２２と乱数生成部６０との直接の通信により実現されてもよいし、アニール計算部２２の動作を制御及び監視する動作指示部１１が乱数生成部６０へ停止指示を発行することにより実現されてもよい。或いは、乱数生成部６０の動作制御部６１が、所定のイタレーション回数を予め乱数生成動作指示部５２から通知されており、当該回数に対応する所定数の乱数を生成した後に乱数生成動作を停止してもよい。同期制御の形態については特に限定されない。
【００７６】
ステップＳ２７で、アニール計算部２２のレジスタ７２から最適化装置の外部に計算結果を示すパラメータを出力する。ステップＳ２８で、ユーザは、当該出力された計算結果に基づいて、アニール処理の結果に満足するか否かを判断する。アニール処理の結果に満足する場合、処理を終了する。アニール処理の結果に満足しない場合、処理はステップＳ２９に進む。
【００７７】
ステップＳ２９で、ユーザは通常動作モード又は継続動作モードのいずれかを制御部１０の制御データ保持部１３に設定する。例えば初期パラメータを変更することにより今回のアニール処理とは異なる条件で次回のアニール処理を実行する場合には、通常動作モードを設定することになる。また今回のアニール処理を中断状態からそのまま再開する場合には、継続動作モードを設定することになる。
【００７８】
ステップＳ３０で、制御部１０の乱数生成動作指示部５２は、設定動作モードが継続動作モードであるのか否かを判定する。継続動作モードでない場合（即ち通常動作モードである場合）、処理はステップＳ２２に戻り、初期パラメータの設定をやり直してから、それ以降の処理を繰り返す。継続動作モードである場合、ステップＳ３１で、アニール処理指示部５３がアニール計算部２２にアニール処理開始（再開）を指示すると共に、乱数生成動作指示部５２が乱数生成部６０に乱数生成動作の再開（継続動作モードでの乱数生成）を指示する。これらの指示に応じて、アニール計算部２２によるアニール処理と乱数生成部６０による乱数生成動作とが同期して再開される。その後処理はステップＳ２４に進み、以降の処理が繰り返される。
【００７９】
具体的には、動作制御部６１の制御下において、生成部６２が、初期化動作を実行することなく、現在の内部状態から一連の乱数を生成する動作を再開する。生成部６２により生成された乱数値は、レジスタ６３に順次格納される。またレジスタ７２からの中断状態でのパラメータが入力選択部６４を介して初期値保持部６５に格納されているので、アニール計算部２２は、動作再開後まずレジスタ７２に初期値保持部６５からのパラメータを格納する。その後、演算部７１が、乱数生成部６０のレジスタ６３から供給される乱数値を用いて状態遷移を制御しながら、アニール処理のイタレーションを進行させていく。アニール処理の進行に応じてレジスタ７２に格納されるパラメータは更新されていく。
【００８０】
図９は、通常動作モードにおける図７に示す最適化装置の動作状態の遷移を示す状態遷移図である。電源オフ状態ＳＴ−１において最適化装置の電源がオンされると、最適化装置の動作状態は入力受付状態ＳＴ−２に推移する。入力受付状態ＳＴ−２は、初期パラメータ（状態の各スピン値、結合係数、温度等）、イタレーション回数、及び動作モード（通常動作モード又は継続動作モード）等の外部から設定される設定入力を、最適化装置が受け付ける状態である。入力受付状態ＳＴ−２は更に、動作開始指示等の指示入力を最適化装置が受け付ける状態でもある。
【００８１】
入力受付状態ＳＴ−２において動作開始指示を最適化装置が受け付けると、動作状態は初期化動作状態ＳＴ−３に推移する。初期化動作状態ＳＴ−３は、最適化装置において乱数生成部６０が初期化動作を実行する状態である。この初期化動作により、例えば線形帰還シフトレジスタの場合にはシフトレジスタの各フリップフロップにシード値を格納し、メルセンヌツイスタの場合にはメモリ回路の各番地に対する初期値設定を行う。初期化動作状態ＳＴ−３において規定のクロックサイクル数が経過して初期化動作が完了すると、最適化装置の動作状態はアニール状態ＳＴ−４に遷移する。
【００８２】
アニール状態ＳＴ−４は、最適化装置のアニール計算部２２がアニール処理を実行する状態であり、当該アニール処理に供するように乱数生成部６０が一連の乱数を生成する。図９に示す状態遷移は通常動作モードの場合であるので、アニール計算部２２は、初期値保持部６５からの初期パラメータを取り込んだ後、乱数生成部６０から供給される一連の乱数に基づいて状態遷移を制御しながらアニール処理を実行する。所定回数のイタレーションを実行完了すると、最適化装置の動作状態は入力受付状態ＳＴ−２に推移する。
【００８３】
図１０は、継続動作モードにおける図７に示す最適化装置の動作状態の遷移を示す状態遷移図である。継続動作モードの場合、入力受付状態ＳＴ−２において動作開始指示を最適化装置が受け付けると、動作状態はアニール状態ＳＴ−４に直接に推移する。図１０に示す状態遷移は継続動作モードの場合であるので、アニール計算部２２は、初期値保持部６５から中断状態でのパラメータを取り込んだ後、乱数生成部６０から供給される一連の乱数に基づいて状態遷移を制御しながらアニール処理を実行する。所定回数のイタレーションを実行完了すると、最適化装置の動作状態は入力受付状態ＳＴ−２に推移する。
【００８４】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００８５】
１０  制御部１０
１１  動作指示部
１２  初期値送信部
１３  制御データ保持部
１４  シード保持部
２０  焼鈍部
２１  乱数生成＆初期値設定部
２２  アニール計算部
５１  アニール初期値指示部
５２  乱数生成動作指示部
５３  アニール処理指示部
５４  イタレーション数保持部
５５  動作モード記憶部
６０  乱数生成部
６１  動作制御部
６２  生成部
６３  レジスタ
６４  入力選択部
６５  初期値保持部
７１  演算部
７２  レジスタ
【図１】
2020054021.tif 000003
【図２】
2020054021.tif 000004
【図３】
2020054021.tif 000005
【図４】
2020054021.tif 000006
【図５】
2020054021.tif 000007
【図６】
2020054021.tif 000008
【図７】
2020054021.tif 000009
【図８】
2020054021.tif 000010
【図９】
2020054021.tif 000011
【図１０】
2020054021.tif 000012
【国際調査報告】
2020054021.tif 000013
2020054021.tif 000014