(57)【要約】【課題】組合せ最適化問題を複数の部分問題に分割して計算する際の計算量の増加を抑制する。【解決手段】処理部１１ｂは、目的関数に含まれる全変数に対応する複数の頂点を有し、各変数間の相互作用の有無を、複数の頂点の各頂点間を結ぶ辺の有無に置き換えたグラフ２０を生成し、グラフ２０において、複数の頂点のうち、辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、グラフ２０を抽象化したグラフ２２を生成し、グラフ２２に含まれる複数の頂点の接続関係と取得した分割数とに基づいて、全変数を、複数の部分問題の各々で用いられる変数群の候補と、複数の部分問題の各々の解に基づいて組合せ最適化問題の全体の解を計算する際に用いられる境界変数群の候補と、に分類し、グラフ２０に含まれる複数の頂点の接続関係に基づいて、変数群の候補と境界変数群の候補とから、変数群と境界変数群を決定する。【選択図】図１
2020004387.tif 000002
【特許請求の範囲】
【請求項１】
組合せ最適化問題を変換したイジング型の目的関数に含まれる各変数間の相互作用の大きさを示す係数値群と、前記組合せ最適化問題を複数の部分問題に分割する際の分割数とを取得し、
前記係数値群に基づいて、前記目的関数に含まれる全変数に対応する複数の第１の頂点を有し、前記各変数間の相互作用の有無を、前記複数の第１の頂点の各頂点間を結ぶ辺の有無に置き換えた第１のグラフを生成し、
前記第１のグラフにおいて、前記複数の第１の頂点のうち、前記辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、前記第１のグラフを抽象化した第２のグラフを生成し、
前記第２のグラフに含まれる複数の第２の頂点の接続関係と前記分割数とに基づいて、前記全変数を、前記複数の部分問題の各々で用いられる変数群の候補と、前記複数の部分問題の各々の解に基づいて前記組合せ最適化問題の全体の解を計算する際に用いられる境界変数群の候補と、に分類し、
前記第１のグラフに含まれる前記複数の第１の頂点の接続関係に基づいて、前記変数群の候補と前記境界変数群の候補とから、前記変数群と前記境界変数群を決定し、
前記境界変数群に固定値を設定し、
前記固定値に基づいて計算された補正値を含み、前記変数群に属す各変数間の相互作用の大きさを示す部分係数値群を、前記複数の部分問題の各々について個別にイジングマシンに送信し、
前記イジングマシンから、前記複数の部分問題の各々の解を示す前記変数群の値を受信し、
前記変数群の値と、前記境界変数群に設定した前記固定値と、前記係数値群とに基づいて、前記目的関数の値を計算し、
収束条件が満たされるまで、前記固定値の変更、前記部分係数値群の前記イジングマシンへの送信、前記変数群の値の受信、及び前記目的関数の値の計算を繰り返し、前記収束条件が満たされた時点で、前記目的関数を最小にする前記全変数の値を出力する、
処理をコンピュータに実行させる最適化問題計算プログラム。
【請求項２】
前記変数群に含まれる変数は、自身が属す前記変数群に含まれる他の変数または前記境界変数群に含まれる変数との間にだけ相互作用を有し、前記境界変数群に含まれる境界変数は、異なる２つ以上の前記変数群に含まれる変数との間に相互作用を有する、請求項１に記載の最適化問題計算プログラム。
【請求項３】
前記境界変数群の候補に属す第１の変数に対応した前記第１のグラフにおける第１の頂点の接続先が、前記境界変数群の候補に属す他の変数の何れかと、前記複数の部分問題の各々で用いられる前記変数群の候補の１つである第１の変数群に属す第２の変数の何れかと、に対応した頂点の２通りである場合、前記第１の変数を前記第１の変数群に属すように決定する、
処理を前記コンピュータに実行させる、請求項１または２に記載の最適化問題計算プログラム。
【請求項４】
前記複数の第１の頂点のうち、接続されている前記辺の数が少ない前記２つの頂点を優先的に前記１つの頂点に統合する、
処理を前記コンピュータに実行させる、請求項１乃至３の何れか一項に記載の最適化問題計算プログラム。
【請求項５】
前記部分係数値群の値に基づいて、前記変数群のうち、前記目的関数の値を小さくする値が確定している無効変数を選択し、
前記無効変数に前記目的関数の値を小さくする値を設定し、
前記無効変数に設定された値に基づいて、前記補正値を更新し、
更新した前記補正値を含み、前記変数群のうち、前記無効変数を除いた有効変数群に属す各変数間の相互作用の大きさを示す新たな部分係数値群を生成する、
処理を前記コンピュータに実行させる、請求項１乃至４の何れか一項に記載の最適化問題計算プログラム。
【請求項６】
組合せ最適化問題を変換したイジング型の目的関数に含まれる各変数間の相互作用の大きさを示す係数値群と、前記組合せ最適化問題を複数の部分問題に分割する際の分割数とを取得し、
前記係数値群に基づいて、前記目的関数に含まれる全変数に対応する複数の第１の頂点を有し、前記各変数間の相互作用の有無を、前記複数の第１の頂点の各頂点間を結ぶ辺の有無に置き換えた第１のグラフを生成し、
前記第１のグラフにおいて、前記複数の第１の頂点のうち、前記辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、前記第１のグラフを抽象化した第２のグラフを生成し、
前記第２のグラフに含まれる複数の第２の頂点の接続関係と前記分割数とに基づいて、前記全変数を、前記複数の部分問題の各々で用いられる変数群の候補と、前記複数の部分問題の各々の解に基づいて前記組合せ最適化問題の全体の解を計算する際に用いられる境界変数群の候補と、に分類し、
前記第１のグラフに含まれる前記複数の第１の頂点の接続関係に基づいて、前記変数群の候補と前記境界変数群の候補とから、前記変数群と前記境界変数群を決定し、
前記境界変数群に、互いに異なるＭ（Ｍは２以上の自然数）パターンの固定値を設定し、
前記Ｍパターンの固定値のそれぞれに基づいて計算された補正値を含み、前記変数群に属す各変数間の相互作用の大きさを示すＭパターンの部分係数値群を、前記複数の部分問題の各々について個別にＭ個のイジングマシンに送信し、
前記Ｍ個のイジングマシンのそれぞれから、前記複数の部分問題の各々の解を示す前記変数群の値を受信し、
前記変数群の値と、前記境界変数群に設定した前記Ｍパターンの固定値と、前記係数値群とに基づいて、前記目的関数の値をＭパターン計算し、
収束条件が満たされるまで、新たなＭパターンの固定値を生成する処理と、前記部分係数値群の前記Ｍ個のイジングマシンへの送信、前記変数群の値の受信、及び前記目的関数の値の計算を繰り返し、前記収束条件が満たされた時点で、前記目的関数を最小にする前記全変数の値を出力する、
処理をコンピュータに実行させる最適化問題計算プログラム。
【請求項７】
前記新たなＭパターンの固定値は、Ｍパターン計算した前記目的関数の値の中で最小値が得られたときの前記目的関数の計算に用いた固定値において、それぞれ異なる１つのビット位置の値を反転させることで生成される、
請求項６に記載の最適化問題計算プログラム。
【請求項８】
前記新たなＭパターンの固定値は、それぞれＭパターン計算される、今回計算された前記目的関数の値と前回計算された前記目的関数の値のうち、値の小さい順に選択されたＭパターンの前記目的関数の値の計算に用いた固定値に基づいて生成される、
請求項６に記載の最適化問題計算プログラム。
【請求項９】
組合せ最適化問題を変換したイジング型の目的関数に含まれる各変数間の相互作用の大きさを示す係数値群のうち、前記組合せ最適化問題を分割した複数の部分問題の各々に対応した前記係数値群の一部を含む部分係数値群を受信し、前記部分係数値群に基づいて、前記複数の部分問題を計算するイジングマシンと、
前記係数値群と、前記組合せ最適化問題を前記複数の部分問題に分割する際の分割数とを取得し、前記係数値群に基づいて、前記目的関数に含まれる全変数に対応する複数の第１の頂点を有し、前記各変数間の相互作用の有無を、前記複数の第１の頂点の各頂点間を結ぶ辺の有無に置き換えた第１のグラフを生成し、前記第１のグラフにおいて、前記複数の第１の頂点のうち、前記辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、前記第１のグラフを抽象化した第２のグラフを生成し、前記第２のグラフに含まれる複数の第２の頂点の接続関係と前記分割数とに基づいて、前記全変数を、前記複数の部分問題の各々で用いられる変数群の候補と、前記複数の部分問題の各々の解に基づいて前記組合せ最適化問題の全体の解を計算する際に用いられる境界変数群の候補と、に分類し、前記第１のグラフに含まれる前記複数の第１の頂点の接続関係に基づいて、前記変数群の候補と前記境界変数群の候補とから、前記変数群と前記境界変数群を決定し、前記境界変数群に固定値を設定し、前記固定値に基づいて計算された補正値を含み、前記変数群に属す各変数間の相互作用の大きさを示す前記部分係数値群を、前記複数の部分問題の各々について個別に前記イジングマシンに送信し、前記イジングマシンから、前記複数の部分問題の各々の解を示す前記変数群の値を受信し、前記変数群の値と、前記境界変数群に設定した前記固定値と、前記係数値群とに基づいて、前記目的関数の値を計算し、収束条件が満たされるまで、前記固定値の変更、前記部分係数値群の前記イジングマシンへの送信、前記変数群の値の受信、及び前記目的関数の値の計算を繰り返し、前記収束条件が満たされた時点で、前記目的関数を最小にする前記全変数の値を出力する、情報処理装置と、
を有する最適化問題計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化問題計算プログラム及び最適化問題計算システムに関する。
【背景技術】
【０００２】
組合せ最適化問題は、現在の社会における様々な分野に存在する。たとえば、製造・流通、マーケティングなどの分野では、コストを最適化（最小化）する要素の組合せが探索される。しかし、組合せ最適化問題は、上記要素に対応する変数の数が増えるにつれて指数関数的に計算時間が増加するため、従来のノイマン型コンピュータでは解くことが困難である問題として知られている。
【０００３】
このようなノイマン型コンピュータが不得意とする多変数の組合せ最適化問題を解く計算装置として、イジング型の目的関数（エネルギー関数、評価関数などとも呼ばれる）を用いたイジングマシンがある。イジングマシンは、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデル（ＱＵＢＯ（Quadratic Unconstrained Binary Optimization）とも呼ばれる）に置き換えて計算する。
【０００４】
イジングマシンには、デジタル回路を用いてシミュレーテッドアニーリングを行うことで目的関数の値が最小となる変数の値の組合せを計算するものや、超伝導回路を用いて量子アニーリングを行うことで同様の計算を行うものなどがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１７−２１９９４８号公報
【非特許文献】
【０００６】
【非特許文献１】Michael Booth, Steven P. Reinhardt, and Aidan Roy, “Partitioning Optimization Problems for Hybrid Classical/Quantum Execution”, 2017/10/18, D-Wave Technical Report Series, 2017
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、組合せ最適化問題の目的関数に含まれる変数の数が、イジングマシンが扱える変数の数よりも大きい場合、イジングマシンとは別の情報処理装置が、組合せ最適化問題を複数の部分問題に分割し、各部分問題をイジングマシンに計算させればよい。
【０００８】
しかしながら、部分問題への分割の仕方によっては、イジングマシンで計算された各部分問題の解に基づいて全体の解を求める計算（以下連携計算という場合もある）の量が多くなる可能性があった。
【０００９】
１つの側面では、本発明は、組合せ最適化問題を複数の部分問題に分割して計算する際の計算量の増加を抑制可能な最適化問題計算プログラム及び最適化問題計算システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの実施態様では、組合せ最適化問題を変換したイジング型の目的関数に含まれる各変数間の相互作用の大きさを示す係数値群と、前記組合せ最適化問題を複数の部分問題に分割する際の分割数とを取得し、前記係数値群に基づいて、前記目的関数に含まれる全変数に対応する複数の第１の頂点を有し、前記各変数間の相互作用の有無を、前記複数の第１の頂点の各頂点間を結ぶ辺の有無に置き換えた第１のグラフを生成し、前記第１のグラフにおいて、前記複数の第１の頂点のうち、前記辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、前記第１のグラフを抽象化した第２のグラフを生成し、前記第２のグラフに含まれる複数の第２の頂点の接続関係と前記分割数とに基づいて、前記全変数を、前記複数の部分問題の各々で用いられる変数群の候補と、前記複数の部分問題の各々の解に基づいて前記組合せ最適化問題の全体の解を計算する際に用いられる境界変数群の候補と、に分類し、前記第１のグラフに含まれる前記複数の第１の頂点の接続関係に基づいて、前記変数群の候補と前記境界変数群の候補とから、前記変数群と前記境界変数群を決定し、前記境界変数群に固定値を設定し、前記固定値に基づいて計算された補正値を含み、前記変数群に属す各変数間の相互作用の大きさを示す部分係数値群を、前記複数の部分問題の各々について個別にイジングマシンに送信し、前記イジングマシンから、前記複数の部分問題の各々の解を示す前記変数群の値を受信し、前記変数群の値と、前記境界変数群に設定した前記固定値と、前記係数値群とに基づいて、前記目的関数の値を計算し、収束条件が満たされるまで、前記固定値の変更、前記部分係数値群の前記イジングマシンへの送信、前記変数群の値の受信、及び前記目的関数の値の計算を繰り返し、前記収束条件が満たされた時点で、前記目的関数を最小にする前記全変数の値を出力する、処理をコンピュータに実行させる最適化問題計算プログラムが提供される。
【００１１】
また、１つの実施態様では、組合せ最適化問題を変換したイジング型の目的関数に含まれる各変数間の相互作用の大きさを示す係数値群と、前記組合せ最適化問題を複数の部分問題に分割する際の分割数とを取得し、前記係数値群に基づいて、前記目的関数に含まれる全変数に対応する複数の第１の頂点を有し、前記各変数間の相互作用の有無を、前記複数の第１の頂点の各頂点間を結ぶ辺の有無に置き換えた第１のグラフを生成し、前記第１のグラフにおいて、前記複数の第１の頂点のうち、前記辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、前記第１のグラフを抽象化した第２のグラフを生成し、前記第２のグラフに含まれる複数の第２の頂点の接続関係と前記分割数とに基づいて、前記全変数を、前記複数の部分問題の各々で用いられる変数群の候補と、前記複数の部分問題の各々の解に基づいて前記組合せ最適化問題の全体の解を計算する際に用いられる境界変数群の候補と、に分類し、前記第１のグラフに含まれる前記複数の第１の頂点の接続関係に基づいて、前記変数群の候補と前記境界変数群の候補とから、前記変数群と前記境界変数群を決定し、前記境界変数群に、互いに異なるＭ（Ｍは２以上の自然数）パターンの固定値を設定し、前記Ｍパターンの固定値のそれぞれに基づいて計算された補正値を含み、前記変数群に属す各変数間の相互作用の大きさを示すＭパターンの部分係数値群を、前記複数の部分問題の各々について個別にＭ個のイジングマシンに送信し、前記Ｍ個のイジングマシンのそれぞれから、前記複数の部分問題の各々の解を示す前記変数群の値を受信し、前記変数群の値と、前記境界変数群に設定した前記Ｍパターンの固定値と、前記係数値群とに基づいて、前記目的関数の値をＭパターン計算し、収束条件が満たされるまで、新たなＭパターンの固定値を生成する処理と、前記部分係数値群の前記Ｍ個のイジングマシンへの送信、前記変数群の値の受信、及び前記目的関数の値の計算を繰り返し、前記収束条件が満たされた時点で、前記目的関数を最小にする前記全変数の値を出力する、処理をコンピュータに実行させる最適化問題計算プログラムが提供される。
【００１２】
また、１つの実施態様では、最適化問題計算システムが提供される。
【発明の効果】
【００１３】
１つの側面では、本発明は、組合せ最適化問題を複数の部分問題に分割して計算する際の計算量の増加を抑制できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の最適化問題計算システムと、最適化問題計算プログラムによる処理の一例を示す図である。
【図２】部分問題で用いられる変数群と境界変数群の分類の仕方の比較例を示す図である。
【図３】第２の実施の形態の最適化問題計算システムのハードウェア例を示すブロック図である。
【図４】最適化問題計算システムに含まれる情報処理装置の機能例を示すブロック図である。
【図５】組合せ最適化問題の計算処理の手順の一例を示すフローチャートである。
【図６】ＱＵＢＯ係数行列Ｗを含む入力ファイルの一例を示す図である。
【図７】生成されたグラフの一例を示す図である。
【図８】２つの単独頂点を統合した例を示す図である。
【図９】全て複合頂点となったグラフの例を示す図である。
【図１０】停止条件を満たしたグラフの例を示す図である。
【図１１】番号ｇｉの割り当て例を示す図である。
【図１２】番号ｇｉの変更例を示す図である。
【図１３】最も粗いグラフの各頂点に割当てた番号ｇｉを、１段階、詳細なグラフの各頂点に引き継がせた例を示す図である。
【図１４】番号ｇｉを最も詳細なグラフの各頂点に引き継がせた例を示す図である。
【図１５】グループ分け完了時に各頂点に割当てられている番号ｇｉの例を示す図である。
【図１６】生成されたサブＱＵＢＯの一例を示す図である。
【図１７】サブＱＵＢＯのファイル形式の一例を示す図である。
【図１８】タブーサーチを利用して目的関数ｆ（ｘ０）の値を最小にする境界変数群ｘ０の値を探索するアルゴリズムを表す擬似コードの例である。
【図１９】分類された変数群と境界変数群の例を示す図である。
【図２０】ＱＵＢＯ係数行列ＷとサブＱＵＢＯの例を示す図である。
【図２１】サブＱＵＢＯの更新処理の一例の流れを示す図である。
【図２２】部分問題の更新例を示す図である。
【図２３】第３の実施の形態の最適化問題計算システムによる処理例を示す図である。
【図２４】第３の実施の形態の最適化問題計算システムのシステム構成例を示す図である。
【図２５】第３の実施の形態の最適化問題計算システムによる計算処理の手順の一例を示すフローチャートである。
【図２６】Ｍ＝３としたときのＭＰＩ処理の例を示す図である。
【図２７】Ｍパターンのビット列を生成する他の例を示す図である。
【発明を実施するための形態】
【００１５】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
（第１の実施の形態）
図１は、第１の実施の形態の最適化問題計算システムと、最適化問題計算プログラムによる処理の一例を示す図である。
【００１６】
最適化問題計算システム１０は、情報処理装置１１とイジングマシン１２を有する。
情報処理装置１１は、記憶部１１ａ、処理部１１ｂ、インタフェース（図１ではＩ／Ｆと表記されている）１１ｃを有する。
【００１７】
記憶部１１ａは、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置、または、フラッシュメモリ、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）やＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置である。
【００１８】
記憶部１１ａは、計算対象の組合せ最適化問題を変換したイジング型の目的関数に含まれる各変数間の相互作用の大きさを示す係数値群１１ａ１や、最適化問題計算プログラムなどを記憶する。
【００１９】
組合せ最適化問題のイジング型の目的関数は、たとえば、以下の式（１）のように表せる。
【００２０】
【数１】
2020004387.tif 000003
【００２１】
式（１）の右辺の１項目は、全変数から選択可能な２つの変数σｉ，σｊ（０または１の２値変数）の全組合せについて、漏れと重複なく変数σｉ，σｊの値と変数σｉ，σｊの間の相互作用の大きさを示す係数値Ｊｉｊとの積を積算し、−１を乗じた値である。式（１）の右辺の２項目は、変数σｉとそのバイアスｈｉとの積を全変数について積算したものに−１を乗じた値である。なお、変数σｉ，σｊの間の相互作用がない場合には、係数値Ｊｉｊ＝０である。また、バイアスｈｉも０の場合がある。
【００２２】
式（１）は、Ｈ＝σＴＷσと表せる。σは、全変数を配列した行列であり、Ｗは、上記のＪｉｊとバイアスｈｉとを含む行列（以下ＱＵＢＯ係数行列Ｗという）である。このようなＱＵＢＯ係数行列Ｗが係数値群１１ａ１に含まれる。
【００２３】
処理部１１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）などの演算処理装置としてのプロセッサである。ただし、処理部１１ｂは、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。処理部１１ｂは、記憶部１１ａに記憶された、たとえば、最適化問題計算プログラムなどのプログラムを実行する。なお、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」ということがある。
【００２４】
インタフェース１１ｃは、イジングマシン１２に接続され、処理部１１ｂとイジングマシン１２との間でデータの送受信を行う。
イジングマシン１２は、組合せ最適化問題を分割した複数の部分問題の各々に対応した係数値群１１ａ１の一部を含む部分係数値群を受信し、部分係数値群に基づいて、複数の部分問題を計算する。なお、イジングマシン１２は複数あってもよい。イジングマシン１２が複数ある場合、複数の部分問題を並列に計算可能である。
【００２５】
なお、イジングマシン１２は、デジタル回路を用いてシミュレーテッドアニーリングを行うことで目的関数の値が最小となる変数の値の組合せを計算するものでもよいし、超伝導回路を用いて量子アニーリングを行うことで同様の計算を行うものでもよい。
【００２６】
第１の実施の形態の最適化問題計算システム１０において、処理部１１ｂは、組合せ最適化問題を複数の部分問題に分割して計算する際の計算量の増加を抑制するために、以下のような処理を行う。
【００２７】
以下、処理部１１ｂが最適化問題計算プログラムを実行することで行われる処理の例を説明する。
処理部１１ｂは、たとえば、記憶部１１ａに記憶されている係数値群１１ａ１と、たとえば、ユーザによる図示しない入力デバイスの操作により入力される組合せ最適化問題の分割数ｋを取得する。分割数ｋは、イジングマシン１２が扱える変数の上限と、目的関数に含まれる変数の数との関係に基づいて決定される。
【００２８】
なお、処理部１１ｂは、係数値群１１ａ１を情報処理装置１１の外部から取得してもよい。また、分割数ｋは、記憶部１１ａに記憶されていてもよい。
図１には、係数値群１１ａ１に含まれるＱＵＢＯ係数行列Ｗの一例が示されている。図１の例では、説明の簡略化のため、全変数の数（以下ビット数という）Ｎが１２であるとしているが、ビット数Ｎは、組合せ最適化問題の規模に応じて多くなることは言うまでもない。なお、図１では、値が０の係数値Ｊｉｊ（１≦ｉ，ｊ≦１２）や値が０のバイアスｈｉ（１≦ｉ≦１２）は、図示が省略されている。
【００２９】
係数値群１１ａ１や分割数ｋの取得後、処理部１１ｂは、全変数を、ｋ個の部分問題の各々で用いられる変数群と、連携計算の際に用いられる境界変数群とに分類する。なお、ｋ個の部分問題の各々で用いられる変数群に含まれる変数は、自身が属す変数群に含まれる他の変数または境界変数群に含まれる境界変数とだけ相互作用を有するものとする。また、境界変数群に含まれる変数は、異なる２つ以上の変数群に含まれる変数と相互作用を有するものとする。
【００３０】
各部分問題に対応した各変数群に含まれる変数の数は、イジングマシン１２が扱える最大ビット数を上限とし、イジングマシン１２における計算効率を高めるため、なるべく多くすることが望ましい。また、境界変数群に含まれる境界変数は、数が多くなると連携計算の量が増えるため、なるべく少なくすることが望ましい。
【００３１】
処理部１１ｂは、以下のように、全変数を、複数の変数群と境界変数群とに分類する。
まず、処理部１１ｂは、係数値群１１ａ１に基づいて、目的関数に含まれる全変数に対応する複数の頂点を有し、各変数間の相互作用の有無を、複数の頂点の各頂点間を結ぶ辺の有無に置き換えたグラフを生成する。
【００３２】
図１には、１２個の変数σ１〜σ１２の各々を頂点に置き換えたグラフ２０の生成例が示されている。互いに相互作用がある２つの変数に対応した２つの頂点間は、辺で接続されている。
【００３３】
次に、処理部１１ｂは、生成したグラフにおいて、辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返すことで、最初に生成したグラフを抽象化したグラフを生成する。処理部１１ｂは、たとえば、頂点数＜２ｋとなったときに頂点の統合を停止する。
【００３４】
頂点を統合する処理の際、たとえば、まず、接続している辺が最も少ない頂点が選択される。そして、その頂点に接続されている頂点のうち接続されている辺が最も少ない頂点が選択され、選択された両頂点が統合される。図１の例では、グラフ２０において、変数σ１，σ２に対応している２つの頂点が統合されている。同様に、変数σ３，σ１０に対応している２つの頂点が統合され、変数σ４，σ５に対応している２つの頂点が統合され、変数σ６，σ７に対応している２つの頂点が統合されている。さらに、変数σ８，σ９に対応している２つの頂点が統合され、変数σ１１，σ１２に対応している２つの頂点が統合されている。これによって、６つの頂点をもつグラフ２１が生成されている。
【００３５】
停止条件を頂点数＜２ｋとした場合、分割数ｋ＝２であるとき、頂点数が４を下回れば停止条件が満たされる。グラフ２１の例では、頂点数＝６＞４であるため、再度、同様の統合処理が行われる。図１の例では、変数σ１，σ２に対応している頂点がさらに変数σ４，σ５に対応している頂点と統合され、変数σ３，σ１０に対応している頂点がさらに変数σ６，σ７に対応している頂点と統合されている。また、変数σ８，σ９に対応している頂点がさらに変数σ１１，σ１２に対応している頂点と統合されている。これによって、６つの頂点をもつグラフ２２が生成されている。グラフ２２の頂点数＝３＜４であるため、停止条件が満たされる。
【００３６】
次に処理部１１ｂは、抽象化したグラフの各頂点の接続関係と分割数ｋとに基づき、全変数を、複数の部分問題の各々で用いられる変数群の候補と、境界変数群の候補と、に分類する。
【００３７】
グラフ２２では、２つの頂点が１つの頂点を介して接続されている。分割数ｋ＝２の場合、２つの頂点の間に接続されている頂点に対応した変数σ３，σ６，σ７，σ１０による変数群（グループＡ）の値を固定すれば、両端の頂点に対応した２つの変数群の間の関係を互いに素にできる（つまり、一方の値が他方の値に影響を与えない）。このため、変数σ１，σ２，σ４，σ５による変数群（グループＢ）と、変数σ８，σ９，σ１１，σ１２による変数群（グループＣ）は、各々独立の部分問題で扱うことができる。したがって、処理部１１ｂは、グループＡの変数σ３，σ６，σ７，σ１０を境界変数群の候補、グループＢの変数σ１，σ２，σ４，σ５とグループＣの変数σ８，σ９，σ１１，σ１２を複数の部分問題の各々で用いられる変数群の候補とする。
【００３８】
さらに、処理部１１ｂは、抽象化する前のグラフに含まれる各頂点の接続関係に基づいて、上記各候補から、境界変数群と複数の部分問題の各々で用いられる変数群と、を決定する。
【００３９】
図１のグラフ２０では、グループＡに属す変数σ３，σ６，σ１０に対応した頂点は、グループＡに属す他の変数に対応した頂点のほかに、グループＢ，Ｃの何れか一方に属す変数に対応した頂点に接続されている。このため、変数σ３，σ６，σ１０の何れか１つを、その変数に対応する頂点に接続される頂点に対応する変数が属すグループに分類しても、互いに素な２つの変数群を設定できる。
【００４０】
たとえば、図１に示す例では、変数σ３がグループＢに追加される。このため、境界変数は、変数σ６，σ７，σ１０の３つとなり、境界変数の数が削減される。
次に処理部１１ｂは、境界変数群に固定値を設定する。図１の例では、境界変数群は、３つの境界変数（変数σ６，σ７，σ１０）からなり、各々に対して０または１の固定値が設定される。
【００４１】
そして、処理部１１ｂは、固定値に基づいて計算された補正値を含み、各部分問題で用いられる変数群に属す変数間の相互作用の大きさを示す部分係数値群を、複数の部分問題の各々について個別に、インタフェース１１ｃを介してイジングマシン１２に送信する。以下、部分係数値群をサブＱＵＢＯという。
【００４２】
部分問題に対応するイジング型の目的関数は、以下の式（２）で表せる。
【００４３】
【数２】
2020004387.tif 000004
【００４４】
式（２）において、Ｓは、部分問題で用いられる変数群に属す変数の番号の集合である。また、式（２）において、ｄｉが補正値であり、ｄｉは、以下の式（３）で表せる。
【００４５】
【数３】
2020004387.tif 000005
【００４６】
式（３）において、σｊが境界変数であり、固定値をもつ。
図１の例では、前述のように変数σ６，σ７，σ１０が境界変数となる。以下では、変数σ６，σ７，σ１０の固定値を１とした場合の補正値の算出例を示す。
【００４７】
図１の例では、グループＢの変数σ３は、境界変数である変数σ６，σ１０に対して相互作用（Ｊ３，６＝Ｊ６，３＝Ｊ３，１０＝Ｊ１０，３＝−１）をもつため、式（３）より、補正値ｄ３＝｛（−１−１）×１｝＋｛（−１−１）×１｝＝−４となる。また、グループＣの変数σ８は、境界変数である変数σ６，σ７に対して相互作用（Ｊ８，６＝Ｊ６，８＝Ｊ８，７＝Ｊ７，８＝−２）をもつため、式（３）より、補正値ｄ８＝−８となる。同様にグループＣの変数σ９は、境界変数である変数σ６，σ７に対して相互作用（Ｊ９，６＝Ｊ９，８＝Ｊ９，７＝Ｊ７，９＝−２）をもつため、式（３）より、補正値ｄ９＝−８となる。また、グループＣの変数σ１１は、境界変数である変数σ１０に対して相互作用（Ｊ１１，１０＝Ｊ１０，１１＝−２）をもつため、式（３）より、補正値ｄ１１＝−４となる。同様にグループＣの変数σ１２は、境界変数である変数σ１０に対して相互作用（Ｊ１２，１０＝Ｊ１０，１２＝−２）をもつため、式（３）より、補正値ｄ１２＝−４となる。
【００４８】
図１には、上記補正値を含むグループＢとグループＣについてのサブＱＵＢＯが示されている。なお、グループＢまたはグループＣに属する係数群と境界変数との間の相互作用の大きさを示す係数については図示が省略されている。各係数値群は、個別にイジングマシン１２に送信される。
【００４９】
イジングマシン１２は、各サブＱＵＢＯを受けて、各部分問題を計算する。イジングマシン１２は、グループＢについてのサブＱＵＢＯを受信した場合、１２個の変数のうち変数σ１〜σ５だけを含む目的関数の値を最小にする変数σ１〜σ５の値（またはその近似値）を計算する。また、イジングマシン１２は、グループＣについてのサブＱＵＢＯを受信した場合、１２個の変数のうち変数σ８，σ９，σ１１，σ１２だけを含む目的関数の値を最小にする変数σ８，σ９，σ１１，σ１２の値（またはその近似値）を計算する。
【００５０】
処理部１１ｂは、イジングマシン１２から、複数の部分問題の各々の解を示す変数群の値を受信し、変数群の値と、境界変数群に設定した固定値と、係数値群１１ａ１とに基づいて、目的関数の値を計算する。
【００５１】
そして、処理部１１ｂは、所定の収束条件が満たされるまで、上記の固定値の変更、サブＱＵＢＯのイジングマシン１２への送信、変数群の値の受信、及び目的関数の値の計算を繰り返す。たとえば、処理部１１ｂは、最小となる目的関数の値が、所定回数、連続して変わらない場合に、収束条件が満たされたと判定する。処理部１１ｂは、収束条件が満たされた時点で、目的関数の値を最小にする全変数の値を、組合せ最適化問題の解として、たとえば、記憶部１１ａまたは図示しない表示装置などに出力する。
【００５２】
以上のような第１の実施の形態の最適化問題計算システム１０では、情報処理装置１１が、変数間の相互作用の有無を反映したグラフを抽象化したグラフに基づいて、各部分問題で用いられる（イジングマシン１２が扱う）変数群と境界変数群とが分類される。抽象化したグラフを用いて分類を行うことで、どの変数群を境界変数群の候補とすれば適切であるか、情報処理装置１１が容易に判別できる。これにより、適切な境界変数が得られ計算量を減らせる。
【００５３】
部分問題で用いられる変数群と境界変数群の分類の仕方が適切ではない場合、連携計算の量が多くなる可能性がある。
図２は、部分問題で用いられる変数群と境界変数群の分類の仕方の比較例を示す図である。
【００５４】
図２では、図１に示したＱＵＢＯ係数行列Ｗにおいて、部分問題で用いられる変数群として変数σ１，σ３，σ５，σ７，σ９，σ１１が選択されたときの係数値と、補正値とが示されている。たとえば、変数σ１，σ３，σ５と、変数σ７，σ９，σ１１が各々異なる部分問題で用いられる。なお、図２において、部分問題で用いられる変数群と境界変数群との間の相互作用の大きさを示す係数については図示が省略されている。
【００５５】
図２に示すような選択の仕方の場合、変数間の相互作用の有無を反映したグループ分けを行っていないため、元々の係数値がほとんど残らず、補正値（−４，−５など）の影響が支配的になっている。これにより、部分問題の解の精度が悪化し、全体の最適解を計算する連携計算の計算量が増加する。
【００５６】
また、図２の例では、境界変数の数が図１に示した分類の仕方よりも多くなるため、境界変数群に設定される固定値に基づいて補正値を計算する処理や、固定値を変更する処理が多く繰り返されることも、連携計算の計算量の増加の要因である。
【００５７】
第１の実施の形態の最適化問題計算システム１０によれば、変数間の相互作用の有無を反映したグラフを抽象化したグラフに基づいて境界変数群の候補が決定されるため、元々の係数値を比較的多く残すことができる。また、境界変数の数がむやみに多くなることがない。このため、連携計算の量を抑えることができるため、最適化問題を複数の部分問題に分割して計算する際の計算量の増加を抑えることができる。
【００５８】
また、境界変数の数が多くなることを防げるため、逆に部分問題で用いられる変数の数を多くでき（イジングマシン１２で扱えるビット数の上限を超えない程度に）、計算が効率化され、計算時間の短縮が期待できる。
【００５９】
（第２の実施の形態）
図３は、第２の実施の形態の最適化問題計算システムのハードウェア例を示すブロック図である。
【００６０】
最適化問題計算システム３０は、情報処理装置３１とイジングマシン３２を有する。
情報処理装置３１は、ＣＰＵ３１ａ、ＲＡＭ３１ｂ、ＨＤＤ３１ｃ、画像信号処理部３１ｄ、入力信号処理部３１ｅ、媒体リーダ３１ｆ、ネットワークインタフェース３１ｇ、インタフェース３１ｈを有する。上記ユニットは、バスに接続されている。
【００６１】
ＣＰＵ３１ａは、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ３１ａは、ＨＤＤ３１ｃに記憶されたプログラムやデータの少なくとも一部をＲＡＭ３１ｂにロードし、プログラムを実行する。なお、ＣＰＵ３１ａは複数のプロセッサコアを備えてもよく、情報処理装置３１は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００６２】
ＲＡＭ３１ｂは、ＣＰＵ３１ａが実行するプログラムやＣＰＵ３１ａが演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置３１は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００６３】
ＨＤＤ３１ｃは、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、及び、データを記憶する不揮発性の記憶装置である。プログラムには、たとえば、イジングマシン３２を用いた最適化問題の計算処理を情報処理装置３１に実行させる最適化問題計算プログラムが含まれる。なお、情報処理装置３１は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００６４】
画像信号処理部３１ｄは、ＣＰＵ３１ａからの命令にしたがって、情報処理装置３１に接続されたディスプレイ３１ｄ１に画像を出力する。ディスプレイ３１ｄ１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００６５】
入力信号処理部３１ｅは情報処理装置３１に接続された入力デバイス３１ｅ１から入力信号を取得し、ＣＰＵ３１ａに出力する。入力デバイス３１ｅ１としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置３１に、複数の種類の入力デバイスが接続されていてもよい。
【００６６】
媒体リーダ３１ｆは、記録媒体３１ｆ１に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体３１ｆ１として、たとえば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００６７】
媒体リーダ３１ｆは、たとえば、記録媒体３１ｆ１から読み取ったプログラムやデータを、ＲＡＭ３１ｂやＨＤＤ３１ｃなどの他の記録媒体にコピーする。読み取られたプログラムは、たとえば、ＣＰＵ３１ａによって実行される。なお、記録媒体３１ｆ１は、可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体３１ｆ１やＨＤＤ３１ｃを、コンピュータ読み取り可能な記録媒体ということがある。
【００６８】
ネットワークインタフェース３１ｇは、ネットワーク３１ｇ１に接続され、ネットワーク３１ｇ１を介して他の情報処理装置と通信を行うインタフェースである。ネットワークインタフェース３１ｇは、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００６９】
インタフェース３１ｈは、イジングマシン３２に接続され、ＣＰＵ３１ａとイジングマシン３２との間でデータの送受信を行う。インタフェース３１ｈは、たとえば、ＰＣＩ（Peripheral Component Interconnect）  Ｅｘｐｒｅｓｓなどの有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００７０】
次に、最適化問題計算システム３０の機能及び処理手順を説明する。
図４は、最適化問題計算システムに含まれる情報処理装置の機能例を示すブロック図である。
【００７１】
情報処理装置３１は、ＱＵＢＯ記憶部４０、グラフ生成部４１、グラフ抽象化部４２、分類処理部４３、境界変数値設定部４４、サブＱＵＢＯ生成部４５、サブＱＵＢＯ送信部４６、受信部４７、最適解計算部４８、出力部４９を有する。
【００７２】
ＱＵＢＯ記憶部４０は、たとえば、図３に示したＲＡＭ３１ｂまたはＨＤＤ３１ｃに確保した記憶領域を用いて実装できる。図４におけるその他の要素は、図３に示したＣＰＵ３１ａが実行するプログラムモジュールを用いて実装できる。
【００７３】
ＱＵＢＯ記憶部４０は、ＱＵＢＯ係数行列Ｗ（図１参照）を記憶する。なお、情報処理装置３１は、たとえば、図３に示したネットワーク３１ｇ１を経由して他の情報処理装置からＱＵＢＯ係数行列Ｗを受信してもよいし、記録媒体３１ｆ１に格納されたＱＵＢＯ係数行列Ｗを取得してもよい。また、情報処理装置３１が、計算対象の組合せ最適化問題かをＱＵＢＯ係数行列Ｗに変換してもよい。
【００７４】
グラフ生成部４１は、ＱＵＢＯ記憶部４０から、ＱＵＢＯ係数行列Ｗを取得し、目的関数に含まれる全変数に対応する複数の頂点を有し、各変数間の相互作用の有無を、複数の頂点の各頂点間を結ぶ辺の有無に置き換えたグラフを生成する。
【００７５】
グラフ抽象化部４２は、たとえば、ユーザによる入力デバイス３１ｅ１の操作により入力される組合せ最適化問題の分割数ｋを取得する。そして、グラフ抽象化部４２は、グラフ生成部４１が生成したグラフにおいて、頂点数が上記の分割数ｋに基づいた停止条件を満たすまで、辺を介して接続されている２つの頂点を１つの頂点に統合する処理を繰り返す。これにより、グラフ抽象化部４２は、グラフ生成部４１が生成したグラフを抽象化したグラフを生成する。なお、統合する頂点の選択例などについては後述する。
【００７６】
分類処理部４３は、抽象化したグラフの各頂点の接続関係と分割数ｋとに基づき、全変数を、複数の部分問題の各々で用いられる変数群の候補と、境界変数群の候補と、に分類する。さらに、分類処理部４３は、抽象化する前のグラフに含まれる各頂点の接続関係に基づいて、上記各候補から、複数の部分問題の各々で用いられる変数群と境界変数群と、を決定する。より詳しい分類の仕方の例については後述する。
【００７７】
境界変数値設定部４４は、境界変数群に固定値を設定する。固定値の決定の仕方の例については後述する。
サブＱＵＢＯ生成部４５は、固定値に基づいて計算された補正値を含み、各部分問題で用いられる変数群に属す変数間の相互作用の大きさを示すサブＱＵＢＯを生成する。補正値は、前述の式（３）により計算される。
【００７８】
サブＱＵＢＯ送信部４６は、各部分問題について生成されたサブＱＵＢＯを、イジングマシン３２に送信する。
受信部４７は、複数の部分問題の各々の解を示す変数群の値をイジングマシン３２から受信する。
【００７９】
最適解計算部４８は、受信した変数群の値と、境界変数群に設定した固定値と、ＱＵＢＯ係数行列Ｗとに基づいて、前述の式（１）を用いて目的関数の値を計算する。また、最適解計算部４８は、計算した目的関数の値が、所定の収束条件を満たさない場合、境界変数値設定部４４が境界変数群に設定する固定値を変更させる。たとえば、最適解計算部４８は、最小となる目的関数の値が、所定回数、連続して変わらない場合に、収束条件が満たされたと判定する。
【００８０】
出力部４９は、収束条件が満たされた時点で、目的関数の値を最小にする全変数の値を、組合せ最適化問題の解として、たとえば、ディスプレイ３１ｄ１に出力する。出力部４９は、組合せ最適化問題の解を、ＨＤＤ３１ｃに記憶させてもよい。
【００８１】
図５は、組合せ最適化問題の計算処理の手順の一例を示すフローチャートである。
グラフ生成部４１は、ＱＵＢＯ記憶部４０からＱＵＢＯ係数行列Ｗを取得する（読み出す）（ステップＳ１）。
【００８２】
図６は、ＱＵＢＯ係数行列Ｗを含む入力ファイルの一例を示す図である。
図６に示されている入力ファイル５０では、図１に示したＱＵＢＯ係数行列Ｗにおいて、ｉ番目の変数σｉとｊ番目の変数σｊとの間の相互作用の大きさを示す係数値Ｊｉｊが、（ｉ，ｊ，Ｊｉｊ）の形式で列挙されている。なお、値が０である係数値Ｊｉｊについては、入力ファイル５０には含まれていない。
【００８３】
次に、グラフ生成部４１は、目的関数の全変数の各々を頂点に置き換えるとともに、各変数間の相互作用の有無を頂点間の辺の有無に置き換えたグラフを生成する（ステップＳ２）。
【００８４】
図７は、生成されたグラフの一例を示す図である。
グラフ５１ａは、図１に示したグラフ２０と同じものであり、１２個の頂点５１ａ１，５１ａ２，５１ａ３，５１ａ４，５１ａ５，５１ａ６，５１ａ７，５１ａ８，５１ａ９，５１ａ１０，５１ａ１１，５１ａ１２を有する。図７において、各頂点の傍にその頂点に接続されている辺の数が示されている。
【００８５】
グラフ抽象化部４２は、グラフの抽象化を行う（ステップＳ３）。ステップＳ３の処理では、グラフ抽象化部４２は、たとえば、まず、ユーザによる入力デバイス３１ｅ１の操作により入力される組合せ最適化問題の分割数ｋを取得する。そして、グラフ抽象化部４２は、グラフ生成部４１が生成したグラフにおいて、以下の手順１、手順２のように頂点同士を統合していく。
【００８６】
（手順１）グラフ抽象化部４２は、接続されている辺の数が少ない頂点同士を優先して統合し、たとえば、以下の手順１−１〜１−５により、現在のグラフよりも１段階粗いグラフを生成する。
【００８７】
（手順１−１）グラフ抽象化部４２は、接続されている辺の数が最も少ない単独頂点（複数の頂点を統合したものではない頂点）を、対応する変数の番号が小さい順に１つ選択する。単独頂点がない場合、グラフ抽象化部４２は、頂点を統合する処理を終了する。図７のグラフ５１ａの例では、まず、変数σ１に対応する単独頂点である頂点５１ａ１が選択される。
【００８８】
（手順１−２）グラフ抽象化部４２は、手順１−１で選択した単独頂点と接続する他の単独頂点のうち、接続する辺が最も少ない頂点を１つ選択する。手順１−１で選択した単独頂点と接続する他の単独頂点がない場合、グラフ抽象化部４２は、手順１−１で選択した単独頂点を複合頂点とし、手順１−１の処理に戻る。上記のように、図７のグラフ５１ａにおいて、変数σ１に対応する単独頂点である頂点５１ａ１が手順１−１の処理で選択された場合、手順１−２の処理では、変数σ２に対応する単独頂点である頂点５１ａ２が選択される。
【００８９】
（手順１−３）グラフ抽象化部４２は、手順１−１，１−２で選択した２つの単独頂点を統合して複合頂点とする。
（手順１−４）グラフ抽象化部４２は、手順１−１，１−２で選択した２つの単独頂点から他の頂点に伸びる辺を、辺の数は変えずに、それらの単独頂点を統合した複合頂点に付け替える。また、グラフ抽象化部４２は、手順１−１，１−２で選択した２つの単独頂点同士を接続する辺は削除する。
【００９０】
図８は、２つの単独頂点を統合した例を示す図である。
図８のグラフ５１ｂでは、図７に示した２つの単独頂点である頂点５１ａ１，５１ａ２を統合して複合頂点５１ｂ１とした例が示されている。図７において頂点５１ａ１，５１ａ２から、変数σ３，σ４に対応した各単独頂点である頂点５１ａ３，５１ａ４へ伸びる各辺が、図８に示すように、複合頂点５１ｂ１に付け替えられている。
【００９１】
（手順１−５）
グラフ抽象化部４２は、複合頂点とした２つの単独頂点を削除して、手順１−１からの処理を繰り返す。
【００９２】
図９は、全て複合頂点となったグラフの例を示す図である。
図９に示すように、図７に示したグラフ５１ａに対して上記手順１−１〜１−５の処理が繰り返し行われることによって、グラフ５１ａに対して１段階粗いグラフ５１ｃが得られる。グラフ５１ｃは、６つの複合頂点５１ｃ１，５１ｃ２，５１ｃ３，５１ｃ４，５１ｃ５，５１ｃ６を有する。
【００９３】
（手順２）次にグラフ抽象化部４２は、複合頂点を単独頂点とみなし、停止条件を満たすまで、上記の手順１−１〜１−５の処理を繰り返す。グラフ抽象化部４２は、たとえば、頂点数＜２ｋとなったときに頂点の統合を停止する。
【００９４】
図１０は、停止条件を満たしたグラフの例を示す図である。
分割数ｋ＝２の場合、頂点数＜４のときに、頂点の統合が停止される。図１０のグラフ５１ｄは、３つの複合頂点５１ｄ１，５１ｄ２，５１ｄ３からなるため、頂点の統合が停止される。
【００９５】
上記のようなグラフ抽象化部４２による処理の終了後、分類処理部４３は、全変数を、複数の部分問題の各々で用いられる変数群と、境界変数群とに分類する（ステップＳ４）。ステップＳ４の処理は、たとえば、以下の手順３，４，５により行われる。
【００９６】
（手順３）分類処理部４３は、最も粗いグラフ（もっとも抽象化したグラフ）に含まれる頂点を、たとえば、以下の手順３−１〜３−６により、ｋ個のグループに分類する。
（手順３−１）分類処理部４３は、最も粗いグラフにおいて、１つのグループに割当てる頂点の数（以下割当て数という）を決める。割当て数は、最も粗いグラフの頂点数を分割数ｋで割った値である。
【００９７】
（手順３−２）分類処理部４３は、グループを示す番号ｇｉ＝１とする。
（手順３−３）分類処理部４３は、番号ｇｉが割当てられていない頂点の中から、最も辺の少ない頂点を１つ選び、番号ｇｉを割当てる。
【００９８】
（手順３−４）分類処理部４３は、同じ番号ｇｉに割当てられた頂点の数が、上記割当て数に達していない場合、番号ｇｉが割当てられた頂点に隣接する頂点の中で、接続されている辺の最も少ない頂点を選び、番号ｇｉを割当てる。
【００９９】
（手順３−５）分類処理部４３は、同じ番号ｇｉに割当てられた頂点の数が、上記割当て数に達した場合、番号ｇｉを１増やし、割当て数に達していない場合には、手順３−４の処理を繰り返す。
【０１００】
（手順３−６）分類処理部４３は、ｇｉ＞ｋであれば、番号ｇｉが割当てられていない頂点に対して（複数ある場合には１つずつ）、番号ｇｉを１から順に割当てた後、手順４の処理に進み、ｇｉ＞ｋでなければ、手順３−３の処理に戻る。
【０１０１】
図１１は、番号ｇｉの割り当て例を示す図である。
分割数ｋ＝２である場合、グラフ５１ｄでは、頂点（複合頂点）の数が３であるため、手順３−１で決定される割当て数は３／２＝１となる。また、グラフ５１ｄでは、複合頂点５１ｄ１に接続されている辺が最も少ないため、手順３−３の処理では、複合頂点５１ｄ１にｇｉ＝１が割当てられる。また、割当て数が１となるため、手順３−４はスキップされる。手順３−５において、番号ｇｉ＝２となると、手順３−６では、ｇｉ＞２ではないため、再度手順３−３の処理が行われる。２回目の手順３−３の処理では、複合頂点５１ｄ３が選択され、複合頂点５１ｄ３に、ｇｉ＝２が割当てられる。手順３−４は再びスキップされ、手順３−５において、ｇｉ＝３になると、手順３−６では、ｇｉ＞２となる。このため、分類処理部４３は、複合頂点５１ｄ２に、１番小さいｇｉ＝１を割当てる。
【０１０２】
上記のような手順３の処理により、異なるグループに属す頂点が、同じグループに属す頂点の間に接続されることがなくなる。
（手順４）分類処理部４３は、各グループが空にならないように、境界変数群の候補に対応する頂点群を、たとえば、以下の手順４−１〜４−５により決定する。
【０１０３】
（手順４−１）分類処理部４３は、ｇｉ＝１以上の他のグループと辺を共有する頂点のリストを作成する。たとえば、図１１に示したように複合頂点５１ｄ１〜５１ｄ３に番号ｇｉが割当てられている場合、ｇｉ＝１が割当てられている複合頂点５１ｄ２と、複合頂点５１ｄ２と辺を共有し、ｇｉ＝２が割当てられている複合頂点５１ｄ３がリストに含まれる。
【０１０４】
（手順４−２）分類処理部４３は、リストが空である場合には、手順４の処理を終了する。
（手順４−３）分類処理部４３は、リストから、所属する頂点数が最も多いグループに属す頂点を１つ選び、その頂点に割当てられている番号ｇｉを０に変える。ｇｉ＝０が割当てられた頂点（複合頂点）に統合された各頂点に対応する変数群が、境界変数群の候補となる。
【０１０５】
図１２は、番号ｇｉの変更例を示す図である。
リストに含まれている複合頂点５１ｄ２，５１ｄ３のうち、複合頂点５１ｄ２は、所属する頂点数が２つであるｇｉ＝１のグループに属する。一方、複合頂点５１ｄ３は、所属する頂点数が１つであるｇｉ＝２のグループに属する。よって、手順４−３の処理では、複合頂点５１ｄ２に割当てられている番号ｇｉが１から０に変更される。
【０１０６】
これにより、番号ｇｉ＝０が割当てられた複合頂点５１ｄ２に統合された各頂点に対応する変数σ３，σ６，σ７，σ１０が境界変数群の候補となる。また、変数σ１，σ２，σ４，σ５による変数群と、変数σ８，σ９，σ１１，σ１２による変数群が、２つの部分問題で用いられる変数群の候補となる。変数σ３，σ６，σ７，σ１０の値を固定値とすることで、変数σ１，σ２，σ４，σ５による変数群と、変数σ８，σ９，σ１１，σ１２による変数群との関係を互いに素にできることはグラフ５１ｄから明らかであろう。
【０１０７】
（手順４−４）分類処理部４３は、所属する頂点のないグループが発生した場合、１段階、詳細なグラフの各頂点に、その頂点が統合されていた複合頂点の番号ｇｉを引き継がせ、手順４−１からの処理を実行する。
【０１０８】
（手順４−５）分類処理部４３は、所属する頂点のないグループが発生していない場合、手順４−１からの処理を繰り返す。
（手順５）分類処理部４３は、以下の手順５−１〜５−３により、複数の部分問題で用いられる変数群と、境界変数群を決定する。
【０１０９】
（手順５−１）分類処理部４３は、粗いグラフの各頂点に割当てた番号ｇｉを、１段階、詳細なグラフの各頂点に引き継がせる。分類処理部４３は、現在扱っているグラフが、最も詳細なグラフ（抽象化する前の元のグラフ）である場合には、手順５の処理を終了する。これによりグループ分けが完了する。
【０１１０】
図１３は、最も粗いグラフの各頂点に割当てた番号ｇｉを、１段階、詳細なグラフの各頂点に引き継がせた例を示す図である。
図１２のグラフ５１ｄの複合頂点５１ｄ１に割当てられたｇｉ＝１は、図１３のグラフ５１ｃにおいて、複合頂点５１ｄ１に統合された複合頂点５１ｃ１，５１ｃ２に引き継がれる。また、図１２のグラフ５１ｄの複合頂点５１ｄ２に割当てられたｇｉ＝０は、図１３のグラフ５１ｃにおいて、複合頂点５１ｄ２に統合された複合頂点５１ｃ３，５１ｃ４に引き継がれる。さらに、図１２のグラフ５１ｄの複合頂点５１ｄ３に割当てられたｇｉ＝２は、図１３のグラフ５１ｃにおいて、複合頂点５１ｄ３に統合された複合頂点５１ｃ５，５１ｃ６に引き継がれる。
【０１１１】
（手順５−２）分類処理部４３は、ｇｉ＝０が割当てられている頂点の中で、接続先の頂点に割当てられている番号ｇｉが０か、１以上の１つの値の２通りしかない頂点を探索する。そのような頂点がない場合には、手順５−１の処理が繰り返される。
【０１１２】
図１３の例では、ｇｉ＝０が割当てられている複合頂点５１ｃ３は、ｇｉ＝０が割当てられている複合頂点５１ｃ４、ｇｉ＝１が割当てられている複合頂点５１ｃ１，５１ｃ２、及びｇｉ＝２が割当てられている複合頂点５１ｃ６に接続されている。また、ｇｉ＝０が割当てられている複合頂点５１ｃ４は、ｇｉ＝０が割当てられている複合頂点５１ｃ３、ｇｉ＝１が割当てられている複合頂点５１ｃ２、及びｇｉ＝２が割当てられている複合頂点５１ｃ５に接続されている。したがって、グラフ５１ｃには手順５−２における探索対象の頂点がない。このため、手順５−１の処理が繰り返される。
【０１１３】
図１４は、番号ｇｉを最も詳細なグラフの各頂点に引き継がせた例を示す図である。
図１３のグラフ５１ｃの複合頂点５１ｃ１，５１ｃ２に割当てられたｇｉ＝１は、図１４のグラフ５１ａにおいて、複合頂点５１ｃ１，５１ｃ２に統合された頂点５１ａ１，５１ａ２，５１ａ４，５１ａ５に引き継がれる。また、図１３のグラフ５１ｃの複合頂点５１ｃ３，５１ｃ４に割当てられたｇｉ＝０は、図１４のグラフ５１ａにおいて、複合頂点５１ｃ３，５１ｃ４に統合された頂点５１ａ３，５１ａ６，５１ａ７，５１ａ１０に引き継がれる。さらに、図１３のグラフ５１ｃの複合頂点５１ｃ５，５１ｃ６に割当てられたｇｉ＝２は、図１４のグラフ５１ａにおいて、複合頂点５１ｃ５，５１ｃ６に統合された頂点５１ａ８，５１ａ９，５１ａ１１，５１ａ１２に引き継がれる。
【０１１４】
図１４の例では、ｇｉ＝０が割当てられている頂点５１ａ３は、ｇｉ＝０が割当てられている頂点５１ａ６，５１ａ１０及び、ｇｉ＝１が割当てられている頂点５１ａ１，５１ａ２，５１ａ４に接続されている。また、ｇｉ＝０が割当てられている頂点５１ａ６は、ｇｉ＝０が割当てられている頂点５１ａ３，５１ａ７、ｇｉ＝２が割当てられている頂点５１ａ８，５１ａ９に接続されている。さらに、ｇｉ＝０が割当てられている頂点５１ａ１０は、ｇｉ＝０が割当てられている頂点５１ａ３、ｇｉ＝２が割当てられている頂点５１ａ１１，５１ａ１２に接続されている。
【０１１５】
したがって、これら３つの頂点５１ａ３，５１ａ６，５１ａ１０は、手順５−２での探索対象となる。
（手順５−３）分類処理部４３は、手順５−２の処理で探索できた頂点に割当てられているｇｉ＝０を、その頂点に接続されている頂点に割当てられている番号ｇｉ（１以上の値）に変更し、手順５−１の処理に戻る。上記の例のように、条件に合う頂点が複数探索できた場合、分類処理部４３は、そのうちの１つ（たとえば、対応する変数の番号が一番小さい頂点）について番号ｇｉの変更を行い、手順５−２の処理を再度行う。
【０１１６】
図１５は、グループ分け完了時に各頂点に割当てられている番号ｇｉの例を示す図である。
手順５−３において、ｇｉ＝０が割当てられていた頂点５１ａ３に割当てられている番号ｇｉが０から１に変更された後、グループ分けが完了した例が示されている。
【０１１７】
図１５の例では、頂点５１ａ１〜５１ａ５にｇｉ＝１、頂点５１ａ６，５１ａ７，５１ａ１０にｇｉ＝０、頂点５１ａ８，５１ａ９，５１ａ１１，５１ａ１２にｇｉ＝２が、それぞれ割当てられている。これにより、頂点５１ａ６，５１ａ７，５１ａ１０に対応する変数σ６，σ７，σ１０が境界変数群に分類される。頂点５１ａ１〜５１ａ５に対応する変数σ１〜σ５と、頂点５１ａ８，５１ａ９，５１ａ１１，５１ａ１２に対応する変数σ８，σ９，σ１１，σ１２が、それぞれ異なる２つの部分問題で用いられる変数群に分類される。
【０１１８】
以上で、分類処理部４３の処理が終わる。
次に、境界変数値設定部４４は、境界変数群に固定値を設定する（ステップＳ５）。なお、境界変数値設定部４４は、後述の収束条件が満たされなかった場合に、境界変数群の固定値（ビット列）を１ビットずつ変更する。境界変数値設定部４４は、たとえば、まず、境界変数群の各ビットの値をそれぞれランダムに決定した初期ビット列を生成する。再度ステップＳ５の処理が行われる場合、境界変数値設定部４４は、生成した初期ビット列の何れか１つのビットの値を反転した、ビット列を生成する。なお、反転したビットを示すインデックスはタブーリストの先頭に追加され、次回からはタブーリストに含まれているインデックスで示されるビット以外のビットが反転される。タブーリストは、たとえば、ＲＡＭ３１ｂに記憶される。タブーリストに追加されたインデックスによるデータ量がタブーリストのサイズ（許容データ量）を超えた場合に、タブーリストの末尾のインデックスが優先的に削除される。
【０１１９】
なお、境界変数群に対する固定値の設定方法についてのより詳細なアルゴリズムの例については後述する。
ステップＳ５の処理後、サブＱＵＢＯ生成部４５は、固定値に基づいて計算された補正値を含み、各部分問題で用いられる変数群に属す変数間の相互作用の大きさを示すサブＱＵＢＯを、生成する（ステップＳ６）。補正値は、前述の式（３）により計算される。
【０１２０】
図１６は、生成されたサブＱＵＢＯの一例を示す図である。
サブＱＵＢＯ５２ａは、変数σ１〜σ５の間での相互作用の大きさを示す係数値と、補正値ｄ３とを含む。サブＱＵＢＯ５２ｂは、変数σ８，σ９，σ１１，σ１２の間での相互作用の大きさを示す係数値と、補正値ｄ８，ｄ９，ｄ１１，ｄ１２とを含む。
【０１２１】
生成されたサブＱＵＢＯ５２ａ，５２ｂは、たとえば、以下に示すようなファイル形式で、ＨＤＤ３１ｃなどの記憶領域に記憶される。
図１７は、サブＱＵＢＯのファイル形式の一例を示す図である。
【０１２２】
サブＱＵＢＯファイル５３ａは、図１６に示したサブＱＵＢＯ５２ａにおいて、ｉ番目の変数σｉとｊ番目の変数σｊとの間の相互作用の大きさを示す係数値Ｊｉｊが、（ｉ，ｊ，Ｊｉｊ）の形式で列挙したものである。また、係数値Ｊｉｊ（ｉ＝ｊ）で値があるもの（たとえば、係数値Ｊ３，３）は、補正値を示している（ただし、バイアスｈｉ＝０としている）。
【０１２３】
同様に、サブＱＵＢＯファイル５３ｂは、図１６に示したサブＱＵＢＯ５２ｂにおいて、ｉ番目の変数σｉとｊ番目の変数σｊとの間の相互作用の大きさを示す係数値Ｊｉｊが、（ｉ，ｊ，Ｊｉｊ）の形式で列挙したものである。
【０１２４】
ステップＳ６の処理後、サブＱＵＢＯ送信部４６は、各部分問題について生成されたサブＱＵＢＯを、イジングマシン３２に各々個別に送信する（ステップＳ７）。サブＱＵＢＯ送信部４６は、たとえば、図１７に示したようなファイル形式で、サブＱＵＢＯをイジングマシン３２に送信してもよい。
【０１２５】
イジングマシン３２は、各サブＱＵＢＯを受けて、各部分問題を解く。
たとえば、イジングマシン３２は、図１６に示したサブＱＵＢＯ５２ａを受信した場合、１２個の変数のうち変数σ１〜σ５だけを含む目的関数の値を最小にする変数σ１〜σ５の値（または近似値）を計算する。また、イジングマシン３２は、図１６に示したサブＱＵＢＯ５２ｂを受信した場合、１２個の変数のうち変数σ８，σ９，σ１１，σ１２だけを含む目的関数の値を最小にする変数σ８，σ９，σ１１，σ１２の値（または近似値）を計算する。
【０１２６】
受信部４７は、イジングマシン３２から、複数の部分問題の各々の解を示す変数群の値を受信する（ステップＳ８）。
最適解計算部４８は、受信した変数群の値と、境界変数群に設定した固定値と、全変数間の相互作用の大きさを示す係数値群の値とに基づいて、目的関数の値を計算する（ステップＳ９）。そして、最適解計算部４８は、更新処理を行う（ステップＳ１０）。ステップＳ５〜Ｓ１０の処理は、所定の収束条件が満たされるまで繰り返される。ステップＳ１０の処理では、最適解計算部４８は、今回算出した目的関数の値が、これまで算出した目的関数の最小値よりも小さい場合に、今回算出した目的関数の値を、最小値として更新する。また、その場合、最適解計算部４８は、今回目的関数の値を算出するために用いた全変数の値の組合せを最適化問題の解の候補として更新する。
【０１２７】
最適解計算部４８は、所定の収束条件が満たされているか否かを判定する（ステップＳ１１）。たとえば、最適解計算部４８は、最小となる目的関数の値が、所定回数（または所定時間）、連続して変わらない場合に、収束条件が満たされたと判定する。収束条件が満たされない場合、ステップＳ５からの処理が繰り返される。
【０１２８】
収束条件が満たされた場合、出力部４９は、収束条件が満たされた時点で、目的関数の値を最小にする全変数の値を、組合せ最適化問題の解（計算結果）として、たとえば、ディスプレイ３１ｄ１に出力する（ステップＳ１２）。出力部４９は、組合せ最適化問題の解を、ＨＤＤ３１ｃに記憶させてもよい。
【０１２９】
以下、目的関数の最小値（またはその近似値）を得るための、境界変数群の値の探索方法の例について、より詳細に説明する。
組合せ最適化問題を２つの部分問題に分割する場合（分割数ｋ＝２である場合）、目的関数は、以下の式（４）で表せる。
【０１３０】
【数４】
2020004387.tif 000006
【０１３１】
式（４）において、ｘ０は境界変数群、ｘ１，ｘ２はそれぞれ、各部分問題で用いられる変数群を表す。Ｗ００は、境界変数群ｘ０に属す変数間の相互作用の大きさを表す係数値群を表し、Ｗ１１は、変数群ｘ１に属す変数間の相互作用の大きさを表す係数値群を表し、Ｗ２２は、変数群ｘ２に属す変数間の相互作用の大きさを表す係数値群を表す。また、Ｗ０１は、境界変数群ｘ０に属す変数と、変数群ｘ１に属す変数との間の相互作用の大きさを表す係数値群を表し、Ｗ０２は、境界変数群ｘ０に属す変数と、変数群ｘ２に属す変数との間の相互作用の大きさを表す係数値群を表す。
【０１３２】
式（４）において、右辺の２項目の最小値（またはその近似値）は、イジングマシン３２の処理により得られる。情報処理装置３１は、以下の式（５）に示す目的関数ｆ（ｘ０）の値を最小にする境界変数群ｘ０の値の探索を行う。
【０１３３】
【数５】
2020004387.tif 000007
【０１３４】
図１８は、タブーサーチを利用して目的関数ｆ（ｘ０）の値を最小にする境界変数群ｘ０の値を探索するアルゴリズムを表す擬似コードの例である。
擬似コード５４には、入力を表す“Ｒｅｑｕｉｒｅ”として、ＱＵＢＯ係数行列Ｗと、最大ビット反転数Ｎｍａｘｂｆと、タブーサイズｎＴａｂｕが定義されている。最大ビット反転数Ｎｍａｘｂｆは、境界変数群ｘ０のビットを反転させる回数の最大数を示す。タブーサイズｎＴａｂｕは、タブーリストのサイズである。また、擬似コード５４には、出力を表す“Ｅｎｓｕｒｅ”として、目的関数の値を最小化する全変数ｘｂの値（の近似値）が定義されている。
【０１３５】
擬似コード５４の行番号１の行には、グラフ生成、抽象化、変数群の分類処理のアルゴリズムが記載されている（詳細なアルゴリズムは前述の通り）。さらに、行番号２の行には、初期値設定として、境界変数群ｘ０の値と、ビット反転数Ｎｂｆと、反転させるビットのインデックスｊを０にすることが示されている。
【０１３６】
行番号３の行には、境界変数群ｘ０の値を、変数ｘ０ｂに代入する処理が記載されている。変数ｘ０ｂは、これまでの計算で目的関数ｆ（ｘ０）を最小にする境界変数群ｘ０の値を示す。行番号４の行には、上記の初期設定により境界変数群ｘ０の値を０としたときに、イジングマシン３２を用いて計算される初期の目的関数ｆ（ｘ０）の値を、変数Ｅｂｅｓｔに代入する処理が記載されている。行番号５の行には、タブーリストＴを空にする（初期化する）処理が示されている。
【０１３７】
行番号６から行番号３５の行には、ｗｈｉｌｅ文により、Ｎｂｆ≦Ｎｍａｘｂｆである間に行われる処理が定義されている。行番号７の行には、変数Ｅｎｂに値ＬＮを代入する処理が示されている。変数Ｅｎｂは、目的関数ｆ（ｘ０）の最小値に最も近い値（以下近傍ベストという）を設定するための変数である。値ＬＮは、十分大きな数である。
【０１３８】
行番号８から行番号２９の行には、境界変数群ｘ０の値を更新するループ処理が記載されている。
行番号９から行番号２９の行には、ｆｏｒ文により、カウンタ変数ｉが、１から境界変数群ｘ０の長さｌｅｎ（ｘ０）の間に行われる処理が定義されている。
【０１３９】
行番号１０では、ｊ＜ｌｅｎ（ｘ０）の場合には、インデックスｊを１増やし、ｊ＝ｌｅｎ（ｘ０）の場合には、ｊ＝１とする処理が示されている。
行番号１１から行番号１４の行には、インデックスｊがタブーリストＴに含まれていなければビット反転数Ｎｂｆを１増やし、境界変数群ｘ０のうち、ｉ番目のビットｘ０，ｉの値を反転させる処理が示されている。さらに、ビットｘ０，ｉの値が反転することによって更新された境界変数群ｘ０の値を用いて目的関数ｆ（ｘ０）の値を更新し、その値を変数Ｅｔｍｐに代入する処理が示されている。境界変数群ｘ０の値が更新された場合、前述のサブＱＵＢＯに含まれる補正値が変わる。そのため、補正値を更新したサブＱＵＢＯが再度生成され、イジングマシン３２に送信される。情報処理装置３１は、イジングマシン３２から各部分問題の解（式（５）の右辺の２項目に相当する）を受信し、目的関数ｆ（ｘ０）を再度計算し、その値を変数Ｅｔｍｐに代入する。
【０１４０】
行番号１６から行番号２１の行には、Ｅｔｍｐ＜Ｅｂｅｓｔの場合、変数ｘ０ｂを、現在の境界変数群ｘ０の値で更新し、変数Ｅｂｅｓｔを変数Ｅｔｍｐに更新し、インデックスｊをタブーリストＴに追加し、その後、ｆｏｒ文によるループから抜ける処理が示されている。なお、タブーリストＴに含まれるインデックスによるデータ量がタブーサイズｎＴａｂｕを超える場合は、古い値（タブーリストＴの末尾のインデックス）から優先的に削除される。
【０１４１】
行番号２２から行番号２６の行には、Ｅｔｍｐ＜Ｅｎｂの場合、変数ｘ０ｎｂを、現在の境界変数群ｘ０の値で更新し、変数Ｅｎｂを変数Ｅｔｍｐに更新し、インデックスｊｎｂを現在指定されているインデックスｊで更新する処理が示されている。
【０１４２】
行番号２７の行には、境界変数群ｘ０において、ビットｘ０，ｉの値を反転させる（元に戻す）処理が示されている。
行番号３０から行番号３３の行には、境界変数群ｘ０の更新ループが回りきった場合に、境界変数群ｘ０を近傍ベストにおける値を示す変数ｘ０ｎｂに遷移させ、インデックスｊｎｂをタブーリストＴに追加する処理が示されている。なお、タブーリストＴに含まれるインデックスによるデータ量がタブーサイズｎＴａｂｕを超える場合は、古い値（タブーリストＴの末尾のインデックス）から優先的に削除される。
【０１４３】
行番号３０から行番号３３の処理により、変数Ｅｔｍｐが変数Ｅｂｅｓｔよりも小さくならない場合（たとえば、目的関数ｆ（ｘ０）の値が増加する場合）でも、境界変数群ｘ０の値が近傍ベスト値における値（変数ｘ０ｎｂ）に遷移するようになる。
【０１４４】
以上説明してきた、第２の実施の形態の最適化問題計算システム３０によれば、第１の実施の形態の最適化問題計算システム１０と同様の効果が得られる。すなわち、変数間の相互作用の有無を反映したグラフを抽象化したグラフに基づいて、各部分問題で用いられる変数群と境界変数群とが分類される、適切な境界変数が得られ計算量を減らせる。
【０１４５】
また、接続されている辺の数が少ない２つの頂点を優先的に１つの頂点に統合していくことで、元のグラフの各頂点の接続関係を比較的よく残したまま、グラフの抽象化が行える。このように抽象化されたグラフを用いることで、変数群の候補と境界変数群の候補との分類をより適切に行うことができる。
【０１４６】
なお、上記の説明では、部分問題への分割数ｋが２である場合を例に説明したが、これに限定されず、３以上であってもよいことは言うまでもない。
ところで、分類された変数群の中には、境界変数群に設定される値によっては、目的関数の値を小さくする値が他の変数の値によらずに決定できる変数が含まれる場合がある。
【０１４７】
図１９は、分類された変数群と境界変数群の例を示す図である。
図１９では、図４に示したような情報処理装置３１が、変数σ１，σ２，σ４，σ５を境界変数として分類し、変数σ１，σ２，σ４に０、変数σ５に１を設定した例が示されている。組合せ最適化問題の１つである最大カット問題では、図１９に示すようなグラフにおいて、値の異なる変数に対応付けられた頂点間の辺が多いほど（またはそのような辺に対応する係数値の値が大きいほど）、目的関数の値が小さくなる。図１９のように境界変数群の値が設定されている場合、変数σ３は、変数σ６の値によらず、１であるほうが、０である場合よりも目的関数の値を小さくできる。
【０１４８】
また、最適化問題には、ある変数群のうち、値が１となる変数の数を１つのみとする制約（１−ｈｏｔ制約）をもつものがある。たとえば、図１９に示したような変数σ１〜σ６のうち、値が１となる変数の数が１つのみであるという制約がある場合、変数σ１〜σ６のうち、値が１となる変数の数が複数ある場合には目的関数の値が大きくなる。図１９の例では、境界変数である変数σ５の値が既に１であるため、目的関数の値を小さくする変数σ３，σ６の値は０である。
【０１４９】
上記のような組合せ最適化問題の性質や制約は、ＱＵＢＯ係数行列Ｗに反映されている。
ＱＵＢＯ係数行列Ｗにおいて、たとえば、下記の式（６）で表される条件が満たされる場合、目的関数の値を小さくするための変数σｉの値が０か１の何れか一方に決まる（たとえば、文献「Mark Lewis and Fred Glover. "Quadratic unconstrained binary optimization problem preprocessing: Theory and empirical analysis." Networks 70.2 (2017): 79-97.」参照）。
【０１５０】
【数６】
2020004387.tif 000008
【０１５１】
式（６）において、ｃａｓｅ１は、係数値Ｊｉｉと、０より大きい係数値Ｊｉｋ（ｋは変数σｉとの相互作用のある変数のインデックス）の積算値と、０より大きい係数値Ｊｋｉの積算値の和が０より小さい場合を示している。この場合、式（１）に示した目的関数Ｈの値を小さくする変数σｉの値は０に決まる。
【０１５２】
一方、式（６）において、ｃａｓｅ２は、係数値Ｊｉｉと、０より小さい係数値Ｊｉｋの積算値と、０より小さい係数値Ｊｋｉの積算値の和が０より大きい場合を示している。この場合、式（１）に示した目的関数Ｈの値を小さくする変数σｉの値は１に決まる。
【０１５３】
以下、上記のようなｃａｓｅ１またはｃａｓｅ２に該当する変数を無効変数と呼び、ｃａｓｅ１及びｃａｓｅ２に該当しない変数を有効変数と呼ぶ。
このような、無効変数を選択する処理は、サブＱＵＢＯに対しても適用可能である。組合せ最適化問題の性質や制約は、サブＱＵＢＯにも反映されるためである。
【０１５４】
図２０は、ＱＵＢＯ係数行列ＷとサブＱＵＢＯの例を示す図である。
図２０に示すようなＱＵＢＯ係数行列Ｗにおいて、たとえば、変数σ２，σ４，σ６，σ８，σ１０，σ１２が境界変数に分類された場合、変数σ１，σ３，σ５，σ７，σ９，σ１１間の相互作用の大きさを示す係数値によるサブＱＵＢＯが得られる。図２０の例では、各境界変数の値が１に設定されたものとしてサブＱＵＢＯの対角成分に補正値が加えられている。
【０１５５】
式（６）より、変数σ１，σ３，σ５，σ７，σ９，σ１１のうち、変数σ３，σ９，σ１１は、ｃａｓｅ１に該当し、値を０に固定できる無効変数となり、変数σ１，σ５は、ｃａｓｅ２に該当し、値を１に固定できる無効変数となる。一方、変数σ７は、ｃａｓｅ１及びｃａｓｅ２に該当せず、有効変数となる。
【０１５６】
上記のような式（６）を用いた有効変数と無効変数との分類の仕方の正しさは、式（２）に示したイジング型の目的関数を用いて確認できる。
たとえば、図２０に示したようなサブＱＵＢＯが得られたとき、式（２）に示したイジング型の目的関数において、変数σ１が寄与する部分は、Ｊ１，３σ１σ３＋Ｊ３，１σ３σ１＋Ｊ１，１σ１＝−２σ１σ３＋４σ１＝σ１（４−２σ３）である。変数σ３は０か１であるので、括弧内は常に正の値であり、目的関数の値を小さくする変数σ１の値は１に決まる。つまり、変数σ１は無効変数である。
【０１５７】
一方、式（２）に示したイジング型の目的関数において、変数σ３が寄与する部分は、Ｊ３１σ３σ１＋Ｊ１３σ１σ３＋Ｊ３３σ３＝−２σ１σ３−５σ３＝−σ３（５＋２σ１）である。変数σ１は０か１であるので、目的関数の値を小さくする変数σ３の値は、０に決まる。つまり、変数σ３も無効変数である。
【０１５８】
また、式（２）に示したイジング型の目的関数において、変数σ７が寄与する部分は、Ｊ７９σ７σ９＋Ｊ９７σ９σ７＋Ｊ７７σ７＝−４σ７σ９＋４σ７＝σ７（４−４σ９）である。変数σ９が０である場合、変数σ７が１であると目的関数の値が小さくなる。一方、変数σ９が１である場合、括弧内が０であるため、変数σ７は０であっても１であってもよい。そのため、変数σ７は有効変数である。
【０１５９】
上記のような処理を実現するため、図４に示した、第２の実施の形態の情報処理装置３１のサブＱＵＢＯ生成部４５は、たとえば、以下に示すようなサブＱＵＢＯの更新処理を行う。
【０１６０】
図２１は、サブＱＵＢＯの更新処理の一例の流れを示す図である。
サブＱＵＢＯ生成部４５は、図５に示したステップＳ６の処理において生成されたサブＱＵＢＯごとに、上記のような式（６）を用いて、無効変数を選択する（ステップＳ２０）。
【０１６１】
サブＱＵＢＯ生成部４５は、選択した無効変数には、上記のように目的関数の値を小さくする値（固定値）を設定する（ステップＳ２１）。
そして、サブＱＵＢＯ生成部４５は、境界変数群に設定された固定値に基づいて計算された補正値を、無効変数に設定された固定値に基づいて更新する（ステップＳ２２）。式（３）の変数σｊに無効変数も含めることで、補正値の更新を行える。
【０１６２】
そして、サブＱＵＢＯ生成部４５は、更新した補正値を含み、分類された変数群のうち、無効変数を除いた有効変数群に属す各変数間の相互作用の大きさを示す新たなサブＱＵＢＯを生成する（ステップＳ２３）。
【０１６３】
このような処理により、部分問題の数を少なくできる可能性があり、計算時間の短縮が期待できる。
図２２は、部分問題の更新例を示す図である。
【０１６４】
図２２では、図５に示したステップＳ６の処理において、６つのサブＱＵＢＯが生成された（６つの部分問題が生成された）例が示されている。各部分問題が使う変数の数（選択された変数の数）は、処理可能なビット数の上限が１０００ビットであるイジングマシン３２を用いた場合を想定し、１０００個となっている。
【０１６５】
図２２の例では、部分問題ＩＤ＝１の部分問題については、図２１に示した処理により得られた有効変数の数が８００、部分問題ＩＤ＝２の部分問題については、有効変数の数が７００となっている。部分問題ＩＤ＝３と部分問題ＩＤ＝６の部分問題については、有効変数の数が５００、部分問題ＩＤ＝４と部分問題ＩＤ＝５の部分問題については、有効変数の数が４００となっている。
【０１６６】
たとえば、図２２に示すように、部分問題ＩＤ＝３と部分問題ＩＤ＝４の部分問題の有効変数の数の和は９００であり、１０００を超えないため、これらの部分問題は統合できる。部分問題ＩＤ＝５と部分問題ＩＤ＝６の部分問題についても同様であり、統合できる。
【０１６７】
このため、図２２に示すように、新たな部分問題ＩＤ＝１〜４の４つの部分問題を作成できる。これにより、イジングマシン３２に部分問題を実行させる回数を６回から４回に少なくすることができる。
【０１６８】
なお、サブＱＵＢＯ生成部４５は、上記のような統合処理を、ビンパッキング問題を解くことで行ってもよい。その場合、ビンパッキング問題における容量を、イジングマシン３２が処理可能なビット数の上限、荷物の大きさを有効変数の数とすればよい。部分問題数程度の小規模のビンパッキング問題は、厳密解を得るのでなければ比較的短時間で解ける。
【０１６９】
（第３の実施の形態）
以下に示す第３の実施の形態の最適化問題計算システムは、境界変数群に互いに異なるＭ（Ｍは２以上の自然数）パターンの固定値を設定し、各固定値に基づくＭパターンのサブＱＵＢＯを、Ｍ個のイジングマシンに処理させるものである。Ｍ個のイジングマシンを用いることで、ＭパターンのサブＱＵＢＯについての部分問題の並列計算が可能になるため、前述のタブーサーチにより境界変数群の値を１つずつ変えて、１つのイジングマシンに繰り返し処理させる場合に比べて、計算時間が短縮可能である。
【０１７０】
図２３は、第３の実施の形態の最適化問題計算システムによる処理例を示す図である。なお、図２３では、上記ＭがＭ＝３である例が示されている。
解候補Ａは、図５に示したような繰り返し処理におけるある時点での、目的関数の最小値（図２３の例では−１０５）と、最小値が得られたときの全変数の値を示している。最適化問題計算システムに含まれるＣＰＵは、全変数のうち、境界変数群に互いに異なる３パターンの固定値を設定する。
【０１７１】
図２３の例では、ＣＰＵは、解候補Ａに含まれる境界変数群に設定されている固定値において、それぞれ異なる１つのビット位置の値を反転させた３パターンの固定値を設定している。そして、図２３では図示を省略しているが、ＣＰＵは、３パターンの固定値のそれぞれに基づいて補正値を計算し、その補正値を含む３パターンのサブＱＵＢＯを生成する。
【０１７２】
その後、３つのイジングマシンのそれぞれが、３パターンのサブＱＵＢＯのうち、自身が担当するサブＱＵＢＯに基づいた探索（目的関数の値を最小にする変数群の値の探索）を行う。図２３の例では、３つのイジングマシンによる探索（並列イジングマシン処理）により、３つの解候補Ｂ１，Ｂ２，Ｂ３が得られている。
【０１７３】
そして、たとえば、最適化問題計算システムの全体で、解候補Ａ，Ｂ１〜Ｂ３のうちで、目的関数の値が最小値となるものを後述する通信処理によって共有し、ＣＰＵ処理によって、共有された解候補を用いて最適化問題計算システム全体の解候補を更新する。図２３の例では、解候補Ａ，Ｂ１〜Ｂ３のうちで、目的関数の値が最小となる解候補Ｂ１が、最適化問題計算システム全体における新たな解候補Ｂとして採用されている。
【０１７４】
そして、再び、解候補Ｂに含まれる境界変数群の値に対してそれぞれ１ビット異なるように３パターンの固定値が設定され、同様の処理が、収束条件が満たされるまで繰り返される。
【０１７５】
図２４は、第３の実施の形態の最適化問題計算システムのシステム構成例を示す図である。
最適化問題計算システム６０は、情報処理装置６１ａ，６１ｂ１，…，６１ｂＭを有する。情報処理装置６１ａ，６１ｂ１，…，６１ｂＭは、ネットワーク６２を介して互いに接続されている。情報処理装置６１ａ，６１ｂ１〜６１ｂＭのそれぞれは、たとえば、図２に示したようなハードウェア構成により実現される。情報処理装置６１ｂ１〜６１ｂＭのそれぞれにはイジングマシン６１ｃ１〜６１ｃＭの何れかが接続されている。なお、情報処理装置６１ｂ１〜６１ｂＭのそれぞれの内部に、イジングマシン６１ｃ１〜６１ｃＭの何れかが設けられていてもよい。
【０１７６】
情報処理装置６１ａはファイルサーバとして機能する。情報処理装置６１ａに含まれるＨＤＤには、最適化問題計算プログラムや、ＱＵＢＯ係数行列Ｗが記憶される。
最適化問題計算システム６０では、たとえば、ＭＰＩ（Message Passing Interface）処理が行われ、情報処理装置６１ｂ１〜６１ｂＭは、情報処理装置６１ａのＨＤＤに記憶されている最適化問題計算プログラムを一斉に実行する。
【０１７７】
図２５は、第３の実施の形態の最適化問題計算システムによる計算処理の手順の一例を示すフローチャートである。
情報処理装置６１ｂ１〜６１ｂＭは、情報処理装置６１ａのＨＤＤに記憶されているＱＵＢＯ係数行列Ｗを取得する（ステップＳ３０）。そして情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、ステップＳ３１，Ｓ３２，Ｓ３３の処理を行う。ステップＳ３１〜Ｓ３３の処理は、図５に示したステップＳ２〜Ｓ４の処理と同じである。
【０１７８】
その後、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、境界変数群にＭパターンの固定値を設定する（ステップＳ３４）。繰り返し処理における初回のステップＳ３４の処理では、ＣＰＵは、たとえば、まず、境界変数群の各変数（ビット）による初期ビット列に対して、それぞれ異なる１つのビット位置の値を反転させて、Ｍパターンのビット列を生成する。繰り返し処理における２回目以降のステップＳ３４の処理では、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、更新された解候補に含まれる境界変数群のビット列に対して、それぞれ異なる１つのビット位置の値を反転させて、Ｍパターンのビット列を生成する。なお、ステップＳ３４の処理で設定されるＭパターンの固定値は、情報処理装置６１ｂ１〜６１ｂＭのそれぞれにおいて同じである。
【０１７９】
次に、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、Ｍパターンの固定値のうち自身が処理を担当するパターンの固定値を決定する（ステップＳ３５）。たとえば、Ｍパターンの固定値のそれぞれには、ＭＰＩプロセスのランク番号（プロセス固有の識別情報）が対応付けられており、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵにもランク番号が対応付けられている。各ＣＰＵは、自身のランク番号と同じランク番号が対応付けられているパターンの固定値の処理を担当する。
【０１８０】
各ＣＰＵは、処理を担当するパターンの固定値に基づいて補正値を計算し、その補正値を含む各部分問題に対応するサブＱＵＢＯを生成する（ステップＳ３６）。ステップＳ３６の処理は、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵにて行われるため、最適化問題計算システム６０全体では、ＭパターンのサブＱＵＢＯが各部分問題について生成される。
【０１８１】
そして、各ＣＰＵは、各部分問題について生成されたサブＱＵＢＯを各々個別にイジングマシンへ送信する（ステップＳ３７）。最適化問題計算システム６０全体では、図２４に示すようにＭ個のイジングマシン６１ｃ１〜６１ｃＭへのサブＱＵＢＯの送信が並列に行われることになる。
【０１８２】
その後、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、ステップＳ３８，Ｓ３９の処理を行う。ステップＳ３８，Ｓ３９の処理は、図５に示したステップＳ８，Ｓ９の処理と同じである。
【０１８３】
そして、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは通信を行い、最適化問題計算システム６０全体で、目的関数の値が最小値となる解候補を共有するために、目的関数の値を共有する（ステップＳ４０）。ステップＳ４０の処理では、たとえば、ＡｌｌＲｅｄｕｃｅ通信により、目的関数の値の共有が行われる。
【０１８４】
そして、情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、共有された目的関数の値を用いて、最適化問題計算システム６０全体の解候補を更新する（ステップＳ４１）。たとえば、あるＣＰＵが今回計算した目的関数の値がこれまで最適化問題計算システム６０で得られた最小値である場合、そのＣＰＵは、その最小値を得たときの全変数の値をその最小値とともに送信し、最適化問題計算システム６０全体で共有する。これにより、最適化問題計算システム６０全体の解候補が更新される。ステップＳ４１の処理では、たとえば、ブロードキャスト通信が用いられる。
【０１８５】
情報処理装置６１ｂ１〜６１ｂＭのそれぞれのＣＰＵは、所定の収束条件が満たされているか否かを判定し（ステップＳ４２）、収束条件が満たされていない場合には、ステップＳ３４からの処理が繰り返される。収束条件が満たされている場合、そのときの解候補が、たとえば、情報処理装置６１ａにおいて解データ（組合せ最適化問題の解（計算結果））を記憶する記憶領域に記憶される。情報処理装置６１ａは、計算結果を、たとえば、ディスプレイ３１ｄ１に出力し（ステップＳ４３）、計算処理を終える。
【０１８６】
図２６は、Ｍ＝３としたときのＭＰＩ処理の例を示す図である。
“Ｅ１”は、これまで最適化問題計算システム６０で得られた目的関数の最小値を示している。また、その最小値が得られたときの全変数の値（“ｂｉｔ”）が“Ｅ１”に対応付けられている。“Ｅ１”と“Ｅ１”に対応付けられた“ｂｉｔ”は、後述の処理により、最適化問題計算システム６０全体で共有されている。
【０１８７】
Ｍ＝３の場合、ステップＳ３４の処理では、情報処理装置６１ｂ１，６１ｂ２，６１ｂ３のそれぞれのＣＰＵは、３パターンの固定値を含む全変数の値を生成する。なお、図示が省略されているが“Ｃ１”，“Ｃ２”，“Ｃ３”にはＭＰＩプロセスのランク番号が対応付けられている。
【０１８８】
ステップＳ３５の処理では、情報処理装置６１ｂ１のＣＰＵが処理を担当するパターンの固定値は、“Ｃ１”に対応する“ｂｉｔ”に含まれるものとなる。また、情報処理装置６１ｂ２のＣＰＵが処理を担当するパターンの固定値は、“Ｃ２”に対応する“ｂｉｔ”に含まれるものとなり、情報処理装置６１ｂ３のＣＰＵが処理を担当するパターンの固定値は、“Ｃ３”に対応する“ｂｉｔ”に含まれるものとなる。
【０１８９】
“Ｒ１”は、情報処理装置６１ｂ１のＣＰＵが、イジングマシン６１ｃ１を用いて計算した目的関数の最小値であり、その最小値が得られたときの“ｂｉｔ”が“Ｒ１”に対応付けられている。“Ｒ２”は、情報処理装置６１ｂ２のＣＰＵが、イジングマシン６１ｃ２を用いて計算した目的関数の最小値であり、その最小値が得られたときの“ｂｉｔ”が“Ｒ２”に対応付けられている。“Ｒ３”は、情報処理装置６１ｂ３のＣＰＵが、イジングマシン６１ｃ３を用いて計算した目的関数の最小値であり、その最小値が得られたときの“ｂｉｔ”が“Ｒ３”に対応付けられている。
【０１９０】
このとき、情報処理装置６１ｂ１は、“Ｅ１”の値と“Ｒ１”の値を保持しているが、“Ｒ２”の値と“Ｒ３”の値を保持していない。また、情報処理装置６１ｂ２は、“Ｅ１”の値と“Ｒ２”の値を保持しているが、“Ｒ１”の値と“Ｒ３”の値を保持していない。また、情報処理装置６１ｂ３は、“Ｅ１”の値と“Ｒ３”の値を保持しているが、“Ｒ１”の値と“Ｒ２”の値を保持していない。
【０１９１】
ステップＳ４０の処理では、たとえば、ＡｌｌＲｅｄｕｃｅ通信が行われ、情報処理装置６１ｂ１〜６１ｂ３のそれぞれにおいて“Ｅ１”，“Ｒ１”，“Ｒ２”，“Ｒ３”の値が保持される。
【０１９２】
ステップＳ４１の処理では、たとえば、情報処理装置６１ｂ１〜６１ｂ３のそれぞれのＣＰＵは、まず、自身が計算した目的関数の値が、他のＣＰＵが計算した目的関数の値及び、“Ｅ１”の値よりも小さいか否かを判定する。各ＣＰＵは、自身が計算した目的関数の値が、他のＣＰＵが計算した目的関数の値及び“Ｅ１”の値よりも小さければ、自身が計算した目的関数の値で“Ｅ１”の値を上書きするとともに、“Ｅ１”に対応付けられていた“ｂｉｔ”の値も上書きする。
【０１９３】
図２６の例では、情報処理装置６１ｂ１のＣＰＵが計算した“Ｒ１”の値が“Ｅ１”，“Ｒ２”，“Ｒ３”の値よりも小さいため、“Ｒ１”の値（−１０７）で、“Ｅ１”の値が更新される。さらに情報処理装置６１ｂ１のＣＰＵは、“Ｅ１”に対応付けられていた“ｂｉｔ”の値を、“Ｒ１”に対応付けられている“ｂｉｔ”の値で上書きする。
【０１９４】
その後、情報処理装置６１ｂ１のＣＰＵは、たとえば、ブロードキャスト通信により、更新した“Ｅ１”の値と“Ｅ１”に対応付けられている“ｂｉｔ”の値を送信する。これにより、情報処理装置６１ｂ２，６１ｂ３においても、“Ｅ１”の値と“Ｅ１”に対応付けられている“ｂｉｔ”の値が更新される。
【０１９５】
以上のように、第３の実施の形態の最適化問題計算システム６０は、境界変数群に互いに異なるＭ（Ｍは２以上の自然数）パターンの固定値を設定し、各固定値に基づくＭパターンのサブＱＵＢＯを、Ｍ個のイジングマシン６１ｃ１〜６１ｃＭに処理させる。これにより、ＭパターンのサブＱＵＢＯについての部分問題の並列計算が可能になるため、タブーサーチにより境界変数群の値を１つずつ変えて、１つのイジングマシンに繰り返し処理させる場合に比べて、計算時間が短縮可能である。
【０１９６】
なお、上記の例では、解候補に含まれる境界変数群のビット列に対して、それぞれ異なる１つのビット位置の値を反転させて、Ｍパターンのビット列を生成する例を示したが、これに限定されない。たとえば、以下のようにＭパターンのビット列を生成してもよい。
【０１９７】
図２７は、Ｍパターンのビット列を生成する他の例を示す図である。なお、図２７では、Ｍ＝３である例が示されている。
図２７では、３つの解候補Ａ１，Ａ２，Ａ３の“ｂｉｔ”に含まれる境界変数群の固定値に基づいて、境界変数群の３パターンの新たな固定値が生成される例が示されている。新たな３パターンの固定値は、図２７に示すように解候補Ａ１，Ａ２，Ａ３の“ｂｉｔ”に含まれる境界変数群の固定値をそのまま用いてもよいし、解候補Ａ１，Ａ２，Ａ３の“ｂｉｔ”に含まれる境界変数群の固定値を１ビット変化させて用いてもよい。また、３パターンの固定値の何れかの代りに、探索が行われていないパターンの固定値を用いてもよい。
【０１９８】
３つのイジングマシンを用いて解候補Ｂ１，Ｂ２，Ｂ３が得られた場合、ＣＰＵは、解候補Ａ１〜Ａ３に含まれる“Ｅ１”，“Ｅ２”，“Ｅ３”と、解候補Ｂ１〜Ｂ３に含まれる“Ｒ１”，“Ｒ２”，“Ｒ３”から、値が重複するものを除いて値が小さい順に３つ選択する。図２７の例では、“Ｅ１”，“Ｒ１”，“Ｒ２”が選択されている。
【０１９９】
そして、最適化問題計算システムの全体で、“Ｅ１”，“Ｒ１”，“Ｒ２”を含む解候補が前述の通信処理によって共有され、共有された解候補を用いて最適化問題計算システム全体の３つの解候補が更新される。図２７の例では、“Ｅ１”の値と“Ｅ１”に対応付けられている“ｂｉｔ”の値が、“Ｒ１”の値と“Ｒ１”に対応付けられている“ｂｉｔ”の値によって上書きされている。また、“Ｅ２”の値と“Ｅ２”に対応付けられている“ｂｉｔ”の値が、“Ｒ２”の値と“Ｒ２”に対応付けられている“ｂｉｔ”の値によって上書きされている。また“Ｅ３”の値と“Ｅ３”に対応付けられている“ｂｉｔ”の値が、前回の“Ｅ１”の値と前回の“Ｅ１”に対応付けられていた“ｂｉｔ”の値によって上書きされている。
【０２００】
そして、再び、“Ｅ１”〜“Ｅ３”に対応付けられている“ｂｉｔ”に含まれる固定値に基づいて、新たな３パターンの固定値が生成される。
このように、Ｍ個の解候補に含まれる境界変数群の固定値から新たなＭパターンの境界変数群の固定値を生成することで、１つの解候補に含まれる境界変数群の固定値からＭパターンの境界変数群の固定値を生成するよりも、解が局所解に陥ることを抑制できる。
【０２０１】
なお、上記の説明では、Ｍ個の情報処理装置６１ｂ１〜６１ｂＭがＭ個のイジングマシン６１ｃ１〜６１ｃＭを用いて計算処理を行う例を示したが、この例に限定されない。たとえば、Ｍ個のＣＰＵを有する１つの情報処理装置がＭ個のイジングマシンを用いて上記の処理を行ってもよい。
【０２０２】
なお、前述のように、上記の処理内容は、情報処理装置３１，６１ａ，６１ｂ１〜６１ｂＭにプログラムを実行させることで実現できる。
プログラムは、コンピュータ読み取り可能な記録媒体（たとえば、記録媒体３１ｆ１）に記録しておくことができる。記録媒体として、たとえば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤ及びＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤ及びＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体から他の記録媒体（たとえば、ＨＤＤ３１ｃ）にプログラムをコピーして実行してもよい。
【０２０３】
以上、実施の形態に基づき、本発明の最適化問題計算プログラム及び最適化問題計算システムの一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０２０４】
１０  最適化問題計算システム
１１  情報処理装置
１１ａ  記憶部
１１ａ１  係数値群
１１ｂ  処理部
１１ｃ  インタフェース
１２  イジングマシン
２０，２１，２２  グラフ
σ１〜σ１２  変数
ｄ３，ｄ８，ｄ９，ｄ１１，ｄ１２  補正値
【図１】
2020004387.tif 000009
【図２】
2020004387.tif 000010
【図３】
2020004387.tif 000011
【図４】
2020004387.tif 000012
【図５】
2020004387.tif 000013
【図６】
2020004387.tif 000014
【図７】
2020004387.tif 000015
【図８】
2020004387.tif 000016
【図９】
2020004387.tif 000017
【図１０】
2020004387.tif 000018
【図１１】
2020004387.tif 000019
【図１２】
2020004387.tif 000020
【図１３】
2020004387.tif 000021
【図１４】
2020004387.tif 000022
【図１５】
2020004387.tif 000023
【図１６】
2020004387.tif 000024
【図１７】
2020004387.tif 000025
【図１８】
2020004387.tif 000026
【図１９】
2020004387.tif 000027
【図２０】
2020004387.tif 000028
【図２１】
2020004387.tif 000029
【図２２】
2020004387.tif 000030
【図２３】
2020004387.tif 000031
【図２４】
2020004387.tif 000032
【図２５】
2020004387.tif 000033
【図２６】
2020004387.tif 000034
【図２７】
2020004387.tif 000035