(57)【要約】【課題】問題に応じたパーティションモードに設定された演算ユニットにより、組合せ最適化問題の演算を行うこと。【解決手段】最適化問題演算装置１０１は、複数の演算ユニット１０２それぞれの論理的な分割状態を規定するパーティションモードについての管理情報１１０と、複数の演算ユニット１０２の利用情報１２０とに基づき、複数の演算ユニット１０２それぞれのパーティションモードを決定する。最適化問題演算装置１０１は、組合せ最適化問題の規模または要求精度に関する情報と、決定した複数の演算ユニット１０２それぞれのパーティションモードに関する情報とに基づき、組合せ最適化問題を振り分ける演算ユニット１０２を決定する。最適化問題演算装置１０１は、決定した演算ユニット１０２で、当該演算ユニット１０２について決定したパーティションモードにより、組合せ最適化問題の演算を実行させる。【選択図】図１
2020046992.tif 000002
【特許請求の範囲】
【請求項１】
論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、
組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、
決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、
処理をコンピュータに実行させる最適化問題演算プログラム。
【請求項２】
前記管理情報は、前記複数の演算ユニットそれぞれの実行状況に応じて更新される、請求項１に記載の最適化問題演算プログラム。
【請求項３】
前記利用情報に基づき、利用する演算ユニットの増減有無を判定し、
判定した判定結果に応じて、利用する演算ユニットを増減させる、
処理を前記コンピュータに実行させる、請求項１または２に記載の最適化問題演算プログラム。
【請求項４】
前記増減させる処理は、
利用する演算ユニットを増加させた場合には、増加させた演算ユニットのパーティションモードを設定する、請求項３に記載の最適化問題演算プログラム。
【請求項５】
前記増減させる処理は、
増加させた演算ユニットに、あらかじめ決められたパーティションモードを設定する、請求項４に記載の最適化問題演算プログラム。
【請求項６】
前記利用情報は、前記複数の演算ユニットで演算が実行された組合せ最適化問題の実行履歴情報を含む、請求項１〜５のいずれか一つに記載の最適化問題演算プログラム。
【請求項７】
前記利用情報は、前記複数の演算ユニットの処理待ちキューに関する情報を含む、請求項１〜６のいずれか一つに記載の最適化問題演算プログラム。
【請求項８】
前記利用情報は、前記複数の演算ユニットの利用状況に関する情報を含む、請求項１〜７のいずれか一つに記載の最適化問題演算プログラム。
【請求項９】
論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、
組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、
決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、
処理をコンピュータが実行する最適化問題演算方法。
【請求項１０】
論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットと、
組合せ最適化問題を受け付ける受付部と、
前記複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての情報を保持する管理部と、
前記管理部が保持する情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定する第１の決定部と、
前記組合せ最適化問題の規模または要求精度に関する情報と、前記第１の決定部が決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定する第２の決定部と、
前記第２の決定部が決定した前記演算ユニットで、前記第１の決定部が当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる実行制御部と、
を有する最適化問題演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置に関する。
【背景技術】
【０００２】
ノイマン型コンピュータが不得意とする多変数の最適化問題を解く方法として、イジング型のエネルギー関数を用いた最適化装置（イジングマシンまたはボルツマンマシンと呼ばれる場合もある）がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
【０００３】
最適化装置は、例えば、ニューラルネットワークを用いてモデル化することもできる。その場合、イジングモデルに含まれる複数のスピンに対応した複数のビット（スピンビット）のそれぞれが、他のビットと自身のビットとの相互作用の大きさを示す重み係数（結合係数とも呼ばれる）に応じて０または１を出力するニューロンとして機能する。最適化装置は、例えば、シミュレーテッド・アニーリングなどの確率的探索法により、上記のようなエネルギー関数（コスト関数、目的関数とも呼ばれる）の値（エネルギーと言う）の最小値が得られる各ビットの値の組合せを、解として求める。
【０００４】
例えば、スピンに対応する単位素子を複数搭載する半導体チップを用いてイジングモデルの基底状態を探索する半導体システムの提案がある。提案の半導体システムは、大規模な問題に対応可能な半導体チップを実現するに際して、ある程度の数の単位素子が搭載された半導体チップを複数使用して半導体システムを構築する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１７／０３７９０３号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
最適化装置では、解くべき問題に応じて、利用されるスピンビット数（問題の規模に相当）や重み係数のビット数（問題における条件表現の精度に相当）が変わり得る。例えば、ある分野の問題では、スピンビット数が比較的多く用いられ、重み係数のビット数が比較的少なくてよいことがある。一方、他の分野の問題では、スピンビット数が比較的少なくてよいが、重み係数のビット数が比較的多く用いられることがある。しかし、各問題に適合したスピンビット数と重み係数のビット数とを備えた最適化装置を、問題ごとに個別に製造するのは非効率である。
【０００７】
一つの側面では、本発明は、問題に応じたパーティションモードに設定された演算ユニットにより、組合せ最適化問題の演算を行うことを目的とする。
【課題を解決するための手段】
【０００８】
１つの実施態様では、論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、組合せ最適化問題を受け付け、前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、最適化問題演算プログラムが提供される。
【発明の効果】
【０００９】
本発明の一側面によれば、問題に応じたパーティションモードに設定された演算ユニットにより、組合せ最適化問題の演算を行うことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態にかかる最適化問題演算方法の一実施例を示す説明図である。
【図２】図２は、演算ユニット１０２の一実施例を示す説明図である。
【図３】図３は、情報処理システム３００のシステム構成例を示す説明図である。
【図４】図４は、最適化問題演算装置１０１のハードウェア構成例を示すブロック図である。
【図５】図５は、情報処理システム３００におけるハードウェアの関係の一例を示す説明図である。
【図６】図６は、組合せ最適化問題の一例を示す説明図である。
【図７】図７は、最少エネルギーとなるバイナリ値の探索例を示す説明図である。
【図８】図８は、ＬＦＢの回路構成例を示す説明図である。
【図９】図９は、ランダムセレクタ部の回路構成例を示す説明図である。
【図１０】図１０は、規模と精度とのトレードオフ関係の例を示す説明図である。
【図１１】図１１は、重み係数の格納例を示す説明図（その１）である。
【図１２】図１２は、重み係数の格納例を示す説明図（その２）である。
【図１３】図１３は、重み係数の格納例を示す説明図（その３）である。
【図１４】図１４は、重み係数の格納例を示す説明図（その４）である。
【図１５】図１５は、最適化装置４０８（＄ｊ）の演算処理手順の一例を示すフローチャートである。
【図１６】図１６は、重み係数の格納例を示す説明図（その５）である。
【図１７】図１７は、モード設定テーブル１７００の記憶内容の一例を示す説明図である。
【図１８】図１８は、利用状況テーブル１８００の記憶内容の一例を示す説明図である。
【図１９】図１９は、最適化問題演算装置１０１の機能的構成例を示すブロック図である。
【図２０】図２０は、実行履歴情報のデータ構造の一例を示す説明図である。
【図２１】図２１は、モード設定テーブル１７００の更新例を示す説明図である。
【図２２】図２２は、利用状況テーブル１８００の記憶内容の変遷例を示す説明図である。
【図２３】図２３は、モード設定テーブル２３００の記憶内容の一例を示す説明図である。
【図２４】図２４は、振り分け先テーブル２４００の記憶内容の一例を示す説明図である。
【図２５】図２５は、モード設定テーブル２５００の記憶内容の一例を示す説明図である。
【図２６】図２６は、振り分け先テーブル２６００の記憶内容の一例を示す説明図である。
【図２７】図２７は、最適化問題演算装置１０１の最適化問題演算処理手順の一例を示すフローチャート（その１）である。
【図２８】図２８は、最適化問題演算装置１０１の最適化問題演算処理手順の一例を示すフローチャート（その２）である。
【図２９】図２９は、最適化問題演算装置１０１のモード決定処理手順の一例を示すフローチャートである。
【図３０】図３０は、最適化装置４０８（＄ｊ）の装置構成例を示す説明図である。
【図３１】図３１は、ＬＦＢの回路構成例を示す説明図である。
【図３２】図３２は、規模結合回路の回路構成例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に図面を参照して、本発明にかかる最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置の実施の形態を詳細に説明する。
【００１２】
（実施の形態）
図１は、実施の形態にかかる最適化問題演算方法の一実施例を示す説明図である。図１において、最適化問題演算装置１０１は、複数の演算ユニット１０２により、組合せ最適化問題の演算を行うコンピュータである。演算ユニット１０２は、組合せ最適化問題を解くデバイスである。
【００１３】
演算ユニット１０２は、論理的に複数のパーティションに分割可能である。パーティションに分割するとは、演算の際に利用されるハードウェアリソースの範囲を区切ることである。演算ユニット１０２では、それぞれのパーティションで独立して異なる問題を解くことができる。
【００１４】
例えば、演算ユニット１０２を８個のパーティションに分割すると、８人のユーザが同時に異なる問題を解くことが可能となる。演算ユニット１０２は、例えば、最適化問題演算装置１０１に接続して使用される別体の装置であってもよく、また、最適化問題演算装置１０１に内蔵された装置であってもよい。
【００１５】
最適化問題演算装置１０１は、演算ユニット１０２への設定により、演算ユニット１０２の論理的な分割状態を規定するパーティションモードを変更可能である。演算ユニット１０２をどのように分割するかによって、演算の際に利用可能なハードウェアリソースの範囲が変わり、各パーティションで解くことができる組合せ最適化問題の規模や精度が決まる。
【００１６】
なお、各演算ユニット１０２をどのように分割するか、すなわち、各演算ユニット１０２にどのようなパーティションモードを設定するかは、任意に設定可能である。
【００１７】
ここで、組合せ最適化問題を解く最適化装置（イジングマシン）では、異なる規模・要求精度の問題を解くことが求められる場合がある。しかし、従来の最適化装置では、単一のモードしか有しておらず（演算の際に利用するハードウェアリソースの範囲が固定）、問題の規模・要求精度に応じて最適な動作を行う構成ではない。
【００１８】
したがって、従来の最適化装置では、ハードウェアで解くことができる問題の最大規模や精度よりも、解くべき問題の規模や精度が小さい場合、ハードウェアが探索する範囲やＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送するメモリサイズが大きくなり、演算時間が増加してしまう。
【００１９】
例えば、ハードウェアで解くことができる問題の最大規模が「８１９２ｂｉｔ（８Ｋ）」のときに、「１０２４ｂｉｔ（１Ｋ）」の規模の問題を解く場合には、探索範囲が広がって無駄なＤＭＡ転送が行われるため、演算性能が劣化する。
【００２０】
このため、例えば、パーティションモードが異なる複数の演算ユニット１０２をあらかじめ用意し、複数の演算ユニット１０２それぞれのパーティションモードを把握した上で、問題の規模や要求精度に応じた演算ユニット１０２の選択を行うことが考えられる。
【００２１】
しかしながら、複数の演算ユニット１０２のパーティションモードの設定が適切でない場合は、特定の演算ユニット１０２のキュー（待ち行列）に処理（問題）が溜まったり、利用回数の少ない演算ユニット１０２が生じたりすることがあり、複数の演算ユニット１０２全体として最適な動作を行うことができない。
【００２２】
そこで、本実施の形態では、複数の演算ユニット１０２の利用状況に応じて、複数の演算ユニット１０２それぞれのパーティションモードを決定し、問題の規模や要求精度に応じたパーティションモードの演算ユニット１０２により、組合せ最適化問題の演算を行うことで、組合せ最適化問題を効率的に解く最適化問題演算方法について説明する。以下、最適化問題演算装置１０１の処理例について説明する。
【００２３】
（１）最適化問題演算装置１０１は、複数の演算ユニット１０２の管理情報１１０と、複数の演算ユニット１０２の利用情報１２０とに基づき、複数の演算ユニット１０２それぞれのパーティションモードを決定する。ここで、管理情報１１０は、複数の演算ユニット１０２それぞれの論理的な分割状態を規定するパーティションモードについての情報である。
【００２４】
利用情報１２０は、例えば、複数の演算ユニット１０２のいずれかの演算ユニット１０２で演算が実行された問題の実行履歴情報を含む。実行履歴情報は、問題と対応付けて、ハードウェア、問題の規模、要求精度、待ち時間、開始時刻、終了時刻などを示す。ハードウェアは、問題の振り分け先のハードウェア（演算ユニット１０２）を示す。待ち時間は、問題の演算を開始するまでの待ち時間を示す。開始時刻は、問題の演算を開始した時刻を示す。終了時刻は、問題の演算が終了した時刻を示す。
【００２５】
また、利用情報１２０は、例えば、複数の演算ユニット１０２の処理待ちキューに関する情報を含むことにしてもよい。処理待ちキューは、各演算ユニット１０２に対応して設けられるキュー（待ち行列）であり、各演算ユニット１０２に振り分けられた問題の情報が入力される。
【００２６】
具体的には、例えば、最適化問題演算装置１０１は、利用情報１２０に基づいて、複数の演算ユニット１０２それぞれの待ち時間を算出する。ここで、演算ユニット１０２の待ち時間は、演算ユニット１０２の負荷状況を示す指標値の一つである。演算ユニット１０２の待ち時間は、例えば、演算ユニット１０２に対応する処理待ちキューに溜まっている処理（問題）の待ち時間の合計によって表すことができる。処理の待ち時間は、他の処理の完了待ちで、待ち合わせている時間である。
【００２７】
また、最適化問題演算装置１０１は、利用情報１２０に基づいて、複数の演算ユニット１０２それぞれの利用率を算出する。ここで、演算ユニット１０２の利用率とは、演算ユニット１０２の利用状況を示す指標値の一つである。各演算ユニット１０２の利用率は、例えば、過去のある期間において、各演算ユニット１０２で問題の演算が行われた時間の割合によって表すことができる。各演算ユニット１０２で問題の演算が行われた時間は、例えば、利用情報１２０に含まれる実行履歴情報の開始時刻と終了時刻から特定される。
【００２８】
ここで、演算ユニット１０２の待ち時間が長いほど、その演算ユニット１０２に振り分けられた問題を解くまでに時間がかかる。また、ある演算ユニット１０２の待ち時間が長いということは、その演算ユニット１０２で解くべき問題の数が多い状況にあるといえる。一方で、演算ユニット１０２の利用率が低いほど、その演算ユニット１０２は利用されていない状態であるといえる。また、ある演算ユニット１０２の利用率が低いということは、その演算ユニット１０２で解くべき問題の数が少ない状況にあるといえる。
【００２９】
このため、最適化問題演算装置１０１は、例えば、待ち時間が長くなっている演算ユニット１０２のパーティションモードを特定し、利用率が低くなっている演算ユニット１０２のパーティションモードを、特定したパーティションモードに変更する。
【００３０】
より詳細に説明すると、例えば、最適化問題演算装置１０１は、利用情報１２０に基づいて、複数の演算ユニット１０２のうち、待ち時間があらかじめ設定された閾値以上の演算ユニット１０２を特定する。つぎに、最適化問題演算装置１０１は、管理情報１１０に基づいて、特定した演算ユニット１０２のパーティションモードを特定する。
【００３１】
また、最適化問題演算装置１０１は、利用情報１２０に基づいて、複数の演算ユニット１０２のうち、利用率があらかじめ設定された閾値以下の演算ユニット１０２を特定する。そして、最適化問題演算装置１０１は、特定した演算ユニット１０２のパーティションモードを、特定したパーティションモードに決定する。なお、複数の演算ユニット１０２のうち、利用率が閾値以下の演算ユニット１０２を除く残余の演算ユニット１０２については、現在のパーティションモードのままとする。
【００３２】
図１の例では、最適化問題演算装置１０１に接続された複数の演算ユニット１０２として、演算ユニット１０２（＄１）、演算ユニット１０２（＄２）および演算ユニット１０２（＄３）を想定する。なお、＄１〜＄３は、演算ユニット１０２を識別する識別子である。
【００３３】
演算ユニット１０２（＄１）には、パーティションモード（８Ｋ）が設定されている。パーティションモード（８Ｋ）は、演算ユニット１０２を論理的に１つのパーティションとした状態を規定するパーティションモードである。パーティションモード（８Ｋ）で解くことができる問題の最大規模は、「８１９２ｂｉｔ（８Ｋ）」である。
【００３４】
演算ユニット１０２（＄２）には、パーティションモード（４Ｋ）が設定されている。パーティションモード（４Ｋ）は、演算ユニット１０２を論理的に２つのパーティションに分割した状態を規定するパーティションモードである。パーティションモード（４Ｋ）で解くことができる問題の最大規模は、「４０９６ｂｉｔ（４Ｋ）」である。
【００３５】
演算ユニット１０２（＄３）には、パーティションモード（２Ｋ）が設定されている。パーティションモード（２Ｋ）は、演算ユニット１０２を論理的に４つのパーティションに分割した状態を規定するパーティションモードである。パーティションモード（２Ｋ）で解くことができる問題の最大規模は、「２０４８ｂｉｔ（２Ｋ）」である。
【００３６】
また、演算ユニット１０２（＄１）の待ち時間を「６００［秒］」とし、直近１時間の利用率を「９０［％］」とする。演算ユニット１０２（＄２）の待ち時間を「１０［秒］」とし、直近１時間の利用率を「５０［％］」とする。演算ユニット１０２（＄３）の待ち時間を「０［秒］」とし、直近１時間の利用率を「３［％］」とする。
【００３７】
ここで、待ち時間の閾値を「６００［秒］」とし、利用率の閾値を「１０［％］」とする。この場合、最適化問題演算装置１０１は、演算ユニット１０２（＄１）〜１０２（＄３）の利用情報１２０に基づいて、待ち時間が閾値以上の演算ユニット１０２（＄１）を特定する。
【００３８】
つぎに、最適化問題演算装置１０１は、演算ユニット１０２（＄１）〜１０２（＄３）の管理情報１１０に基づいて、特定した演算ユニット１０２（＄１）のパーティションモード（８Ｋ）を特定する。また、最適化問題演算装置１０１は、演算ユニット１０２（＄１）〜１０２（＄３）の利用情報１２０に基づいて、利用率が閾値以下の演算ユニット１０２（＄３）を特定する。
【００３９】
そして、最適化問題演算装置１０１は、特定した演算ユニット１０２（＄３）のパーティションモードを、特定したパーティションモード（８Ｋ）に決定する。この場合、演算ユニット１０２（＄３）にパーティションモード（８Ｋ）が設定され、管理情報１１０が更新される。すなわち、演算ユニット１０２（＄１）〜１０２（＄３）それぞれの実行状況に応じてパーティションモードが適宜変更され、その変更に応じて管理情報１１０が更新されることになる。
【００４０】
（２）最適化問題演算装置１０１は、組合せ最適化問題を受け付ける。ここで、受け付ける組合せ最適化問題は、解くべき計算対象の問題であり、例えば、ユーザによって指定される問題である。なお、組合せ最適化問題の一例については、図６を用いて後述する。
【００４１】
（３）最適化問題演算装置１０１は、組合せ最適化問題の規模または要求精度に関する情報と、決定した複数の演算ユニット１０２それぞれのパーティションモードに関する情報とに基づき、組合せ最適化問題を振り分ける演算ユニット１０２を決定する。
【００４２】
ここで、組合せ最適化問題の規模または要求精度に関する情報は、例えば、組合せ最適化問題の規模または要求精度そのものを示す情報であってもよく、また、組合せ最適化問題の規模または要求精度に対応したフラグ等の情報であってもよい。組合せ最適化問題の規模は、例えば、組合せ最適化問題のイジングモデルのスピンビット数によって表される。イジングモデルとは、磁性体のスピンの振る舞いを表すモデルである。演算ユニット１０２は、例えば、計算対象の問題をイジングモデルに置き換えて計算する。また、組合せ最適化問題の要求精度は、例えば、ビット間の相互作用の大きさを示す重み係数のビット数によって表される。また、パーティションモードに関する情報は、例えば、パーティションモードそのものを示す情報であってもよく、また、パーティションモードに対応したフラグ等の情報であってもよい。
【００４３】
具体的には、例えば、最適化問題演算装置１０１は、更新後の管理情報１１０を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードが設定された演算ユニット１０２を特定する。そして、最適化問題演算装置１０１は、特定した演算ユニット１０２のうち、解くことができる問題の最大規模が最小の演算ユニット１０２を、組合せ最適化問題を振り分ける演算ユニット１０２に決定してもよい。
【００４４】
また、最適化問題演算装置１０１は、更新後の管理情報１１０を参照して、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された演算ユニット１０２を特定してもよい。そして、最適化問題演算装置１０１は、特定した演算ユニット１０２を、組合せ最適化問題を振り分ける演算ユニット１０２に決定してもよい。
【００４５】
なお、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードとは、組合せ最適化問題の要求精度が、解くことができる問題の最大精度の範囲内となるパーティションモードである。
【００４６】
また、最適化問題演算装置１０１は、更新後の管理情報１１０を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができ、かつ、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された演算ユニット１０２を特定してもよい。そして、最適化問題演算装置１０１は、特定した演算ユニット１０２を、組合せ最適化問題を振り分ける演算ユニット１０２に決定してもよい。
【００４７】
図１の例では、問題１３０を例に挙げて、問題１３０の規模に応じて、問題１３０を振り分ける演算ユニット１０２を決定する場合について説明する。問題１３０は、規模が「８１９２ｂｉｔ（８Ｋ）」の組合せ最適化問題である。
【００４８】
この場合、最適化問題演算装置１０１は、更新後の管理情報１１０を参照して、問題１３０の規模以上の規模の問題を解くことができるパーティションモードが設定された演算ユニット１０２（＄１），１０２（＄２）を特定する。そして、最適化問題演算装置１０１は、特定した演算ユニット１０２（＄１），１０２（＄２）のうちのいずれかを、問題１３０を振り分ける演算ユニット１０２に決定する。
【００４９】
具体的には、例えば、最適化問題演算装置１０１は、各演算ユニット１０２（＄１）〜１０２（＄３）の実行状況についての情報に基づき、演算ユニット１０２（＄１），１０２（＄２）のうち負荷が低い演算ユニット１０２を、問題１３０を振り分ける演算ユニット１０２に決定してもよい。
【００５０】
ここでは、演算ユニット１０２（＄１）には、問題１４０，１５０が振り分けられているのに対して、演算ユニット１０２（＄２）には、問題が振り分けられていない。この場合、最適化問題演算装置１０１は、演算ユニット１０２（＄１），１０２（＄２）のうち、問題が振り分けられていない空きの演算ユニット１０２（＄２）を、問題１３０を振り分ける演算ユニット１０２に決定する。
【００５１】
（４）最適化問題演算装置１０１は、決定した演算ユニット１０２で、当該演算ユニット１０２について決定したパーティションモードにより、組合せ最適化問題の演算を実行させる。図１の例では、最適化問題演算装置１０１は、決定した演算ユニット１０２（＄３）で、問題１３０の演算を実行させる。
【００５２】
このように、最適化問題演算装置１０１によれば、複数の演算ユニット１０２の利用状況に応じて、複数の演算ユニット１０２それぞれのパーティションモードを決定することができる。図１の例では、利用率の低い演算ユニット１０２（＄３）のパーティションモードを変更して、待ち時間が長くなっている演算ユニット１０２（＄１）と同一構成とすることができる。
【００５３】
これにより、使用する演算ユニット１０２の数を増やすことなく、待ち合わせが生じている問題と同様の規模や要求精度の問題を解くことができるハードウェアを増やすことができる。このため、演算ユニット１０２（例えば、演算ユニット１０２（＄１））における待ち時間の増大を防ぐことができる。また、ユーザから要求された問題を解くのに要する時間が増加することによる機会損失を防ぐことができる。
【００５４】
また、最適化問題演算装置１０１によれば、問題の規模や要求精度に応じたパーティションモードに設定された演算ユニット１０２により、組合せ最適化問題の演算を行うことができる。これにより、問題の規模や要求精度に応じて、演算の際に利用されるハードウェアリソースの範囲を適切に選択でき、演算性能を高めて演算処理の高速化を図ることができる。
【００５５】
図１の例では、問題１３０の規模「８Ｋ」に応じたパーティションモードが設定された演算ユニット１０２（＄３）により、問題１３０の演算を行うことができる。また、演算ユニット１０２（＄３）では待ち時間が生じないため、演算ユニット１０２（＄１）に振り分ける場合に比べて、問題１３０を解くのに要する時間を短縮することができる。
【００５６】
（演算ユニット１０２の一実施例）
つぎに、図１に示した演算ユニット１０２の一実施例について説明する。
【００５７】
図２は、演算ユニット１０２の一実施例を示す説明図である。図２において、演算ユニット１０２は、計算対象の問題（組合せ最適化問題）を変換したイジングモデルに含まれる複数のスピンに対応する複数のビット（スピンビット）のそれぞれの値の組合せ（状態）のうち、エネルギー関数が最小値となるときの各ビットの値（基底状態）を探索する。
【００５８】
イジング型のエネルギー関数Ｅ（ｘ）は、例えば、下記式（１）で定義される。
【００５９】
【数１】
2020046992.tif 000003
【００６０】
右辺第１項は、イジングモデルに含まれる全ビットから選択可能な２つのビットの全組合せについて、漏れと重複なく、２つのビットの値（０または１）と結合係数との積を積算したものである。イジングモデルに含まれる全ビット数をＫ個（Ｋは２以上の整数）とする。また、ｉ，ｊの各々を、０以上Ｋ−１以下の整数とする。ｘiは、ｉ番目のビットの値を表す変数（状態変数とも呼ばれる）である。ｘjは、ｊ番目のビットの値を表す変数である。Ｗijは、ｉ番目とｊ番目のビットの相互作用の大きさを示す重み係数である。なお、Ｗii＝０である。また、Ｗij＝Ｗjiであることが多い（すなわち、重み係数による係数行列は対称行列である場合が多い）。
【００６１】
右辺第２項は、全ビットのそれぞれのバイアス係数とビットの値との積の総和を求めたものである。ｂiは、ｉ番目のビットのバイアス係数を示している。
【００６２】
また、変数ｘiの値が変化して１−ｘiとなると、変数ｘiの増加分は、Δｘi＝（１−ｘi）−ｘi＝１−２ｘiと表せる。したがって、スピン反転（値の変化）に伴うエネルギー変化ΔＥiは、下記式（２）で表される。
【００６３】
【数２】
2020046992.tif 000004
【００６４】
ｈiはローカルフィールド（局所場）と呼ばれ、下記式（３）で表される。
【００６５】
【数３】
2020046992.tif 000005
【００６６】
Δｘiに応じてローカルフィールドｈiに符号（＋１または−１）を乗じたものがエネルギー変化ΔＥiとなる。ローカルフィールドｈiの変化分Δｈiは、下記式（４）で表される。
【００６７】
【数４】
2020046992.tif 000006
【００６８】
ある変数ｘjが変化したときのローカルフィールドｈiを更新する処理は並列に行われる。
【００６９】
演算ユニット１０２は、例えば、１チップの半導体集積回路であり、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などを用いて実現される。演算ユニット１０２は、ビット演算回路１ａ１，…，１ａＫ，…，１ａＮ（複数のビット演算回路）、選択回路部２、閾値生成部３、乱数生成部４および設定変更部５を有する。ここで、Ｎは、演算ユニット１０２が備えるビット演算回路の総数である。Ｎは、Ｋ以上の整数である。ビット演算回路１ａ１，…，１ａＫ，…，１ａＮの各々には、識別情報（ｉｎｄｅｘ＝０，…，Ｋ−１，…，Ｎ−１）が対応付けられている。
【００７０】
ビット演算回路１ａ１，…，１ａＫ，…，１ａＮは、イジングモデルの状態を表すビット列に含まれる１ビットを提供する単位素子である。当該ビット列は、スピンビット列や状態ベクトルなどと呼ばれてもよい。ビット演算回路１ａ１，…，１ａＫ，…，１ａＮの各々は、自ビットと他ビットの間の重み係数を記憶し、重み係数に基づいて他ビットの反転に応じた自ビットの反転可否を判定し、自ビットの反転可否を示す信号を選択回路部２に出力する。
【００７１】
選択回路部２は、スピンビット列のうち、反転させるビット（反転ビット）を選択する。具体的には、選択回路部２は、ビット演算回路１ａ１，…，１ａＫ，…，１ａＮのうち、イジングモデルの基底状態の探索に用いられているビット演算回路１ａ１，…，１ａＫの各々から出力された反転可否の信号を受け付ける。選択回路部２は、ビット演算回路１ａ１，…，１ａＫのうち、反転可の信号を出力したビット演算回路に対応するビットを優先的に１つ選択し、反転ビットとする。例えば、選択回路部２は、乱数生成部４により出力される乱数ビットに基づいて当該反転ビットの選択を行う。選択回路部２は、選択した反転ビットを示す信号を、ビット演算回路１ａ１，…，１ａＫに出力する。反転ビットを示す信号は、反転ビットの識別情報（ｉｎｄｅｘ＝ｊ）と、反転可否を示すフラグ（ｆｌｇj＝１）と、反転ビットの現在の値ｑj（今回の反転前の値）とを示す信号を含む。ただし、いずれのビットも反転されないこともある。いずれのビットも反転されない場合、選択回路部２は、ｆｌｇj＝０を出力する。
【００７２】
閾値生成部３は、ビット演算回路１ａ１，…，１ａＫ，…，１ａＮの各々に対し、ビットの反転可否を判定する際に用いられる閾値を生成する。ビット演算回路１ａ１，…，１ａＫ，…，１ａＮの各々に当該閾値を示す信号を出力する。後述するように、閾値生成部３は、閾値の生成に、温度を示すパラメータ（温度パラメータ）Ｔと乱数とを用いる。閾値生成部３は、当該乱数を発生させる乱数発生器を有する。閾値生成部３は、ビット演算回路１ａ１，…，１ａＫ，…，１ａＮの各々に対して個別に乱数発生器を有し、個別に閾値の生成と供給とを行うことが好ましい。ただし、閾値生成部３は、所定数のビット演算回路で乱数発生器を共用してもよい。
【００７３】
乱数生成部４は、乱数ビットを生成し、選択回路部２に出力する。乱数生成部４により生成された乱数ビットは、選択回路部２による反転ビットの選択に用いられる。
【００７４】
設定変更部５は、ビット演算回路１ａ１，…，１ａＫ，…，１ａＮのうち、計算対象のイジングモデルの状態を表すビット列（スピンビット列）の第１のビット数（スピンビット数）の変更を行う。また、設定変更部５は、第１のビット数のビット演算回路の各々に対する、重み係数の第２のビット数の変更を行う。
【００７５】
ここで、第１のビット数（スピンビット数）は、問題（組合せ最適化問題）の規模に相当する。第２のビット数（重み係数のビット数）は、問題の精度に相当する。最適化問題演算装置１０１は、第１および第２のビット数について、設定変更部５への設定を制御することにより、任意のパーティションモードを設定することができる。
【００７６】
つぎに、ビット演算回路の回路構成を説明する。ビット演算回路１ａ１（ｉｎｄｅｘ＝０）を主に説明するが、他のビット演算回路も同様の回路構成で実現される（例えば、Ｘ番目（Ｘは１以上Ｎ以下の整数）のビット演算回路に対して、ｉｎｄｅｘ＝Ｘ−１とすればよい）。
【００７７】
ビット演算回路１ａ１は、記憶部１１、精度切替回路１２、反転判定部１３、ビット保持部１４、エネルギー変化計算部１５および状態遷移判定部１６を有する。
【００７８】
記憶部１１は、例えば、レジスタやＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などである。記憶部１１は、自ビット（ここでは、ｉｎｄｅｘ＝０のビット）と他ビットとの間の重み係数を記憶する。ここで、スピンビット数（第１のビット数）Ｋに対して、重み係数の総数はＫ2である。記憶部１１には、ｉｎｄｅｘ＝０のビットに対して、Ｋ個の重み係数Ｗ00，Ｗ01，…，Ｗ0,K-1が記憶される。ここで、重み係数は第２のビット数Ｌで表される。したがって、記憶部１１では重み係数を格納するために、Ｋ×Ｌビットが所要される。なお、記憶部１１は、ビット演算回路１ａ１の外部であって、演算ユニット１０２の内部に設けられてもよい（他のビット演算回路の記憶部も同様）。
【００７９】
精度切替回路１２は、スピンビット列のいずれかのビットが反転されると反転されたビットに対する重み係数を自身の（ビット演算回路１ａ１の）記憶部１１から読み出し、読み出した重み係数をエネルギー変化計算部１５に出力する。すなわち、精度切替回路１２は、選択回路部２から反転ビットの識別情報を受け付け、記憶部１１から反転ビットと自ビットとの組に対応する重み係数を読み出して、エネルギー変化計算部１５に出力する。
【００８０】
このとき、精度切替回路１２は、設定変更部５により設定された第２のビット数で表される重み係数の読み出しを行う。精度切替回路１２は、設定変更部５による第２のビット数の設定に応じて、記憶部１１から読み出す係数の第２のビット数を変更する。
【００８１】
例えば、精度切替回路１２は、記憶部１１から所定ビット数のビット列を読み出すセレクタを有する。セレクタが読み出す所定ビット数が、第２のビット数よりも大きい場合、精度切替回路１２は、当該セレクタにより反転ビットに対応する重み係数を含む単位ビット列を読み出し、読み出した単位ビット列から第２のビット数で表される重み係数を抽出する。あるいは、精度切替回路１２は、セレクタが読み出す所定ビット数が、第２のビット数よりも小さい場合、当該セレクタにより読み出された複数のビット列を結合することで、第２のビット数で表される重み係数を記憶部１１から抽出してもよい。
【００８２】
反転判定部１３は、選択回路部２により出力されたｉｎｄｅｘ＝ｊとｆｌｇjとを示す信号を受け付け、当該信号に基づいて反転ビットとして自ビットが選択されたか否かを判定する。反転ビットとして自ビットが選択された場合（すなわち、ｉｎｄｅｘ＝ｊが自ビットを示し、ｆｌｇjが反転可を示す場合）、反転判定部１３は、ビット保持部１４に記憶されたビットを反転させる。すなわち、ビット保持部１４に保持されたビットが０の場合、当該ビットを１に変更する。また、ビット保持部１４に保持されたビットが１の場合、当該ビットを０に変更する。
【００８３】
ビット保持部１４は、１ビットを保持するレジスタである。ビット保持部１４は、保持するビットをエネルギー変化計算部１５および選択回路部２に出力する。
【００８４】
エネルギー変化計算部１５は、記憶部１１から読み出した重み係数を用いたイジングモデルのエネルギー変化値ΔＥ0を計算し、状態遷移判定部１６に出力する。具体的には、エネルギー変化計算部１５は、反転ビットの値（今回の反転前の値）を選択回路部２から受け付け、反転ビットが、１から０、または、０から１のどちらに反転するかに応じて、上記式（４）により、Δｈ0を計算する。そして、エネルギー変化計算部１５は、前回のｈ0にΔｈ0を加算することで、ｈ0を更新する。エネルギー変化計算部１５は、ｈ0を保持するレジスタを有し、当該レジスタにより更新後のｈ0を保持する。
【００８５】
さらに、エネルギー変化計算部１５は、ビット保持部１４より現在の自ビットを受け付け、自ビットが０であれば０から１へ、自ビットが１であれば１から０へ、反転する場合のイジングモデルのエネルギー変化値ΔＥ0を、上記式（２）により計算する。エネルギー変化計算部１５は、計算したエネルギー変化値ΔＥ0を、状態遷移判定部１６に出力する。
【００８６】
状態遷移判定部１６は、エネルギー変化計算部１５によるエネルギー変化の計算に応じて、自ビットの反転可否を示す信号ｆｌｇ0を選択回路部２に出力する。具体的には、状態遷移判定部１６は、エネルギー変化計算部１５により計算されたエネルギー変化値ΔＥ0を受け付け、閾値生成部３により生成された閾値との比較に応じて、自ビットの反転可否を判定する比較器である。ここで、状態遷移判定部１６による判定について説明する。
【００８７】
シミュレーテッド・アニーリングでは、あるエネルギー変化ΔＥを引き起こす状態遷移の許容確率ｐ（ΔＥ，Ｔ）を下記式（５）のように決めれば、時刻（反復回数）無限大の極限で状態が最適解（基底状態）に到達することが知られている。
【００８８】
【数５】
2020046992.tif 000007
【００８９】
上記式（５）において、Ｔは、前述の温度パラメータＴである。ここで、関数ｆとして、下記式（６）（メトロポリス法）、または、下記式（７）（ギブス法）が用いられる。
【００９０】
【数６】
2020046992.tif 000008
【００９１】
【数７】
2020046992.tif 000009
【００９２】
温度パラメータＴは、例えば、下記式（８）で表される。すなわち、温度パラメータＴは、反復回数ｔに対して対数的に減少する関数で与えられる。例えば、定数ｃは問題に応じて決定される。
【００９３】
【数８】
2020046992.tif 000010
【００９４】
ここで、Ｔ0は、初期温度値であり問題に応じて十分に大きくとることが望ましい。
【００９５】
上記式（５）で表される許容確率ｐ（ΔＥ，Ｔ）を用いた場合、ある温度における状態遷移の十分な反復後に定常状態に達したとすると、当該状態はボルツマン分布に従って生成される。すなわち、各状態の占有確率は熱力学における熱平衡状態に対するボルツマン分布に従う。よって、ある温度でボルツマン分布に従った状態を生成し、その後、当該温度よりも低い温度でボルツマン分布に従った状態を生成し、というように徐々に温度を下げていくことで、各温度におけるボルツマン分布に従った状態を追えることになる。そして、温度０としたときに、温度０でのボルツマン分布により最低エネルギーの状態（基底状態）が高確率で実現される。この様子が材料を焼き鈍したときの状態変化とよく似ているため、この方法はシミュレーテッド・アニーリングと呼ばれる。このとき、エネルギーが上がる状態遷移が確率的に起こることは、物理学における熱励起に相当する。
【００９６】
例えば、許容確率ｐ（ΔＥ，Ｔ）でエネルギー変化ΔＥを引き起こす状態遷移を許容することを示すフラグ（ｆｌｇ＝１）を出力する回路は、ｆ（−ΔＥ／Ｔ）と、区間［０，１）の値をとる一様乱数ｕとの比較に応じた値を出力する比較器により実現できる。
【００９７】
ただし、次のような変形を行っても同じ機能を実現可能である。２つの数に同じ単調増加関数を作用させても大小関係は変化しない。したがって、比較器の２つの入力に同じ単調増加関数を作用させても比較器の出力は変わらない。例えば、ｆ（−ΔＥ／Ｔ）に作用させる単調増加関数としてｆ（−ΔＥ／Ｔ）の逆関数ｆ-1（−ΔＥ／Ｔ）、一様乱数ｕに作用させる単調増加関数としてｆ-1（−ΔＥ／Ｔ）の−ΔＥ／Ｔをｕとしたｆ-1（ｕ）を用いることができる。その場合、上記の比較器と同様の機能を有する回路は、−ΔＥ／Ｔがｆ-1（ｕ）より大きいとき１を出力する回路でよい。さらに、温度パラメータＴが正であることから、状態遷移判定部１６は、−ΔＥがＴ・ｆ-1（ｕ）より大きいとき（あるいは、ΔＥが−（Ｔ・ｆ-1（ｕ））より小さいとき）、ｆｌｇ0＝１を出力する回路でよい。
【００９８】
閾値生成部３は、一様乱数ｕを生成し、上記のｆ-1（ｕ）の値に変換する変換テーブルを用いて、ｆ-1（ｕ）の値を出力する。メトロポリス法が適用される場合、ｆ-1（ｕ）は、下記式（９）で与えられる。また、ギブス法が適用される場合、ｆ-1（ｕ）は、下記式（１０）で与えられる。
【００９９】
【数９】
2020046992.tif 000011
【０１００】
【数１０】
2020046992.tif 000012
【０１０１】
変換テーブルは、例えば、閾値生成部３に接続されたＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリなどのメモリ（図示を省略している）に記憶される。閾値生成部３は、温度パラメータＴと、ｆ-1（ｕ）との積（Ｔ・ｆ-1（ｕ））を閾値として出力する。ここで、Ｔ・ｆ-1（ｕ）は、熱励起エネルギーに相当する。
【０１０２】
なお、選択回路部２から状態遷移判定部１６に対してｆｌｇjを入力し、当該ｆｌｇjが状態遷移を許容しないことを示すとき（つまり状態遷移が生じないとき）、状態遷移判定部１６により−ΔＥ0にオフセット値を加算してから、閾値との比較を行ってもよい。また、状態遷移判定部１６は、状態遷移が生じないことが継続する場合に、加算するオフセット値を増加させてもよい。一方、状態遷移判定部１６は、ｆｌｇjが、状態遷移を許容することを示すとき（つまり状態遷移が生じるとき）には、オフセット値を０にする。−ΔＥ0へのオフセット値の加算やオフセット値の増加により、状態遷移が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
【０１０３】
こうして、温度パラメータＴが徐々に小さく設定され、例えば、温度パラメータＴの値を所定回数、小さくした場合、（または、温度パラメータＴが最小値に達した場合）のスピンビット列が、ビット演算回路１ａ１，…，１ａＫに保持される。演算ユニット１０２は、温度パラメータＴの値を所定回数、小さくした場合、（または、温度パラメータＴが最小値に達した場合）のスピンビット列を解として出力する。演算ユニット１０２は、温度パラメータＴやビット演算回路１ａ１，…，１ａＫの各々の記憶部に対する重み係数の設定およびビット演算回路１ａ１，…，１ａＫに保持されるスピンビット列を読み出して出力する制御部（図示を省略している）を有してもよい。
【０１０４】
演算ユニット１０２では、設定変更部５により、イジングモデルのスピンビット数（第１のビット数）と、ビット間の重み係数のビット数（第２のビット数）とを変更可能である。ここで、スピンビット数は、イジングモデルを実現する回路の規模（問題の規模）に相当する。規模が大きいほど、多数の組合せ候補をもつ組合せ最適化問題に演算ユニット１０２を適用できる。また、重み係数のビット数は、ビット間の相互関係の表現の精度（問題における条件表現の精度）に相当する。精度が高いほど、スピン反転時のエネルギー変化ΔＥに対する条件を詳細に設定できる。ある問題では、スピンビット数が大きく、重み係数を表すビット数が小さいことがある。あるいは、別の問題では、スピンビット数が小さく、重み係数を表すビット数が大きいこともある。問題に応じて、各問題に適合した最適化装置を個別に製造することは非効率である。
【０１０５】
そこで、演算ユニット１０２では、設定変更部５によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とすることで、規模と精度とを可変にできる。すなわち、パーティションモードを変更することができる。その結果、１つの演算ユニット１０２において、問題に合った規模および精度を実現できる。
【０１０６】
より具体的には、ビット演算回路１ａ１，…，１ａＫ，…，１ａＮの各々は、精度切替回路を有し、当該精度切替回路によって、設定変更部５の設定に応じて、自身の記憶部から読み出す重み係数のビット長を切り替える。また、選択回路部２は、設定変更部５により設定されたスピンビット数に相当する数（例えば、Ｋ個）のビット演算回路に対して、反転ビットを示す信号を入力し、当該数（Ｋ個）のビット演算回路に対応するビットの中から反転ビットを選択する。これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、１つの演算ユニット１０２によって、問題に応じた規模および精度でイジングモデルを実現できる。
【０１０７】
ここで、前述のように、ビット演算回路１ａ１，…，１ａＮの各々が備える記憶部は、ＳＲＡＭなどの比較的小容量の記憶デバイスにより実現される。このため、スピンビット数が増えると、重み係数のビット数によっては、記憶部の容量が不足することも考えられる。一方、演算ユニット１０２によれば、設定変更部５により、記憶部の容量の制限を満たすように、規模および精度を設定することも可能になる。具体的には、設定変更部５は、スピンビット数が増えるほど、重み係数のビット数を減らすように設定することが考えられる。また、設定変更部５は、重み係数のビット数が増えるほど、スピンビット数を減らすように設定することも考えられる。
【０１０８】
また、上記の例では、Ｎ個のビット演算回路のうちのＫ個を、イジングモデルに使用するものとした。演算ユニット１０２は、Ｎ−Ｋ≧Ｋの場合、残りのＮ−Ｋ個のビット演算回路のうちのＫ個のビット演算回路により、前述のイジングモデルと同じイジングモデルを実現し、両イジングモデルにより同一問題処理の並列度を高めて計算を高速化してもよい。
【０１０９】
さらに、演算ユニット１０２は、残りのＮ−Ｋ個のビット演算回路のうちの一部を用いて、他の問題に対応する他のイジングモデルを実現し、前述のイジングモデルで表される問題と並列に、当該他の問題の演算を行ってもよい。
【０１１０】
あるいは、演算ユニット１０２は、残りのＮ−Ｋ個のビット演算回路を不使用としてもよい。その場合、選択回路部２は、残りのＮ−Ｋ個のビット演算回路により出力されるフラグｆｌｇを全て、強制的に０に設定し、残りのＮ−Ｋ個のビット演算回路に対応するビットが反転候補として選択されないようにしてもよい。
【０１１１】
（情報処理システム３００のシステム構成例）
つぎに、図１に示した最適化問題演算装置１０１を含む情報処理システム３００のシステム構成例について説明する。
【０１１２】
図３は、情報処理システム３００のシステム構成例を示す説明図である。図３において、情報処理システム３００は、最適化問題演算装置１０１と、クライアント装置３０１と、を含む。情報処理システム３００において、最適化問題演算装置１０１およびクライアント装置３０１は、有線または無線のネットワーク３１０を介して接続される。ネットワーク３１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。
【０１１３】
最適化問題演算装置１０１は、組合せ最適化問題をイジングモデルに置き換え、イジングモデルの基底状態の探索により、組合せ最適化問題を解く機能を提供する。最適化問題演算装置１０１は、例えば、クラウドコンピューティングのサーバや、オンプレミスのサーバである。
【０１１４】
クライアント装置３０１は、ユーザにより使用されるクライアントコンピュータであり、例えば、ユーザが解くべき問題の、最適化問題演算装置１０１への入力に用いられる。クライアント装置３０１は、例えば、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、タブレット型ＰＣなどである。
【０１１５】
（最適化問題演算装置１０１のハードウェア構成例）
図４は、最適化問題演算装置１０１のハードウェア構成例を示すブロック図である。図４において、最適化問題演算装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、メモリ４０２と、ディスクドライブ４０３と、ディスク４０４と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０５と、可搬型記録媒体Ｉ／Ｆ４０６と、可搬型記録媒体４０７と、複数の最適化装置４０８と、予備装置４０９と、を有する。また、各構成部は、バス４００によってそれぞれ接続される。バス４００は、例えば、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）バスである。
【０１１６】
ここで、ＣＰＵ４０１は、最適化問題演算装置１０１の全体の制御を司る。ＣＰＵ４０１は、複数のコアを有していてもよい。メモリ４０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭおよびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ４０１のワークエリアとして使用される。メモリ４０２に記憶されるプログラムは、ＣＰＵ４０１にロードされることで、コーディングされている処理をＣＰＵ４０１に実行させる。
【０１１７】
ディスクドライブ４０３は、ＣＰＵ４０１の制御に従ってディスク４０４に対するデータのリード／ライトを制御する。ディスク４０４は、ディスクドライブ４０３の制御で書き込まれたデータを記憶する。ディスク４０４としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
【０１１８】
通信Ｉ／Ｆ４０５は、通信回線を通じてネットワーク３１０に接続され、ネットワーク３１０を介して外部のコンピュータ（例えば、図３に示したクライアント装置３０１）に接続される。そして、通信Ｉ／Ｆ４０５は、ネットワーク３１０と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信Ｉ／Ｆ４０５には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【０１１９】
可搬型記録媒体Ｉ／Ｆ４０６は、ＣＰＵ４０１の制御に従って可搬型記録媒体４０７に対するデータのリード／ライトを制御する。可搬型記録媒体４０７は、可搬型記録媒体Ｉ／Ｆ４０６の制御で書き込まれたデータを記憶する。可搬型記録媒体４０７としては、例えば、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）−ＲＯＭ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリなどが挙げられる。
【０１２０】
最適化装置４０８は、ＣＰＵ４０１の制御に従って、イジングモデルの基底状態を探索する。最適化装置４０８は、図１に示した演算ユニット１０２の一例である。＄１〜＄Ｍは、最適化装置４０８を識別する識別子である（Ｍは、２以上の自然数）。以下の説明では、最適化装置４０８（＄１）〜４０８（＄Ｍ）のうちの任意の最適化装置４０８を「最適化装置４０８（＄ｊ）」と表記する場合がある（ｊ＝１，２，…，Ｍ）。
【０１２１】
予備装置４０９は、最適化装置４０８と同じ構成の予備のユニットである。予備装置４０９は、ＣＰＵ４０１の制御に従って起動され、最適化装置４０８として動作する。図４の例では、予備装置４０９を１台のみ表示したが、最適化問題演算装置１０１は、２台以上の予備装置４０９を有していてもよい。
【０１２２】
なお、最適化問題演算装置１０１は、上述した構成部のほかに、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、入力装置、ディスプレイ等を有することにしてもよい。また、最適化問題演算装置１０１は、上述した構成部のうち、例えば、ディスクドライブ４０３、ディスク４０４、可搬型記録媒体Ｉ／Ｆ４０６、可搬型記録媒体４０７を有していなくてもよい。また、図３に示したクライアント装置３０１については、例えば、ＣＰＵ、メモリ、通信Ｉ／Ｆ、入力装置、ディスプレイなどを有する。
【０１２３】
（情報処理システム３００におけるハードウェアの関係）
図５は、情報処理システム３００におけるハードウェアの関係の一例を示す説明図である。図５において、クライアント装置３０１は、ユーザプログラム５０１を実行する。ユーザプログラム５０１は、最適化問題演算装置１０１への各種データ（例えば、解くべき問題の内容や最適化装置４０８の利用スケジュールなどの動作条件）の入力、および、最適化装置４０８による演算結果の表示などを行う。
【０１２４】
ＣＰＵ４０１は、ライブラリ５０２およびドライバ５０３を実行するプロセッサ（演算部）である。ライブラリ５０２のプログラム、および、ドライバ５０３のプログラムは、例えば、メモリ４０２（図４参照）に格納されている。
【０１２５】
ライブラリ５０２は、ユーザプログラム５０１により入力される各種データを受け付け、ユーザが解くべき問題を、イジングモデルの最低エネルギー状態を探索する問題に変換する。ライブラリ５０２は、変換後の問題に関する情報（例えば、スピンビット数、重み係数を表すビット数、重み係数の値、温度パラメータの初期値など）を、ドライバ５０３に提供する。また、ライブラリ５０２は、最適化装置４０８（＄ｊ）による解の探索結果をドライバ５０３から取得し、当該探索結果をユーザに分かり易い結果情報（例えば、結果表示画面の情報）に変換して、ユーザプログラム５０１に提供する。
【０１２６】
ドライバ５０３は、ライブラリ５０２から提供された情報を最適化装置４０８（＄ｊ）に供給する。また、ドライバ５０３は、イジングモデルによる解の探索結果を最適化装置４０８（＄ｊ）から取得し、ライブラリ５０２に提供する。
【０１２７】
最適化装置４０８（＄ｊ）は、ハードウェアとして、制御部５０４およびＬＦＢ（Ｌｏｃａｌ  Ｆｉｅｌｄ  Ｂｌｏｃｋ）５０５を有する。
【０１２８】
制御部５０４は、ドライバ５０３から受け付けたＬＦＢ５０５の動作条件を記憶するＲＡＭを有し、当該動作条件に基づいてＬＦＢ５０５による演算を制御する。また、制御部５０４は、ＬＦＢ５０５が備える各種のレジスタへの初期値の設定、ＳＲＡＭへの重み係数の格納、および、演算終了後のスピンビット列（探索結果）の読み出しなどを行う。制御部５０４は、例えば、ＦＰＧＡなどによって実現される。
【０１２９】
ＬＦＢ５０５は、複数のＬＦＥ（Ｌｏｃａｌ  Ｆｉｅｌｄ  Ｅｌｅｍｅｎｔ）を有する。ＬＦＥは、スピンビットに対応する単位素子である。１つのＬＦＥは、１つのスピンビットに対応する。後述するように、最適化装置４０８（＄ｊ）は、例えば、複数のＬＦＢを有する。
【０１３０】
（組合せ最適化問題の一例）
つぎに、組合せ最適化問題の一例について説明する。
【０１３１】
図６は、組合せ最適化問題の一例を示す説明図である。組合せ最適化問題の一例として、巡回セールスマン問題を考える。ここでは、Ａ都市、Ｂ都市、Ｃ都市、Ｄ都市、Ｅ都市の５つの都市を、最少コスト（距離や料金など）で回る経路を求めるとする。グラフ６０１は、都市をノード、都市間の移動をエッジとした１つの経路を示す。この経路は、例えば、行を回る順番、列を都市に対応付けた行列６０２で表される。行列６０２は、行の小さい順に、ビット「１」が設定された都市を回ることを示す。
【０１３２】
さらに、行列６０２は、スピンビット列に相当するバイナリ値６０３に変換できる。行列６０２の例では、バイナリ値６０３は、５×５＝２５ビットとなる。バイナリ値６０３（スピンビット列）のビット数は、巡回対象の都市が増すほど増加する。すなわち、組合せ最適化問題の規模が大きくなれば、より多くのスピンビットが所要され、スピンビット列のビット数（規模）が大きくなる。
【０１３３】
つぎに、最少エネルギーとなるバイナリ値の探索例を説明する。
【０１３４】
図７は、最少エネルギーとなるバイナリ値の探索例を示す説明図である。図７において、まず、バイナリ値７０２のうちの１ビットを反転させる前（スピン反転前）のエネルギーをＥinitとする。
【０１３５】
最適化装置４０８は、バイナリ値７０２の任意の１ビットを反転させたときのエネルギー変化量ΔＥを計算する。グラフ７０１は、横軸をバイナリ値、縦軸をエネルギーとして、エネルギー関数に応じた１ビット反転に対するエネルギー変化を例示している。最適化装置４０８は、例えば、上記式（２）によりΔＥを求める。
【０１３６】
最適化装置４０８は、上記の計算を、バイナリ値７０２の全ビットに適用し、各々のビットの反転に対して、エネルギー変化量ΔＥを計算する。例えば、バイナリ値７０２のビット数がＮのとき、反転パターン７０４はＮ個になる。グラフ７０１は、反転パターンごとのエネルギー変化の様子を例示する。
【０１３７】
最適化装置４０８は、反転パターンごとのΔＥに基づいて、反転条件（閾値とΔＥとの所定の判定条件）を満たした反転パターン７０４のうちからランダムで１つを選択する。最適化装置４０８は、選択された反転パターンに対応するΔＥを、スピン反転前のＥinitに加減算し、スピン反転後のエネルギー値Ｅを計算する。最適化装置４０８は、求めたエネルギー値ＥをＥinitとし、スピン反転後のバイナリ値７０５を用いて、上記の手順を繰り返し行う。
【０１３８】
ここで、前述のように、上記式（２），（３）で用いられるＷの１要素は、ビット間の相互作用の大きさを示すスピン反転の重み係数である。重み係数を表すビット数を精度と呼ぶ。精度が高いほど、スピン反転時のエネルギー変化量ΔＥに対する条件を詳細に設定できる。例えば、Ｗの総サイズは、スピンビット列に含まれる２つのビットの全結合に対して「精度×スピンビット数×スピンビット数」である。一例として、スピンビット数が８ｋ（＝８１９２）の場合、Ｗの総サイズは、「精度×８ｋ×８ｋ」ビットとなる。
【０１３９】
（ＬＦＢ５０５の回路構成例）
つぎに、図５で例示した探索を行うＬＦＢ５０５の回路構成例を説明する。最適化装置４０８（＄ｊ）は、例えば、８個のＬＦＢ５０５を有する。
【０１４０】
図８は、ＬＦＢの回路構成例を示す説明図である。図８において、ＬＦＢ５０５は、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎ、ランダムセレクタ部５２、閾値生成部５３、乱数生成部５４、モード設定レジスタ５５、加算器５６、および、Ｅ格納レジスタ５７を有する。
【０１４１】
ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎの各々は、スピンビットの１ビットとして用いられる。ｎは、２以上の整数であり、ＬＦＢ５０５が備えるＬＦＥの数を示す。ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎの各々には、ＬＦＥの識別情報（ｉｎｄｅｘ）が対応付けられている。ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎの各々に対して、ｉｎｄｅｘ＝０，１，…，ｎ−１である。ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎは、図２に示したビット演算回路１ａ１，…，１ａＮの一例である。
【０１４２】
以下では、ＬＦＥ５１ａ１の回路構成を説明する。ＬＦＥ５１ａ２，…，５１ａｎも、ＬＦＥ５１ａ１と同様の回路構成により実現される。ＬＦＥ５１ａ２，…，５１ａｎの回路構成の説明については、以下の説明における各要素の符号の末尾の「ａ１」の部分を、「ａ２」，…，「ａｎ」の各々に置換して（例えば、「６０ａ１」の符号を「６０ａｎ」のように置換して）読み替えればよい。また、ｈ，ｑ，ΔＥ，Ｗなどの各値の添え字についても、「ａ２」，…，「ａｎ」の各々に対応する添え字に置換して読み替えればよい。
【０１４３】
ＬＦＥ５１ａ１は、ＳＲＡＭ６０ａ１、精度切替回路６１ａ１、Δｈ生成部６２ａ１、加算器６３ａ１、ｈ格納レジスタ６４ａ１、反転判定部６５ａ１，ビット格納レジスタ６６ａ１、ΔＥ生成部６７ａ１、判定部６８ａ１を有する。
【０１４４】
ＳＲＡＭ６０ａ１は、重み係数Ｗを格納する。ＳＲＡＭ６０ａ１は、図２に示した記憶部１１に対応する。ＳＲＡＭ６０ａ１には、全スピンビットの重み係数Ｗのうち、ＬＦＥ５１ａ１で使用される分だけ格納される。このため、スピンビット数をＫ（Ｋは２以上ｎ以下の整数）とすると、ＳＲＡＭ６０ａ１に格納される全重み係数のサイズは、「精度×Ｋ」ビットとなる。図８では、一例として、スピンビット数Ｋ＝ｎの場合を例示している。この場合、ＳＲＡＭ６０ａ１には、重み係数Ｗ00，Ｗ01，…，Ｗ0，n-1が格納される。
【０１４５】
精度切替回路６１ａ１は、反転ビットの識別情報であるｉｎｄｅｘと反転可を示すフラグＦとをランダムセレクタ部５２から取得し、反転ビットに対応する重み係数をＳＲＡＭ６０ａ１から抽出する。精度切替回路６１ａ１は、抽出した重み係数を、Δｈ生成部６２ａ１に出力する。例えば、精度切替回路６１ａ１は、ランダムセレクタ部５２によりＳＲＡＭ６０ａ１に格納されたｉｎｄｅｘとフラグＦとを、ＳＲＡＭ６０ａ１から取得してもよい。あるいは、精度切替回路６１ａ１は、ランダムセレクタ部５２からｉｎｄｅｘとフラグＦとの供給を受ける信号線を有してもよい（図示を省略している）。
【０１４６】
ここで、精度切替回路６１ａ１は、モード設定レジスタ５５に設定された重み係数のビット数（精度）の設定を受け付け、当該設定に応じて、ＳＲＡＭ６０ａ１から読み出す重み係数のビット数を切り替える。
【０１４７】
具体的には、精度切替回路６１ａ１は、ＳＲＡＭ６０ａ１から所定の単位ビット数のビット列（単位ビット列）を読み出すセレクタを有する。精度切替回路６１ａ１は、当該セレクタにより反転ビットに対応する重み係数を含むビット数ｒの単位ビット列を読み出す。例えば、当該セレクタが読み出す単位ビット数ｒが、重み係数のビット数ｚよりも大きい場合、精度切替回路６１ａ１は、読み出したビット列に対して、反転ビットに対応する重み係数を示すビット部分をＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側にシフトさせ、それ以外のビット部分に０を代入することで、重み係数の読み出しを行う。あるいは、単位ビット数ｒが、モード設定レジスタ５５により設定されたビット数ｚより小さい場合も考えられる。この場合、精度切替回路６１ａ１は、当該セレクタにより読み出された複数の単位ビット列を結合することで、設定されたビット数ｚでの重み係数を抽出してもよい。
【０１４８】
なお、精度切替回路６１ａ１は、ＬＦＥ５１ａ２が備えるＳＲＡＭ６０ａ２にも接続される。後述するように、精度切替回路６１ａ１は、ＳＲＡＭ６０ａ２から重み係数を読み出すことも可能である。
【０１４９】
Δｈ生成部６２ａ１は、ランダムセレクタ部５２から反転ビットの現在のビット値（今回の反転前のビット値）を受け付け、精度切替回路６１ａ１から取得した重み係数を用いて、上記式（４）により、ローカルフィールドｈ0の変化量Δｈ0を計算する。Δｈ生成部６２ａ１は、Δｈ0を加算器６３ａ１に出力する。
【０１５０】
加算器６３ａ１は、ｈ格納レジスタ６４ａ１に格納されたローカルフィールドｈ0にΔｈ0を加算し、ｈ格納レジスタ６４ａ１に出力する。
【０１５１】
ｈ格納レジスタ６４ａ１は、図示しないクロック信号に同期して、加算器６３ａ１が出力する値（ローカルフィールドｈ0）を取り込む。ｈ格納レジスタ６４ａ１は、例えば、フリップフロップである。なお、ｈ格納レジスタ６４ａ１に格納されるローカルフィールドｈ0の初期値は、バイアス係数ｂ0である。当該初期値は、制御部５０４により設定される。
【０１５２】
反転判定部６５ａ１は、反転ビットのｉｎｄｅｘ＝ｊと、反転可否を示すフラグＦjとをランダムセレクタ部５２から受け付け、自ビットが反転ビットとして選択されたか否かを判定する。自ビットが反転ビットとして選択された場合、反転判定部６５ａ１は、ビット格納レジスタ６６ａ１に格納されたスピンビットを反転させる。
【０１５３】
ビット格納レジスタ６６ａ１は、ＬＦＥ５１ａ１に対応するスピンビットを保持する。ビット格納レジスタ６６ａ１は、例えば、フリップフロップである。ビット格納レジスタ６６ａ１に格納されたスピンビットは、反転判定部６５ａ１により反転される。ビット格納レジスタ６６ａ１は、ΔＥ生成部６７ａ１およびランダムセレクタ部６２にスピンビットを出力する。
【０１５４】
ΔＥ生成部６７ａ１は、ｈ格納レジスタ６４ａ１のローカルフィールドｈ0およびビット格納レジスタ６６ａ１のスピンビットに基づいて、自ビットの反転に応じたイジングモデルのエネルギー変化量ΔＥ0を、上記式（２）により計算する。ΔＥ生成部６７ａ１は、エネルギー変化量ΔＥ0を、判定部６８ａ１およびランダムセレクタ部５２に出力する。
【０１５５】
判定部６８ａ１は、ΔＥ生成部６７ａ１により出力されたエネルギー変化量ΔＥ0と、閾値生成部５３により生成された閾値との比較により、自ビットの反転を許容するか否かを示す（自ビットの反転可否を示す）フラグＦ0を、ランダムセレクタ部５２に出力する。具体的には、判定部６８ａ１は、ΔＥ0が閾値−（Ｔ・ｆ-1（ｕ））より小さいときＦ0＝１（反転可）を出力し、ΔＥ0が閾値−（Ｔ・ｆ-1（ｕ））以上のときＦ0＝０（反転不可）を出力する。ここで、ｆ-1（ｕ）は、適用法則に応じて、上記式（９），（１０）のいずれかで与えられる関数である。また、ｕは、区間［０，１］の一様乱数である。
【０１５６】
ランダムセレクタ部５２は、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎの各々から、エネルギー変化量、スピンビットの反転可否を示すフラグおよびスピンビットを受け付け、反転可であるスピンビットのうち反転させるビット（反転ビット）を選択する。
【０１５７】
ランダムセレクタ部５２は、選択した反転ビットの現在のビット値（ビットｑj）を、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎが備えるΔｈ生成部６２ａ１，６２ａ２，…，６２ａｎに供給する。ランダムセレクタ部５２は、図２に示した選択回路部２の一例である。
【０１５８】
ランダムセレクタ部５２は、反転ビットのｉｎｄｅｘ＝ｊと、反転可否を示すフラグＦjとを、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎが備えるＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎに出力する。なお、ランダムセレクタ部５２は、前述のように、反転ビットのｉｎｄｅｘ＝ｊと、反転可否を示すフラグＦjとを、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎが備える精度切替回路６１ａ１，６１ａ２，…，６１ａｎに出力してもよい。
【０１５９】
また、ランダムセレクタ部５２は、反転ビットのｉｎｄｅｘ＝ｊと、反転可否を示すフラグＦjとを、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎが備える反転判定部６５ａ１，６５ａ２，…，６５ａｎに供給する。さらに、ランダムセレクタ部５２は、選択した反転ビットに対応するΔＥjを、加算器５６に供給する。
【０１６０】
ここで、ランダムセレクタ部５２は、あるイジングモデルにおけるスピンビット数（すなわち、使用するＬＦＥの数）の設定を、モード設定レジスタ５５から受け付ける。例えば、ランダムセレクタ部５２は、ｉｎｄｅｘの小さい方から順に、設定されたスピンビット数に相当する数のＬＦＥを使用して、解の探索が行われるようにする。例えば、ランダムセレクタ部５２は、ｎ個のＬＦＥのうち、Ｋ個のＬＦＥを用いる場合、ＬＦＥ５１ａ１，…，ＬＦＥ５１ａＫのＬＦＥに対応するスピンビット列から反転ビットを選択する。このとき、ランダムセレクタ部５２は、例えば、使用しないｎ−Ｋ個のＬＦＥ５１ａ（Ｋ−１），…，５１ａｎの各々から出力されるフラグＦを、強制的に０に設定することが考えられる。
【０１６１】
閾値生成部５３は、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎが備える判定部６８ａ１，６８ａ２，…，６８ａｎに対して、エネルギー変化量ΔＥとの比較に用いられる閾値を生成し、供給する。前述のように、閾値生成部５３は、温度パラメータＴと、区間［０，１］の一様乱数ｕと、上記式（９）または上記式（１０）で示されるｆ-1（ｕ）とを用いて、閾値を生成する。閾値生成部５３は、例えば、ＬＦＥごとに個別に、乱数発生器を有し、ＬＦＥごとの乱数ｕを用いて閾値を生成する。ただし、いくつかのＬＦＥで乱数発生器が共有されてもよい。温度パラメータＴの初期値やシミュレーテッド・アニーリングにおける温度パラメータＴの減少サイクルや減少量などは、制御部５０４によって制御される。
【０１６２】
乱数生成部５４は、ランダムセレクタ部５２における反転ビットの選択に用いられる乱数ビットを生成し、ランダムセレクタ部５２に供給する。
【０１６３】
モード設定レジスタ５５は、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎが備える精度切替回路６１ａ１，６１ａ２，…，６１ａｎに対して、重み係数のビット数（すなわち、問題の精度）を示す信号を供給する。また、モード設定レジスタ５５は、ランダムセレクタ部５２に対して、スピンビット数（すなわち、問題の規模）を示す信号を供給する。モード設定レジスタ５５に対するスピンビット数や重み係数のビット数の設定は、制御部５０４により行われる。モード設定レジスタ５５は、図２に示した設定変更部５の一例である。
【０１６４】
加算器５６は、ランダムセレクタ部５２により出力されたエネルギー変化量ΔＥjを、Ｅ格納レジスタ５７に格納されたエネルギー値Ｅに加算し、Ｅ格納レジスタ５７に出力する。
【０１６５】
Ｅ格納レジスタ５７は、図示しないクロック信号に同期して、加算器５６が出力するエネルギー値Ｅを取り込む。Ｅ格納レジスタ５７は、例えば、フリップフロップである。なお、エネルギー値Ｅの初期値は、制御部５０４によって上記式（１）を用いて計算され、Ｅ格納レジスタ５７に設定される。
【０１６６】
例えば、解の探索にＫ個のＬＦＥが用いられる場合、制御部５０４はビット格納レジスタ６６ａ１，…，６６ａＫの各スピンビットを読み出すことで、スピンビット列を得る。
【０１６７】
図９は、ランダムセレクタ部の回路構成例を示す説明図である。図９において、ランダムセレクタ部５２は、フラグ制御部５２ａと複数段にわたってツリー状に接続された複数の選択回路とを有する。
【０１６８】
フラグ制御部５２ａは、モード設定レジスタ５５のスピンビット数の設定に応じて、初段の選択回路５２ａ１，５２ａ２，５２ａ３，５２ａ４，…，５２ａｑの各々に入力されるフラグの値を制御する。図９では、選択回路５２ａｑの１つの入力（ＬＦＥ５１ａｎの出力に相当）に対するフラグの値を制御する部分回路５２ｘｎが例示されている。部分回路５２ｘｎのフラグ設定部５２ｙｎは、使用しないＬＦＥ５１ａｎから出力されるフラグＦｎを強制的に０に設定するスイッチである。
【０１６９】
初段の選択回路５２ａ１，５２ａ２，５２ａ３，５２ａ４，…，５２ａｑの各々には、ＬＦＥ５１ａ１，５１ａ２，…，５１ａｎのそれぞれが出力する変数ｑiとＦiとΔＥiの組が２組ずつ入力される。例えば、選択回路５２ａ１には、ＬＦＥ５１ａ１が出力する変数ｑ0とＦ0とΔＥ0による組と、ＬＦＥ５１ａ２が出力する変数ｑ1とＦ1とΔＥ1による組とが入力される。また、選択回路５２ａ２には、変数ｑ2とＦ2とΔＥ2による組と変数ｑ3とＦ3とΔＥ3による組が入力され、選択回路５２ａ３には、変数ｑ4とＦ4とΔＥ4による組と変数ｑ5とＦ5とΔＥ5による組が入力される。さらに、選択回路５２ａ４には、変数ｑ6とＦ6とΔＥ6による組と変数ｑ7とＦ7とΔＥ7による組が入力され、選択回路５２ａｑには、変数ｑn-2とＦn-2とΔＥn-2による組と変数ｑn-1とＦn-1とΔＥn-1による組が入力される。
【０１７０】
そして、選択回路５２ａ１，…，５２ａｑの各々は、入力された２組の変数ｑiとＦiとΔＥiと、乱数生成部５４が出力する１ビット乱数に基づいて、一方の組の変数ｑiとＦiとΔＥiを選択する。このとき、選択回路５２ａ１，…，５２ａｑの各々は、Ｆiが１である組を優先的に選択し、両方の組が１の場合には１ビット乱数に基づいていずれか一方の組を選択する（他の選択回路も同様）。ここで、乱数生成部５４は、１ビット乱数を選択回路ごとに個別に生成し、各選択回路に供給する。また、選択回路５２ａ１，…，５２ａｑの各々は、どちらの組の変数ｑiとＦiとΔＥiを選択したかを示す１ビットの識別値を生成し、選択した変数ｑiとＦiとΔＥiと識別値とを含む信号（状態信号と言う）を出力する。なお、初段の選択回路５２ａ１〜５２ａｑの数は、ＬＦＥ５１ａ１，…，５１ａｎの数の１／２、つまり、ｎ／２である。
【０１７１】
２段目の選択回路５２ｂ１，５２ｂ２，…，５２ｂｒの各々には、選択回路５２ａ１，…，５２ａｑが出力する状態信号が２つずつ入力される。例えば、選択回路５２ｂ１には、選択回路５２ａ１，５２ａ２が出力する状態信号が入力され、選択回路５２ｂ２には、選択回路５２ａ３，５２ａ４が出力する状態信号が入力される。
【０１７２】
そして、選択回路５２ｂ１，…，５２ｂｒの各々は、２つの状態信号と、乱数生成部５４が出力する１ビット乱数に基づいて、２つの状態信号のいずれか一方を選択する。また、選択回路５２ｂ１，…，５２ｂｒのそれぞれは、選択した状態信号に含まれる識別値についていずれの状態信号を選択したかを示すように１ビットを付加して更新し、選択した状態信号を出力する。
【０１７３】
３段目以降の選択回路においても同様の処理が行われ、各段の選択回路で１ビットずつ識別値のビット幅が増えていき、最後段の選択回路３１ｐから、ランダムセレクタ部５２の出力である状態信号が出力される。ランダムセレクタ部５２が出力する状態信号に含まれる識別値が、２進数で表された、反転ビットを示すｉｎｄｅｘである。
【０１７４】
ただし、ランダムセレクタ部５２は、各ＬＦＥからフラグＦとともに当該ＬＦＥに対応するｉｎｄｅｘを受け付け、変数ｑiとＦiとΔＥiと同様に、各選択回路によりｉｎｄｅｘの選択を行うことで、反転ビットに対応するｉｎｄｅｘを出力してもよい。この場合、各ＬＦＥは、ｉｎｄｅｘ格納用のレジスタを有し、当該レジスタからランダムセレクタ部５２へｉｎｄｅｘを出力する。
【０１７５】
このように、ランダムセレクタ部５２は、ＬＦＥ５１ａ１，…，５１ａｎのうち、設定されたスピンビット数ＫのＬＦＥ５１ａ１，…，５１ａＫ以外の他のＬＦＥ５１ａ（Ｋ＋１），…，５１ａｎにより出力された反転可否を示す信号を強制的に反転不可に設定する。ランダムセレクタ部５２は、ＬＦＥ５１ａ１，…，５１ａＫにより出力された反転可否を示す信号およびＬＦＥ５１ａ（Ｋ＋１），…，５１ａｎに対して設定した反転不可を示す信号に基づいて、反転ビットを選択する。ランダムセレクタ部５２は、反転ビットを示す信号を、ビット演算回路５１ａ１，…，５１ａＫに加えてＬＦＥ５１ａ（Ｋ＋１），…，５１ａｎにも出力する。
【０１７６】
こうして、フラグ制御部５２ａの制御により、使用されないＬＦＥのフラグＦが強制的に０に設定されるので、スピンビット列に使用されないＬＦＥに対応するビットを反転候補から除外できる。
【０１７７】
つぎに、ＬＦＥ５１ａ１，ＬＦＥ５１ａ２，…，５１ａｎの各々のＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎに対する重み係数の格納例を説明する。まず、ＳＲＡＭ容量に対する規模と精度とのトレードオフ関係について説明する。
【０１７８】
図１０は、規模と精度とのトレードオフ関係の例を示す説明図である。図１０において、グラフ１０００は、ＬＦＥごとのＳＲＡＭにおいて重み係数の格納のための容量の上限が１２８Ｋ（キロ）ビットである場合の規模と精度とのトレードオフ関係を示している。ここで、１Ｋ＝１０２４とする。グラフ１０００の横軸は規模（Ｋビット）であり、縦軸は精度（ビット）である。なお、一例として、ｎ＝８１９２であるとする。
【０１７９】
この場合、規模１Ｋビットに対して、精度は最大１２８ビットである。また、規模２Ｋビットに対して、精度は最大６４ビットである。規模４Ｋビットに対して、精度は最大３２ビットである。規模８Ｋビットに対して、精度は最大１６ビットである。
【０１８０】
そこで、最適化装置４０８（＄ｊ）では、例えば、次の４つのモードを利用可能にするとする。各モードは、パーティションモードに対応する。第１のモードは、規模１Ｋビット／精度１２８ビットのモードである。第２のモードは、規模２Ｋビット／精度６４ビットのモードである。第３のモードは、規模４Ｋビット／精度３２ビットのモードである。第４のモードは、規模８Ｋビット／精度１６ビットのモードである。
【０１８１】
つぎに、これら４種のモードの各々に応じた重み係数の格納例を説明する。重み係数は、制御部５０４により、ＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎの各々に格納される。なお、精度切替回路６１ａ１，６１ａ２，…，６１ａｎの各々のセレクタによりＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎから読み出される単位ビット数は、一例として、１２８ビットであるとする。
【０１８２】
図１１は、重み係数の格納例を示す説明図（その１）である。第１のモード（規模１Ｋビット／精度１２８ビット）を用いる場合、重み係数Ｗは、下記式（１１）で表される。
【０１８３】
【数１１】
2020046992.tif 000013
【０１８４】
データ１ｄ１，１ｄ２，…，１ｄｓは、第１のモード（規模１Ｋビット／精度１２８ビット）を用いる場合のＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｓに対する重み係数の格納例を示す。ここで、ｓ＝１０２４である。データ１ｄ１，１ｄ２，…，１ｄｓは、各々、ＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｓに格納される。このモードでは、ＬＦＥは１ｋ個（＝１０２４個）使用される。なお、図中、ＬＦＥ５１ａ１，…，５１ａｓを、各々の識別番号を用いて、ＬＦＥ０，…，ＬＦＥ１０２３のように表記することがある（以降の図も同様）。
【０１８５】
データ１ｄ１は、ＬＦＥ５１ａ１（ＬＦＥ０）のＳＲＡＭ６０ａ１に格納されるＷ0,0〜Ｗ0,1023を示す。データ１ｄ２は、ＬＦＥ５１ａ２（ＬＦＥ１）のＳＲＡＭ６０ａ２に格納されるＷ1,0〜Ｗ1,1023を示す。データ１ｄｓは、ＬＦＥ５１ａｓ（ＬＦＥ１０２３）のＳＲＡＭ６０ａｓに格納されるＷ1023,0〜Ｗ1023,1023を示す。１つの重み係数Ｗijのビット数は１２８ビットである。
【０１８６】
図１２は、重み係数の格納例を示す説明図（その２）である。第２のモード（規模２Ｋビット／精度６４ビット）を用いる場合、重み係数Ｗは、下記式（１２）で表される。
【０１８７】
【数１２】
2020046992.tif 000014
【０１８８】
データ２ｄ１，２ｄ２，…，２ｄｔは、第２のモード（規模２Ｋビット／精度６４ビット）を用いる場合のＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｔに対する重み係数の格納例を示す。ここで、ｔ＝２０４８である。データ２ｄ１，２ｄ２，…，２ｄｔは、各々、ＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｔに格納される。このモードでは、ＬＦＥは２ｋ個（＝２０４８個）使用される。
【０１８９】
データ２ｄ１は、ＬＦＥ５１ａ１（ＬＦＥ０）のＳＲＡＭ６０ａ１に格納されるＷ0,0〜Ｗ0,2047を示す。データ２ｄ２は、ＬＦＥ５１ａ２（ＬＦＥ１）のＳＲＡＭ６０ａ２に格納されるＷ1,0〜Ｗ1,2047を示す。データ２ｄｔは、ＬＦＥ５１ａｔ（ＬＦＥ２０４７）のＳＲＡＭ６０ａｔに格納されるＷ2047,0〜Ｗ2047,2047を示す。１つの重み係数Ｗijのビット数は６４ビットである。
【０１９０】
図１３は、重み係数の格納例を示す説明図（その３）である。第３のモード（規模４ｋビット／精度３２ビット）を用いる場合、重み係数Ｗは、下記式（１３）で表される。
【０１９１】
【数１３】
2020046992.tif 000015
【０１９２】
データ３ｄ１，３ｄ２，…，３ｄｕは、第３のモード（規模４Ｋビット／精度３２ビット）を用いる場合のＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｕに対する重み係数の格納例を示す。ここで、ｕ＝４０９６である。データ３ｄ１，３ｄ２，…，３ｄｕは、各々、ＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｕに格納される。このモードでは、ＬＦＥは４ｋ個（＝４０９６個）使用される。
【０１９３】
データ３ｄ１は、ＬＦＥ５１ａ１（ＬＦＥ０）のＳＲＡＭ６０ａ１に格納されるＷ0,0〜Ｗ0,4095を示す。データ３ｄ２は、ＬＦＥ５１ａ２（ＬＦＥ１）のＳＲＡＭ６０ａ２に格納されるＷ1,0〜Ｗ1,4095を示す。データ３ｄｕは、ＬＦＥ５１ａｕ（ＬＦＥ４０９５）のＳＲＡＭ６０ａｕに格納されるＷ4095,0〜Ｗ4095,4095を示す。１つの重み係数Ｗijのビット数は３２ビットである。
【０１９４】
図１４は、重み係数の格納例を示す説明図（その４）である。第４のモード（規模８ｋビット／精度１６ビット）を用いる場合、重み係数Ｗは、下記式（１４）で表される。
【０１９５】
【数１４】
2020046992.tif 000016
【０１９６】
データ４ｄ１，４ｄ２，…，４ｄｎは、第４のモード（規模８Ｋビット／精度１６ビット）を用いる場合のＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎに対する重み係数の格納例を示す。ここで、ｎ＝８１９２である。データ４ｄ１，４ｄ２，…，４ｄｎは、各々、ＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎに格納される。このモードでは、ＬＦＥは８ｋ個（＝８１９２個）使用される。
【０１９７】
データ４ｄ１は、ＬＦＥ５１ａ１（ＬＦＥ０）のＳＲＡＭ６０ａ１に格納されるＷ0,0〜Ｗ0,8191を示す。データ４ｄ２は、ＬＦＥ５１ａ２（ＬＦＥ１）のＳＲＡＭ６０ａ２に格納されるＷ1,0〜Ｗ1,8191を示す。データ４ｄｎは、ＬＦＥ５１ａｎ（ＬＦＥ８１９１）のＳＲＡＭ６０ａｎに格納されるＷ8191,0〜Ｗ8191,8191を示す。１つの重み係数Ｗijのビット数は１６ビットである。
【０１９８】
（最適化装置４０８（＄ｊ）の演算処理手順）
つぎに、最適化装置４０８（＄ｊ）の演算処理手順について説明する。なお、問題に応じた初期値および動作条件は、最適化装置４０８（＄ｊ）に入力される。初期値は、例えば、エネルギー値Ｅ、ローカルフィールドｈi、スピンビットｑi、温度パラメータＴの初期値および重み係数Ｗなどを含む。また、動作条件は、１つの温度パラメータでの状態の更新回数Ｎ１、温度パラメータの変更回数Ｎ２および温度パラメータの下げ幅などを含む。制御部５０４は、入力された初期値および動作条件を、前述の各ＬＦＥのレジスタおよびＳＲＡＭに設定する。
【０１９９】
図１５は、最適化装置４０８（＄ｊ）の演算処理手順の一例を示すフローチャートである。図１５の説明では、ｉｎｄｅｘ＝ｉに対応するＬＦＥをＬＦＥ５１ａｘ（１番目のＬＦＥはＬＦＥ５１ａ１であり、ｎ番目のＬＦＥは５１ａｎである）と表記する。ＬＦＥ５１ａｘに含まれる各部についても、例えば、ＳＲＡＭ６０ａｘのように、符号の末尾に「ｘ」を付して表記する。ＬＦＥ５１ａ１，…，ＬＦＥ５１ａｎの各々による演算は並列に実行される。
【０２００】
図１５のフローチャートにおいて、ΔＥ生成部６７ａｘは、ｈ格納レジスタ６４ａｘに格納されたローカルフィールドｈiおよびビット格納レジスタ６６ａｘに格納されたビットｑiに基づいて、当該ビットｑiを反転させた場合のエネルギー変化量ΔＥiを生成する（ステップＳ１５０１）。ΔＥiの生成には、上記式（２）が用いられる。
【０２０１】
判定部６８ａｘは、ΔＥ生成部６７ａｘにより生成されたエネルギー変化量ΔＥiと、閾値生成部５３により生成された閾値（＝−（Ｔ・ｆ-1（ｕ）））とを比較し、閾値＞ΔＥiであるか否かを判定する（ステップＳ１５０２）。ここで、閾値＞ΔＥiの場合（ステップＳ１５０２：Ｙｅｓ）、ステップＳ１５０３に処理が進む。閾値≦ΔＥiの場合（ステップＳ１５０２：Ｎｏ）、ステップＳ１５０４に処理が進む。
【０２０２】
判定部６８ａｘは、反転候補信号（Ｆi＝１）をランダムセレクタ部５２に出力する（ステップＳ１５０３）。そして、ステップＳ１５０５に処理が進む。
【０２０３】
判定部６８ａｘは、非反転候補信号（Ｆi＝０）をランダムセレクタ部５２に出力する（ステップＳ１５０４）。そして、ステップＳ１５０５に処理が進む。
【０２０４】
ステップＳ１５０５において、ランダムセレクタ部５２は、ＬＦＥ５１ａ１，…，ＬＦＥ５１ａｎの各々から出力された全反転候補（Ｆi＝１であるＬＦＥに対応するビット）から、反転ビットを１つ選択する。ランダムセレクタ部５２は、選択した反転ビットに対応するｉｎｄｅｘ＝j、Ｆj、ｑjをＬＦＥ５１ａ１，…，ＬＦＥ５１ａｎに出力する。また、ランダムセレクタ部５２は、選択した反転ビットに対応するΔＥjを、加算器５６に出力する。すると、次のステップＳ１５０６（エネルギー更新処理），Ｓ１５０７（状態更新処理）が並列に開始される。
【０２０５】
加算器５６は、反転ビットに対応するエネルギー変化量ΔＥを、エネルギー値Ｅに加算することで、Ｅ格納レジスタ５７に格納されたエネルギー値Ｅを更新する（ステップＳ１５０６）。すなわち、Ｅ＝Ｅ＋ΔＥである。そして、エネルギー更新処理が終了する。
【０２０６】
精度切替回路６１ａｘは、反転ビットに対応するｉｎｄｅｘ＝ｊとフラグＦjとを取得し、当該反転ビットに対応する重み係数を含む単位ビット列をＳＲＡＭ６０ａｘから読み出す（ステップＳ１５０７）。単位ビット列とは、精度切替回路６１ａｘのセレクタが、ＳＲＡＭ６０ａｘから一度に読み出すビット列の単位である。単位ビット列のビット数（単位ビット数）は、一例では、１２８ビットである（他の値でもよい）。この場合、ステップＳ１５０７ではＳＲＡＭ６０ａｘから１２８ビットの単位ビット列が読み出される。
【０２０７】
例えば、精度として、１２８／ａ（ａ＝１，２，４，８）ビットが選択されている場合、精度切替回路６１ａｘは、ＳＲＡＭ６０ａｘの先頭（先頭を０番目とする）の単位ビット列から数えて「Ｉｎｔｅｇｅｒ（ｊ／ａ）」番目の単位ビット列を読み出す。ここで、Ｉｎｔｅｇｅｒ（ｊ／ａ）は、（ｊ／ａ）の値から整数部を抽出する関数である。
【０２０８】
精度切替回路６１ａｘは、ステップＳ１５０７で読み出された単位ビット列から、モード設定レジスタ５５により設定されたモード選択に応じたビット数の重み係数（反転ビットｑjに対応する重み係数）Ｗijを抽出する（ステップＳ１５０８）。例えば、精度切替回路６１ａｘは、１２８ビットの単位ビット列からｚビットのビット列を抽出する場合、前述のように反転ビットに対応するｚビットのビット範囲をＬＳＢ側へシフトし、それ以外の上位ビットに０を設定することで、ｚビットの重み係数を抽出する。
【０２０９】
なお、精度切替回路６１ａｘは、ステップＳ１５０７で読み出した単位ビット列を、先頭から精度に応じたビット長の区画に分けたときに、反転ビットに対応するビット範囲が先頭（０番目）から何番目の区画に対応するかにより当該ビット範囲を特定する。
【０２１０】
図１２〜図１４の例によれば、精度６４ビットの場合、ｊが偶数のときに０番目の区画、ｊが奇数のときに１番目の区画である。また、精度３２ビットの場合、ｍｏｄ（ｊ，４）＝０のときに０番目の区画、ｍｏｄ（ｊ，４）＝１のときに１番目の区画、ｍｏｄ（ｊ，４）＝２のときに２番目の区画、ｍｏｄ（ｊ，４）＝３のときに３番目の区画である。ここで、ｍｏｄ（ｕ，ｖ）は、ｕをｖで除したときの剰余を示す関数である。さらに、精度１６ビットの場合も同様に、読み出した１２８ビットの単位ビット列の先頭から「ｍｏｄ（ｊ，８）」番目の区画が、反転ビットに対応するビット範囲となる。なお、精度１２８ビットの場合、精度切替回路６１ａｘは、ステップＳ１５０７で読み出された１２８ビットの単位ビット列を、そのまま反転ビットに対応する重み係数とする。
【０２１１】
上記の例では、１２８／ａ（ａ＝１，２，４，８）ビットの精度に対し、ステップＳ１５０７で読み出された１２８ビットの単位ビット列の先頭から「ｍｏｄ（ｊ，ａ）」番目の区画（１区画のサイズは１２８／ａビット）が、反転ビットに対応する重み係数を示すビット範囲である。
【０２１２】
Δｈ生成部６２ａｘは、反転ビットの反転方向と、精度切替回路６１ａｘにより抽出された重み係数Ｗijとに基づいて、Δｈiを生成する（ステップＳ１５０９）。Δｈiの生成には、上記式（４）が用いられる。また、反転ビットの反転方向は、ランダムセレクタ部５２により出力される反転ビットｑj（今回の反転前のビット）により判別される。
【０２１３】
ステップＳ１５１０において、加算器６３ａｘは、Δｈ生成部６２ａｘにより生成されたΔｈiを、ｈ格納レジスタ６４ａｘに格納されたローカルフィールドｈiに加算することで、ｈ格納レジスタ６４ａｘに格納されたローカルフィールドｈiを更新する。また、反転判定部６５ａｘは、ランダムセレクタ部５２により出力されたｉｎｄｅｘ＝ｊおよびフラグＦjに基づいて、自ビットが反転ビットとして選択されたか否かを判定する。反転判定部６５ａｘは、自ビットが反転ビットとして選択された場合、ビット格納レジスタ６６ａｘに格納されたスピンビットを反転させ、自ビットが反転ビットとして選択されなかった場合、ビット格納レジスタ６６ａｘのスピンビットを維持する。ここで、自ビットが反転ビットとして選択された場合とは、ランダムセレクタ部５２により出力された信号について、ｉｎｄｅｘ＝ｊ＝ｉ、かつ、Ｆj＝１の場合である。
【０２１４】
制御部５０４は、現在の温度パラメータＴにおいて、ＬＦＥ５１ａ１，…，ＬＦＥ５１ａｎに保持される各スピンビットの更新処理回数がＮ１に達したか（更新処理回数＝Ｎ１であるか）否かを判定する（ステップＳ１５１１）。更新処理回数がＮ１に達した場合（ステップＳ１５１１：Ｙｅｓ）、ステップＳ１５１２に処理が進む。更新処理回数がＮ１に達していない場合（ステップＳ１５１１：Ｎｏ）、制御部５０４は、更新処理回数に１を加算して、ステップＳ１５０１に処理を進める。
【０２１５】
制御部５０４は、温度パラメータＴの変更回数がＮ２に達したか（温度変更回数＝Ｎ２であるか）否かを判定する（ステップＳ１５１２）。温度変更回数がＮ２に達した場合（ステップＳ１５１２：Ｙｅｓ）、ステップＳ１５１４に処理が進む。温度変更回数がＮ２に達していない場合（ステップＳ１５１２：Ｎｏ）、制御部５０４は、温度変更回数に１を加算して、ステップＳ１５１３に処理を進める。
【０２１６】
制御部５０４は、温度パラメータＴを変更する（ステップＳ１５１３）。具体的には、制御部５０４は、動作条件に応じた下げ幅で、温度パラメータＴの値を減少させる（温度を下げることに相当する）。そして、ステップＳ１５０１に処理が進む。
【０２１７】
制御部５０４は、ビット格納レジスタ６６ａｘに格納されたスピンビットを読み出し、演算結果として出力する（ステップＳ１５１４）。具体的には、制御部５０４は、モード設定レジスタ５５により設定されたスピンビット数Ｋに対応するビット格納レジスタ６６ａ１，…，６６ａＫの各々に格納されたスピンビットを読み出し、ＣＰＵ４０１に出力する。すなわち、制御部５０４は、読み出したスピンビット列をＣＰＵ４０１に供給する。そして、演算処理が終了する。
【０２１８】
なお、ステップＳ１５０５において、ランダムセレクタ部５２は、モード設定レジスタ５５の設定に応じて、使用されないＬＦＥにより出力されるＦの値を、強制的に０に設定することで、使用されないＬＦＥをビット反転の候補から除外することができる。
【０２１９】
最適化装置４０８（＄ｊ）によれば、モード設定レジスタ５５によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とし、１チップの最適化装置４０８（＄ｊ）において、任意のパーティションモードを実現できる。
【０２２０】
より具体的には、精度切替回路６１ａｘは、モード設定レジスタ５５の設定に応じて、ＳＲＡＭ６０ａｘから読み出す重み係数のビット長を切り替える。精度切替回路６１ａｘを用いることで、ステップＳ１５０８で示したように、精度切替回路６１ａｘのセレクタがＳＲＡＭ６０ａｘから読み出す単位ビット数を変更せずに、種々の精度を実現できる。例えば、精度切替回路６１ａｘのセレクタによるＳＲＡＭ６０ａｘからの単位ビット数分の読み出し用の信号線の作り変えを要さずに、精度を可変にできる。
【０２２１】
また、ランダムセレクタ部５２は、モード設定レジスタ５５により設定されたスピンビット数に相当する数（例えば、Ｋ個）のＬＦＥに対して、反転ビットを示す信号を入力し、当該数（Ｋ個）のＬＦＥに対応するビットの中から反転ビットを選択する。ランダムセレクタ部５２は、使用されないｎ−Ｋ個のＬＦＥにも反転ビットを示す信号を入力するが、当該ｎ−Ｋ個のＬＦＥから出力されるフラグＦを強制的に０（反転不可）に設定することで、使用されないＬＦＥを反転ビットの選択候補から除外する。
【０２２２】
これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、パーティションモードが異なる複数の最適化装置４０８を用意することによって、問題に応じた規模および精度でイジングモデルを実現できる。
【０２２３】
つぎに、モード設定の他の例を説明する。例えば、最適化装置４０８（＄ｊ）は、次のようにＳＲＡＭ６０ａ１，…，６０ａｎに重み係数を格納することで、前述の４種類のモードに加え、規模４ｋビット／精度６４ビットの第５のモードを提供することもできる。
【０２２４】
図１６は、重み係数の格納例を示す説明図（その５）である。データ５ｄ１，５ｄ２，…，５ｄｎは、第５のモード（規模４Ｋビット／精度６４ビット）を用いる場合のＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎに対する重み係数の格納例を示す。ここで、ｎ＝８１９２である。データ５ｄ１，５ｄ２，…，５ｄｎは、各々、ＳＲＡＭ６０ａ１，６０ａ２，…，６０ａｎに格納される。このモードでは、スピンビット列として、ＬＦＥは４Ｋ個（＝４０９６個）使用され、重み係数の格納のみの用途として、さらに４Ｋ個（＝４０９６個）のＬＦＥが使用される。
【０２２５】
データ５ｄ１は、ＬＦＥ５１ａ１（ＬＦＥ０）のＳＲＡＭ６０ａ１に格納されるＷ0,0〜Ｗ0,2047を示す。データ５ｄ２は、ＬＦＥ５１ａ２（ＬＦＥ１）のＳＲＡＭ６０ａ２に格納されるＷ0,2048〜Ｗ0,4095を示す。データ５ｄｎは、ＬＦＥ５１ａｎ（ＬＦＥ８１９１）のＳＲＡＭ６０ａｎに格納されるＷ4095,2048〜Ｗ4095,4095を示す。１つの重み係数Ｗijのビット数は６４ビットである。
【０２２６】
ここで、前述のように、ＬＦＥ５１ａ１の精度切替回路６１ａ１は、ＬＦＥ５１ａ２のＳＲＡＭ６０ａ２からも重み係数を取得することができる。すなわち、精度切替回路６１ａ１は、例えば、隣接するＬＦＥ５１ａ２のＳＲＡＭ６０ａ２からの読み出し経路を利用することで、ＬＦＥ５１ａ２のＳＲＡＭ６０ａ２以外の機能を停止させ、ＳＲＡＭ６０ａ２の容量をＬＦＥ５１ａ１に貸し出す方法を採れる。例えば、奇数番目（先頭を１番目とする）のＬＦＥにより偶数番目のＬＦＥのＳＲＡＭを利用可能にする（あるいは、先頭を０番目とした場合は偶数番目のＬＦＥにより奇数番目のＬＦＥのＳＲＡＭを利用可能にするとも言える）。
【０２２７】
このように、精度切替回路６１ａ１，…，６１ａｎは、重み係数のビット数の変更に応じて、自ビットと他ビットとに関する重み係数のうちの一部を、スピンビットとして使用されない他のＬＦＥが有するＳＲＡＭから読み出す。この場合、ランダムセレクタ部５２は、例えば、スピンビットとして使用されない他のＬＦＥから出力されるフラグＦを強制的に０（反転不可）に設定することで、当該他のＬＦＥに対応するビットを反転ビットの選択候補から除外してもよい。
【０２２８】
これにより、規模４Ｋビット／精度６４ビットの第５のモードを実現できる。同様に、規模を小さくすることで、さらに大きな精度を実現することもできる。このように、最適化装置４０８（＄ｊ）によれば、問題に応じて、規模および精度をより柔軟に変更することができる。
【０２２９】
（モード設定テーブル１７００の記憶内容）
つぎに、最適化問題演算装置１０１が有するモード設定テーブル１７００の記憶内容について説明する。モード設定テーブル１７００は、例えば、図４に示したメモリ４０２、ディスク４０４などの記憶装置に記憶される。
【０２３０】
ここでは、最適化問題演算装置１０１が有する最適化装置４０８（＄１）〜４０８（＄Ｍ）を、「最適化装置４０８（＄１）〜４０８（＄３）」とする（Ｍ＝３）。
【０２３１】
図１７は、モード設定テーブル１７００の記憶内容の一例を示す説明図である。図１７において、モード設定テーブル１７００は、ユニットＩＤ、パーティションモード、問題規模および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報１７００−１〜１７００−７をレコードとして記憶する。
【０２３２】
ここで、ユニットＩＤは、組合せ最適化問題を解くユニットを識別する識別子である。ユニットは、例えば、最適化装置４０８（＄ｊ）内のパーティションに対応する。最適化装置４０８（＄ｊ）内のパーティションは、例えば、１以上のＬＦＢ５０５によって実現される。
【０２３３】
具体的には、ユニット１は、最適化装置４０８（＄１）内のパーティションに対応する。ユニット２−１，２−２は、最適化装置４０８（＄２）内の２つのパーティションに対応する。ユニット３−１〜３−４は、最適化装置４０８（＄３）内の４つのパーティションに対応する。
【０２３４】
パーティションモードは、パーティションモードのモード名を示す。パーティションモード「８Ｐ」は、最適化装置４０８（＄ｊ）を論理的に８つのパーティションに分割するモードである（図１７では不図示）。パーティションモード「８Ｐ」における各パーティションは、例えば、１個のＬＦＢ５０５によって実現される。パーティションモード「８Ｐ」は、上述した第１のモードに対応する。
【０２３５】
パーティションモード「４Ｐ」は、最適化装置４０８（＄ｊ）を論理的に４つのパーティションに分割するモードである。パーティションモード「４」における各パーティションは、例えば、２個のＬＦＢ５０５によって実現される。パーティションモード「４Ｐ」は、上述した第２のモードに対応する。
【０２３６】
パーティションモード「２Ｐ」は、最適化装置４０８（＄ｊ）を論理的に２つのパーティションに分割するモードである。パーティションモード「２Ｐ」における各パーティションは、例えば、４個のＬＦＢ５０５によって実現される。パーティションモード「２Ｐは、上述した第３のモードに対応する。
【０２３７】
パーティションモード「ＦＵＬＬ」は、最適化装置４０８（＄ｊ）を分割せず、１つのパーティションとして使用するモードである。パーティションモード「ＦＵＬＬ」におけるパーティションは、例えば、８個のＬＦＢ５０５によって実現される。ただし、パーティションモード「ＦＵＬＬ」は、規模と精度との組合せに対応して２種類設けられている。パーティションモード「ＦＵＬＬ（規模：８Ｋ、精度：１６ｂｉｔ）」は、上述した第４のモードに対応する。また、パーティションモード「ＦＵＬＬ（規模：４Ｋ、精度：６４ｂｉｔ）」は、上述した第５のモードに対応する（図１７では不図示）。
【０２３８】
問題規模は、パーティションモードで解くことができる問題（組合せ最適化問題）の最大規模を示す（単位：ｂｉｔ）。精度は、各パーティションモードで解くことができる問題（組合せ最適化問題）の最大精度を示す。
【０２３９】
例えば、モード設定情報１７００−１によれば、最適化装置４０８（＄１）のパーティションモードが、パーティションモード「ＦＵＬＬ」であることを特定することができる。また、最適化装置４０８（＄１）内のパーティションに対応するユニット１の問題規模「８Ｋ」および精度「１６ｂｉｔ」を特定することができる。
【０２４０】
なお、図示は省略するが、モード設定テーブル１７００内の各モード設定情報には、例えば、各ユニット（パーティション）に対応するハードウェアリソースを特定する情報（例えば、ＬＦＢの識別番号）が含まれる。モード設定テーブル１７００は、例えば、図１に示した管理情報１１０の一例に相当する。
【０２４１】
また、初期状態におけるモード設定テーブル１７００内のモード設定情報は、例えば、最適化問題演算装置１０１において生成されることにしてもよい。具体的には、例えば、最適化問題演算装置１０１が、図５に示したライブラリ５０２から、各最適化装置４０８（＄ｊ）のパーティションモードで解くことができる問題の最大規模（スピンビット数）および最大精度（重み係数のビット数）を取得する。そして、最適化問題演算装置１０１が、取得した結果に基づいて、各最適化装置４０８（＄ｊ）のモード設定情報を生成することにしてもよい。
【０２４２】
ライブラリ５０２は、あらかじめ用意された関数を呼び出すことにより、最適化装置４０８（＄ｊ）に設定されたパーティションモードの情報を取得することができる。例えば、ライブラリ５０２は、ｇｅｔＭａｘＮｕｍＢｉｔ（）関数を呼び出すことにより、最適化装置４０８（＄ｊ）のパーティションモードで解くことができる問題の最大規模を取得することができる。また、ライブラリ５０２は、ｇｅｔＷｅｉｇｈｔＲａｎｇｅ（）関数を呼び出すことにより、最適化装置４０８（＄ｊ）のパーティションモードで解くことができる問題の最大精度を取得することができる。
【０２４３】
（利用状況テーブル１８００の記憶内容）
つぎに、最適化問題演算装置１０１が有する利用状況テーブル１８００の記憶内容について説明する。利用状況テーブル１８００は、例えば、図４に示したメモリ４０２、ディスク４０４などの記憶装置に記憶される。
【０２４４】
図１８は、利用状況テーブル１８００の記憶内容の一例を示す説明図である。図１８において、利用状況テーブル１８００は、ユニットＩＤ、パーティションモード、問題規模、精度、利用率および待ち時間のフィールドを有し、各フィールドに情報を設定することで、利用状況情報１８００−１〜１８００−３をレコードとして記憶する。
【０２４５】
ここで、ユニットＩＤは、組合せ最適化問題を解くユニットを識別する識別子である。パーティションモードは、パーティションモードのモード名を示す。問題規模は、パーティションモードで解くことができる問題（組合せ最適化問題）の最大規模を示す（単位：ｂｉｔ）。精度は、各パーティションモードで解くことができる問題（組合せ最適化問題）の最大精度を示す。
【０２４６】
利用率は、ユニットＩＤにより識別されるユニットを含む最適化装置４０８（＄ｊ）の利用率を示す（単位：％）。利用率は、最適化装置４０８（＄ｊ）の利用状況を示す指標値の一つである。待ち時間は、ユニットＩＤにより識別されるユニットを含む最適化装置４０８（＄ｊ）の待ち時間を示す（単位：秒）。待ち時間は、最適化装置４０８（＄ｊ）の負荷状況を示す指標値の一つである。
【０２４７】
例えば、利用状況情報１８００−１は、ユニット１を含む最適化装置４０８（＄１）のパーティションモード「ＦＵＬＬ」、問題規模「８Ｋ」、精度「１６ｂｉｔ」、利用率「９０［％］」および待ち時間「６００［秒］」を示す。利用状況テーブル１８００は、例えば、図１に示した利用情報１２０に相当する。
【０２４８】
（最適化問題演算装置１０１の機能的構成例）
図１９は、最適化問題演算装置１０１の機能的構成例を示すブロック図である。図１９において、最適化問題演算装置１０１は、受付部１９０１と、管理部１９０２と、第１の決定部１９０３と、第２の決定部１９０４と、実行制御部１９０５と、を含む。受付部１９０１〜実行制御部１９０５は、具体的には、例えば、図４に示したメモリ４０２、ディスク４０４、可搬型記録媒体４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、通信Ｉ／Ｆ４０５により、その機能を実現する。各機能部の処理結果は、例えば、メモリ４０２、ディスク４０４などの記憶装置に記憶される。
【０２４９】
受付部１９０１は、組合せ最適化問題を受け付ける。ここで、受け付ける組合せ最適化問題は、解くべき計算対象の問題である。具体的には、例えば、受付部１９０１は、図３に示したクライアント装置３０１から組合せ最適化問題の情報の入力を受け付けることにより、組合せ最適化問題を受け付ける。組合せ最適化問題の情報には、例えば、問題に応じた初期値や動作条件が含まれる。
【０２５０】
管理部１９０２は、複数の最適化装置４０８それぞれの論理的な分割状態を規定するパーティションモードについての情報を保持する。ここで、複数の最適化装置４０８は、最適化問題演算装置１０１が有する最適化装置４０８であり、例えば、図４に示した最適化装置４０８（＄１）〜４０８（＄Ｍ）である。
【０２５１】
具体的には、例えば、管理部１９０２は、各最適化装置４０８（＄ｊ）に設定されたパーティションモードや、当該パーティションモードで解くことができる問題の最大規模および最大精度を含む情報を保持する。より詳細に説明すると、例えば、管理部１９０２は、図１７に示したモード設定テーブル１７００を保持する。
【０２５２】
第１の決定部１９０３は、管理部１９０２が保持する情報と、複数の最適化装置４０８の利用情報とに基づき、複数の最適化装置４０８それぞれのパーティションモードを決定する。複数の最適化装置４０８の利用情報は、複数の最適化装置４０８で演算が実行された組合せ最適化問題の実行履歴情報を含む。
【０２５３】
ここで、図２０を用いて、実行履歴情報のデータ構造について説明する。実行履歴情報は、例えば、最適化問題演算装置１０１において計算対象の問題（組合せ最適化問題）を受け付けるたびに生成されて、メモリ４０２、ディスク４０４などの記憶装置に記憶される。また、実行履歴情報は、問題の演算の実行状況に応じて適宜更新される。
【０２５４】
図２０は、実行履歴情報のデータ構造の一例を示す説明図である。図２０において、実行履歴情報２０００は、ジョブＩＤ、テナント名、ソルバ名、同期・非同期、ハードウェア情報、パーティションモード、問題の規模、精度、計算開始時刻、計算完了時刻、待ち時間、計算時間およびステータスを有する。
【０２５５】
ジョブＩＤは、ジョブを識別する識別子である。ジョブは、計算対象の問題（組合せ最適化問題）に相当する。テナント名は、テナントの名称である。テナントは、ユーザに相当する。ソルバ名は、問題を解く際に用いられるソルバの名称である。同期・非同期は、同期モードまたは非同期モードを示す。
【０２５６】
ハードウェア情報は、ジョブ（問題の演算）を振り分けたハードウェアの情報である。ハードウェア情報には、例えば、最適化装置４０８の装置ＩＤやユニットＩＤが設定される。パーティションモードは、ジョブ（問題の演算）を振り分けたハードウェアのパーティションモードである。
【０２５７】
問題の規模は、問題の規模である（単位：ｂｉｔ）。精度は、問題の要求精度である（単位：ｂｉｔ）。計算開始時刻は、ジョブ（問題の演算）の実行を開始した時刻である。
計算完了時刻は、ジョブ（問題の演算）の実行を開始した時刻である。計算開始時刻および計算完了時刻は、例えば、ＵＴＣ（Ｕｎｉｖｅｒｓａｌ  Ｔｉｍｅ  Ｃｏｏｒｄｉｎａｔｅｄ）によって表される。
【０２５８】
待ち時間は、他の処理（他の問題）の完了待ちで、処理待ちキューで待ち合わせている時間である。処理待ちキューは、ジョブの振り分け先の最適化装置４０８に対応するキューである。計算時間は、ジョブの実行に要した時間、すなわち、問題を解くのに要した時間である。計算時間は、計算開始時刻から計算完了時刻までの時間に相当する。
【０２５９】
ステータスは、ジョブの実行状況を示す。例えば、ステータス「正常」は、ジョブの実行結果（問題の解）が正常に得られたことを示す。ステータス「異常」は、ジョブの実行結果が正常に得られなかったことを示す。ステータス「実行中」は、ジョブを実行中であることを示す。
【０２６０】
なお、待ち時間は、例えば、リアルタイムに更新される。また、計算開始時刻は、ジョブの実行が開始されると設定される。計算終了時刻および計算時間は、ジョブの実行が終了すると設定される。
【０２６１】
実行履歴情報２０００によれば、どの問題が、どのハードウェアに割り振られ、どのような実行状況であるかを特定することができる。例えば、情報処理システム３００において、最適化問題演算装置１０１で受け付けた組合せ最適化問題ごとの実行履歴情報２０００を採取することで、ユーザごとのハードウェアの利用履歴等を特定可能にして、ユーザに対する課金処理などに役立てることができる。
【０２６２】
図１９の説明に戻り、第１の決定部１９０３は、例えば、図２０に示したような実行履歴情報２０００に基づいて、各最適化装置４０８（＄ｊ）の待ち時間を算出することができる。より詳細に説明すると、例えば、第１の決定部１９０３は、各最適化装置４０８（＄ｊ）に対応する処理待ちキューに溜まっている問題の実行履歴情報を特定する。処理待ちキューに溜まっている問題の実行履歴情報は、例えば、計算開始時刻が未設定の実行履歴情報である。
【０２６３】
つぎに、第１の決定部１９０３は、特定した実行履歴情報に基づいて、各最適化装置４０８（＄ｊ）に対応する処理待ちキューに溜まっている問題の待ち時間の合計を算出することにより、各最適化装置４０８（＄ｊ）の待ち時間を算出する。
【０２６４】
一例として、最適化装置４０８（＄１）に対応する処理待ちキューに溜まっている問題を「問題１、問題２および問題３」とし、各問題１〜３の待ち時間を「３００［秒］、２００［秒］および１００［秒］」とする。この場合、最適化装置４０８（＄１）の待ち時間は、「６００［秒］（＝３００［秒］＋２００［秒］＋１００［秒］）」となる。
【０２６５】
算出された各最適化装置４０８（＄ｊ）の待ち時間は、例えば、各最適化装置４０８（＄ｊ）の情報（ユニットＩＤ、パーティションモード、問題規模、精度など）と対応付けて、図１８に示した利用状況テーブル１８００に記憶される。例えば、最適化装置４０８（＄１）の待ち時間「６００［秒］は、利用状況テーブル１８００の利用状況情報１８００−１に設定される。
【０２６６】
また、第１の決定部１９０３は、例えば、図２０に示したような実行履歴情報２０００に基づいて、各最適化装置４０８（＄ｊ）の利用率を算出することができる。各最適化装置４０８（＄ｊ）の利用率は、例えば、所定期間において、各最適化装置４０８（＄ｊ）で問題の演算が行われた時間の割合によって表すことができる。所定期間は、任意に設定可能であり、例えば、直近の１〜１２時間程度に設定される。
【０２６７】
より詳細に説明すると、例えば、第１の決定部１９０３は、所定期間に演算が行われた問題の実行履歴情報を特定する。所定期間に演算が行われた問題とは、例えば、所定期間内に計算開始時刻および計算終了時刻が含まれる問題であってもよく、また、計算開始時刻から計算終了時刻までの期間の少なくとも一部が含まれる問題であってもよい。
【０２６８】
つぎに、第１の決定部１９０３は、特定した実行履歴情報の計算時間の合計を算出することにより、所定期間における各最適化装置４０８（＄ｊ）の計算時間を算出する。そして、第１の決定部１９０３は、所定期間に対する、算出した各最適化装置４０８（＄ｊ）の計算時間の割合を算出することにより、各最適化装置４０８（＄ｊ）の利用率を算出する。
【０２６９】
ただし、計算開始時刻から計算終了時刻までの期間のうち所定期間外となる時間帯が存在する場合がある。第１の決定部１９０３は、この時間帯については、最適化装置４０８（＄ｊ）の計算時間に含めないことにしてもよい。また、最適化装置４０８（＄ｊ）内の複数のユニットで問題の演算が並列に実行されている場合がある。この場合、計算開始時刻から計算終了時刻までの期間のうち問題同士で重複する時間帯がある。第１の決定部１９０３は、この時間帯については、最適化装置４０８（＄ｊ）の計算時間に重複して含めないことにしてもよい。
【０２７０】
一例として、所定期間を「直近６時間」とし、所定期間における最適化装置４０８（＄１）の計算時間を「３２４［分］」とする。最適化装置４０８（＄１）の利用率は、「９０［％］（＝３２４［分］÷３６０［分］×１００）」となる。
【０２７１】
算出された各最適化装置４０８（＄ｊ）の利用率は、例えば、各最適化装置４０８（＄ｊ）の情報（ユニットＩＤ、パーティションモード、問題規模、精度など）と対応付けて、図１８に示した利用状況テーブル１８００に記憶される。例えば、最適化装置４０８（＄１）の利用率「９０［％］は、利用状況テーブル１８００の利用状況情報１８００−１に設定される。
【０２７２】
つぎに、第１の決定部１９０３は、例えば、利用状況テーブル１８００を参照して、待ち時間が閾値α以上の最適化装置４０８（＄ｊ）を特定する。ここで、閾値αは、任意に設定可能であり、例えば、情報処理システム３００に対する要求性能に応じて６００［秒］程度の値に設定される。
【０２７３】
図１８の例では、閾値αを「α＝６００［秒］」とすると、待ち時間が閾値α以上の最適化装置４０８として、ユニット１を含む最適化装置４０８（＄１）が特定される。
【０２７４】
また、第１の決定部１９０３は、例えば、利用状況テーブル１８００を参照して、利用率が閾値β以下の最適化装置４０８を特定する。ここで、閾値βは、任意に設定可能であり、例えば、１０［％］程度の値に設定される。
【０２７５】
図１８の例では、閾値βを「β＝１０［％］」とすると、利用率が閾値β以下の最適化装置４０８として、ユニット３−１，３−２，３−３，３−４を含む最適化装置４０８（＄３）が特定される。
【０２７６】
つぎに、第１の決定部１９０３は、例えば、図１７に示したモード設定テーブル１７００を参照して、特定した待ち時間が閾値α以上の最適化装置４０８のパーティションモードを特定する。そして、第１の決定部１９０３は、特定した利用率が閾値β以下の最適化装置４０８のパーティションモードを、特定した待ち時間が閾値α以上の最適化装置４０８のパーティションモードに決定する。また、第１の決定部１９０３は、利用率が閾値βより大きい最適化装置４０８については、現在のパーティションモードのままとする（現状維持）。
【０２７７】
例えば、待ち時間が閾値α以上の最適化装置４０８を「最適化装置４０８（＄１）」とし、利用率が閾値β以下の最適化装置４０８を「最適化装置４０８（＄３）」とする。この場合、第１の決定部１９０３は、モード設定テーブル１７００を参照して、待ち時間が閾値α以上の最適化装置４０８（＄１）のパーティションモード「ＦＵＬＬ」を特定する。そして、第１の決定部１９０３は、利用率が閾値β以下の最適化装置４０８（＄３）のパーティションモードを、パーティションモード「ＦＵＬＬ」に決定する。また、第１の決定部１９０３は、利用率が閾値βより大きい最適化装置４０８（＄１），４０８（＄２）については、現在のパーティションモードのままとする。
【０２７８】
また、第１の決定部１９０３は、特定した利用率が閾値β以下の最適化装置４０８（＄ｊ）のパーティションモードを、決定したパーティションモードに変更する。ただし、動的にパーティションモードを変更すると、パーティションで演算中の結果が異常となるおそれがある。したがって、第１の決定部１９０３は、最適化装置４０８（＄ｊ）のパーティションモードを変更する場合には、例えば、最適化装置４０８（＄ｊ）で演算が行われていない状態となってから、パーティションモードを変更する。最適化装置４０８（＄ｊ）で演算が行われているか否かは、例えば、実行履歴情報のステータスから特定することができる。
【０２７９】
具体的には、例えば、まず、第１の決定部１９０３は、モード設定テーブル１７００を参照して、決定したパーティションモードに対応する問題規模および精度を特定する。例えば、パーティションモード「ＦＵＬＬ」に対応する問題規模および精度は、問題規模「８Ｋ（８１９２ｂｉｔ）」および精度「１６ｂｉｔ」となる。
【０２８０】
つぎに、第１の決定部１９０３は、特定した問題規模（スピンビット数）および精度（重み係数のビット数）を、特定した利用率が閾値β以下の最適化装置４０８（＄３）に入力する。最適化装置４０８（＄３）において、制御部５０４は、第１の決定部１９０３からの問題規模（スピンビット数）および精度（重み係数のビット数）を受け付け、ＬＦＢ５０５のモード設定レジスタ５５に入力する。
【０２８１】
モード設定レジスタ５５に入力された精度（重み係数のビット数）は、各ＬＦＥの精度切替回路に入力される。例えば、精度切替回路６１ａ１は、入力された精度（重み係数のビット数）を受け付け、当該精度（重み係数のビット数）に応じて、ＳＲＡＭ６０ａ１から読み出す重み係数のビット数を切り替える。
【０２８２】
また、モード設定レジスタ５５に入力された問題規模（スピンビット数）は、ランダムセレクタ部５２に入力される。例えば、ランダムセレクタ部５２は、ｉｎｄｅｘの小さい方から順に、入力された規模（スピンビット数）に相当する数のＬＦＥを使用して、解の探索が行われるようにする。
【０２８３】
これにより、パーティションモード「ＦＵＬＬ」が最適化装置４０８（＄３）に設定される。この場合、最適化装置４０８（＄３）には、パーティションモード「ＦＵＬＬ（規模：８Ｋ、精度１６ｂｉｔ）」のパーティションが１個形成される。なお、各パーティションをどのハードウェアリソース（例えば、ＬＦＢ）により実現するかは、第１の決定部１９０３が判断してもよく、また、最適化装置４０８（＄ｊ）の制御部５０４が判断してもよい。
【０２８４】
決定された決定結果は、例えば、モード設定テーブル１７００に記憶される。具体的には、例えば、管理部１９０２は、最適化装置４０８（＄ｊ）のパーティションモードが変更されたことに応じて、モード設定テーブル１７００を更新する。
【０２８５】
ここで、モード設定テーブル１７００の更新例について説明する。
【０２８６】
図２１は、モード設定テーブル１７００の更新例を示す説明図である。ここでは、最適化装置４０８（＄３）のパーティションモードが、パーティションモード「４Ｐ」からパーティションモード「ＦＵＬＬ（規模：８Ｋ、精度１６ｂｉｔ）」に変更された場合を想定する。
【０２８７】
この場合、モード設定テーブル１７００内のモード設定情報１７００−４〜１７００−７が、モード設定情報２１００−１に更新される。なお、第１の決定部１９０３による、複数の最適化装置４０８それぞれのパーティションモードを決定する処理は、例えば、所定の時間間隔（５［分］など）で定期的に実行される。
【０２８８】
図１９の説明に戻り、第２の決定部１９０４は、組合せ最適化問題の規模または要求精度に関する情報と、第１の決定部１９０３によって決定された複数の最適化装置４０８それぞれのパーティションモードに関する情報とに基づき、組合せ最適化問題を振り分ける最適化装置４０８を決定する。
【０２８９】
具体的には、例えば、まず、第２の決定部１９０４は、受け付けた組合せ最適化問題の規模、要求精度に関する情報を取得する。より詳細に説明すると、例えば、第２の決定部１９０４は、ライブラリ５０２（図５参照）から、受け付けた組合せ最適化問題を変換した変換後の問題のスピンビット数（規模）および重み係数を表すビット数（要求精度）を取得する。
【０２９０】
つぎに、第２の決定部１９０４は、例えば、モード設定テーブル１７００（例えば、図２１）を参照して、取得した組合せ最適化問題の規模または要求精度に応じて演算可能ユニットを特定する。ここで、演算可能ユニットは、組合せ最適化問題の演算を行う候補となるユニットである。そして、第２の決定部１９０４は、特定した演算可能ユニットのいずれかのユニットを含む最適化装置４０８（＄ｊ）を、組合せ最適化問題を振り分ける最適化装置４０８に決定する。
【０２９１】
この際、第２の決定部１９０４は、組合せ最適化問題の振り分け先として、最適化装置４０８（＄ｊ）内のユニットを決定してもよい。すなわち、第２の決定部１９０４は、組合せ最適化問題の振り分け先として、最適化装置４０８（＄ｊ）を決定するだけでなく、その最適化装置４０８（＄ｊ）内のユニットまで決定することにしてもよい。ただし、最適化装置４０８（＄ｊ）内のいずれのユニットに組合せ最適化問題を振り分けるかは、最適化装置４０８（＄ｊ）の制御部５０４（図５）によって判断させることにしてもよい。
【０２９２】
より詳細に説明すると、例えば、第２の決定部１９０４は、モード設定テーブル１７００を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードに対応するユニットを、演算可能ユニットとして特定する。そして、最適化問題演算装置１０１は、特定した演算可能ユニットのうち、解くことができる問題の最大規模が最小のユニットから優先して、組合せ最適化問題を振り分けるユニットに決定してもよい。
【０２９３】
また、第２の決定部１９０４は、モード設定テーブル１７００を参照して、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードに対応するユニットを特定してもよい。そして、第２の決定部１９０４は、特定したユニットを、組合せ最適化問題を振り分けるユニットに決定してもよい。
【０２９４】
また、第２の決定部１９０４は、モード設定テーブル１７００を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができ、かつ、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードに対応するユニットを、演算可能ユニットとして特定してもよい。そして、最適化問題演算装置１０１は、特定した演算可能ユニットのうち、解くことができる問題の最大規模が最小のユニットから優先して、組合せ最適化問題を振り分けるユニットに決定してもよい。
【０２９５】
また、第２の決定部１９０４は、複数の最適化装置４０８それぞれの実行状況についての情報にさらに基づき、組合せ最適化問題を振り分ける最適化装置４０８を決定することにしてもよい。ここで、複数の最適化装置４０８それぞれの実行状況についての情報は、例えば、各最適化装置４０８（＄ｊ）で実行中の問題や、各最適化装置４０８（＄ｊ）に対応する処理待ちキューについての情報などを含む。例えば、実行履歴情報２０００のステータスや待ち時間は、最適化装置４０８（＄ｊ）の実行状況についての情報の一例である。
【０２９６】
具体的には、例えば、第２の決定部１９０４は、特定した演算可能ユニットのうち、問題を実行していない空きのユニットを含む最適化装置４０８（＄ｊ）を、組合せ最適化問題を振り分ける最適化装置４０８に決定してもよい。また、特定した演算可能ユニットに空きのユニットが存在しない場合には、第２の決定部１９０４は、演算可能ユニットを含む最適化装置４０８のうち、処理待ちキューに溜まっている問題の数が最小の最適化装置４０８（＄ｊ）を、組合せ最適化問題を振り分ける最適化装置４０８に決定してもよい。
【０２９７】
なお、組合せ最適化問題の振り分け先の決定例については、図２３〜図２６を用いて後述する。
【０２９８】
実行制御部１９０５は、第２の決定部１９０４が決定した最適化装置４０８で、第１の決定部１９０３が当該最適化装置４０８について決定されたパーティションモードにより、組合せ最適化問題の演算を実行させる。具体的には、例えば、実行制御部１９０５は、組合せ最適化問題の振り分け先として決定されたユニットを含む最適化装置４０８（＄ｊ）の制御部５０４に対して、当該ユニットを指定して組合せ最適化問題の演算を実行させる。
【０２９９】
より詳細に説明すると、例えば、実行制御部１９０５は、問題に応じた初期値および動作条件を最適化装置４０８（＄ｊ）に入力する。初期値は、例えば、エネルギー値Ｅ、ローカルフィールドｈｉ、スピンビットｑｉ、温度パラメータＴの初期値および重み係数Ｗなどを含む。また、動作条件は、１つの温度パラメータでの状態の更新回数Ｎ１、温度パラメータの変更回数Ｎ２および温度パラメータの下げ幅などを含む。
【０３００】
最適化装置４０８（＄ｊ）において、制御部５０４は、入力された初期値および動作条件を、各ＬＦＥのレジスタおよびＳＲＡＭに設定する。なお、制御部５０４は、使用されないＬＦＥがある場合、当該ＬＦＥのＳＲＡＭに、Ｗとして、例えば全て０を設定する。
【０３０１】
実行制御部１９０５は、最適化装置４０８（＄ｊ）に演算開始フラグ（例えば、演算開始フラグ＝１）を入力する。制御部５０４は、演算開始フラグの入力を受け付け、実行制御部１９０５から指定されたユニット（ＬＦＢ５０５）による演算を開始する。ユニットの指定は、例えば、ユニットに対応するパーティションを特定する情報（ＬＦＢの識別番号など）を入力することにより行われる。
【０３０２】
また、第１の決定部１９０３は、複数の最適化装置４０８の利用情報に基づき、利用する最適化装置４０８の増減有無を判定することにしてもよい。そして、第１の決定部１９０３は、判定した判定結果に応じて、利用する最適化装置４０８を増減させることにしてもよい。
【０３０３】
ここで、利用する最適化装置４０８を増加させるとは、例えば、図４に示した予備装置４０９を起動して、最適化装置４０８として動作させることである。この結果、最適化問題演算装置１０１において利用可能な最適化装置４０８が１台増える（Ｍ＝Ｍ＋１）。一方、利用する最適化装置４０８を減少させるとは、最適化装置４０８をスリープ状態にして（あるいは、電源を落として）、予備装置４０９とすることである。この結果、最適化問題演算装置１０１において利用可能な最適化装置４０８が１台減る（Ｍ＝Ｍ−１）。
【０３０４】
具体的には、例えば、第１の決定部１９０３は、利用状況テーブル１８００を参照して、全最適化装置４０８（＄１）〜４０８（＄３）の利用率が閾値γ以上の場合、利用する最適化装置４０８を増加させると判定してもよい。閾値γは、任意に設定可能であり、例えば、８０［％］程度の値に設定される。
【０３０５】
また、例えば、第１の決定部１９０３は、利用状況テーブル１８００を参照して、全最適化装置４０８（＄１）〜４０８（＄３）の待ち時間が閾値δ以上の場合、利用する最適化装置４０８を増加させると判定してもよい。閾値δは、任意に設定可能であり、例えば、３００［秒］程度の値に設定される。
【０３０６】
また、第１の決定部１９０３は、利用する最適化装置４０８を増加させた場合には、増加させた最適化装置４０８のパーティションモードを設定する。この際、第１の決定部１９０３は、増加させた最適化装置４０８に、あらかじめ決められたパーティションモード（デフォルトのパーティションモード）を設定する。
【０３０７】
より詳細に説明すると、例えば、まず、第１の決定部１９０３は、デフォルトのパーティションモードに対応する問題規模および精度を特定する。なお、デフォルトのパーティションモードに対応する問題規模および精度は、例えば、メモリ４０２、ディスク４０３などの記憶装置に記憶されている。
【０３０８】
例えば、デフォルトのパーティションモードを、パーティションモード「ＦＵＬＬ（規模：８Ｋ、精度１６ｂｉｔ）」とする。この場合、第１の決定部１９０３は、問題規模「８Ｋ（８１９２ｂｉｔ）」および精度「１６ｂｉｔ」を特定する。そして、第１の決定部１９０３は、特定した問題規模（スピンビット数）および精度（重み係数のビット数）を、増加させた最適化装置４０８に入力する。これにより、増加させた最適化装置４０８に、デフォルトのパーティションモードを設定することができる。
【０３０９】
また、例えば、第１の決定部１９０３は、利用状況テーブル１８００を参照して、全最適化装置４０８（＄１）〜４０８（＄３）の利用率が閾値β以下の場合、利用する最適化装置４０８を減少させると判定してもよい。そして、第１の決定部１９０３は、利用する最適化装置４０８を減少させると判定した場合、最適化装置４０８（＄１）〜４０８（＄３）のいずれかの最適化装置４０８をスリープ状態にして、予備装置４０９とする。
【０３１０】
減少させる最適化装置４０８は、例えば、最適化装置４０８（＄１）〜４０８（＄３）のうちの利用率が最も低い最適化装置４０８であってもよく、また、デフォルトのパーティションモードが設定されたいずれかの最適化装置４０８であってもよい。
【０３１１】
これにより、複数の最適化装置４０８の利用率が全体的に低い場合には、いずれかの最適化装置４０８をスリープ状態にして予備装置４０９とすることができ、最適化問題演算装置１０１の消費電力を抑えることができる。
【０３１２】
また、第２の決定部１９０４は、分割解法の使用の有無を判断することにしてもよい。ここで、分割解法とは、分割ソルバ等を使用して問題を分割し、規模の小さい問題にして解く手法である。分割解法としては、既存のいかなる技術を用いることにしてもよい。
【０３１３】
具体的には、例えば、第２の決定部１９０４は、組合せ最適化問題の規模が、複数の最適化装置４０８で解くことができる問題の最大規模より大きいか否かを判断することにしてもよい。ここで、組合せ最適化問題の規模が解くことができる最大規模より大きい場合、第２の決定部１９０４は、分割解法を使用すると判断する。一方、組合せ最適化問題の規模が解くことができる最大規模以下の場合、第２の決定部１９０４は、分割解法を使用しないと判断する。
【０３１４】
すなわち、組合せ最適化問題の規模が、複数の最適化装置４０８で解くことができる問題の最大規模より大きい場合、このままの状態では、組合せ最適化問題を解くことができない。そこで、最適化問題演算装置１０１は、分割解法を使用して、組合せ最適化問題を分割して解くことにしてもよい。
【０３１５】
第２の決定部１９０４は、分割解法を使用すると判断した場合、組合せ最適化問題を分割する。そして、第２の決定部１９０４は、分割した分割後の問題の規模または要求精度と、第１の決定部１９０３によって決定された複数の最適化装置４０８それぞれのパーティションモードとに基づき、分割後の問題を振り分ける最適化装置４０８を決定する。
【０３１６】
この場合、実行制御部１９０５は、決定された最適化装置４０８で、分割後の問題の演算を実行させる。組合せ最適化問題の解は、分割後の問題の解を統合したものとなる。これにより、組合せ最適化問題の規模が、複数の最適化装置４０８で解くことができる問題の最大規模より大きい場合であっても、組合せ最適化問題を解くことができる。
【０３１７】
また、第２の決定部１９０４は、スケーリングの使用の有無を判断することにしてもよい。ここで、スケーリングとは、問題を解くことができる最大精度の範囲内に係数を調整して解くことである。具体的には、例えば、第２の決定部１９０４は、組合せ最適化問題の要求精度が、複数の最適化装置４０８で解くことができる問題の最大精度の範囲内であるか否かを判断することにしてもよい。
【０３１８】
ここで、組合せ最適化問題の要求精度が解くことができる最大精度の範囲外の場合、第２の決定部１９０４は、スケーリングを使用すると判断する。一方、組合せ最適化問題の要求精度が解くことができる最大精度の範囲内の場合、第２の決定部１９０４は、スケーリングを使用しないと判断する。
【０３１９】
すなわち、組合せ最適化問題の要求精度が、複数の最適化装置４０８で解くことができる問題の最大精度の範囲外の場合、このままの状態では、組合せ最適化問題を解くことができない。そこで、最適化問題演算装置１０１は、スケーリングを使用して、組合せ最適化問題の係数を調整して解くことにしてもよい。
【０３２０】
具体的には、例えば、実行制御部１９０５は、例えば、組合せ最適化問題の振り分け先として決定された最適化装置４０８（ユニット）で解くことができる問題の最大精度の範囲内にスケーリング（Ｎ倍）した問題を解いた後に、エネルギーは元の問題に合うように再計算（１／Ｎ倍）したものを返すことにしてもよい。
【０３２１】
例えば、パーティションモード「ＦＵＬＬ（規模：８Ｋ、精度：１６ｂｉｔ）」の場合、最大精度が「１６ｂｉｔ」のため、問題の二次項の係数に「３２７６７００」が指定されると、このままの状態では解くことができない。この場合、実行制御部１９０５は、例えば、１／１００にスケールダウンして、二次項の係数が３２７６７の問題として解いた後に、エネルギーは元の問題に合うように再計算（１００倍）したものを返す。
【０３２２】
これにより、組合せ最適化問題の要求精度が、最適化装置４０８で解くことができる問題の最大精度の範囲外であっても、組合せ最適化問題を解くことができる。
【０３２３】
なお、受付部１９０１が受け付けた組合せ最適化問題の情報は、例えば、第２の決定部１９０４による振り分け先の決定に先立って、複数の最適化装置４０８に対応する全体キューに入力されることにしてもよい。また、第１の決定部１９０３は、全体キューに入力された、特定の規模（あるいは、要求精度）の問題の数が所定数を超えたか否かを判断することにしてもよい。
【０３２４】
そして、例えば、特定の規模の問題の数が所定数を超えた場合には、第１の決定部１９０３は、特定の規模の問題の待ち合わせが今後生じる可能性が高いと判断して、利用率が閾値β以下の最適化装置４０８のパーティションモードを、特定の規模に対応するパーティションモードに変更することにしてもよい。これにより、問題を振り分ける前の段階で、今後待ち合わせが発生する問題を予測して、最適化装置４０８のパーティションモードの変更を行うことができる。
【０３２５】
（利用状況テーブル１８００の記憶内容の変遷例）
つぎに、利用状況テーブル１８００の記憶内容の変遷例について説明する。
【０３２６】
図２２は、利用状況テーブル１８００の記憶内容の変遷例を示す説明図である。ここでは、最適化装置４０８（＄３）のパーティションモードが、パーティションモード「４Ｐ」からパーティションモード「ＦＵＬＬ（規模：８Ｋ、精度１６ｂｉｔ）」に変更された場合を想定する。
【０３２７】
より具体的には、利用率が閾値β以下の最適化装置４０８（＄３）のパーティションモードが、待ち時間が閾値α以上の最適化装置４０８（＄１）と同じパーティションモードに変更され、しばらく運用された場合を想定する。この結果、利用状況テーブル１８００に利用状況情報２２００−１〜２２００−３が記憶されている。
【０３２８】
利用状況情報２２００−１によれば、「８Ｋ」の規模の問題を解くことができるユニット３が増えたことにより、ユニット１（最適化装置４０８（＄１））の待ち時間が、「３００［秒］」に短縮されたことがわかる。また、利用状況情報２２００−３によれば、最適化装置４０８（＄３）のパーティションモードを変更したことにより、最適化装置４０８（＄３）の利用率が３０［％］まで上昇したことがわかる。
【０３２９】
この場合、待ち時間が閾値α以上の最適化装置４０８、および、利用率が閾値β以下の最適化装置４０８は存在しない。このため、第１の決定部１９０３は、各最適化装置４０８（＄１）〜４０８（＄３）のパーティションモードを、現在のパーティションモードのままとする（現状維持）。
【０３３０】
（組合せ最適化問題の振り分け先の決定例）
つぎに、図２３〜図２６を用いて、組合せ最適化問題の振り分け先の決定例について説明する。
【０３３１】
＜クラウドのサーバに適用＞
ここでは、最適化問題演算装置１０１をクラウドのサーバに適用し、全パーティションモード（ＦＵＬＬ、２Ｐ、４Ｐ、８Ｐ）のユニットを用意する場合について説明する。まず、最適化問題演算装置１０１（クラウド）が有するモード設定テーブル２３００の記憶内容について説明する。モード設定テーブル２３００の記憶内容は、あらかじめ用意されたユニットが異なるため、図１７に示したモード設定テーブル１７００と記憶内容が異なる。ここでは、最適化問題演算装置１０１が有する最適化装置４０８（＄１）〜４０８（＄Ｍ）を、「最適化装置４０８（＄１）〜４０８（＄５）」とする（Ｍ＝５）。
【０３３２】
図２３は、モード設定テーブル２３００の記憶内容の一例を示す説明図である。図２３において、モード設定テーブル２３００は、ユニットＩＤ、パーティションモード、問題規模および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報２３００−１〜２３００−１６をレコードとして記憶する。
【０３３３】
つぎに、最適化問題演算装置１０１（クラウド）が用いる振り分け先テーブル２４００について説明する。振り分け先テーブル２４００は、例えば、メモリ４０２、ディスク４０４などの記憶装置に記憶される。
【０３３４】
図２４は、振り分け先テーブル２４００の記憶内容の一例を示す説明図である。図２４において、振り分け先テーブル２４００は、問題番号、問題規模、精度、演算可能ユニットおよび振り分け先のフィールドを有し、各フィールドに情報を設定することで、振り分け先情報（例えば、振り分け先情報２４００−１〜２４００−８）をレコードとして記憶する。
【０３３５】
ここで、問題番号は、計算対象の問題（組合せ最適化問題）を識別する識別子である。問題規模は、問題の規模を示す。精度は、問題の要求精度を示す。演算可能ユニットは、問題の演算を行う候補となるユニットである。振り分け先は、問題を振り分けるユニットを示す。
【０３３６】
以下、問題Ｑ１〜Ｑ８を順に受け付けた場合を例に挙げて、各問題Ｑ１〜Ｑ８の振り分け先の決定例について説明する。
【０３３７】
・問題Ｑ１を受け付けた場合
まず、受付部１９０１が問題Ｑ１を受け付けた場合、第２の決定部１９０４は、問題Ｑ１の規模および要求精度を取得する。ここでは、問題Ｑ１の規模は「１Ｋ」であり、問題Ｑ１の要求精度は「１２８ｂｉｔ」である。つぎに、第２の決定部１９０４は、図２３に示したモード設定テーブル２３００を参照して、問題Ｑ１の演算可能ユニットを特定する。
【０３３８】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ１の規模「１Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット５−１，５−２，５−３，５−４，５−５，５−６，５−７，５−８が特定される。
【０３３９】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ１の要求精度「１２８ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、ユニット５−１，５−２，５−３，５−４，５−５，５−６，５−７，５−８のいずれのユニットも除外されない。
【０３４０】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ１を振り分けるユニットに決定する。なお、空きのユニットが複数存在する場合には、第２の決定部１９０４は、例えば、ユニットＩＤの枝番部分が最も若いユニットに決定してもよい。ここでは、演算可能ユニット５−１が、問題Ｑ１を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−１が記憶される。
【０３４１】
・問題Ｑ２を受け付けた場合
つぎに、受付部１９０１が問題Ｑ２を受け付けた場合、第２の決定部１９０４は、問題Ｑ２の規模および要求精度を取得する。ここでは、問題Ｑ２の規模は「４Ｋ」であり、問題Ｑ２の要求精度は「３２ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ２の演算可能ユニットを特定する。
【０３４２】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ２の規模「４Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット２，３−１，３−２が特定される。
【０３４３】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ２の要求精度「３２ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、ユニット２，３−１，３−２のいずれのユニットも除外されない。ただし、ユニット２については、問題Ｑ２の要求精度「３２ｂｉｔ」よりも高い精度の問題を解くことができる。このため、第２の決定部１９０４は、３２ｂｉｔよりも高い精度の問題が入力されることを想定して、演算可能ユニットからユニット２を除外する。すなわち、演算可能ユニットは、ユニット３−１，３−２となる。
【０３４４】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ２を振り分けるユニットに決定する。ここでは、演算可能ユニット３−１が、問題Ｑ２を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−２が記憶される。
【０３４５】
・問題Ｑ３を受け付けた場合
つぎに、受付部１９０１が問題Ｑ３を受け付けた場合、第２の決定部１９０４は、問題Ｑ３の規模および要求精度を取得する。ここでは、問題Ｑ３の規模は「８Ｋ」であり、問題Ｑ３の要求精度は「１６ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ３の演算可能ユニットを特定する。
【０３４６】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ３の規模「８Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット１が特定される。
【０３４７】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ３の要求精度「１６ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、問題Ｑ３の要求精度「１６ｂｉｔ」が、ユニット１で解くことができる問題の最大精度の範囲内のため、ユニット１は除外されない。
【０３４８】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ３を振り分けるユニットに決定する。ここでは、演算可能ユニット１が、問題Ｑ３を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−３が記憶される。
【０３４９】
・問題Ｑ４を受け付けた場合
つぎに、受付部１９０１が問題Ｑ４を受け付けた場合、第２の決定部１９０４は、問題Ｑ４の規模および要求精度を取得する。ここでは、問題Ｑ４の規模は「４Ｋ」であり、問題Ｑ４の要求精度は「６４ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ４の演算可能ユニットを特定する。
【０３５０】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ４の規模「４Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット２，３−１，３−２が特定される。
【０３５１】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ４の要求精度「６４ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、問題Ｑ４の要求精度「６４ｂｉｔ」が、ユニット３−１，３−２で解くことができる問題の最大精度の範囲外となる。このため、演算可能ユニットからユニット３−１，３−２が除外される。すなわち、演算可能ユニットは、ユニット２となる。
【０３５２】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ４を振り分けるユニットに決定する。ここでは、演算可能ユニット２が、問題Ｑ４を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−４が記憶される。
【０３５３】
・問題Ｑ５を受け付けた場合
つぎに、受付部１９０１が問題Ｑ５を受け付けた場合、第２の決定部１９０４は、問題Ｑ５の規模および要求精度を取得する。ここでは、問題Ｑ５の規模は「２Ｋ」であり、問題Ｑ５の要求精度は「６４ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ５の演算可能ユニットを特定する。
【０３５４】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ５の規模「２Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット４−１，４−２，４−３，４−４が特定される。
【０３５５】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ５の要求精度「６４ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、ユニット４−１，４−２，４−３，４−４のいずれのユニットも除外されない。
【０３５６】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ５を振り分けるユニットに決定する。ここでは、演算可能ユニット４−１が、問題Ｑ５を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−５が記憶される。
【０３５７】
・問題Ｑ６を受け付けた場合
つぎに、受付部１９０１が問題Ｑ６を受け付けた場合、第２の決定部１９０４は、問題Ｑ６の規模および要求精度を取得する。ここでは、問題Ｑ６の規模は「１Ｋ」であり、問題Ｑ６の要求精度は「１２８ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ６の演算可能ユニットを特定する。
【０３５８】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ６の規模「１Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット５−１，５−２，５−３，５−４，５−５，５−６，５−７，５−８が特定される。
【０３５９】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ６の要求精度「１２８ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、ユニット５−１，５−２，５−３，５−４，５−５，５−６，５−７，５−８のいずれのユニットも除外されない。
【０３６０】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ６を振り分けるユニットに決定する。ここでは、ユニット５−１が問題Ｑ１の振り分け先となっている（振り分け先情報２４００−１）。このため、演算可能ユニット５−２が、問題Ｑ６を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−６が記憶される。
【０３６１】
・問題Ｑ７を受け付けた場合
つぎに、受付部１９０１が問題Ｑ７を受け付けた場合、第２の決定部１９０４は、問題Ｑ７の規模および要求精度を取得する。ここでは、問題Ｑ７の規模は「１Ｋ」であり、問題Ｑ７の要求精度は「１２８ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ７の演算可能ユニットを特定する。
【０３６２】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ７の規模「１Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット５−１，５−２，５−３，５−４，５−５，５−６，５−７，５−８が特定される。
【０３６３】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ７の要求精度「１２８ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、ユニット５−１，５−２，５−３，５−４，５−５，５−６，５−７，５−８のいずれのユニットも除外されない。
【０３６４】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ７を振り分けるユニットに決定する。ここでは、ユニット５−１，５−２が問題Ｑ１，Ｑ６の振り分け先となっている（振り分け先情報２４００−１，２４００−６）。このため、演算可能ユニット５−３が、問題Ｑ７を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−７が記憶される。
【０３６５】
・問題Ｑ８を受け付けた場合
つぎに、受付部１９０１が問題Ｑ８を受け付けた場合、第２の決定部１９０４は、問題Ｑ８の規模および要求精度を取得する。ここでは、問題Ｑ８の規模は「４Ｋ」であり、問題Ｑ８の要求精度は「３２ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２３００を参照して、問題Ｑ８の演算可能ユニットを特定する。
【０３６６】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ８の規模「４Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２３の例では、ユニット２，３−１，３−２が特定される。
【０３６７】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ８の要求精度「３２ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２３の例では、ユニット２，３−１，３−２のいずれのユニットも除外されない。ただし、ユニット２については、問題Ｑ８の要求精度「３２ｂｉｔ」よりも高い精度の問題を解くことができる。このため、演算可能ユニットからユニット２は除外される。すなわち、演算可能ユニットは、ユニット３−１，３−２となる。
【０３６８】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ８を振り分けるユニットに決定する。ここでは、ユニット３−１が問題Ｑ２の振り分け先となっている（振り分け先情報２４００−２）。このため、演算可能ユニット３−２が、問題Ｑ８を振り分けるユニットに決定される。この結果、振り分け先テーブル２４００に振り分け先情報２４００−８が記憶される。
【０３６９】
なお、実行制御部１９０５は、例えば、振り分け先テーブル２４００を参照して、第２の決定部１９０４によって決定された各問題Ｑ１〜Ｑ８を振り分けるユニットを特定することができる。また、各問題の演算が完了すると、各問題に対応する振り分け先テーブル２４００内の振り分け先情報が削除される。
【０３７０】
＜オンプレのサーバに適用＞
つぎに、最適化問題演算装置１０１をオンプレのサーバに適用し、一部のパーティションモードのユニットのみを用意する場合について説明する。まず、最適化問題演算装置１０１（オンプレ）が有するモード設定テーブル２５００の記憶内容について説明する。モード設定テーブル２５００の記憶内容は、あらかじめ用意されたユニットが異なるため、図１７に示したモード設定テーブル１７００と記憶内容が異なる。ここでは、最適化問題演算装置１０１が有する最適化装置４０８（＄１）〜４０８（＄Ｍ）を、「最適化装置４０８（＄１），４０８（＄２）」とする（Ｍ＝２）。
【０３７１】
図２５は、モード設定テーブル２５００の記憶内容の一例を示す説明図である。図２５において、モード設定テーブル２５００は、ユニットＩＤ、パーティションモード、問題規模および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報２５００−１〜２５００−９をレコードとして記憶する。
【０３７２】
つぎに、最適化問題演算装置１０１（オンプレ）が用いる振り分け先テーブル２６００について説明する。
【０３７３】
図２６は、振り分け先テーブル２６００の記憶内容の一例を示す説明図である。図２６において、振り分け先テーブル２６００は、問題番号、問題規模、精度、演算可能ユニットおよび振り分け先のフィールドを有し、各フィールドに情報を設定することで、振り分け先情報（例えば、振り分け先情報２６００−１〜２６００−５）をレコードとして記憶する。
【０３７４】
以下、問題Ｑ１’〜Ｑ５’を順に受け付けた場合を例に挙げて、各問題Ｑ１’〜Ｑ５’の振り分け先の決定例について説明する。
【０３７５】
・問題Ｑ１’を受け付けた場合
まず、受付部１９０１が問題Ｑ１’を受け付けた場合、第２の決定部１９０４は、問題Ｑ１’の規模および要求精度を取得する。ここでは、問題Ｑ１’の規模は「１Ｋ」であり、問題Ｑ１’の要求精度は「１２８ｂｉｔ」である。つぎに、第２の決定部１９０４は、図２５に示したモード設定テーブル２５００を参照して、問題Ｑ１’の演算可能ユニットを特定する。
【０３７６】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ１’の規模「１Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２５の例では、ユニット２−１，２−２，２−３，２−４，２−５，２−６，２−７，２−８が特定される。
【０３７７】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ１’の要求精度「１２８ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２５の例では、ユニット２−１，２−２，２−３，２−４，２−５，２−６，２−７，２−８のいずれのユニットも除外されない。
【０３７８】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ１’を振り分けるユニットに決定する。ここでは、演算可能ユニット２−１が、問題Ｑ１’を振り分けるユニットに決定される。この結果、振り分け先テーブル２６００に振り分け先情報２６００−１が記憶される。
【０３７９】
・問題Ｑ２’を受け付けた場合
つぎに、受付部１９０１が問題Ｑ２’を受け付けた場合、第２の決定部１９０４は、問題Ｑ２’の規模および要求精度を取得する。ここでは、問題Ｑ２’の規模は「８Ｋ」であり、問題Ｑ２’の要求精度は「１６ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２５００を参照して、問題Ｑ２’の演算可能ユニットを特定する。
【０３８０】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ２’の規模「８Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２５の例では、ユニット１が特定される。
【０３８１】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ２’の要求精度「１６ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２５の例では、問題Ｑ２’の要求精度「１６ｂｉｔ」が、ユニット１で解くことができる問題の最大精度の範囲内のため、ユニット１は除外されない。
【０３８２】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ２’を振り分けるユニットに決定する。ここでは、演算可能ユニット１が、問題Ｑ２’を振り分けるユニットに決定される。この結果、振り分け先テーブル２６００に振り分け先情報２６００−２が記憶される。
【０３８３】
・問題Ｑ３’を受け付けた場合
つぎに、受付部１９０１が問題Ｑ３’を受け付けた場合、第２の決定部１９０４は、問題Ｑ３’の規模および要求精度を取得する。ここでは、問題Ｑ３’の規模は「１Ｋ」であり、問題Ｑ３’の要求精度は「１２８ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２５００を参照して、問題Ｑ３’の演算可能ユニットを特定する。
【０３８４】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ３’の規模「１Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２５の例では、ユニット２−１，２−２，２−３，２−４，２−５，２−６，２−７，２−８が特定される。
【０３８５】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ３’の要求精度「１２８ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２５の例では、ユニット２−１，２−２，２−３，２−４，２−５，２−６，２−７，２−８のいずれのユニットも除外されない。
【０３８６】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ３’を振り分けるユニットに決定する。ここでは、ユニット２−１が問題Ｑ１’の振り分け先となっている（振り分け先情報２６００−１）。このため、演算可能ユニット２−２が、問題Ｑ３’を振り分けるユニットに決定される。この結果、振り分け先テーブル２６００に振り分け先情報２６００−３が記憶される。
【０３８７】
・問題Ｑ４’を受け付けた場合
つぎに、受付部１９０１が問題Ｑ４’を受け付けた場合、第２の決定部１９０４は、問題Ｑ４’の規模および要求精度を取得する。ここでは、問題Ｑ４’の規模は「４Ｋ」であり、問題Ｑ４’の要求精度は「６４ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２５００を参照して、問題Ｑ４’の演算可能ユニットを特定する。
【０３８８】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ４’の規模「４Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２５の例では、ユニット１が特定される。
【０３８９】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ４’の要求精度「６４ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２５の例では、問題Ｑ４’の要求精度「６４ｂｉｔ」が、ユニット１で解くことができる問題の最大精度の範囲内のため、ユニット１は除外されない。
【０３９０】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ４’を振り分けるユニットに決定する。ここでは、ユニット１が問題Ｑ２’の振り分け先となっている（振り分け先情報２６００−２）。また、ユニット１以外に演算可能ユニットが存在しない。
【０３９１】
この場合、第２の決定部１９０４は、ユニット１で問題Ｑ２’の演算が終了するのを待つ。具体的には、例えば、第２の決定部１９０４は、ユニット１（最適化装置４０８（＄１））に対応する処理待ちキューに問題Ｑ４’を入れる。この結果、振り分け先テーブル２６００に振り分け先情報２６００−４が記憶される。振り分け先情報２６００−４では、振り分け先が「待機中」となっている。
【０３９２】
・問題Ｑ５’を受け付けた場合
つぎに、受付部１９０１が問題Ｑ５’を受け付けた場合、第２の決定部１９０４は、問題Ｑ５’の規模および要求精度を取得する。ここでは、問題Ｑ５’の規模は「１Ｋ」であり、問題Ｑ５’の要求精度は「１２８ｂｉｔ」である。つぎに、第２の決定部１９０４は、モード設定テーブル２５００を参照して、問題Ｑ５’の演算可能ユニットを特定する。
【０３９３】
具体的には、例えば、第２の決定部１９０４は、問題Ｑ５’の規模「１Ｋ」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図２５の例では、ユニット２−１，２−２，２−３，２−４，２−５，２−６，２−７，２−８が特定される。
【０３９４】
つぎに、第２の決定部１９０４は、特定した演算可能ユニットから、問題Ｑ５’の要求精度「１２８ｂｉｔ」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図２５の例では、ユニット２−１，２−２，２−３，２−４，２−５，２−６，２−７，２−８のいずれのユニットも除外されない。
【０３９５】
そして、第２の決定部１９０４は、演算可能ユニットのうちの空きのユニットを、問題Ｑ５’を振り分けるユニットに決定する。ここでは、ユニット２−１，２−２が問題Ｑ１’，Ｑ３’の振り分け先となっている（振り分け先情報２６００−１，２６００−３）。このため、演算可能ユニット２−３が、問題Ｑ５’を振り分けるユニットに決定される。この結果、振り分け先テーブル２６００に振り分け先情報２６００−５が記憶される。
【０３９６】
なお、ユニット１での問題Ｑ２’の演算が終了すると、振り分け先テーブル２６００から振り分け先情報２６００−２が削除され、ユニット１が、問題Ｑ４’を振り分けるユニットに決定される。この結果、振り分け先情報２６００−４の振り分け先に、ユニットＩＤ「１」が設定される。
【０３９７】
（最適化問題演算装置１０１の最適化問題演算処理手順）
つぎに、最適化問題演算装置１０１の最適化問題演算処理手順について説明する。最適化問題演算装置１０１の最適化問題演算処理は、例えば、組合せ最適化問題ごとに並列に実行される。
【０３９８】
図２７および図２８は、最適化問題演算装置１０１の最適化問題演算処理手順の一例を示すフローチャートである。図２７のフローチャートにおいて、まず、最適化問題演算装置１０１は、計算対象の組合せ最適化問題の情報を受け付ける（ステップＳ２７０１）。
【０３９９】
つぎに、最適化問題演算装置１０１は、モード設定テーブル１７００を参照して、全ユニットの情報（問題規模）を取得する（ステップＳ２７０２）。ユニットの情報（問題規模）は、ユニットで解くことができる問題の最大規模（スピンビット数）を示す情報である。つぎに、最適化問題演算装置１０１は、受け付けた組合せ最適化問題の規模を特定する（ステップＳ２７０３）。
【０４００】
そして、最適化問題演算装置１０１は、取得した全ユニットの情報（問題規模）に基づいて、特定した組合せ最適化問題の規模が、全ユニットの問題規模のうちの最大規模より大きいか否かを判断する（ステップＳ２７０４）。ここで、組合せ最適化問題の規模が最大規模より大きい場合（ステップＳ２７０４：Ｙｅｓ）、最適化問題演算装置１０１は、分割解法使用モードが設定されているか否かを判断する（ステップＳ２７０５）。
【０４０１】
なお、分割解法使用モードとは、分割解法により問題を分割して解くモードである。分割解法使用モードは、あらかじめ任意に設定可能である。
【０４０２】
ここで、分割解法使用モードが設定されている場合（ステップＳ２７０５：Ｙｅｓ）、最適化問題演算装置１０１は、分割ソルバ等により、受け付けた組合せ最適化問題を分割して（ステップＳ２７０６）、ステップＳ２７０１に戻る。この結果、ステップＳ２７０１において、分割後の問題が計算対象の組合せ最適化問題として受け付けられる。
【０４０３】
一方、分割解法使用モードが設定されていない場合（ステップＳ２７０５：Ｎｏ）、最適化問題演算装置１０１は、ユーザに対してエラーを返して（ステップＳ２７０７）、本フローチャートによる一連の処理を終了する。
【０４０４】
また、ステップＳ２７０４において、組合せ最適化問題の規模が最大規模より大きくない場合（ステップＳ２７０４：Ｎｏ）、最適化問題演算装置１０１は、モード設定テーブル１７００を参照して、組合せ最適化問題の規模に応じた演算可能ユニットを特定する（ステップＳ２７０８）。具体的には、例えば、最適化問題演算装置１０１は、組合せ最適化問題の規模以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。
【０４０５】
つぎに、最適化問題演算装置１０１は、特定した演算可能ユニットのうち選択されていない未選択のユニットを選択する（ステップＳ２７０９）。そして、最適化問題演算装置１０１は、モード設定テーブル１７００を参照して、選択したユニットが演算を実行中であるか否かを判断する（ステップＳ２７１０）。
【０４０６】
ここで、選択したユニットが演算を実行中でない場合（ステップＳ２７１０：Ｎｏ）、最適化問題演算装置１０１は、図２８に示すステップＳ２８０１に移行する。
【０４０７】
一方、選択したユニットが演算を実行中の場合（ステップＳ２７１０：Ｙｅｓ）、最適化問題演算装置１０１は、特定した演算可能ユニットのうち選択されていない未選択のユニットがあるか否かを判断する（ステップＳ２７１１）。ここで、未選択のユニットがある場合（ステップＳ２７１１：Ｙｅｓ）、最適化問題演算装置１０１は、ステップＳ２７０９に戻る。
【０４０８】
一方、未選択のユニットがない場合（ステップＳ２７１１：Ｎｏ）、最適化問題演算装置１０１は、選択したユニットの演算が終了するまで待機して（ステップＳ２７１２）、図２８に示すステップＳ２８０１に移行する。
【０４０９】
図２８のフローチャートにおいて、まず、最適化問題演算装置１０１は、選択したユニットを、組合せ最適化問題の振り分け先のユニットに決定する（ステップＳ２８０１）。そして、最適化問題演算装置１０１は、モード設定テーブル１７００を参照して、決定した振り分け先のユニットの情報（精度）を取得する（ステップＳ２８０２）。ユニットの情報（精度）は、ユニットで解くことができる問題の最大精度（重み係数のビット数）を示す情報である。
【０４１０】
つぎに、最適化問題演算装置１０１は、受け付けた組合せ最適化問題の要求精度を特定する（ステップＳ２８０３）。そして、最適化問題演算装置１０１は、取得したユニットの情報（精度）に基づいて、特定した組合せ最適化問題の要求精度が、振り分け先のユニットの最大精度の範囲内であるか否かを判断する（ステップＳ２８０４）。
【０４１１】
ここで、組合せ最適化問題の要求精度が最大精度の範囲外の場合（ステップＳ２８０４：Ｎｏ）、最適化問題演算装置１０１は、自動スケーリングモードが設定されているか否かを判断する（ステップＳ２８０５）。なお、自動スケーリングモードとは、最大精度の範囲内にスケーリングして問題を解くモードである。自動スケーリングモードは、あらかじめ任意に設定可能である。
【０４１２】
ここで、自動スケーリングモードが設定されていない場合（ステップＳ２８０５：Ｎｏ）、最適化問題演算装置１０１は、ユーザに対してエラーを返して（ステップＳ２８０６）、本フローチャートによる一連の処理を終了する。
【０４１３】
一方、自動スケーリングモードが設定されている場合（ステップＳ２８０５：Ｙｅｓ）、最適化問題演算装置１０１は、組合せ最適化問題を、振り分け先のユニットの最大精度の範囲内にスケーリング（Ｎ倍）する（ステップＳ２８０７）。
【０４１４】
つぎに、最適化問題演算装置１０１は、振り分け先のユニットでスケーリングした問題を解く（ステップＳ２８０８）。そして、最適化問題演算装置１０１は、元の問題に合うようにエネルギーは再計算（１／Ｎ倍）して（ステップＳ２８０９）、ステップＳ２８１１に移行する。
【０４１５】
また、ステップＳ２８０４において、組合せ最適化問題の要求精度が最大精度の範囲内の場合（ステップＳ２８０４：Ｙｅｓ）、最適化問題演算装置１０１は、振り分け先のユニットで組合せ最適化問題を解く（ステップＳ２８１０）。
【０４１６】
そして、最適化問題演算装置１０１は、ユーザに組合せ最適化問題の演算結果を返して（ステップＳ２８１１）、本フローチャートによる一連の処理を終了する。これにより、組合せ最適化問題の規模に応じた適切なハードウェアリソースを使用して演算を行うことができ、組合せ最適化問題を効率的に解くことができる。
【０４１７】
（最適化問題演算装置１０１のモード決定処理手順）
つぎに、最適化問題演算装置１０１のモード決定処理手順について説明する。最適化問題演算装置１０１のモード決定処理は、例えば、所定の時間間隔ごとに実行される。
【０４１８】
図２９は、最適化問題演算装置１０１のモード決定処理手順の一例を示すフローチャートである。図２９のフローチャートにおいて、まず、最適化問題演算装置１０１は、図２７に示したステップＳ２７０１において受け付けた各問題の実行履歴情報（例えば、図２０参照）に基づいて、各最適化装置４０８（＄ｊ）の待ち時間を算出する（ステップＳ２９０１）。
【０４１９】
つぎに、最適化問題演算装置１０１は、各問題の実行履歴情報（例えば、図２０参照）に基づいて、所定期間における各最適化装置４０８（＄ｊ）の利用率を算出する（ステップＳ２９０２）。算出された各最適化装置４０８（＄ｊ）の待ち時間および利用率は、利用状況テーブル１８００に記憶される。
【０４２０】
そして、最適化問題演算装置１０１は、利用状況テーブル１８００を参照して、待ち時間が閾値α以上の最適化装置４０８があるか否かを判断する（ステップＳ２９０３）。ここで、待ち時間が閾値α以上の最適化装置４０８がない場合（ステップＳ２９０３：Ｎｏ）、最適化問題演算装置１０１は、本フローチャートによる一連の処理を終了する。
【０４２１】
一方、待ち時間が閾値α以上の最適化装置４０８がある場合（ステップＳ２９０３：Ｙｅｓ）、最適化問題演算装置１０１は、モード設定テーブル１７００を参照して、待ち時間が閾値α以上の最適化装置４０８のパーティションモードを特定する（ステップＳ２９０４）。
【０４２２】
つぎに、最適化問題演算装置１０１は、利用状況テーブル１８００を参照して、利用率が閾値β以下の最適化装置４０８があるか否かを判断する（ステップＳ２９０５）。ここで、利用率が閾値β以下の最適化装置４０８がない場合（ステップＳ２９０５：Ｎｏ）、最適化問題演算装置１０１は、本フローチャートによる一連の処理を終了する。
【０４２３】
一方、利用率が閾値β以下の最適化装置４０８がある場合（ステップＳ２９０５：Ｙｅｓ）、最適化問題演算装置１０１は、利用率が閾値β以下の最適化装置４０８のパーティションモードを、ステップＳ２９０４において特定したパーティションモードに決定する（ステップＳ２９０６）。この際、最適化問題演算装置１０１は、利用率が閾値βより大きい最適化装置４０８については、現在のパーティションモードのままとする。
【０４２４】
そして、最適化問題演算装置１０１は、利用率が閾値β以下の最適化装置４０８のパーティションモードを、決定したパーティションモードに変更して（ステップＳ２９０７）、本フローチャートによる一連の処理を終了する。これにより、各最適化装置４０８（＄ｊ）の利用状況に応じて、各最適化装置４０８（＄ｊ）のパーティションモードを変更することができる。
【０４２５】
なお、ステップＳ２９０３において、全最適化装置４０８（＄ｊ）の待ち時間が閾値δ以上の場合、最適化問題演算装置１０１は、利用する最適化装置４０８を増加させることにしてもよい。また、ステップＳ２９０５において、全最適化装置４０８（＄ｊ）の利用率が閾値γ以上の場合、最適化問題演算装置１０１は、利用する最適化装置４０８を増加させることにしてもよい。
【０４２６】
また、ステップＳ２９０３において、待ち時間が閾値α以上の最適化装置４０８がない場合（ステップＳ２９０３：Ｎｏ）、最適化問題演算装置１０１は、全最適化装置４０８（＄ｊ）の利用率が閾値β以下であるか否かを判断することにしてもよい。そして、全最適化装置４０８（＄ｊ）の利用率が閾値β以下の場合、最適化問題演算装置１０１は、利用する最適化装置４０８を減少させることにしてもよい。
【０４２７】
（最適化装置４０８の装置構成例）
つぎに、最適化装置４０８のより具体的な装置構成例について説明する。以下に説明する最適化装置４０８（＄ｊ）は、図５〜図１６を用いて説明した最適化装置４０８（＄ｊ）と回路構成の一部が異なる。
【０４２８】
図３０は、最適化装置４０８（＄ｊ）の装置構成例を示す説明図である。最適化装置４０８（＄ｊ）は、複数のＬＦＢを有する。最適化装置４０８（＄ｊ）は、当該複数のＬＦＢを制御する制御部５０４を有する（図示を省略している）。
【０４２９】
ここでは、一例として、１つのＬＦＢに属するＬＦＥの数をｍ個（ｍは２以上の整数）とし、最適化装置４０８（＄ｊ）は、ＬＦＢ７０ａ，７０ｂ，７０ｃ，７０ｄ，７０ｅ，７０ｆ，７０ｇ，７０ｈを有するものとする。この場合、最適化装置４０８（＄ｊ）は、合計で８ｍ個のＬＦＥを有し、最大規模８ｍビットを実現可能である。最適化装置４０８（＄ｊ）では、例えば、ＬＦＢ７０ａ，７０ｂ，７０ｃ，７０ｄ，７０ｅ，７０ｆ，７０ｇ，７０ｈのうちの１以上のＬＦＢによってパーティションが実現される。ただし、最適化装置４０８（＄ｊ）が備えるＬＦＢの個数は、８個に限らず、他の個数でもよい。
【０４３０】
ＬＦＢ７０ａ，…，７０ｈが備える複数のＬＦＥは、図２に示したビット演算回路１ａ１，…，１ａＮの一例である。ＬＦＢ７０ａ，…，７０ｈの各々は、所定数（ｍ個）のＬＦＥを要素に含む、ＬＦＥの１つのグループであると言える。また、ＬＦＢ７０ａ，…，７０ｈの各々には、識別番号＃０〜＃７が割り当てられている。
【０４３１】
最適化装置４０８（＄ｊ）は、さらに、規模結合回路９１、モード設定レジスタ９２、加算器９３ａ，９３ｂ，９３ｃ，９３ｄ，９３ｅ，９３ｆ，９３ｇ，９３ｈおよびＥ格納レジスタ９４ａ，９４ｂ，９４ｃ，９４ｄ，９４ｅ，９４ｆ，９４ｇ，９４ｈを有する。
【０４３２】
ここで、ＬＦＢ７０ａは、ＬＦＥ７１ａ１，…，ＬＦＥ７１ａｍ、ランダムセレクタ部７２、閾値生成部７３、乱数生成部７４およびモード設定レジスタ７５を有する。ＬＦＥ７１ａ１，…，ＬＦＥ７１ａｍ、ランダムセレクタ部７２、閾値生成部７３、乱数生成部７４およびモード設定レジスタ７５は、図８で説明した同名のハードウェアに相当するため、説明を省略する。ただし、ランダムセレクタ部７２は、選択した反転ビットに対する状態信号（フラグＦx0、スピンビットｑx0およびエネルギー変化量ΔＥx0）の組を、規模結合回路９１に出力する。また、ランダムセレクタ部７２は、フラグ制御部５２ａを有さなくてよい（ただし、有してもよい）。例えば、ランダムセレクタ部７２では、各ＬＦＥからの状態信号が、フラグ制御部５２ａを介さずに、ランダムセレクタ部７２の初段の各選択回路に２つずつ入力される。なお、ＬＦＢ７０ｂ，…，７０ｈも、ＬＦＢ７０ａと同様の回路構成を有する。
【０４３３】
規模結合回路９１は、ＬＦＢ７０ａ，…，７０ｈの各々から状態信号を受け付け、状態信号に基づいて反転ビットの選択を行う。規模結合回路９１は、反転ビットに関する信号を、ＬＦＢ７０ａ，…，７０ｈの各ＬＦＥに供給する。
【０４３４】
具体的には、規模結合回路９１は、フラグＦy0、ビットｑy0および反転ビットを示すｉｎｄｅｘ＝ｙ０をＬＦＢ７０ａ１のＬＦＥ７１ａ１，…，７１ａｍに出力する。ここで、以降の図では、ランダムセレクタ部７２および規模結合回路９１により出力される「ｉｎｄｅｘ＝ｘ０」などの表記を「ｘ０」のように略記することがある。規模結合回路９１は、エネルギー変化量ΔＥy0を加算器９３ａに出力する。
【０４３５】
また、規模結合回路９１は、フラグＦy1、ビットｑy1および反転ビットを示すｉｎｄｅｘ＝ｙ１をＬＦＢ７０ｂの各ＬＦＥに供給する。エネルギー変化量ΔＥy1を加算器９３ｂに出力する。
【０４３６】
規模結合回路９１は、フラグＦy2、ビットｑy2および反転ビットを示すｉｎｄｅｘ＝ｙ２をＬＦＢ７０ｃの各ＬＦＥに出力する。規模結合回路９１は、エネルギー変化量ΔＥy2を加算器９３ｃに出力する。
【０４３７】
規模結合回路９１は、フラグＦy3、ビットｑy3および反転ビットを示すｉｎｄｅｘ＝ｙ３をＬＦＢ７０ｄの各ＬＦＥに出力する。規模結合回路９１は、エネルギー変化量ΔＥy3を加算器９３ｄに出力する。
【０４３８】
規模結合回路９１は、フラグＦy4、ビットｑy4および反転ビットを示すｉｎｄｅｘ＝ｙ４をＬＦＢ７０ｅの各ＬＦＥに出力する。規模結合回路９１は、エネルギー変化量ΔＥy4を加算器９３ｅに出力する。
【０４３９】
規模結合回路９１は、フラグＦy5、ビットｑy5および反転ビットを示すｉｎｄｅｘ＝ｙ５をＬＦＢ７０ｆの各ＬＦＥに出力する。規模結合回路９１は、エネルギー変化量ΔＥy5を加算器９３ｆに出力する。
【０４４０】
規模結合回路９１は、フラグＦy6、ビットｑy6および反転ビットを示すｉｎｄｅｘ＝ｙ６をＬＦＢ７０ｇの各ＬＦＥに出力する。規模結合回路９１は、エネルギー変化量ΔＥy6を加算器９３ｇに出力する。
【０４４１】
規模結合回路９１は、フラグＦy7、ビットｑy7および反転ビットを示すｉｎｄｅｘ＝ｙ７をＬＦＢ７０ｈの各ＬＦＥに出力する。規模結合回路９１は、エネルギー変化量ΔＥy7を加算器９３ｈに出力する。
【０４４２】
ＬＦＢ７０ａ，…，７０ｈの各々が有するランダムセレクタ部（ランダムセレクタ部７２を含む）および規模結合回路９１は、図２に示した選択回路部２の一例である。
【０４４３】
モード設定レジスタ９２は、規模結合回路９１に対する動作モード（パーティションモード）の設定を行う。例えば、モード設定レジスタ９２は、最適化問題演算装置１０１の実行制御部１９０５から入力される規模（スピンビット数）および精度（重み係数のビット数）に応じて、規模結合回路９１に対する動作モード（パーティションモード）の設定を行う。モード設定レジスタ９２は、モード設定レジスタ７５によりＬＦＥ７１ａ１，…，７１ａｍおよびランダムセレクタ部７２に設定される動作モードと同じ動作モードを規模結合回路９１に設定する。モード設定レジスタ７５，９２によるモード設定の詳細は後述される。ＬＦＢ７０ａ，…，７０ｈの各々が有するモード設定レジスタ（モード設定レジスタ７５を含む）およびモード設定レジスタ９２は、図２に示した設定変更部５の一例である。
【０４４４】
加算器９３ａは、ΔＥy0を、Ｅ格納レジスタ９４ａに格納されているエネルギー値Ｅ0に加算することで、当該エネルギー値Ｅ0を更新する。Ｅ格納レジスタ９４ａは、例えば、クロック信号（図示を省略している）に同期して（他のＥ格納レジスタも同様）、加算器９３ａにより計算されたエネルギー値Ｅ0を取り込む。
【０４４５】
加算器９３ｂは、ΔＥy1を、Ｅ格納レジスタ９４ｂに格納されているエネルギー値Ｅ1に加算することで、当該エネルギー値Ｅ1を更新する。Ｅ格納レジスタ９４ｂは、加算器９３ｂにより計算されたエネルギー値Ｅ1を取り込む。
【０４４６】
加算器９３ｃは、ΔＥy2を、Ｅ格納レジスタ９４ｃに格納されているエネルギー値Ｅ2に加算することで、当該エネルギー値Ｅ2を更新する。Ｅ格納レジスタ９４ｃは、加算器９３ｃにより計算されたエネルギー値Ｅ2を取り込む。
【０４４７】
加算器９３ｄは、ΔＥy3を、Ｅ格納レジスタ９４ｄに格納されているエネルギー値Ｅ3に加算することで、当該エネルギー値Ｅ3を更新する。Ｅ格納レジスタ９４ｄは、加算器９３ｄにより計算されたエネルギー値Ｅ3を取り込む。
【０４４８】
加算器９３ｅは、ΔＥy4を、Ｅ格納レジスタ９４ｅに格納されているエネルギー値Ｅ4に加算することで、当該エネルギー値Ｅ4を更新する。Ｅ格納レジスタ９４ｅは、加算器９３ｅにより計算されたエネルギー値Ｅ4を取り込む。
【０４４９】
加算器９３ｆは、ΔＥy5を、Ｅ格納レジスタ９４ｆに格納されているエネルギー値Ｅ5に加算することで、当該エネルギー値Ｅ5を更新する。Ｅ格納レジスタ９４ｆは、加算器９３ｆにより計算されたエネルギー値Ｅ5を取り込む。
【０４５０】
加算器９３ｇは、ΔＥy6を、Ｅ格納レジスタ９４ｇに格納されているエネルギー値Ｅ6に加算することで、当該エネルギー値Ｅ6を更新する。Ｅ格納レジスタ９４ｇは、加算器９３ｇにより計算されたエネルギー値Ｅ6を取り込む。
【０４５１】
加算器９３ｈは、ΔＥy7を、Ｅ格納レジスタ９４ｈに格納されているエネルギー値Ｅ7に加算することで、当該エネルギー値Ｅ7を更新する。Ｅ格納レジスタ９４ｈは、加算器９３ｈにより計算されたエネルギー値Ｅ7を取り込む。
【０４５２】
Ｅ格納レジスタ９４ａ，…，９４ｈの各々は、例えば、フリップフロップである。
【０４５３】
つぎに、ＬＦＢ７０ａの回路構成例を説明する。ＬＦＢ７０ｂ，…，７０ｈもＬＦＢ７０ａと同様の回路構成である。
【０４５４】
図３１は、ＬＦＢの回路構成例を示す説明図である。ＬＦＥ７１ａ１，７１ａ２，…，７１ａｍの各々は、スピンビットの１ビットとして用いられる。ｍは、２以上の整数であり、ＬＦＢ５０が備えるＬＦＥの数を示す。図３１の例では、一例として、ｍ＝１０２４としている。ただし、ｍは他の値でもよい。
【０４５５】
ＬＦＥ７１ａ１，７１ａ２，…，７１ａｍの各々には、識別情報（ｉｎｄｅｘ）が対応付けられている。ＬＦＥ７１ａ１，７１ａ２，…，７１ａｍの各々に対して、ｉｎｄｅｘ＝０，１，…，１０２３である。
【０４５６】
以下では、ＬＦＥ７１ａ１の回路構成を説明する。ＬＦＥ７１ａ２，…，７１ａｍも、ＬＦＥ７１ａ１と同様の回路構成により実現される。ＬＦＥ７１ａ２，…，７１ａｍの回路構成の説明については、以下の説明における各要素の符号の末尾の「ａ１」の部分を、「ａ２」，…，「ａｍ」の各々に置換して（例えば、「８０ａ１」の符号を「８０ａｍ」のように置換して）読み替えればよい。
【０４５７】
ＬＦＥ７１ａ１は、ＳＲＡＭ８０ａ１、精度切替回路８１ａ１、Δｈ生成部８２ａ１、加算器８３ａ１、ｈ格納レジスタ８４ａ１、反転判定部８５ａ１、ビット格納レジスタ８６ａ１、ΔＥ生成部８７ａ１、判定部８８ａ１を有する。
【０４５８】
ここで、ＳＲＡＭ８０ａ１、精度切替回路８１ａ１、Δｈ生成部８２ａ１、加算器８３ａ１、ｈ格納レジスタ８４ａ１、反転判定部８５ａ１、ビット格納レジスタ８６ａ１、ΔＥ生成部８７ａ１、判定部８８ａ１は、各々、図８で説明した同名のハードウェアと同様の機能を有する。ただし、ＳＲＡＭ８０ａ１（または精度切替回路８１ａ１）および反転判定部８５ａ１には、規模結合回路９１により出力されたｉｎｄｅｘ＝ｙ０および反転可否を示すフラグＦy0が供給される。また、Δｈ生成部８２ａ１には、規模結合回路９１により出力された反転ビットｑy0が供給される。
【０４５９】
モード設定レジスタ７５は、精度切替回路８１ａ１，８１ａ２，…，８１ａｍに対する重み係数のビット数（精度）の設定を行う。モード設定レジスタ７５は、ランダムセレクタ部７２に対して設定を行う信号線を有していない（ただし、当該信号線を有してもよい）。ここでは、一例として、上述した５種類のモードを利用可能である。
【０４６０】
第１のモードは、規模１ｋビット／精度１２８ビットのモードであり、パーティションモード「８Ｐ（８分割）」に対応する。規模１ｋビット／精度１２８ビットのモードは、ＬＦＢを１個使用する。当該モードの各パーティションは、ＬＦＢ７０ａ，…，７０ｈのいずれか１個だけで実現可能である。
【０４６１】
第２のモードは、規模２ｋビット／精度６４ビットのモードであり、パーティションモード「４Ｐ（４分割）」に対応する。規模２ｋビット／精度６４ビットのモードは、ＬＦＢを２個使用する。例えば、当該モードの各パーティションは、ＬＦＢ７０ａ，７０ｂの組合せ、ＬＦＢ７０ｃ，７０ｄの組合せ、ＬＦＢ７０ｅ，７０ｆの組合せ、および、ＬＦＢ７０ｇ，７０ｈの組合せのうちのいずれか１つの組合せで実現可能である。
【０４６２】
第３のモードは、規模４ｋビット／精度３２ビットのモードであり、パーティションモード「２Ｐ（２分割）」に対応する。規模４ｋビット／精度３２ビットのモードは、ＬＦＢを４個使用する。例えば、当該モードの各パーティションは、ＬＦＢ７０ａ，７０ｂ，７０ｃ，７０ｄの組合せ、および、ＬＦＢ７０ｅ，７０ｆ，７０ｇ，７０ｈの組合せのうちのいずれか１つの組合せで実現可能である。
【０４６３】
第４のモードは、規模８ｋビット／精度１６ビットのモードであり、パーティションモード「ＦＵＬＬ（規模：８Ｋ、精度：１６ｂｉｔ）」に対応する。規模８ｋビット／精度１６ビットのモードは、ＬＦＢを８個使用する。当該モードのパーティションは、ＬＦＢ７０ａ，…，７０ｈの組合せを用いて実現可能である。
【０４６４】
第５のモードは、規模４ｋビット／精度６４ビットのモードであり、パーティションモード「ＦＵＬＬ（規模：４Ｋ、精度：６４ｂｉｔ）」に対応する。規模４ｋビット／精度６４ビットのモードは、ＬＦＢを８個使用する。当該モードのパーティションは、ＬＦＢ７０ａ，…，７０ｈの組合せを用いて実現可能である。ただし、図１６で説明したように、１つのＬＦＢにおいて使用されるＬＦＥの数は、ＬＦＢ１つが備えるＬＦＥの数の半分となる。
【０４６５】
また、最適化装置４０８（＄ｊ）は、上記の規模１ｋビット／精度１２８ビットのモード、規模２ｋビット／精度６４ビットのモード、規模４ｋビット／精度３２ビットのモードを組み合せて、同一問題または他の問題の演算を並列に実行可能である。
【０４６６】
そのため、規模結合回路９１は、複数のＬＦＢ（ＬＦＢの組合せ）に対し、モード設定レジスタ９２によるスピンビット数の設定に応じて、スピンビット数に相当する数のＬＦＥを含むように、組み合せるＬＦＢ数（組合せるグループ数）を選択する。規模結合回路９１は、例えば、次の回路構成を有する。
【０４６７】
図３２は、規模結合回路の回路構成例を示す説明図である。規模結合回路９１は、複数段にわたってツリー状に接続された選択回路９１ａ１，９１ａ２，９１ａ３，９１ａ４，９１ｂ１，９１ｂ２，９１ｃ１と、乱数生成部９１ｄと、モード選択回路９１ｅ１，９１ｅ２，９１ｅ３，９１ｅ４，９１ｅ５，９１ｅ６，９１ｅ７，９１ｅ８を有する。
【０４６８】
初段の選択回路９１ａ１，…，９１ａ４の各々には、ＬＦＢ７０ａ，…，７０ｈのそれぞれが出力する変数ｑiとＦiとΔＥiとｉｎｄｅｘ＝ｉの組（状態信号）が２組ずつ入力される。例えば、選択回路９１ａ１には、ＬＦＢ７０ａ（＃０）が出力する（ｑx0，Ｆx0，ΔＥx0，ｉｎｄｅｘ＝ｘ０）の組と、ＬＦＢ７０ｂ（＃１）が出力する（ｑx1，Ｆx1，ΔＥx1，ｉｎｄｅｘ＝ｘ１）の組が入力される。また、選択回路９１ａ２には、ＬＦＢ７０ｃ（＃２）が出力する（ｑx2，Ｆx2，ΔＥx2，ｉｎｄｅｘ＝ｘ２）の組とＬＦＢ７０ｄ（＃３）が出力する（ｑx3，Ｆx3，ΔＥx3，ｉｎｄｅｘ＝ｘ３）の組が入力される。選択回路９１ａ３には、ＬＦＢ７０ｅ（＃４）が出力する（ｑx4，Ｆx4，ΔＥx4，ｉｎｄｅｘ＝ｘ４）の組とＬＦＢ７０ｆ（＃５）が出力する（ｑx5，Ｆx5，ΔＥx5，ｉｎｄｅｘ＝ｘ５）の組が入力される。選択回路９１ａ４には、ＬＦＢ７０ｇ（＃６）が出力する（ｑx6，Ｆx6，ΔＥx6，ｉｎｄｅｘ＝ｘ６）の組とＬＦＢ７０ｈ（＃７）が出力する（ｑx7，Ｆx7，ΔＥx7，ｉｎｄｅｘ＝ｘ７）の組が入力される。
【０４６９】
そして、選択回路９１ａ１，…，９１ａ４の各々は、乱数生成部９１ｄが出力する１ビット乱数に基づいて、２組のうちの一方の組の（ｘi，Ｆi，ΔＥi，ｉｎｄｅｘ＝ｉ）を選択する。このとき、選択回路９１ａ１，…，９１ａ４の各々は、Ｆｉが１である組を優先的に選択し、両方の組が１の場合には１ビット乱数に基づいていずれか一方の組を選択する（なお、選択回路９１ｂ１，９１ｂ２，９１ｃ１も同様）。ここで、乱数生成部９１ｄは、１ビット乱数を選択回路ごとに個別に生成し、各選択回路に供給する。また、選択回路９１ａ１，…，９１ａ４の各々は、どちらの組を選択したかを示す識別値を、両組に含まれるｉｎｄｅｘに基づいて生成し、選択した変数ｑiとＦiとΔＥiと識別値とを含む状態信号を出力する。なお、選択回路９１ａ１，…，９１ａ４の各々が出力する識別値は、入力されたｉｎｄｅｘよりも１ビット増える。
【０４７０】
２段目の選択回路９１ｂ１，９１ｂ２の各々には、選択回路９１ａ１，…，９１ａ４が出力する状態信号が２つずつ入力される。例えば、選択回路９１ｂ１には、選択回路９１ａ１，９１ａ２が出力する状態信号が入力され、選択回路９１ｂ２には、選択回路９１ａ３，９１ａ４が出力する状態信号が入力される。
【０４７１】
そして、選択回路９１ｂ１，９１ｂ２の各々は、２つの状態信号と、乱数生成部９１ｄが出力する１ビット乱数に基づいて、２つの状態信号のいずれか一方を選択する。また、選択回路９１ｂ１，９１ｂ２の各々は、選択した状態信号に含まれる識別値について、いずれの状態信号を選択したかを示すように１ビットを付加して更新し、選択した状態信号を出力する。
【０４７２】
最終段の選択回路９１ｃ１には、選択回路９１ｂ１，９１ｂ２が出力する状態信号が２つ入力される。選択回路９１ｃ１は、２つの状態信号と乱数生成部９１ｄが出力する１ビット乱数に基づいて、２つの状態信号のいずれか一方を選択する。また、選択回路９１ｃ１は、選択した状態信号に含まれる識別値について、いずれの状態信号を選択したかを示すように１ビットを付加して更新し、選択した状態信号を出力する。
【０４７３】
前述のように、識別値はｉｎｄｅｘに相当する。規模結合回路９１は、変数ｑiとＦiとΔＥiと同様にして、各選択回路により、各ランダムセレクタ部から入力されたｉｎｄｅｘの選択を行うことで、反転ビットに対応するｉｎｄｅｘを出力してもよい。この場合、各ランダムセレクタ部は、各ＬＦＥから変数ｑやフラグＦと共にｉｎｄｅｘの供給を受けることになる。制御部５０４は、例えば、各ＬＦＥの所定のｉｎｄｅｘ格納用のレジスタに対してＬＦＢの組合せに応じたｉｎｄｅｘの設定を行う。
【０４７４】
モード選択回路９１ｅ１，…，９１ｅ８の各々は、規模（すなわち、１ｋビット、２ｋビット、４ｋビットおよび８ｋビット）に応じた入力端子を有する。図中、モード選択回路９１ｅ１，…，９１ｅ８の各々に表記された「１」は規模１ｋビットに対応する入力端子を示す。同「２」は規模２ｋビットに対応する入力端子を示す。同「４」は規模４ｋビット（ただし、精度３２ビット）に対応する入力端子を示す。同「８」は規模８ｋビット（または規模４ｋビット／精度６４ビット）に対応する入力端子を示す。
【０４７５】
モード選択回路９１ｅ１の規模１ｋビットの入力端子には、ＬＦＢ７０ａ（＃０）が出力する状態信号が入力される。モード選択回路９１ｅ２の規模１ｋビットの入力端子には、ＬＦＢ７０ｂ（＃１）が出力する状態信号が入力される。モード選択回路９１ｅ３の規模１ｋビットの入力端子には、ＬＦＢ７０ｃ（＃２）が出力する状態信号が入力される。モード選択回路９１ｅ４の規模１ｋビットの入力端子には、ＬＦＢ７０ｄ（＃３）が出力する状態信号が入力される。モード選択回路９１ｅ５の規模１ｋビットの入力端子には、ＬＦＢ７０ｅ（＃４）が出力する状態信号が入力される。モード選択回路９１ｅ６の規模１ｋビットの入力端子には、ＬＦＢ７０ｆ（＃５）が出力する状態信号が入力される。モード選択回路９１ｅ７の規模１ｋビットの入力端子には、ＬＦＢ７０ｇ（＃６）が出力する状態信号が入力される。モード選択回路９１ｅ８の規模１ｋビットの入力端子には、ＬＦＢ７０ｈ（＃７）が出力する状態信号が入力される。
【０４７６】
モード選択回路９１ｅ１，９１ｅ２の各々の規模２ｋビットの入力端子には、選択回路９１ａ１が出力する状態信号が入力される。モード選択回路９１ｅ３，９１ｅ４の各々の規模２ｋビットの入力端子には、選択回路９１ａ２が出力する状態信号が入力される。モード選択回路９１ｅ５，９１ｅ６の各々の規模２ｋビットの入力端子には、選択回路９１ａ３が出力する状態信号が入力される。モード選択回路９１ｅ７，９１ｅ８の各々の規模２ｋビットの入力端子には、選択回路９１ａ４が出力する状態信号が入力される。
【０４７７】
モード選択回路９１ｅ１，９１ｅ２，９１ｅ３，９１ｅ４の各々の規模４ｋビットの入力端子には、選択回路９１ｂ１が出力する状態信号が入力される。モード選択回路９１ｅ５，９１ｅ６，９１ｅ７，９１ｅ８の各々の規模４ｋビットの入力端子には、選択回路９１ｂ２が出力する状態信号が入力される。
【０４７８】
モード選択回路９１ｅ１，…，９１ｅ８の各々の規模８ｋビットの入力端子には、選択回路９１ｃ１が出力する状態信号が入力される。
【０４７９】
モード選択回路９１ｅ１，…，９１ｅ８の各々は、モード設定レジスタ９２による規模（スピンビット数）の設定を受け付ける。ただし、図３２では、モード設定レジスタ９２からモード選択回路９１ｅ２，…，９１ｅ８の各々に対する信号線を「…」の表記により略記している。モード選択回路９１ｅ１，…，９１ｅ８の各々は、設定された規模に応じた入力端子に入力された状態信号を選択して、（ｘj，Ｆj，ｉｎｄｅｘ＝ｊ）をＬＦＢ７０ａ，…，７０ｈへ出力し、ΔＥjを加算器９３ａ，…，９３ｈへ出力する。
【０４８０】
例えば、モード選択回路９１ｅ１は、（ｘy0，Ｆy0，ｉｎｄｅｘ＝ｙ０）をＬＦＢ７０ａへ出力し、ΔＥy0を加算器９３ａへ出力する。加算器９３ａは、ΔＥy0を基にＥ0を更新する。モード選択回路９１ｅ２は、（ｘy1，Ｆy1，ｉｎｄｅｘ＝ｙ１）をＬＦＢ７０ｂへ出力し、ΔＥy1を加算器９３ｂへ出力する。加算器９３ｂは、ΔＥy1を基にＥ1を更新する。モード選択回路９１ｅ３は、（ｘy2，Ｆy2，ｉｎｄｅｘ＝ｙ２）をＬＦＢ７０ｃへ出力し、ΔＥy2を加算器９３ｃへ出力する。加算器９３ｃは、ΔＥy2を基にＥ2を更新する。モード選択回路９１ｅ４は、（ｘy3，Ｆy3，ｉｎｄｅｘ＝ｙ３）をＬＦＢ７０ｄへ出力し、ΔＥy3を加算器９３ｄへ出力する。加算器９３ｄは、ΔＥy3を基にＥ3を更新する。モード選択回路９１ｅ５は、（ｘy4，Ｆy4，ｉｎｄｅｘ＝ｙ４）をＬＦＢ７０ｅへ出力し、ΔＥy4を加算器９３ｅへ出力する。加算器９３ｅは、ΔＥy4を基にＥ4を更新する。モード選択回路９１ｅ６は、（ｘy5，Ｆy5，ｉｎｄｅｘ＝ｙ５）をＬＦＢ７０ｆへ出力し、ΔＥy5を加算器９３ｆへ出力する。加算器９３ｆは、ΔＥy5を基にＥ5を更新する。モード選択回路９１ｅ７は、（ｘy6，Ｆy6，ｉｎｄｅｘ＝ｙ６）をＬＦＢ７０ｇへ出力し、ΔＥy6を加算器９３ｇへ出力する。加算器９３ｇは、ΔＥy6を基にＥ6を更新する。モード選択回路９１ｅ８は、（ｘy7，Ｆy7，ｉｎｄｅｘ＝ｙ７）をＬＦＢ７０ｈへ出力し、ΔＥy7を加算器９３ｈへ出力する。加算器９３ｈは、ΔＥy7を基にＥ7を更新する。
【０４８１】
すなわち、最適化装置４０８（＄ｊ）は、あるＬＦＢ（グループ）に属する各ＬＦＥから出力された反転可否を示す信号に基づいていずれかのビットを選択し、選択したビットを示す信号を規模結合回路９１に出力するランダムセレクタ部をＬＦＢごとに有する。規模結合回路９１は、スピンビット数の設定に応じて１以上のＬＦＢを組合せ、当該１以上のＬＦＢの各々に対応するランダムセレクタ部により選択されたビットを示す信号に基づいて反転させるビットを選択する。規模結合回路９１は、反転させるビットを示す信号を当該１以上のＬＦＢに属する各ＬＦＥに出力する。
【０４８２】
ここで、モード設定レジスタ９２は、モード選択回路９１ｅ１，…，９１ｅ８に対して、個別に規模の設定を行う。ただし、ある規模のモードにおいて、組み合せて利用されるＬＦＢに対応するモード選択回路には、共通の規模が設定される。
【０４８３】
例えば、モード設定レジスタ９２は、ＬＦＢの第１の組合せに対応する第１のスピンビット列のスピンビット数とＬＦＢの第２の組合せに対応する第２のスピンビット列のスピンビット数とを、同じビット数、または、異なるビット数に設定してもよい。また、モード設定レジスタ７５を含む各ＬＦＢのモード設定レジスタは、ＬＦＢの第１の組合せに属するＬＦＥに対する重み係数のビット数とＬＦＢの第２の組合せに属するＬＦＥに対する重み係数のビット数とを、同じビット数、または、異なるビット数に設定してもよい。
【０４８４】
例えば、ＬＦＢ７０ａ，７０ｂを組み合せて利用して規模２ｋビットのモードを利用する場合、モード設定レジスタ９２からモード選択回路９１ｅ１，９１ｅ２へ、規模２ｋビットのモードを選択する選択信号が供給される。このとき、例えば、最適化装置４０８（＄ｊ）は、モード設定レジスタ９２の設定により残りの６つのＬＦＢを利用して、ＬＦＢ７０ａ，７０ｂによる演算と同じ問題、または、別の問題を並列に実行することが可能である。
【０４８５】
例えば、規模結合回路９１は、残りの６つのＬＦＢに対して、６つのＬＦＢのうちの２つずつ組合せにより、規模２ｋビットのモードを３つ実現してもよい。これにより、パーティションモード「４Ｐ」の４個のパーティションを実現することができる。
【０４８６】
並列に実現するモードの組合せは、上記の組合せに限らず、例えば、規模１ｋビットのモードが８つの組合せ、規模４ｋビットのモードが２つの組合せなどが考えられる。
【０４８７】
このように、規模結合回路９１は、モード設定レジスタ９２により複数のスピンビット列の各々に対するスピンビット数の設定を受け付け、複数のスピンビット列の各々のスピンビット数に対して、組合せるＬＦＢ数（グループ数）を選択し、ＬＦＢを組合せる。これにより、１つの最適化装置４０８（＄ｊ）上に複数のイジングモデルを実現できる。
【０４８８】
なお、組み合せて利用されるＬＦＢの組に対応するＥ格納レジスタの組には、共通のエネルギーが格納される。例えば、ＬＦＢ７０ａ，７０ｂの組合せで利用する場合、Ｅ格納レジスタ９４ａ，９４ｂに格納されるＥ0，Ｅ1は同じ値となる。この場合、当該ＬＦＢ７０ａ，７０ｂの組に対するエネルギー値を読み出すとき、制御部５０４は、Ｅ格納レジスタ９４ａ，９４ｂのいずれか一方（例えば、ＬＦＢ７０ａに対応するＥ格納レジスタ９４ａ）に格納されたエネルギー値を読み出せばよい。制御部５０４は、ＬＦＢの他の組合せに対しても同様にしてエネルギー値を読み出す。
【０４８９】
例えば、制御部５０４は、最適化問題演算装置１０１の実行制御部１９０５から、並列に演算する各問題に対する初期値や動作条件の入力を受け付ける。そして、制御部５０４は、最適化問題演算装置１０１の実行制御部１９０５から入力される各問題に応じた規模／精度を、１つの問題に対して利用するＬＦＢのグループ（すなわち、パーティション）ごとに、ＬＦＢのモード設定レジスタおよびモード設定レジスタ９２に設定する。
【０４９０】
具体的には、例えば、制御部５０４は、第１の問題について、規模２ｋビット／精度６４ビットをＬＦＢ７０ａ，７０ｂのモード設定レジスタに設定するとともに、モード選択回路９１ｅ１，９１ｅ２に規模２ｋビットに対する出力を行うようモード設定レジスタ９２に設定する。また、制御部５０４は、第２の問題について、規模２ｋビット／精度６４ビットをＬＦＢ７０ｃ，７０ｄのモード設定レジスタに設定するとともに、モード選択回路９１ｅ３，９１ｅ４に規模２ｋビットに対する出力を行うようモード設定レジスタ９２に設定する。
【０４９１】
この場合、最適化装置４０８（＄ｊ）では、２つの問題（あるいは、両問題は同一問題でもよい）を並列に演算可能である。具体的には、制御部５０４は、各問題に対応するＬＦＢの組合せに対して、図１５で示したフローチャートの手順を行うように各ＬＦＢを制御する。
【０４９２】
制御部５０４は、演算終了後、ＬＦＢ７０ａ，７０ｂの各ＬＦＥから第１の問題に対するスピンビット列を読み出して、第１の問題の解とする。また、制御部５０４は、演算終了後、ＬＦＢ７０ｃ，７０ｄの各ＬＦＥから第２の問題に対するスピンビット列を読み出して、第２の問題の解とする。３以上の問題も同様にして、並列に演算可能である。これにより、複数の問題に対する演算を効率的に実行できる。
【０４９３】
また、同一問題をＬＦＢの複数の組により並列に解く場合、制御部５０４は、例えば、レプリカ交換法と呼ばれる手法により、演算を高速化することが考えられる。レプリカ交換法では、ＬＦＢの各組（各レプリカ）で異なる温度パラメータによるスピンビット列の更新を行い、所定回数の更新後に、所定確率で温度パラメータをＬＦＢの組の間（すなわち、レプリカ間）で交換することで、解の探索を高速化する。
【０４９４】
あるいは、解の探索方法として、図１５の開始（ＳＴＡＲＴ）から終了（ＥＮＤ）までの手順を繰り返し行い、複数の演算結果の中から、最小となるエネルギーのスピンビット列を解として求める方法も考えられる。この場合、制御部５０４は、ＬＦＢの複数の組を用いて同一問題を並列に解くことで、上記繰り返し回数を減らし、演算を高速化することができる。
【０４９５】
以上説明したように、実施の形態にかかる最適化問題演算装置１０１によれば、複数の最適化装置４０８それぞれの論理的な分割状態を規定するパーティションモードについての情報と、複数の最適化装置４０８の利用情報とに基づき、複数の最適化装置４０８それぞれのパーティションモードを決定することができる。複数の最適化装置４０８の利用情報は、例えば、複数の最適化装置４０８で演算が実行された組合せ最適化問題の実行履歴情報を含む。また、複数の最適化装置４０８の利用情報は、複数の最適化装置４０８の処理待ちキューに関する情報（例えば、各最適化装置４０８（＄ｊ）の待ち時間）を含むことにしてもよい。また、複数の最適化装置４０８の利用情報は、複数の最適化装置４０８の利用状況に関する情報（例えば、各最適化装置４０８（＄ｊ）の利用率）を含むことにしてもよい。
【０４９６】
これにより、複数の最適化装置４０８の利用状況に応じて、複数の最適化装置４０８それぞれのパーティションモードを決定することができる。例えば、利用率の低い最適化装置４０８のパーティションモードを変更して、待ち時間が長くなっている最適化装置４０８と同一構成とすることができる。これにより、最適化装置４０８の数を増やすことなく、待ち合わせが生じている問題と同様の規模や要求精度の問題を解くことができるハードウェアリソースを増やすことができ、待ち時間を短縮することができるとともに、ユーザから要求された問題を処理しきれないことによる機会損失を削減することができる。
【０４９７】
また、最適化問題演算装置１０１によれば、組合せ最適化問題を受け付け、受け付けた組合せ最適化問題の規模または要求精度と、決定した複数の最適化装置４０８それぞれのパーティションモードとに基づき、組合せ最適化問題を振り分ける最適化装置４０８を決定することができる。そして、最適化問題演算装置１０１によれば、決定した最適化装置４０８で、当該最適化装置４０８について決定したパーティションモードにより、組合せ最適化問題の演算を実行させることができる。
【０４９８】
これにより、問題の規模や要求精度に応じたパーティションモードに設定された最適化装置４０８により、組合せ最適化問題の演算を行うことができる。このため、問題の規模や要求精度に応じて、演算の際に利用されるハードウェアリソースの範囲を適切に選択でき、演算性能を高めて演算処理の高速化を図ることができる。
【０４９９】
また、最適化問題演算装置１０１によれば、最適化装置４０８のパーティションモードを、決定したパーティションモードに変更したことに応じて、複数の最適化装置４０８それぞれの論理的な分割状態を規定するパーティションモードについての情報を更新することができる。
【０５００】
これにより、複数の最適化装置４０８それぞれの実行状況に応じて、複数の最適化装置４０８それぞれのパーティションモードについての情報を更新することができる。例えば、ある最適化装置４０８の処理待ちキューに処理が溜まって待ち時間が増加すると、利用率の低い最適化装置４０８のパーティションモードが変更されて、複数の最適化装置４０８それぞれのパーティションモードについての情報が更新される。
【０５０１】
また、最適化問題演算装置１０１によれば、複数の最適化装置４０８の利用情報に基づき、利用する最適化装置４０８の増減有無を判定し、判定した判定結果に応じて、利用する最適化装置４０８を増減させることができる。
【０５０２】
これにより、複数の最適化装置４０８の利用状況に応じて、使用するハードウェアリソースの数を制御することができる。例えば、複数の最適化装置４０８の利用率が全体的に低いときは、いずれかの最適化装置４０８をスリープ状態にして予備装置４０９とすることができ、最適化問題演算装置１０１の消費電力を抑えることができる。
【０５０３】
また、最適化問題演算装置１０１によれば、利用する最適化装置４０８を増加させた場合には、増加させた最適化装置４０８のパーティションモードを設定することができる。例えば、最適化問題演算装置１０１は、増加させた最適化装置４０８に、あらかじめ決められたパーティションモードを設定する。
【０５０４】
これにより、増加させた最適化装置４０８を、最適化問題演算装置１０１の管理者などが決めた任意のパーティションモードで運用することができる。
【０５０５】
また、最適化問題演算装置１０１によれば、組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードが設定された最適化装置４０８のうち、解くことができる問題の最大規模が最小の最適化装置４０８を、組合せ最適化問題を振り分ける最適化装置４０８に決定することができる。
【０５０６】
これにより、組合せ最適化問題の演算の際に利用されるハードウェアリソースの範囲を最小限に抑えることが可能となり、無駄なＤＭＡ転送などを防いで演算性能を高めることができる。
【０５０７】
また、最適化問題演算装置１０１によれば、複数の最適化装置４０８それぞれの実行状況についての情報にさらに基づき、組合せ最適化問題を振り分ける最適化装置４０８を決定することができる。
【０５０８】
これにより、問題を実行していない空きのユニットや、キューに溜まっている問題の数が少ない最適化装置４０８のユニットに組合せ最適化問題を優先的に振り分けることができる。このため、組合せ最適化問題の演算を実行させるにあたり、待ち時間が発生して演算処理の開始が遅れるのを防ぐことができる。
【０５０９】
また、最適化問題演算装置１０１によれば、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された最適化装置４０８を、組合せ最適化問題を振り分ける最適化装置４０８に決定することができる。
【０５１０】
これにより、組合せ最適化問題の要求精度に応じて、演算の際に利用されるハードウェアリソースの範囲を適切に選択して、組合せ最適化問題を効率的に解くことができる。
【０５１１】
なお、本実施の形態で説明した最適化問題演算方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本最適化問題演算プログラムは、ハードディスク、フレキシブルディスク、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）−ＲＯＭ、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本最適化問題演算プログラムは、インターネット等のネットワークを介して配布してもよい。
【０５１２】
また、本実施の形態で説明した最適化問題演算装置１０１の各機能部は、例えば、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣやＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。
【０５１３】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０５１４】
（付記１）論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、
組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、
決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、
処理をコンピュータに実行させる最適化問題演算プログラム。
【０５１５】
（付記２）前記管理情報は、前記複数の演算ユニットそれぞれの実行状況に応じて更新される、付記１に記載の最適化問題演算プログラム。
【０５１６】
（付記３）前記利用情報に基づき、利用する演算ユニットの増減有無を判定し、
判定した判定結果に応じて、利用する演算ユニットを増減させる、
処理を前記コンピュータに実行させる、付記１または２に記載の最適化問題演算プログラム。
【０５１７】
（付記４）前記増減させる処理は、
利用する演算ユニットを増加させた場合には、増加させた演算ユニットのパーティションモードを設定する、付記３に記載の最適化問題演算プログラム。
【０５１８】
（付記５）前記増減させる処理は、
増加させた演算ユニットに、あらかじめ決められたパーティションモードを設定する、付記４に記載の最適化問題演算プログラム。
【０５１９】
（付記６）前記利用情報は、前記複数の演算ユニットで演算が実行された組合せ最適化問題の実行履歴情報を含む、付記１〜５のいずれか一つに記載の最適化問題演算プログラム。
【０５２０】
（付記７）前記利用情報は、前記複数の演算ユニットの処理待ちキューに関する情報を含む、付記１〜６のいずれか一つに記載の最適化問題演算プログラム。
【０５２１】
（付記８）前記利用情報は、前記複数の演算ユニットの利用状況に関する情報を含む、付記１〜７のいずれか一つに記載の最適化問題演算プログラム。
【０５２２】
（付記９）前記演算ユニットを決定する処理は、
前記組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードが設定された演算ユニットのうち、解くことができる問題の最大規模が最小の演算ユニットを、前記組合せ最適化問題を振り分ける演算ユニットに決定する、付記１〜８のいずれか一つに記載の最適化問題演算プログラム。
【０５２３】
（付記１０）前記演算ユニットを決定する処理は、
前記複数の演算ユニットそれぞれの実行状況についての情報にさらに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定する、付記１〜９のいずれか一つに記載の最適化問題演算プログラム。
【０５２４】
（付記１１）前記演算ユニットを決定する処理は、
前記組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された演算ユニットを、前記組合せ最適化問題を振り分ける演算ユニットに決定する、付記１〜１０のいずれか一つに記載の最適化問題演算プログラム。
【０５２５】
（付記１２）前記組合せ最適化問題の規模は、前記組合せ最適化問題のイジングモデルのスピンビット数によって表され、
前記組合せ最適化問題の要求精度は、ビット間の相互作用の大きさを示す重み係数のビット数によって表される、
付記１〜１１のいずれか一つに記載の最適化問題演算プログラム。
【０５２６】
（付記１３）論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、
組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、
決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、
処理をコンピュータが実行する最適化問題演算方法。
【０５２７】
（付記１４）論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットと、
組合せ最適化問題を受け付ける受付部と、
前記複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての情報を保持する管理部と、
前記管理部が保持する情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定する第１の決定部と、
前記組合せ最適化問題の規模または要求精度に関する情報と、前記第１の決定部が決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定する第２の決定部と、
前記第２の決定部が決定した前記演算ユニットで、前記第１の決定部が当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる実行制御部と、
を有する最適化問題演算装置。
【符号の説明】
【０５２８】
１０１  最適化問題演算装置
１０２  演算ユニット
１１０  管理情報
１２０  利用情報
１３０  問題
３００  情報処理システム
３０１  クライアント装置
３１０  ネットワーク
４００  バス
４０１  ＣＰＵ
４０２  メモリ
４０３  ディスクドライブ
４０４  ディスク
４０５  通信Ｉ／Ｆ
４０６  可搬型記録媒体Ｉ／Ｆ
４０７  可搬型記録媒体
４０８  最適化装置
４０９  予備装置
１７００，２３００，２５００  モード設定テーブル
１８００  利用状況テーブル
１９０１  受付部
１９０２  管理部
１９０３  第１の決定部
１９０４  第２の決定部
１９０５  実行制御部
２０００  実行履歴情報
２４００，２６００  振り分け先テーブル
【図１】
2020046992.tif 000017
【図２】
2020046992.tif 000018
【図３】
2020046992.tif 000019
【図４】
2020046992.tif 000020
【図５】
2020046992.tif 000021
【図６】
2020046992.tif 000022
【図７】
2020046992.tif 000023
【図８】
2020046992.tif 000024
【図９】
2020046992.tif 000025
【図１０】
2020046992.tif 000026
【図１１】
2020046992.tif 000027
【図１２】
2020046992.tif 000028
【図１３】
2020046992.tif 000029
【図１４】
2020046992.tif 000030
【図１５】
2020046992.tif 000031
【図１６】
2020046992.tif 000032
【図１７】
2020046992.tif 000033
【図１８】
2020046992.tif 000034
【図１９】
2020046992.tif 000035
【図２０】
2020046992.tif 000036
【図２１】
2020046992.tif 000037
【図２２】
2020046992.tif 000038
【図２３】
2020046992.tif 000039
【図２４】
2020046992.tif 000040
【図２５】
2020046992.tif 000041
【図２６】
2020046992.tif 000042
【図２７】
2020046992.tif 000043
【図２８】
2020046992.tif 000044
【図２９】
2020046992.tif 000045
【図３０】
2020046992.tif 000046
【図３１】
2020046992.tif 000047
【図３２】
2020046992.tif 000048