(57)【要約】【課題】最適化問題を高速に計算できる計算装置、計算プログラム、記録媒体及び計算方法を提供する。【解決手段】実施形態によれば、計算装置は、処理手順を繰り返す処理部を含む。処理手順は第１、第２変数更新を含む。第１変数更新は、第１変数ｘｉにｉ番目の第１関数を加えて第１変数ｘｉを更新することを含む。第１変数ｘｉは、第１変数群｛ｘ｝の１つである。ｉ番目の第１関数の変数は、第２変数ｙｉを含む。第２変数ｙｉは、第２変数群｛ｙ｝の１つである。第２変数更新は、第２変数ｙｉに第２、第３関数を加えて第２変数ｙｉを更新することを含む。第２関数の変数は、第１変数ｘｉを含む。第３関数の変数は、第１パラメータ群｛Ｊ｝及び第１変数群｛ｘ｝を含む。処理部は、処理手順を繰り返した後に得られる第１変数ｘｉ、または、処理手順を繰り返した後に得られる第１変数ｘｉの関数を出力する。【選択図】図１
2020046766.tif 000002
【特許請求の範囲】
【請求項１】
処理手順を繰り返す処理部を備え、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の前記第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の前記第３関数は、第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理部は、少なくとも、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ、及び、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力する、計算装置。
【請求項２】
前記計算パラメータは、第１計算パラメータを含み、
前記ｉ番目の前記第１関数の前記変数は、前記ｉ番目の前記第２変数ｙｉと前記第１計算パラメータとの積を含み、
前記処理手順の後の前記第１計算パラメータは、前記処理手順の前の前記第１計算パラメータよりも小さい、請求項１記載の計算装置。
【請求項３】
前記計算パラメータは、第２計算パラメータを含み、
前記ｉ番目の前記第１関数の前記変数は、前記第２変数群{ｙ}の少なくとも一部の２乗平均と前記第２計算パラメータとの差を含み、
前記第２変数群{ｙ}の前記少なくとも一部は、前記ｉ番目の前記第２変数ｙｉを含み、
前記処理手順の後の前記第２計算パラメータは、前記処理手順の前の前記第２計算パラメータ以下である、請求項１記載の計算装置。
【請求項４】
前記処理部の１つの部分は、前記第２変数群{ｙ}の一部の更新と、前記第２変数群{ｙ}の前記一部に関する２乗平均の算出と、を実施し、
前記処理部の別の１つの部分は、前記第２変数群{ｙ}の別の一部の更新と、前記第２変数群{ｙ}の前記別の一部に関する２乗平均の算出と、を実施し、
前記第２変数群{ｙ}の前記一部の前記更新と、前記第２変数群{ｙ}の前記一部に関する前記２乗平均の前記算出と、の少なくとも一部の実施は、前記第２変数群{ｙ}の前記別の一部の前記更新と、前記第２変数群{ｙ}の前記別の一部に関する前記２乗平均の前記算出と、の少なくとも一部の実施と同時に行われる、請求項３記載の計算装置。
【請求項５】
前記第１関数群は、前記第１変数群｛ｘ｝から独立し、
前記第２関数群は、前記第２変数群｛ｙ｝から独立し、
前記第３関数群は、前記第２変数群｛ｙ｝から独立し、
前記処理手順の１つにおいて、前記第１変数更新後に前記第２変数更新が行われる、または、前記第２変数更新後に前記第１変数更新が行われる、請求項１〜４のいずれか１つに記載の計算装置。
【請求項６】
前記第１関数群は、前記第１変数群｛ｘ｝から独立し、
前記第２関数群は、前記第２変数群｛ｙ｝から独立し、
前記第３関数群は、前記第２変数群｛ｙ｝から独立し、
前記第２変数更新は、第１サブ更新及び第２サブ更新を含み、
前記第１サブ更新は、前記第１サブ更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の前記第２関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、
前記第２サブ更新は、前記第２サブ更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の前記第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、
前記第１変数更新及び前記第１サブ更新を交互にＭ回（Ｍは２以上の整数）行った後、前記第２サブ更新を行う、または、前記第２サブ更新後、前記第１変数更新及び前記第１サブ更新を交互にＭ回行う、請求項１〜４のいずれか１つに記載の計算装置。
【請求項７】
前記ｉ番目の前記第２関数は、前記ｉ番目の前記第１変数ｘｉを変数とする前記ｉ番目の第４関数を含み、
前記ｉ番目の第４関数は、前記第１変数ｘｉの非線形関数を含み、
前記ｉ番目の第４関数は、演算パラメータｐを含み、
前記演算パラメータｐは、前記処理手順を繰り返すと変化し、
前記処理手順を繰り返した後の前記ｉ番目の前記第４関数の実数根の数は、前記処理手順を繰り返す前の前記ｉ番目の前記第４関数の実数根の数とは異なる、請求項１〜６のいずれか１つに記載の計算装置。
【請求項８】
前記第１変数更新は、前記第１変数更新前の前記ｉ番目の前記第１変数ｘｉを保持部から取得し、前記第１変数更新後の前記ｉ番目の前記第１変数ｘｉを前記保持部に保持させることを含み、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉを前記保持部から取得し、前記第２変数更新後の前記ｉ番目の前記第２変数ｙｉを前記保持部に保持させることを含む、請求項１〜７のいずれか１つに記載の計算装置。
【請求項９】
前記第１変数更新は、前記第２変数群{ｙ}の少なくとも一部を前記保持部から取得して前記ｉ番目の前記第１関数を計算し、前記ｉ番目の前記第１変数ｘｉに前記ｉ番目の前記第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することをさらに含み、
前記第２変数更新は、前記ｉ番目の前記第１変数ｘｉを前記保持部から取得して前記ｉ番目の前記第２関数を計算し、前記第１パラメータ群｛Ｊ｝の前記少なくとも一部及び前記第１変数群｛ｘ｝の前記少なくとも一部を前記保持部から取得して前記ｉ番目の前記第３関数を計算し、前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の前記第２関数及び前記ｉ番目の前記第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することをさらに含む、請求項８記載の計算装置。
【請求項１０】
前記処理部は、第１計算部と、第２計算部と、を含み、
前記第１計算部は、前記第３関数の計算の一部を実施し、
前記第２計算部は、前記第３関数の前記計算の別の一部を実施し、
前記第１計算部における前記第３関数の前記計算の前記一部の前記実施の少なくとも一部と、前記第２計算部における前記第３関数の前記計算の前記別の一部の前記実施の少なくとも一部は、同時に行われる、請求項８または９に記載の計算装置。
【請求項１１】
前記保持部は、第１保持領域及び第２保持領域を含み、
前記第１パラメータ群｛Ｊ｝は、第１計算使用部分と、第２計算使用部分と、を含み、前記第１計算使用部分は、前記第３関数の前記計算の前記一部で用いられ、前記第２計算使用部分は、前記第３関数の前記計算の前記別の一部で用いられ、
前記第１計算部は、前記第１計算使用部分を前記第１保持領域に保持させ、
前記第２計算部は、前記第２計算使用部分を前記第２保持領域に保持させる、請求項８〜１０のいずれか１つに記載の計算装置。
【請求項１２】
コンピュータに、処理手順を繰り返させる計算プログラムであって、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の前記第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の第３関数は、前記第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ及び前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力させる、計算プログラム。
【請求項１３】
コンピュータに、処理手順を繰り返させる計算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の前記第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の前記第３関数は、第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ及び前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力させる、記録媒体。
【請求項１４】
処理手順を繰り返し、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の前記第３関数は、第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ及び前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力する、計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、計算装置、計算プログラム、記録媒体及び計算方法に関する。
【背景技術】
【０００２】
様々な社会課題において、最適化問題が生じる。最適化問題の１つの例として、イジング問題がある。大規模な最適化問題を高速に解くことが求められる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】T. Inagaki et al., Science 354, 603 (2016).
【非特許文献２】H. Goto, Sci. Rep. 6, 21686 (2016).
【非特許文献３】Y. Haribara et al., Quantum Sci. Technol. 2, 044002 (2017).
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の実施形態は、最適化問題を高速に計算できる計算装置、計算プログラム、記録媒体及び計算方法を提供する。
【課題を解決するための手段】
【０００５】
本発明の実施形態によれば、計算装置は、処理手順を繰り返す処理部を含む。前記処理手順は第１変数更新及び第２変数更新を含む。前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含む。前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つである。前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含む。前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つである。前記ｉ番目の第１関数は、第１関数群の１つである。前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含む。前記ｉ番目の第２関数の変数は、前記ｉ番目の第１変数ｘｉを含む。前記ｉ番目の第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含む。前記ｉ番目の前記第２関数は、第２関数群の１つである。前記ｉ番目の前記第３関数は、第３関数群の１つである。前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含む。前記処理部は、少なくとも、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ、及び、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力する。
【図面の簡単な説明】
【０００６】
【図１】実施形態に係る計算装置の例を示す模式図である。
【図２】実施形態に係る計算装置の動作を例示するフローチャートである。
【図３】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図４】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図５】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図６】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図７】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図８】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図９】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図１０】実施形態に係る計算装置の動作の一部を例示するフローチャートである。
【図１１】実施形態に係る計算装置の例を示す模式図である。
【図１２】実施形態に係る計算の特性を例示するグラフである。
【図１３】計算結果を例示するグラフである。
【図１４】図１４（ａ）及び図１４（ｂ）は、計算結果を例示するグラフである。
【図１５】図１５（ａ）及び図１５（ｂ）は、計算結果を例示するグラフである。
【発明を実施するための形態】
【０００７】
以下に、本発明の各実施の形態について図面を参照しつつ説明する。  
本願明細書と各図において、既出の図に関して前述したものと同様の要素には同一の符号を付して詳細な説明は適宜省略する。
【０００８】
（第１実施形態）  
図１は、実施形態に係る計算装置の例を示す模式図である。  
図１に示すように、本実施形態に係る計算装置１１０は、例えば、処理部２０及び保持部１０を含む。処理部２０は、例えば、ＣＰＵ（Central Processing Unit）などを含む。処理部２０は、例えば電子回路などを含む。保持部１０は、種々のデータを保持可能である。保持部１０は、例えば、記憶部である。保持部１０は、ＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）の少なくともいずれかを含んでも良い。計算装置１１０は、計算システムでも良い。
【０００９】
この例では、計算装置１１０に、取得部３１が設けられている。取得部３１は、例えば、種々のデータを入手可能である。取得部３１は、例えば、Ｉ／Ｏポートなどを含む。取得部３１は、出力部の機能を有しても良い。取得部３１は、例えば、通信機能を有しても良い。
【００１０】
図１に示すように、計算装置１１０は、操作部３２及び表示部３３などを含んでも良い。操作部３２は、例えば、操作機能を有する装置（例えばキーボード、マウス、タッチ式入力パネル、または音声認識入力装置など）を含んでも良い。表示部３３は、各種のディスプレイを含んでも良い。
【００１１】
計算装置１１０に含まれる複数の要素において、無線及び有線の少なくともいずれかの方法により、互いに通信が可能である。計算装置１１０に含まれる複数の要素が設けられる場所が、互いに異なっても良い。計算装置１１０として、例えば、汎用コンピュータが用いられても良い。計算装置１１０として、例えば、互いに接続された複数のコンピュータが用いられても良い。計算装置１１０の少なくとも一部（例えば、処理部２０及び保持部１０など）として、専用の回路が用いられても良い。計算装置１１０として、例えば、互いに接続された複数の回路が用いられても良い。
【００１２】
計算装置１１０に含まれる複数の要素の例については、後述する。
【００１３】
以下、実施形態に係る計算装置１１０において、実施される動作の例について説明する。
【００１４】
図２は、実施形態に係る計算装置の動作を例示するフローチャートである。  
図２に示すように、パラメータを設定する（ステップＳ２０１）。パラメータは、例えば、第１パラメータ群｛Ｊ｝を含む。パラメータは、例えば、第２パラメータ群｛ｈ｝をさらに含んでも良い。これらのパラメータの例については、後述する。
【００１５】
複数の変数を設定する（ステップＳ２０２）。変数は、例えば、第１変数群｛ｘ｝及び第２変数群｛ｙ｝を含む。ステップＳ２０２において、変数は適切な値に初期化される。初期化の例については、後述する。
【００１６】
複数の変数の計算（例えば更新）を行う（ステップＳ２１０）。例えば、複数の変数の時間発展が計算される。例えば、第１変数群｛ｘ｝が更新され、第２変数群｛ｙ｝が更新される。これらの計算は、所定の条件（後述する）が満たされるまで繰り返される。ステップＳ２１０は、例えば、サブルーチンである。
【００１７】
サブルーチン（変数の更新）の後に、例えば、関数を算出する（ステップＳ２２０）。例えば、第１変数群｛ｘ｝に含まれる少なくとも１つの要素の関数が算出される。１つの例において、この関数は、第１変数群｛ｘ｝に含まれる少なくとも１つの要素の符号である。
【００１８】
この関数を出力する（ステップＳ２３０）。例えば、１つの例において、第１変数群｛ｘ｝に含まれる少なくとも１つの要素の符号が出力される。ステップＳ２３０において、更新後の第１変数群｛ｘ｝に含まれる少なくとも１つが出力されても良い。この場合、ステップＳ２２０は、省略されても良い。
【００１９】
実施形態においては、上記の複数の変数の計算（ステップＳ２１０）において、例えば、第１変数群｛ｘ｝の更新が、第２変数群｛ｙ｝を用いて行われる。そして、第２変数群｛ｙ｝の更新が、第１変数群｛ｘ｝を用いて行われる。これらの更新が、複数回行われる。１つの例において、複数回の更新の１つにおいて、第１変数群｛ｘ｝の更新の後に、第２変数群｛ｙ｝の更新が行われる。別の１つの例において、例えば、複数回の更新の１つにおいて、第２変数群｛ｙ｝の更新の後に、第１変数群｛ｘ｝の更新が行われる。
【００２０】
計算装置１１０により、最適化問題を高速に計算できる。最適化問題は、例えば、組み合わせ最適化問題（例えば離散最適化問題）である。例えば、大規模なイジング問題を高速に解くことができる。
【００２１】
以下、計算装置１１０で実施される計算の例として、イジング問題について、説明する。
【００２２】
例えば、イジングエネルギーＥＩｓｉｎｇは、以下の第１式で表される。
【００２３】
【数１】
2020046766.tif 000003
上記の第１式において、「Ｎ」はイジングスピンの数である。「ｓｉ」は、ｉ番目のイジングスピンである。例えば、「ｓｉ」＝±１である。「Ｊ」は、例えば、１つの行列である。上記の第１パラメータ群｛Ｊ｝の１つの例が、行列Ｊである。行列Ｊは、実対称行列である。実対称行列において、対角成分（対角要素）が全てゼロである。
【００２４】
上記の第１式に関して、量子分岐マシンの古典モデル（以下、古典分岐マシンと呼ぶ）が提案されている。古典分岐マシンにおいては、運動方程式は、以下の第２〜第４式で与えられる。
【００２５】
【数２】
2020046766.tif 000004
【数３】
2020046766.tif 000005
【数４】
2020046766.tif 000006
第２〜第４式において、「Ｎ」は、例えば、イジングスピンの数に対応する。「Ｄ」は、例えば、「離調」に対応する。「ｃ」は、定数である。「ｐ」は、例えば、「ポンプレート」に対応する。「Ｋ」は、例えば、「カー係数」に対応する。これらの値は、例えば、予め設定されても良い。第２〜第４式において、第２パラメータ群｛ｈ｝は設けられなくても良い。その場合は第３式および第４式の中の｛ｈ｝の要素を含む項は無視される。
【００２６】
上記の第２〜第４式において、ｐ（ｔ）をゼロから十分大きな値へ増加させた時の「ｘｉ」の最終値の符号「±１」が、最適解（基底状態）のイジングスピン「ｓｉ」となる。「ａ（ｔ）」は、「ｐ（ｔ）」とともに増加するパラメータである。「ａ（ｔ）」は、例えば、以下の第５式で表される。  
【数５】
2020046766.tif 000007
【００２７】
上記の古典分岐マシンは、第２〜第４式において、「Ｈ」をハミルトニアンとしたハミルトン力学系であると見なすことができる。
【００２８】
一方、シミュレーティッドアニーリングが知られている。この方法では、逐次更新アルゴリズムが採用される。逐次更新アルゴリズムにおいては、複数のスピンが、１つずつ更新される。このような逐次更新アルゴリズムは並列計算に向かない。
【００２９】
これに対して、上記の古典分岐マシンの運動方程式をデジタル計算機で離散解法によって解くことが考えられる。このアルゴリズムは、シミュレーティッドアニーリングとは異なり、並列更新アルゴリズムである。並列更新アルゴリズムにおいては、複数の変数を同時に更新することができる。このため、並列計算による高速化が期待できる。
【００３０】
上記の第２〜第５式を用いるアプローチには、以下の課題があると考えられる。最も計算量が大きい行列Ｊを用いた計算が、第１変数ｘ及び第２変数ｙの両方の更新に必要となる。上記の運動方程式は、数値的に容易には解けないため、例えば、計算量が大きい離散解法（例えば４次のルンゲ・クッタ法など）が必要となる。
【００３１】
これに対して、実施形態においては、第２〜第４式に示した連立常微分方程式ではなく、例えば、以下の第６〜第８式に示す連立常微分方程式を用いる。
【００３２】
【数６】
2020046766.tif 000008
【数７】
2020046766.tif 000009
【数８】
2020046766.tif 000010
上記の「ｙＢ」は、第２変数群｛ｙ｝に含まれる全ての要素（例えば、第１番目の第２変数ｙ１〜第Ｎ番目の第２変数ｙＮ）に対応する。「ｆｉ（ｙＢ，ｔ）」は、ｉ番目の第２関数ｙｉの関数である。
【００３３】
第７式に示すように、第１変数更新は、第１変数更新前のｉ番目の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新する。ｉ番目の第１関数は、「ｆｉ（ｙＢ，ｔ）」である。ｉ番目の第１関数は、第１関数群の１つである。
【００３４】
第１計算方法（第１計算装置）において、「ｆｉ（ｙＢ，ｔ）」として、以下の第９式が用いられる。このとき、第７式は、第１０式で表される。
【００３５】
【数９】
2020046766.tif 000011
【数１０】
2020046766.tif 000012
【００３６】
従って、第１計算方法（第１計算装置）においては、第１変数ｘの更新は、上記の第１０式に基づいて行われる。そして、第２変数ｙの更新は、上記の第８式に基づいて行われる。第１０式に示すように、第１計算方法においては、ｉ番目の第１関数の変数は、パラメータ「Ｄ」と「ｙｉ」の積を含む。
【００３７】
第２計算方法（第２計算装置）において、「ｆｉ（ｙＢ，ｔ）」として、以下の第１１式が用いられる。このとき、第７式は、第１２式で表される。
【００３８】
【数１１】
2020046766.tif 000013
【数１２】
2020046766.tif 000014
【００３９】
従って、第２計算方法（第２計算装置）においては、第１変数ｘの更新は、上記の第１２式に基づいて行われる。そして、第２変数ｙの更新は、上記の第８式に基づいて行われる。第２計算方法においては、ｉ番目の第１関数の変数は、ｉ番目の第２変数ｙｉと、第１計算パラメータＲ（ｔ）と、の積を含む。
【００４０】
１つの例（例えば後述する図３の例）においては、「処理手順」は、ステップＳ１１０、ステップＳ１２０及びステップＳ１３０を含む。「処理手順」は、例えば、ステップＳ１１０、ステップＳ１２０及びステップＳ１３０における「ｉ」に関するループ処理を含む。「処理手順」は、複数回繰り返される。第１計算パラメータＲ（ｔ）は、処理手順の繰り返しにおいて、更新される。図３の例では、第１計算パラメータＲ（ｔ）はステップＳ１３０において更新される。
【００４１】
第１計算パラメータＲ（ｔ）は、例えば、処理手順の繰り返しにおいて、単調に減少する。例えば、処理手順の後の第１計算パラメータＲ（ｔ）は、処理手順の前の第１計算パラメータＲ（ｔ）よりも小さい。
【００４２】
第３計算方法（第３計算装置）において、「ｆｉ（ｙＢ，ｔ）」として、以下の第１３式及び第１４式が用いられる。
【００４３】
【数１３】
2020046766.tif 000015
【数１４】
2020046766.tif 000016
【００４４】
このとき、第７式は、第１５式で表される。
【００４５】
【数１５】
2020046766.tif 000017
【００４６】
従って、第３計算方法（第３計算装置）においては、第１変数ｘの更新は、上記の第１５式に基づいて行われる。そして、第２変数ｙの更新は、上記の第８式に基づいて行われる。
【００４７】
例えば、１〜Ｎの集合が、共通部分を持たない複数の部分集合に分割される。複数の部分集合の数は、「Ｎｓ」である。複数の部分集合のそれぞれに含まれる要素の数は、「Ｎｌ」個である。第１４式の「ｊ」に関する和は、「ｊ」が「Ｓｌ」に含まれる場合に行われる。「Ｓｌ」は、「ｌ番目」の部分集合に対応する。「Ｎｌ」は、「Ｓｌ」の要素数（「Ｓｌ」に含まれる要素の数）である。第１４式において、＜ｙ２＞ｌは、複数の部分集合の１つである「Ｓｌ」に含まれる番号に対応する第２変数ｙの２乗平均を示す。
【００４８】
第１５式に示すように、第１変数ｘの更新に用いられるｉ番目の第１関数の変数は、第２変数群{ｙ}の少なくとも一部の２乗平均と、第２計算パラメータＴ（ｔ）と、の差を含む。第２変数群{ｙ}の上記の少なくとも一部は、ｉ番目の第２変数ｙｉを含む。
【００４９】
例えば、ｉ番目の第１関数の変数は、第２変数群{ｙ}の少なくとも一部の２乗平均及び第２計算パラメータＴ（ｔ）の差と、第３計算パラメータＧ（ｔ）と、ｉ番目の第２変数ｙｉと、の積を含む。例えば、処理手順の後の第２計算パラメータＴ（ｔ）は、処理手順の前の第２計算パラメータＴ（ｔ）以下である。例えば、処理手順の後の第３計算パラメータＧ（ｔ）は、処理手順の前の第３計算パラメータＧ（ｔ）以下である。
【００５０】
例えば、第２計算パラメータＴ（ｔ）は、定数、または、処理手順の繰り返しにおいて単調に減少する。例えば、第３計算パラメータＧ（ｔ）は、定数、または、処理手順の繰り返しにおいて単調に減少する。
【００５１】
例えば、処理手順の後の第２計算パラメータＴ（ｔ）は、処理手順の前の第２計算パラメータＴ（ｔ）以下である。例えば、１つのループの後の第２計算パラメータＴ（ｔ）は、その１つのループの前の第２計算パラメータＴ（ｔ）以下である。
【００５２】
例えば、例えば、処理手順の後の第３計算パラメータＧ（ｔ）は、処理手順の前の第３計算パラメータＧ（ｔ）よりも小さい。例えば、１つのループの後の第３計算パラメータＧ（ｔ）は、その１つのループの前の第３計算パラメータＧ（ｔ）よりも小さい。
【００５３】
第６〜第１５式において、「Ｎ」は、例えば、イジングスピンの数に対応する。「Ｄ」は、例えば、「離調」に対応する。「ｃ」は、定数である。「ｐ」は、例えば、「ポンプレート」（例えば演算パラメータ）に対応する。「Ｋ」は、例えば、「カー係数」に対応する。これらの値は、例えば、予め設定されても良い。第６〜第１５式において、第２パラメータ群｛ｈ｝は設けられなくても良い。その場合は、第８式の中の｛ｈ｝の要素を含む項は、無視される。
【００５４】
最も計算量が大きい行列Ｊに関する積和演算は、第２変数ｙの更新にのみ行われ、第１変数ｘの更新では行われない。従って、計算量が削減される。これらの式において、第１変数ｘの時間微分は、第２変数ｙを含む。例えば、第１変数ｘの時間微分は、第１変数ｘを含まない。第２変数ｙの時間微分は、第１変数ｘを含む。例えば、第２変数ｙの時間微分は、第２変数ｙを含まない。ハミルトニアンにおいて、ｘ及びｙは、互いに分離されている。このため、計算量が小さく安定な離散解法が適用可能となる。例えば、シンプレクティック・オイラー法と呼ばれる方法が適用できる。上記の第６〜第１５式においては、「ｘ」の時間微分から「ｐ」が消去されている。
【００５５】
このような方法を用いた場合に、高い性能（例えば、高い精度）が維持できることが分かった。実施形態に係る計算装置では、上記の分離可能なハミルトニアンを持つハミルトン力学系（新しい古典分岐マシン）の運動方程式が、例えば、シンプレクティック・オイラー法で解かれる。実施形態に係る計算装置は、このような新しいアルゴリズムの計算が並列計算によって、できる限り高速に実行されるように構成される。
【００５６】
実施形態において、例えば、「ｐ（ｔ）」をゼロから十分大きな値へ増加させた時の第１変数ｘｉの最終値の符号（「±１」）が、最適解（基底状態）のイジングスピンｓｉとなる。
【００５７】
例えば、第１変数ｘｉ及び第２変数ｙｉは、変数の設定（ステップＳ２０２）において、適切な値に、初期化される。例えば、これらの変数は、絶対値が０．１以下の乱数によって、ランダムに初期化される。
【００５８】
以下、ステップＳ２１０（図２参照）のいくつかの例について説明する。
【００５９】
図３は、実施形態に係る計算装置の動作の一部を例示するフローチャートである。  
図３は、ステップＳ２１０を例示している。図３に示す式は、例である。図３に示すように、「ｔ」、「ｐ」及び「ａ」を初期化する（ステップＳ１０１）。１つの例において、「ｔ」、「ｐ」及び「ａ」は０とされる。「Ｔｍ」は、時刻ｔの最終値に対応する。「ｄｔ」は、時刻ｔの１ステップ当たりの増加量である。「ｄｐ」は、パラメータｐの１ステップ当たりの増加量である。
【００６０】
図３の例において、ステップＳ１０５とステップＳ１０６との間の処理が、１つのループに対応する。「ｔ」が「Ｔｍ」よりも小さいときに、以下に説明する一連の処理を含む「処理手順」の繰り返しが行われる（ステップＳ１０５）。例えば、「ｐ」があらかじめ適切に設定された「Ｐ」よりも小さいときに「処理手順」の繰り返しが行われる、としても良い。例えば、「処理手順」は「ｉ」に関するループ処理を含む（ステップＳ３０１ａ及びステップＳ３０１ｂ）。
【００６１】
ｉ番目の第１変数ｘｉの更新が行われる（ステップＳ１１０）。例えば、第１計算方法（第１計算装置）においては、更新前の第１変数ｘｉに、ｄｔ＊Ｄ＊ｙｉ（第１０式参照）を加えて得られる値を、更新後の第１変数ｘｉとする。ここで、「＊」は、積の記号である。
【００６２】
第２計算方法（第２計算装置）においては、更新前の第１変数ｘｉに、ｄｔ＊Ｒ（ｔ）＊ｙｉ（第１２式参照）を加えて得られる値を、更新後の第１変数ｘｉとする。
【００６３】
第３計算方法（第３計算装置）においては、更新前の第１変数ｘｉに、ｄｔ＊Ｇ（ｔ）＊ｙｉ（＜ｙ２＞ｉ−Ｔ（ｔ））（第１５式参照）を加えて得られる値を、更新後の第１変数ｘｉとする。
【００６４】
ｉ番目の第２変数ｙｉの更新が行われる（ステップＳ１２０）。この例では、第１変数群{ｘ}に基づく更新（ステップＳ１２１）と、第１パラメータ{Ｊ}及び第１変数群{ｘ}に基づく更新（ステップＳ１２２）と、が実施される。ステップＳ１２１とステップＳ１２２との順序は、入れ替えが可能である。ステップＳ１２１の少なくとも一部と、ステップＳ１２２の少なくとも一部と、が同時に行われても良い。ステップＳ１２１は、例えば第１サブ更新に対応する。ステップＳ１２２は、第２サブ更新に対応する。ステップＳ１２１は、「ｉ」に関してループ処理される（ステップＳ３０１ａ及びステップＳ３０１ｂ）。ステップＳ１２２は、「ｉ」に関してループ処理される（ステップＳ３０２ａ及びステップＳ３０２ｂ）。
【００６５】
第１サブ更新では、例えば、更新前の第２変数ｙｉに、ｄｔ＊［（ｐ−Ｄ−ｘｉ＊ｘｉ）＊ｘｉ−ｃ＊ｈｉ＊ａ］を加えて得られる値を、更新後の第２変数ｙｉとする。
【００６６】
第２サブ更新では、例えば、更新前の第２変数ｙｉに、ｄｔ＊ｃ＊Σ（Ｊｉ，ｊ＊ｘｊ）を加えて得られる値を更新後の第２変数ｙｉとする。「Σ」は、ｊに関する和を表す。例えば、「ｄｔ＊ｃ＊Ｊ」をＪ行列としてもよい。この場合、「ｄｔ＊ｃ＊」の演算を実際に行わなくても良い。
【００６７】
更新のためのパラメータの更新処理を行う（ステップＳ１３０）。すなわち、更新前の「ｔ」に「ｄｔ」を加えて得られる値を更新後の「ｔ」とする。更新前の「ｐ」に「ｄｐ」を加えて得られる値を更新後の「ｐ」とする。「ａ」は、例えば、ｐ１／２である。
【００６８】
そして、「ｔ」が「Ｔｍ」よりも小さいときに、ステップＳ１０５に戻る（ステップＳ１０６）。例えば、「ｐ」があらかじめ適切に設定された「Ｐ」よりも小さいときに、ステップＳ１０５に戻っても良い。
【００６９】
「ｔ」が「Ｔｍ」以上のときに、更新を終了し、図２に示すステップＳ２２０またはステップＳ２３０に進む。
【００７０】
第１計算パラメータＲ（ｔ）が用いられる場合、例えば、ステップＳ１３０において、第１計算パラメータＲ（ｔ）が行われる。第２計算パラメータＴ（ｔ）が用いられる場合、例えば、ステップＳ１３０において、第２計算パラメータＴ（ｔ）の更新が行われる。第３計算パラメータＧ（ｔ）が用いられる場合、例えば、ステップＳ１３０において、第３計算パラメータＧ（ｔ）の更新が行われる。
【００７１】
図４は、実施形態に係る計算装置の動作の一部を例示するフローチャートである。  
図４は、ステップＳ２１０を例示している。図４に示す例では、１つの繰り返し処理において、ステップＳ１１０の前にステップＳ１２０（図３参照）が実施される。このように、ステップＳ１１０とステップＳ１２０とにおいて、順序は、任意である。
【００７２】
１つの例において、「Ｋ」は１とする。例えば、「Ｎ」、「Ｄ」、「ｃ」、「Ｔｍ」、「ｄｔ」及び「ｄｐ」は、予め適切な値に設定することができる。
【００７３】
図３及び図４の例では、「ｐ」の更新において、線形増加が適用される。実施形態において、「ｐ」の更新には、任意の増加関数が用いられても良い。実施形態において、上記のように、２種類の更新方法がある。すなわち、１つの更新方法では、第１変数ｘｉの更新の後に、更新された第１変数ｘｉを用いて第２変数ｙｉを更新する。別の更新方法では、第２変数ｙｉの更新の後に、更新された第２変数ｙｉを用いて第１変数ｘｉを更新する。これらの２つの方法が、図３及び図４にそれぞれ対応する。
【００７４】
このように、本実施形態に係る計算装置１１０において、処理部２０（図１参照）は、処理手順（ステップＳ２１０：図２参照）を繰り返す。この処理手順は、例えば、第１変数更新（ステップＳ１１０）及び第２変数更新（ステップＳ１２０）を含む。
【００７５】
第１変数更新は、第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、Ｎは２以上の整数）の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新することを含む。ｉ番目の第１変数ｘｉは、第１変数群｛ｘ｝の１つである。ｉ番目の第１関数の変数は、ｉ番目の第２変数ｙｉを含む。ｉ番目の第２変数ｙｉは、第２変数群｛ｙ｝の１つである。ｉ番目の第１関数は、第１関数群の１つである。
【００７６】
第２変数更新は、第２変数更新前のｉ番目の第２変数ｙｉにｉ番目の第２関数及びｉ番目の第３関数を加えて、ｉ番目の第２変数ｙｉを更新することを含む。ｉ番目の第２関数の変数は、ｉ番目の第１変数ｘｉを含む。ｉ番目の第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び第１変数群｛ｘ｝の少なくとも一部を含む。ｉ番目の第２関数は、第２関数群の１つである。ｉ番目の第３関数は、第３関数群の１つである。
【００７７】
そして、処理部２０は、上記の処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉ、及び、処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉの関数の少なくともいずれかを出力する。例えば、第１変数群｛ｘ｝に含まれる任意の第１変数、及び、処理手順を繰り返した後に得られる任意の第１変数の関数の少なくともいずれかが出力される。例えば、第１変数群｛ｘ｝に含まれる全ての第１変数、及び、処理手順を繰り返した後に得られる全ての第１変数のそれぞれの関数の少なくともいずれかが出力されても良い。
【００７８】
実施形態において、上記の第１関数（第１関数群）は、第１変数群｛ｘ｝から独立している。第１変数群｛ｘ｝の値を変更しても、第１関数（第１関数群）の結果の値は変化しない。上記の第２関数（第２関数群）は、第２変数群｛ｙ｝から独立している。第２変数群｛ｙ｝の値を変更しても、第２関数（第２関数群）の結果の値は変化しない。上記の第３関数（第３関数群）は、第２変数群｛ｙ｝から独立している。第２変数群｛ｙ｝の値を変更しても、第３関数（第３関数群）の結果の値は変化しない。
【００７９】
第１計算方法（第１計算装置）においては、ｉ番目の第１関数は、例えば、ｄｔ＊Ｄ＊ｙｉである（例えば、第１０式参照））。第２計算方法（第２計算装置）においては、ｉ番目の第１関数は、例えば、ｄｔ＊Ｒ（ｔ）＊ｙｉである（例えば、第１２式参照）。第３計算方法（第３計算装置）においては、ｉ番目の第１関数は、例えば、ｄｔ＊Ｇ（ｔ）＊ｙｉ（＜ｙ２＞ｉ−Ｔ（ｔ））である（例えば、第１５式参照）。第２計算方法及び第３計算方法においては、ｉ番目の第１関数の変数は、処理手順の前後で変化する。第２計算方法及び第３計算方法においては、第１関数（第１関数群）に含まれる計算パラメータは、例えば、処理手順の前後で変化する。
【００８０】
実施形態において、ｉ番目の第１関数の変数は、ｄｔ＊Ｒ（ｔ）＊ｙｉ（第１積）、及び、ｄｔ＊Ｇ（ｔ）＊ｙｉ（＜ｙ２＞ｉ−Ｔ（ｔ））（第２積）の少なくともいずれかを含んでも良い。
【００８１】
第２関数は、例えば、ｄｔ＊［（ｐ−Ｄ−ｘｉ＊ｘｉ）＊ｘｉ−ｃ＊ｈｉ＊ａ］である（例えば、図３参照）。第３関数は、例えば、ｄｔ＊ｃ＊Σ（Ｊｉ，ｊ＊ｘｊ）である（例えば、図３参照）。
【００８２】
実施形態において、繰り返して行われる上記の処理手順の１つにおいて、第１変数更新後に第２変数更新が行われても良い。または、第２変数更新後に第１変数更新が行われても良い。
【００８３】
実施形態に係る計算装置で行われるアルゴリズムは、例えば、以下を含む。  
例えば、行列Ｊ（第１パラメータ群｛Ｊ｝の１つの例）を取得する。または、行列Ｊを計算により定める。行列Ｊは、例えば、イジングモデルのパラメータである。このとき、ベクトルｈ（第２パラメータ群｛ｈ｝の１つの例）をさらに取得しても良い。または、ベクトルｈは、計算により定められても良い。２種類の変数（第１変数群{ｘ}及び第２変数群{ｙ}）を用いる。一方の変数の更新には、他方の変数の値を用いる。一方の変数の更新において、その一方の変数の値を用いない。一方の変数の更新の後に、更新後のその一方の変数の値を用いて、他方を更新する。
【００８４】
上記の第２関数は、例えば、ｉ番目の第１変数ｘｉの非線形関数である第４関数を含む。第４関数は演算パラメータ「ｐ」も含む。２種類の変数の更新とともに「ｐ」は変化する。
【００８５】
２種類の変数の更新とともに「ｐ」が変化すると、上記の第４関数の実数根の数が変化する。「関数の実数根」とは、関数の値がゼロとなる変数の値（実数）のことである。第２変数更新において第４関数のみを考慮した場合、第４関数の実数根は非線形力学系の固定点（fixed point）に対応する。（ハミルトン力学系では、固定点はハミルトニアンの極値に対応する。）よって、第４関数の実数根の数が変化することは、固定点の数が変化することに対応する。これは、非線形力学系の分岐現象に対応する。実施形態に係る計算装置で用いるアルゴリズムでは、変数の初期値が、初期の１つの安定固定点（stable fixed point）の近傍に設定される。「ｐ」を変化させることで分岐（bifurcation）を起こす。分岐後の複数の安定な固定点（変数の値はこの複数の安定固定点のうちの１つの近傍へと変化する）と、解きたい組合せ最適化の離散変数と、を対応させる。これにより、分岐現象によって、その組合せ最適化問題を解く。例えば、上記の例では、分岐後の安定固定点における各ｘの値が、正負の２値であり、その符号と、イジングスピン（イジング問題の離散変数）と、が、対応付けられている。初期の安定固定点が原点であるため、各ｘの初期値と各ｙの初期値と、を原点の近傍（つまり、絶対値が０．１以下の小さな乱数）の値に設定する。
【００８６】
第４関数は、例えば、ｄｔ＊（ｐ−Ｄ’−ｘｉ＊ｘｉ）＊ｘｉである。「Ｄ’」は、０≦Ｄ’≦Ｄを満たす適切な定数である。初期時刻ではｐ＝０であり、第４関数の根はｘｉ＝０の１つだけである、ｐがＤ’よりも大きくなると、根は３つとなり、そのうちの正負２つの根が、イジングスピンと対応付けられる。第２関数を、例えば、ｄｔ＊［（ｐ−Ｄ−ｘｉ＊ｘｉ）＊ｘｉ−ｃ＊ｈｉ＊ａ］とした場合、第２関数は、ｄｔ＊（ｐ−Ｄ’−ｘｉ＊ｘｉ）＊ｘｉ＋ｄｔ＊［−（Ｄ−Ｄ’）＊ｘｉ−ｃ＊ｈｉ＊ａ］のように、第４関数と１次関数との和で表すことができる。従って、第２関数は第４関数を含む。
【００８７】
上記の第４関数は、例えば、３次関数である。このような処理により、例えば、ニューラルネットワークで用いられている非線形関数（例えばシグモイド関数）を用いた計算よりも、計算が容易になる。
【００８８】
実施形態においては、時間ステップ（例えば「ｄｔ」）を大きくすると、計算が高速になる。一方、時間ステップを過度に大きくすると、計算が不安定になる。このことを考慮して、計算の一部における時間ステップを大きくし、計算の別の一部では、時間ステップを小さくても良い。例えば、計算量の大きい、行列Ｊ及び第１変数ｘの積和演算を含む更新には、大きい時間ステップを適用しても良い。その他の更新には、小さい時間ステップを適用しても良い。これにより、さらなる高速化が可能である。
【００８９】
以下、このような計算を行う場合の例について説明する。  
図５は、実施形態に係る計算装置の動作の一部を例示するフローチャートである。  
図５は、ステップＳ２１０を例示している。図５に示す例では、１つの「処理手順」（ステップＳ１０５とステップＳ１０６との間にある処理のまとまり）の中に、小さいループ（ステップＳ１０７ａ〜ステップＳ１０７ｂ）が設けられている。ステップＳ１０７ａにおいて、ループ変数「ｍ」は、１以上Ｍ以下である。小さいループの中において、ステップＳ１１０及びステップＳ１２１がＭ回繰り返される。ステップＳ１１０とステップＳ１２１の順序は、入れ替えが可能である。この後、ステップＳ１２２に進む。
【００９０】
図５の例では、ステップＳ１１０及びステップＳ１２１の繰り返しの後に、ステップＳ１２２が実施される。
【００９１】
図６は、実施形態に係る計算装置の動作の一部を例示するフローチャートである。  
図６は、ステップＳ２１０を例示している。図６に示す例でも、１つのループ（ステップＳ１０５〜ステップＳ１０６）の中に、小さいループ（ステップＳ１０７ｃ〜ステップＳ１０７ｄ）が設けられている。ステップＳ１０７ｃにおいて、ループ変数「ｍ」は、１以上Ｍ以下である。ステップＳ１２２が実施された後に、小さいループ（ステップＳ１２１及びステップＳ１１０の繰り返し）が実施される。小さいループの中において、ステップＳ１２１及びステップＳ１１０がＭ回繰り返される。ステップＳ１２１とステップＳ１１０の順序は、入れ替えが可能である。
【００９２】
図５の例では、第１変数ｘｉの更新後に、第２変数ｙｉの更新が行われる。図６の例では、第２変数ｙｉの更新後に、第１変数ｘｉの更新が行われる。例えば、行列Ｊに関する積和演算を含まない更新の時間ステップ「ｄｔ’」は、「ｄｔ／Ｍ」とされる。一方、行列Ｊに関する積和演算を含む１回の更新（大きいループ）において、Ｍ回の小さいループ（行列Ｊに関する積和演算を含まない更新）を行う。上記により、例えば、大きなループの時間ステップｄｔを比較的大きな値にすることができる。例えば、高速な計算が可能となる。
【００９３】
このように、実施形態の１の例では、上記の第２変数更新（ステップＳ１２０）は、第１サブ更新（ステップＳ１２１）及び第２サブ更新（ステップＳ１２２）を含む。
【００９４】
第１サブ更新（ステップＳ１２１）は、第１サブ更新前のｉ番目の第２変数ｙｉに第２関数を加えてｉ番目の第２変数ｙｉを更新することを含む。第２サブ更新（ステップＳ１２２）は、第２サブ更新前のｉ番目の第２変数ｙｉに第３関数を加えてｉ番目の第２変数ｙｉを更新することを含む。この場合も、第２関数は、第２変数群｛ｙ｝から独立している。第３関数は、第２変数群｛ｙ｝から独立している。
【００９５】
例えば、第１変数更新及び第１サブ更新を交互にＭ回（Ｍは２以上の整数）行った後に、第２サブ更新を行う。または、第２サブ更新後に、第１変数更新及び第１サブ更新を交互にＭ回行う。第１変数更新と第１サブ更新とを交互に行う順序は、入れ替えが可能である。
【００９６】
第３関数は、例えば、第１パラメータ群｛Ｊ｝の上記の少なくとも一部と、第１変数群｛ｘ｝の上記の少なくとも一部と、の積和演算を含む。
【００９７】
１つの例において、上記の処理手順を繰り返した後の第４関数の実数根の数は、２以上である。処理手順を繰り返した後の第４関数の根の１つは正である。処理手順を繰り返した後の第４関数の根の別の１つは負である。処理部２０（図１参照）は、例えば、処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉの符号（すなわち±１）を出力する。
【００９８】
既に説明したように、第２関数は、ｉ番目の第２パラメータｈｉを含んでも良い。ｉ番目の第２パラメータｈｉは、第２パラメータ群｛ｈ｝の１つである。
【００９９】
実施形態において、処理部２０は、保持部１０に保持されたデータを読み出し、データを更新し、更新されたデータを保持部１０に保持させる。
【０１００】
例えば、第１変数更新（ステップＳ１１０）は、第１変数更新前のｉ番目の第１変数ｘｉを保持部１０から取得し、第１変数更新後のｉ番目の第１変数ｘｉを保持部１０に保持させることを含む。第２変数更新（ステップＳ１２０）は、第２変数更新前のｉ番目の第２変数ｙｉを保持部１０から取得し、第２変数更新後のｉ番目の第２変数ｙｉを保持部１０に保持させることを含む。
【０１０１】
例えば、第１変数更新は、ｉ番目の第２変数ｙｉを保持部１０から取得してｉ番目の第１関数を計算し、ｉ番目の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新することをさらに含んでも良い。例えば、第２変数更新は、ｉ番目の第１変数ｘｉを保持部１０から取得して第２関数を計算し、第１パラメータ群｛Ｊ｝の上記の少なくとも一部及び第１変数群｛ｘ｝の上記の少なくとも一部を保持部１０から取得して第３関数を計算し、ｉ番目の第２変数ｙｉに第２関数及び第３関数を加えてｉ番目の第２変数ｙｉを更新することをさらに含んでも良い。
【０１０２】
実施形態において、例えば、行列Ｊが疎行列の場合、疎行列の圧縮形式を用いても良い。疎行列の圧縮形式には、例えば、ＣＯＯ（coordinate）形式またはＣＳＲ（compressed sparse row）形式などが適用できる。疎行列の圧縮形式を用いることで、例えば、メモリサイズを節約できる。疎行列の圧縮形式を用いることで、例えば、行列Ｊ及び第１変数ｘの積和演算を高速に実施できる。
【０１０３】
以下、定数「ｃ」の例について述べる。例えば、離調「Ｄ」は、行列Ｊの最大固有値λｍａｘのｃ倍よりも大きくされる（例えば、非特許文献２参照）。「Ｄ」が大きすぎると、無駄な計算時間が生じる。このため、例えば、「Ｄ」がλｍａｘのｃ倍と実質的に等しいように設定する。この場合、ｃ＝Ｄ／λｍａｘとなる。一方、１つの例において、行列Ｊは、実対称行列である。この場合に、行列Ｊのサイズが十分大きい場合、λｍａｘは、２σ×Ｎ１／２と実質的に同じになる。この関係は、ランダム行列のウィグナーの半円則に基づく。「σ」は、行列Ｊの非対角成分の標準偏差である。この場合、ｃ＝Ｄ／（２σ×Ｎ１／２）と設定するとよい。この場合の計算例について、後述する。
【０１０４】
第２計算方法（第２計算装置）において、第１計算パラメータＲ（ｔ）は、例えば、離調に対応する。第２計算パラメータＲ（ｔ）は、例えば、質量の逆数に対応する。
【０１０５】
第３計算方法（第３計算装置）において、第２計算パラメータＴ（ｔ）は、例えば、温度である。第３計算パラメータＧ（ｔ）は、例えば、仮想質量の逆数に対応する。
【０１０６】
第２計算方法及び第３計算方法において、第２変数ｙの初期値の２乗平均が大きくなるように設定しても良い。例えば、第２変数群｛ｙ｝の初期値の２乗平均は、第１変数群{ｘ}の最終値の２乗平均の０．１倍よりも大きく設定しても良い。広い範囲の第２変数ｙ（例えば運動量）を用いて、広い範囲の解探索ができる。
【０１０７】
例えば、第２計算パラメータＴ（ｔ）の初期値は、１番目の第２変数ｙ１〜Ｎ番目の第２変数ｙＮの２乗平均と実質的に同じとする。例えば、第２計算パラメータＴ（ｔ）の初期値と、１番目の第２変数ｙ１〜Ｎ番目の第２変数ｙＮの２乗平均と、の差の絶対値は、１番目の第２変数ｙ１〜Ｎ番目の第２変数ｙＮの２乗平均の０．５倍よりも小さい。
【０１０８】
本実施形態において、精度を向上させる方法として、上記の非線形関数として用いられる関数を変更することが考えられる。例えば、第１〜第３計算方法（第１〜第３計算機）において、上記の第９式〜第１５式に関して説明した関数を適宜用いることができる。さらに、第８式の代わりに、以下の第１６式を用いても良い。  
【数１６】
2020046766.tif 000018
【０１０９】
第１６式において、「ｎ」は、２以上の偶数である。このような関数を用いることで、例えば、イジング問題の解の精度を向上することができる。
【０１１０】
実施形態に係る計算装置１１０で実施される上記のアルゴリズムは、種々の構成により実施できる。計算装置１１０は、例えば、ＰＣクラスタを含んでも良い。計算装置１１０は、例えば、ＧＰＵ（Graphics Processing Unit）を含んでも良い。計算装置１１０は、例えば専用回路を含んでも良い。専用回路は、例えば、ＦＰＧＡ（field-programmable gate array）、ゲートアレイ、及び、ＡＳＩＣ（application specific integrated circuit）の少なくともいずれかを含んでも良い。計算装置１１０は、例えば、並列デジタル計算装置を含んでも良い。
【０１１１】
図７〜図１０は、実施形態に係る計算装置の動作の一部を例示するフローチャートである。  
これらの図は、ステップＳ２１０の別の例を示している。これらの図に示すように、図３〜図６の例において、ステップＳ１１０とステップＳ１２１とは、互いに入れ替えられても良い。
【０１１２】
図１１は、実施形態に係る計算装置の例を示す模式図である。  
図１１に示すように、実施形態に係る計算装置１１１は、複数の回路（第１回路１５Ａ、第２回路１５Ｂ及び第３回路１５Ｃなど）を含む。これらの複数の回路のそれぞれは、例えば、１つのコンピュータである。これらの複数の回路のそれぞれは、例えば、１つの半導体回路でも良い。これらの複数の回路は、互いに通信（例えば、データの送受信）が可能である。計算装置１１１には、さらに制御回路部１５Ｘが設けられている。制御回路部１５Ｘにより、複数の回路における通信が制御される。
【０１１３】
例えば、複数の回路のそれぞれには、処理部及び保持部（記憶部）が設けられる。この他、制御部が設けられても良い。
【０１１４】
複数の回路（第１回路１５Ａ、第２回路１５Ｂ及び第３回路１５Ｃなど）により、並列計算が行われる。複数の回路の数は、任意である。
【０１１５】
例えば、第１回路１５Ａには、第１計算部２０Ａ及び第１保持領域１０Ａが設けられる。この例では、第１回路１５Ａは、第１制御部１６Ａをさらに含む。第２回路１５Ｂには、第２計算部２０Ｂ及び第２保持領域１０Ｂが設けられる。この例では、第２回路１５Ｂは、第２制御部１６Ｂをさらに含む。このような構成は、第３回路１５Ｃにも設けられる。
【０１１６】
処理部２０は、上記の複数の計算部（第１計算部２０Ａ及び第２計算部２０Ｂなど）を含む。例えば、第１計算部２０Ａは、第３関数の計算の一部（例えば、ステップＳ３０２ａ、ステップＳ１２２及びステップＳ３０２ｂのｉに関するループの一部）を実施する。第２計算部２０Ｂは、第３関数の計算の別の一部（例えば、ステップＳ３０２ａ、ステップＳ１２２及びステップＳ３０２ｂのｉに関するループの別の一部）を実施する。これらの計算の少なくとも一部は、並列して実施される。例えば、第１計算部２０Ａにおける第３関数の計算の上記の一部の実施の少なくとも一部と、第２計算部２０Ｂにおける第３関数の計算の別の一部の実施の少なくとも一部と、は、同時に行われる。並列計算により、計算が高速化できる。第３関数の計算量は多い。このため、第３関数（例えば、ステップＳ３０２ａ、ステップＳ１２２及びステップＳ３０２ｂのｉに関するループ）の計算を並列化することにより、効果的に高速化が行われる。
【０１１７】
並列計算において、例えば、第１計算部２０Ａは、第３関数の計算の一部を実施するのに必要な、第１パラメータ群｛Ｊ｝の一部を、第１保持領域１０Ａに保持させる。このように、第１回路１５Ａのなかで、第３関数の計算の一部に必要な保持と処理が行われる。一方、第２計算部２０Ｂは、第３関数の計算の別の一部を実施するのに必要な、第１パラメータ群｛Ｊ｝の別の一部を、第２保持領域１０Ｂに保持させる。このように、第２回路１５Ｂのなかで、第３関数の計算の別の一部に必要な保持と処理が行われる。
【０１１８】
例えば、第１パラメータ群｛Ｊ｝は、第１計算使用部分と、第２計算使用部分と、を含む。第１計算使用部分は、第３関数の計算の一部で用いられる。第２計算使用部分は、第３関数の計算の別の一部で用いられる。第１計算部２０Ａは、上記の第１計算使用部分を第１保持領域１０Ａに保持させる。第２計算部２０Ｂは、上記の第２計算使用部分を第２保持領域１０Ｂに保持させる。
【０１１９】
実施形態において、ｉ番目の第１変数ｘｉの第１変数更新及びｉ番目の第２変数ｙｉの第１サブ更新（第２関数による更新）と、ｊ番目（「ｊ」は「ｉ」とは異なる）の第１変数ｘｊの第１変数更新及びｊ番目の第２変数ｙｊの第１サブ更新（第２関数による更新）と、を並列計算しても良い。この場合、処理部２０に、第３計算部２０Ｃ及び第４計算部２０Ｄが設けられても良い。第３計算部２０Ｃは、第１回路１５Ａに設けられる。第４計算部２０Ｄは、第２回路１５Ｂに設けられる。これらの計算部は、機能ブロックである。第３計算部２０Ｃの少なくとも一部で実施される処理は、第１計算部２０Ａの少なくとも一部で実施されても良い。第４計算部２０Ｄの少なくとも一部で実施される処理は、第２計算部２０Ｂの少なくとも一部で実施されても良い。
【０１２０】
例えば、第３計算部２０Ｃは、第１変数更新の計算の一部、及び、第２関数の計算（第１サブ更新）の一部を実施する。第４計算部２０Ｄは、第１変数更新の計算の別の一部、及び、第２関数の計算（第１サブ更新）の別の一部を実施する。
【０１２１】
既に説明したように、第１変数更新は、第１変数更新前のｉ番目の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新することを含む。同様に、第１変数更新は、第１変数更新前のｊ番目（ｊはｉとは異なり、１以上Ｎ以下の整数）の第１変数ｘｊにｊ番目の第１関数を加えてｊ番目の第１変数ｘｊを更新することをさらに含む。ここで、ｊ番目の第１変数ｘｊは、第１変数群｛ｘ｝の１つである。ｊ番目の第１関数の変数は、ｊ番目の第２変数ｙｊを含む。ｊ番目の第２変数ｙｊは、第２変数群｛ｙ｝の１つである。
【０１２２】
例えば、第１変数更新の計算の一部は、ｉ番目の第１変数ｘｉの更新の計算を含む。第１変数更新の計算の別の一部は、ｊ番目の第１変数ｘｊの更新の計算を含む。
【０１２３】
一方、第２関数の計算の一部は、ｉ番目の第１変数ｘｉを変数として含む第２関数の計算を含む。第２関数の計算の別の一部は、ｊ番目の第１変数ｘｊを変数として含む第２関数の計算を含む。
【０１２４】
第３計算部２０Ｃにおける、第１変数更新の計算の一部、及び、第２関数の計算（第１サブ更新）の一部の実施の少なくとも一部（例えば、図３〜１０のフローチャートにおけるステップＳ３０１ａとステップＳ３０１ｂとの間のｉループの一部）と、第４計算部２０Ｄにおける第１変数更新の計算の別の一部（例えば、図３〜１０のフローチャートにおけるステップＳ３０１ａとステップＳ３０１ｂとの間のｉループの別の一部）、及び、第２関数の計算（第１サブ更新）の別の一部の実施の少なくとも一部は、同時に行われても良い。このような並列計算により、高速に計算できる。
【０１２５】
第３計算方法（第３計算装置）においては、上記の「第１変数更新の計算の一部」で更新される第１変数ｘに対応する第２変数ｙの２乗平均を、第１３式における２乗平均とする。これにより、例えば、「並列計算」において、２乗平均を計算するための、「第１変数更新の計算の一部」と「第１変数更新の計算の別の一部」との間での第２変数ｙの通信が、不要となる。並列計算による高速化が容易になる。部分集合「Ｓｌ」が並列計算が可能になるように定義される。
【０１２６】
例えば、処理部２０の１つの部分は、第２変数群{ｙ}の一部の更新と、第２変数群{ｙ}のその一部に関する２乗平均の算出と、を実施する。この場合、第２変数群{ｙ}の上記の一部は、上記の複数の部分集合の１つ（例えば、「Ｓｌ」）に対応する。処理部２０の別の１つの部分は、第２変数群{ｙ}の別の一部の更新と、第２変数群{ｙ}のその別の一部に関する２乗平均の算出と、を実施する。この場合、第２変数群{ｙ}の上記の別の一部は、上記の複数の部分集合の別の１つ（例えば、「Ｓｋ」）に対応する。例えば、処理部２０の上記の１つの部分で算出された２乗平均が、第２変数群{ｙ}の上記の一部の更新に用いられる。例えば、処理部２０の上記の別の１つの部分で算出された２乗平均が、第２変数群{ｙ}の上記の別の一部の更新に用いられる。
【０１２７】
処理部２０の一部において、第２変数群{ｙ}の一部の更新と、その一部の２乗平均の算出と、が行われるため、通信（データの授受）が効率的になる。または、通信が不要になる。
【０１２８】
例えば、第２変数群{ｙ}の上記の一部の更新と、第２変数群{ｙ}の上記の一部に関する２乗平均の算出と、の少なくとも一部の実施は、第２変数群{ｙ}の上記の別の一部の更新と、第２変数群{ｙ}の上記の別の一部に関する２乗平均の算出と、の少なくとも一部の実施と、同時に行われる。並列の計算により、処理時間が短縮できる。
【０１２９】
以下、実施形態に係る計算装置の計算例について説明する。以下の計算例において、計算時間は、パラメータの設定の時間を含まない。計算時間は、パラメータの設定の後に、微分方程式を解くのに要した時間に対応する。
【０１３０】
第１計算例では、ＰＣクラスタにより計算が行われる。第１計算例では、変数及びパラメータは、「float」（３２ビット浮動小数点実数）として扱われる。計算コアの数を「Ｑ」とする。「Ｑ」は、Ｎの約数である。Ｌ＝Ｎ／Ｑとする。
【０１３１】
ＰＣクラスタで上記のアルゴリズムを並列して計算する際に、ＭＰＩ（Message Passing Interface）が用いられる。ＭＰＩは、分散メモリ型並列計算に対応する。ＭＰＩにおいては、複数の計算コアのそれぞれは、Ｌ個の第１分割変数（ｘ）と、Ｌ個の第２分割変数（ｙ）と、の１つの組み合わせを処理する。
【０１３２】
例えば、ｉ番目の計算コアは、{ｘｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}、及び、{ｙｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}を保持し、これらの更新を行う。
【０１３３】
ｉ番目の計算コアは、{ｈｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}、及び、{Ｊｍ，ｎ｜ｍ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ；ｎ＝１…Ｎ}も保持できる。{ｈｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}、及び、{Ｊｍ，ｎ｜ｍ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ；ｎ＝１…Ｎ}は、{ｙｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}の更新に用いられる。
【０１３４】
例えば、{ｙｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}のそれぞれの更新には、{ｘｎ｜ｎ＝１，  …、  Ｎ}の全成分が用いられる。例えば、Allgather関数により、{ｘｎ｜ｎ＝１，  …、  Ｎ}の情報が、全ての計算コアに供給される。すなわち、情報（データ）が共有される。
【０１３５】
実施形態において、複数の計算コアの間において、通信が行われる。すなわち、データの送受信が行われる。この通信において、{ｙｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}に関する通信、及び、{Ｊｍ，ｎ｜ｍ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ；ｎ＝１…Ｎ}に関する通信は不要である。
【０１３６】
第３計算方法（第３計算装置）においては、ｉ番目の計算コアは、{ｘｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}の更新に必要な第１３式の第２変数ｙの２乗平均を、{ｙｎ｜ｎ＝（ｉ−１）Ｌ＋１，  …、  ｉＬ}の２乗平均とする。これにより、第２変数ｙの２乗平均を計算するための、各コア間での第２変数ｙの通信が、不要となる。
【０１３７】
例えば、第１変数群{ｘ}に関しての通信を行わず、第１パラメータ群{Ｊ}及び第１変数群{ｘ}の積和演算を分割して並列して実施し、その結果を通信して第２変数群{ｙ}の更新を行う方法が考えられる。この方法においては、第１パラメータ群{Ｊ}及び第１変数群{ｘ}の積和演算を分割して実施する。
【０１３８】
以下、Ｎ＝２０００である場合（第１計算例）と、Ｎ＝１０００００である場合（第２計算例）と、の計算の例について説明する。
【０１３９】
第１計算例（Ｎ＝２０００の場合）として、「Ｋ２０００」問題（非特許文献１参照）の計算例について説明する。「Ｋ２０００」問題は、Ｎ＝２０００の全結合イジングモデルである。行列Ｊの非対角成分は、±１のいずれかである。ベクトルｈの成分は、すべてゼロである。従って、ベクトルｈを含む項の計算は行われない。この場合において、行列Ｊの非対角成分の標準偏差σは、１である。このため、「ｃ」をｃ０＝Ｄ／（２Ｎ１／２）に設定する。「Ｋ２０００」問題における行列Ｊの実際の最大固有値は、８８．８１３３２４である。一方、ランダム行列理論における理論値は、２σＮ１／２＝８９．４４２７１９であり、これらの値は、互いに非常に近い。
【０１４０】
以下に説明する第１計算例では、Ｑ＝２５であり、ｄｐ*（Ｔｍ／ｄｔ）＝Ｄ＝２であり、Ｔｍ＝５０である。
【０１４１】
実施形態に係る第１計算方法（第１計算装置、第１０式）おいて、Ｍ＝１で、ｄｔ＝０．２５の場合、計算時間は、７．６ｍｓである。このときに得られたイジングエネルギーの１００回の平均値は、約−６６０８６である。この値を「カット数」（第１７式、第１８式、及び、非特許文献１参照）に換算した値は、３２５２３である。「カット数」が大きいことは、精度が高いことに対応する。カット数Ｎｍｃは、以下の第１７式及び第１８式で表される。  
【数１７】
2020046766.tif 000019
【数１８】
2020046766.tif 000020
【０１４２】
実施形態に係る第１計算方法（第１計算装置、第１０式）において、Ｍ＝５で、ｄｔ＝０．５の場合、計算時間は、４．１ｍｓである。このときに得られたイジングエネルギーの１００回の平均値は、約−６６１３７である。この値を「カット数」に換算すると、３２５４９である。Ｍ＝５の場合における「ｄｔ」は、Ｍ＝１の場合の「ｄｔ」の２倍にできる。Ｍ＝５の場合の計算時間は、Ｍ＝１の場合の計算時間の約半分になる。高速な計算が可能である。
【０１４３】
一方、非特許文献１によると、コヒーレントイジングマシンにおいて、５ｍｓにおける１００回の「カット数」（非特許文献１参照）の平均値は、３２４５７である。一方、非特許文献１によると、シミュレーティッドアニーリングにおいて、５０ｍｓにおける１００回の「カット数」の平均値は、３２３１４である。このように、実施形態に係る計算により、コヒーレントイジングマシン及びシミュレーティッドアニーリングよりも短時間で、より高精度の解が得られる。
【０１４４】
図１２は、実施形態に係る計算の特性を例示するグラフである。  
図１２は、計算により得られる「カット数」と、「ｃ」と、の関係の例を示している。図１２の縦軸は、「ｃ／ｃ０」である。既に説明したように、ｃ０＝Ｄ／（２Ｎ１／２）である。図１２の縦軸は、カット数Ｎｍｃである。
【０１４５】
図１２に示すように、「ｃ／ｃ０」が、約１以上、約１．５以下のときに大きなカット数Ｎｍｃが得られる。
【０１４６】
以下、第２計算例（Ｎ＝１０００００の場合）について説明する。第２計算例では、行列Ｊの非対角成分、及び、ベクトルｈの成分は、「乱数」により設定される。「乱数」においては、−１〜１の値が一様に設定される。この場合の行列Ｊの非対角成分の標準偏差σは、１／（３１／２）である。このため、ｃ＝３１／２Ｄ／（２Ｎ１／２）と設定する。その他のパラメータに関しては、Ｑ＝１２５０であり、ｄｐ*（Ｔｍ／ｄｔ）＝Ｄ＝２であり、Ｔｍ＝５０であり、ｄｔ＝０．５であり、Ｍ＝５である。
【０１４７】
図１３は、計算結果を例示するグラフである。  
図１３には、実施形態に係る第１計算方法（第１計算装置、第１０式）での第２計算例の結果と、参考例に係る計算での第２計算例の結果と、が示されている。図１３の横軸は、計算時間Ｔｃ（秒）である。縦軸は、イジングエネルギーの１００回の平均値Ｖａｖｅである。図１３には、実施形態に係る計算結果１１０Ｅと、参考例の計算結果１１９Ｒと、が示されている。これらの計算例において、計算コアの数は、１２５０である。
【０１４８】
実施形態に係る第１計算方法（第１計算装置、第１０式）の計算結果１１０Ｅにおいて、「ｎ」は第１６式の非線形関数を用いた場合の第１６式中の「ｎ」の値を示している。計算結果１１０Ｅにおいて、「ｎ」が書かれていない曲線は、第８式が用いられた場合に対応する。
【０１４９】
参考例の計算結果１１９Ｒでは、シミュレーティッドアニーリングによる計算が行われる。シミュレーティッドアニーリングでは、スピン反転によるエネルギー変化が、ＭＰＩにより、並列計算される。これらの計算においては、逆温度を線形に増加させている。参考例の計算結果１１９Ｒの複数の曲線において、増加率が互いに異なる。
【０１５０】
図１３から分かるように、実施形態に係る第１計算方法（第１計算装置、第１０式）の計算結果１１０Ｅにおいて、最終的な平均値Ｖａｖｅは、低い（絶対値が大きい）。これに対して、参考例の計算結果においては、最終的な平均値Ｖａｖｅは十分に低くならない（絶対値が十分に大きくならない）。このように、実施形態においては、高い精度の計算結果が得られる。実施形態によれば、参考例（シミュレーティッドアニーリング）に比べて、同じ精度が得られるのに要する計算時間Ｔｃは、１／１０以下である。実施形態に係る計算は、参考例に比べて、１０倍以上高速である。
【０１５１】
以下、本実施形態に係る計算の第３計算例について説明する。第３計算例では、ＧＰＵにより、上記の計算が行われる。この計算において、例えば、変数及びパラメータは、float（３２ビット浮動小数点実数）として扱われる。
【０１５２】
この方法では、第１変数群{ｘ}、第２変数群{ｙ}、第１パラメータ群{Ｊ}及び第２パラメータ群{ｈ}は、デバイス変数として定義される。第１パラメータ群{Ｊ}は、行列Ｊである。行列Ｊ及び第１変数ｘの積和演算を用いた第２変数ｙの更新は、行列ベクトル積関数により行われる。第１変数ｘ及び第２変数ｙに関するその他の更新に関して、ｉ番目の成分（ｘｉ，ｙｉ）の更新が１つのスレッドで行われる。
【０１５３】
第３計算例では、１つのＧＰＵを用いて、第１計算例と同様の条件で、「Ｋ２０００」問題が計算される。第３計算例の計算時間は、１４．７ｍｓ、１００回の「カット数」の平均値３２５４９が得られる。第３計算例においても、参考例のシミュレーティッドアニーリングの結果よりも高速に計算できる。
【０１５４】
以下、第１〜第３計算方法（第１〜第３計算装置）の例について説明する。
【０１５５】
図１４（ａ）及び図１４（ｂ）は、計算結果を例示するグラフである。  
これらの図は、「Ｇ２２」問題（非特許文献１参照）に関しての計算結果の例を示す。これらの図には、第１計算方法（第１計算装置、第１０式）による計算結果Ｍ１１及びＭ１２と、第２計算方法（第２計算装置、第１２式）による計算結果Ｍ２１と、が示されている。計算結果Ｍ１１において、第２変数ｙの初期値ｙｉ（０）は、−０．５以上０．５以下の範囲の乱数の値である。計算結果Ｍ１２において、第２変数ｙの初期値ｙｉ（０）は、−０．１以上０．１以下の範囲の乱数の値である。計算結果Ｍ２１において、第２変数ｙの初期値ｙｉ（０）は、−０．５以上０．５以下の範囲の乱数の値である。第２計算方法（第２計算装置、第１２式）において、第１計算パラメータＲ（ｔ）は、処理手順（ループ）ごとに、１から０に向けて、単調に減少する。乱数での値を変えて、１００回の計算が行われる。
【０１５６】
図１４（ａ）は、１００回の計算における平均値である。図１４（ｂ）は、１００回の計算における最大値である。これらの図の横軸は、処理手順の繰り返し回数ＮＬである。縦軸は、カット数Ｎｍｃである。１つのループにおいて、Ｎ個の第１変数ｘとＮ個の第２変数ｙとが全て更新される。
【０１５７】
図１４（ａ）及び図１４（ｂ）に示すように、処理手順の繰り返し回数ＮＬが１０００以上において、第２計算方法（第２計算装置、第１２式）によるカット数Ｎｍｃは、第１計算方法（第１計算装置、第１０式）によるカット数Ｎｍｃよりも大きい。例えば、比較的時間をかけて良い解を探索したい場合、第２計算方法（第２計算装置）が有利であると考えられる。
【０１５８】
第２計算方法（第２計算装置）におけるｉ番目の第１関数に含まれる第１計算パラメータＲ（ｔ）は、例えば、逆質量に対応する。第２計算方法（第２計算装置）によれば、例えば、大きな初期運動量（第２変数ｙの初期値ｙｉ（０））でも、良い解に収束する。大きな初期運動量により、より広い範囲の探索が容易になる。
【０１５９】
図１５（ａ）及び図１５（ｂ）は、計算結果を例示するグラフである。  
これらの図は、上記の「Ｇ２２」問題に関しての計算結果の例を示す。これらの図には、第１計算方法による上記の計算結果Ｍ１１及びＭ１２と、第３計算方法（第３計算装置、第１５式）による計算結果Ｍ３１と、が示されている。計算結果Ｍ１１及びＭ１２の結果は、図１４（ａ）及び図１４（ｂ）に記載された結果と同じである。図１５（ａ）は、１００回の計算における平均値である。図１５（ｂ）は、１００回の計算における最大値である。これらの図の横軸は、処理手順の繰り返し回数ＮＬである。縦軸は、カット数Ｎｍｃである。
【０１６０】
図１５（ａ）及び図１５（ｂ）に示すように、処理手順の繰り返し回数ＮＬが２０００未満において、第３計算方法（第３計算装置、第１５式）によるカット数Ｎｍｃは、小さい。処理手順の繰り返し回数ＮＬが２０００以上において、第３計算方法（第３計算装置、第１５式）によるカット数Ｎｍｃは、第１計算方法（第１計算装置、第１０式）によるカット数Ｎｍｃよりも大きくなる。例えば、比較的時間をかけて良い解を探索したい場合、第３計算方法（第３計算装置）が有利であると考えられる。
【０１６１】
第３計算方法（第３計算装置）におけるｉ番目の第１関数は、ｉ番目の第２変数ｙｉの２乗平均が、温度（第２計算パラメータＴ（ｔ））に近づく効果をもたらす。第３計算方法（第３計算装置）によれば、例えば、大きな初期運動量（第２変数ｙの初期値ｙｉ（０））でも、良い解に収束する。大きな初期運動量により、より広い範囲の探索が容易になる。
【０１６２】
第２計算方法（第２計算装置）及び第３計算方法（第３計算装置）によれば、例えば、計算精度を向上できる。
【０１６３】
第３計算方法（第３計算装置）において、処理部２０の１つのノード（処理部２０の１つの部分）では、第２変数更新が実施されても良い。このとき、その１つのノード（処理部２０の１つの部分）で、上記の＜ｙ２＞ｉ（１番目の第２変数ｙ１〜Ｎ番目の第２変数ｙＮの２乗平均）が導出されても良い。例えば、複数のノード（複数の部分）どうしの間の通信が省略できる。
【０１６４】
（第２実施形態）  
第２実施形態は、第１実施形態に関して説明した計算が可能な回路を含む。
【０１６５】
（第３実施形態）  
第３実施形態は、計算プログラムに係る。この計算プログラムは、コンピュータに、処理手順を繰り返させる。この処理手順は第１変数更新及び第２変数更新を含む。
【０１６６】
第１変数更新は、第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、Ｎは２以上の整数）の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新することを含む。ｉ番目の第１変数ｘｉは、第１変数群｛ｘ｝の１つである。ｉ番目の第１関数の変数は、ｉ番目の第２変数ｙｉを含む。ｉ番目の第２変数ｙｉは、第２変数群｛ｙ｝の１つである。ｉ番目の第１関数は、第１関数群の１つである。第２変数更新は、第２変数更新前のｉ番目の第２変数ｙｉにｉ番目の第２関数及びｉ番目の第３関数を加えてｉ番目の第２変数ｙｉを更新することを含む。ｉ番目の第２関数の変数は、ｉ番目の第１変数ｘｉを含む。ｉ番目の第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び第１変数群｛ｘ｝の少なくとも一部を含む。ｉ番目の第２関数は、第２関数群の１つである。ｉ番目の第３関数は、第３関数群の１つである。第１関数群の変数は、処理手順の前後で変化する計算パラメータを含む。計算プログラムは、コンピュータに、処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉ及び処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉの関数の少なくともいずれかを出力させる。
【０１６７】
本実施形態に係る計算プログラムには、第１実施形態及び第２実施形態に関して説明した処理が適用できる。
【０１６８】
（第４実施形態）  
第４実施形態は、コンピュータ読み取り可能な記録媒体である。この記録媒体は、コンピュータに、処理手順を繰り返させるプログラムが記録されている。この処理手順は第１変数更新及び第２変数更新を含む。
【０１６９】
第１変数更新は、第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、Ｎは２以上の整数）の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新することを含む。ｉ番目の第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、ｉ番目の第１関数の変数は、ｉ番目の第２変数ｙｉを含む。ｉ番目の第２変数ｙｉは、第２変数群｛ｙ｝の１つである。ｉ番目の第１関数は、第１関数群の１つである。第２変数更新は、第２変数更新前のｉ番目の第２変数ｙｉにｉ番目の第２関数及びｉ番目の第３関数を加えてｉ番目の第２変数ｙｉを更新することを含む。ｉ番目の第２関数の変数は、ｉ番目の第１変数ｘｉを含む。ｉ番目の第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び第１変数群｛ｘ｝の少なくとも一部を含む。ｉ番目の第２関数は、第２関数群の１つである。ｉ番目の第３関数は、第３関数群の１つである。第１関数群の変数は、処理手順の前後で変化する計算パラメータを含む。プログラムは、コンピュータに、処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉ及び処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉの関数の少なくともいずれかを出力させる。
【０１７０】
本実施形態に係る記録媒体には、第１実施形態及び第２実施形態に関して説明した処理が適用できる。
【０１７１】
（第５実施形態）  
本実施形態は、計算方法に係る。計算方法は、処理手順を繰り返す。処理手順は第１変数更新及び第２変数更新を含む。
【０１７２】
第１変数更新は、第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、Ｎは２以上の整数）の第１変数ｘｉにｉ番目の第１関数を加えてｉ番目の第１変数ｘｉを更新することを含む。ｉ番目の第１変数ｘｉは、第１変数群｛ｘ｝の１つである。ｉ番目の第１関数の変数は、ｉ番目の第２変数ｙｉを含む。ｉ番目の第２変数ｙｉは、第２変数群｛ｙ｝の１つである。第２変数更新は、第２変数更新前のｉ番目の第２変数ｙｉに第２関数及び第３関数を加えてｉ番目の第２変数ｙｉを更新することを含む。第２関数の変数は、ｉ番目の第１変数ｘｉを含む。第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び第１変数群｛ｘ｝の少なくとも一部を含む。
【０１７３】
この計算方法は、処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉ及び処理手順を繰り返した後に得られるｉ番目の第１変数ｘｉの関数の少なくともいずれかを出力する。
【０１７４】
上記の種々の情報（データ）の処理（指示）は、例えば、プログラム（ソフトウェア）に基づいて実行される。例えば、コンピュータが、このプログラムを記憶し、このプログラムを読み出すことにより、上記の種々の情報の処理が行われる。
【０１７５】
上記の種々の情報の処理は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フレキシブルディスク及びハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ±Ｒ、ＤＶＤ±ＲＷなど）、半導体メモリ、または、他の記録媒体に記録されても良い。
【０１７６】
例えば、記録媒体に記録された情報は、コンピュータ（または組み込みシステム）により読み出されることが可能である。記録媒体において、記録形式（記憶形式）は任意である。例えば、コンピュータは、記録媒体からプログラムを読み出し、このプログラムに基づいてプログラムに記述されている指示をＣＰＵで実行させる。コンピュータにおいて、プログラムの取得（または読み出し）は、ネットワークを通じて行われても良い。
【０１７７】
記録媒体からコンピュータ（または組み込みシステム）にインストールされたプログラムに基づいてコンピュータ上で稼働している種々のソフトウェアにおいて、上記の情報の処理の少なくとも一部が実施されても良い。このソフトウェアは、例えば、ＯＳ（オペレーティングシステム）などを含む。このソフトウェアは、例えば、ネットワーク上で動作するミドルウェアなどを含んでも良い。
【０１７８】
実施形態における記録媒体は、ＬＡＮまたはインターネットなどにより得られたプログラムをダウンロードして記憶された記録媒体も含まれる。複数の記録媒体に基づいて、上記の処理が行われても良い。
【０１７９】
実施形態に係るコンピュータは、１つまたは複数の装置（例えばパーソナルコンピュータなど）を含む。実施形態に係るコンピュータは、ネットワークにより接続された複数の装置を含んでも良い。
【０１８０】
実施形態は、例えば、以下の構成（例えば技術案）を含んでも良い。  
（構成１）  
処理手順を繰り返す処理部を備え、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前の前記ｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉにｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の前記第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の前記第３関数は、第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理部は、少なくとも、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ、及び、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力する、計算装置。
【０１８１】
（構成２）  
前記計算パラメータは、第１計算パラメータを含み、
前記ｉ番目の前記第１関数の前記変数は、前記ｉ番目の前記第２変数ｙｉと前記第１計算パラメータとの積を含み、
前記処理手順の後の前記第１計算パラメータは、前記処理手順の前の前記第１計算パラメータよりも小さい、構成１記載の計算装置。
【０１８２】
（構成３）
前記計算パラメータは、第１計算パラメータを含み、
前記ｉ番目の前記第１関数は、前記ｉ番目の前記第２変数ｙｉと前記第１計算パラメータとの積であり、
前記処理手順の後の前記第１計算パラメータは、前記処理手順の前の前記第１計算パラメータよりも小さい、構成１記載の計算装置。
【０１８３】
（構成４）
前記計算パラメータは、第２計算パラメータを含み、
前記ｉ番目の前記第１関数の前記変数は、前記第２変数群{ｙ}の少なくとも一部の２乗平均と前記第２計算パラメータとの差を含み、
前記第２変数群{ｙ}の前記少なくとも一部は、前記ｉ番目の前記第２変数ｙｉを含み、
前記処理手順の後の前記第２計算パラメータは、前記処理手順の前の前記第２計算パラメータ以下である、構成１記載の計算装置。
【０１８４】
（構成５）
前記計算パラメータは、第２計算パラメータ及び第３計算パラメータを含み、
前記ｉ番目の前記第１関数の前記変数は、前記第２変数群{ｙ}の少なくとも一部の２乗平均と前記第２計算パラメータとの差と、前記第３計算パラメータと、前記ｉ番目の前記第２変数ｙｉと、の積を含み、
前記第２変数群{ｙ}の前記少なくとも一部は、前記ｉ番目の前記第２変数ｙｉを含み、
前記処理手順の後の前記第２計算パラメータは、前記処理手順の前の前記第２計算パラメータ以下であり、
前記処理手順の後の前記第３計算パラメータは、前記処理手順の前の前記第３計算パラメータ以下である、構成１記載の計算装置。
【０１８５】
（構成６）  
前記処理部の１つの部分は、前記第２変数群{ｙ}の一部の更新と、前記第２変数群{ｙ}の前記一部に関する２乗平均の算出と、を実施し、
前記処理部の別の１つの部分は、前記第２変数群{ｙ}の別の一部の更新と、前記第２変数群{ｙ}の前記別の一部に関する２乗平均の算出と、を実施する、構成４または５に記載の計算装置。
【０１８６】
（構成７）  
前記第２変数群{ｙ}の前記一部の前記更新と、前記第２変数群{ｙ}の前記一部に関する前記２乗平均の前記算出と、の少なくとも一部の実施は、前記第２変数群{ｙ}の前記別の一部の前記更新と、前記第２変数群{ｙ}の前記別の一部に関する前記２乗平均の前記算出と、の少なくとも一部の実施と同時に行われる、構成６記載の計算装置。
【０１８７】
（構成８）  
前記第２計算パラメータの初期値は、前記２乗平均と実質的に同じである、構成４〜７のいずれか１つに記載の計算装置。
【０１８８】
（構成９）  
前記第２変数群｛ｙ｝の初期値の２乗平均は、前記第１変数群{ｘ}の最終値の２乗平均の０．１倍よりも大きい、構成１〜８のいずれか１つに記載の計算装置。
【０１８９】
（構成１０）
前記第１関数群は、前記第１変数群｛ｘ｝から独立し、
前記第２関数群は、前記第２変数群｛ｙ｝から独立し、
前記第３関数群は、前記第２変数群｛ｙ｝から独立し、
前記処理手順の１つにおいて、前記第１変数更新後に前記第２変数更新が行われる、または、前記第２変数更新後に前記第１変数更新が行われる、構成１〜９のいずれか１つに記載の計算装置。
【０１９０】
（構成１１）  
前記第１関数群は、前記第１変数群｛ｘ｝から独立し、
前記第２関数群は、前記第２変数群｛ｙ｝から独立し、
前記第３関数群は、前記第２変数群｛ｙ｝から独立し、
前記第２変数更新は、第１サブ更新及び第２サブ更新を含み、
前記第１サブ更新は、前記第１サブ更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の前記第２関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、
前記第２サブ更新は、前記第２サブ更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の前記第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、
前記第１変数更新及び前記第１サブ更新を交互にＭ回（Ｍは２以上の整数）行った後、前記第２サブ更新を行う、または、前記第２サブ更新後、前記第１変数更新及び前記第１サブ更新を交互にＭ回行う、構成１〜９のいずれか１つに記載の計算装置。
【０１９１】
（構成１２）  
前記ｉ番目の前記第３関数は、前記第１パラメータ群｛Ｊ｝の前記少なくとも一部と前記第１変数群｛ｘ｝の前記少なくとも一部との積和演算を含む、構成１〜１１のいずれか１つに記載の計算装置。
【０１９２】
（構成１３）  
前記ｉ番目の前記第２関数は、前記ｉ番目の前記第１変数ｘｉを変数とする前記ｉ番目の第４関数を含み、
前記ｉ番目の第４関数は、前記第１変数ｘｉの非線形関数を含み、
前記ｉ番目の第４関数は、演算パラメータｐを含み、
前記演算パラメータｐは、前記処理手順を繰り返すと変化し、
前記処理手順を繰り返した後の前記ｉ番目の前記第４関数の実数根の数は、前記処理手順を繰り返す前の前記ｉ番目の前記第４関数の実数根の数とは異なる、構成１〜１２のいずれか１つに記載の計算装置。
【０１９３】
（構成１４）  
前記処理手順を繰り返した後の前記ｉ番目の前記第４関数の前記根の前記数は、２以上であり、
前記処理手順を繰り返した後の前記ｉ番目の前記第４関数の前記根の１つは正であり、
前記処理手順を繰り返した後の前記ｉ番目の前記第４関数の前記根の別の１つは負であり、
前記処理部は、少なくとも、前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの符号を出力する、構成１〜１３のいずれか１つに記載の計算装置。
【０１９４】
（構成１５）  
前記ｉ番目の前記第２関数は、前記ｉ番目の第２パラメータｈｉを含み、
前記ｉ番目の前記第２パラメータｈｉは、第２パラメータ群｛ｈ｝の１つである、構成１〜１４のいずれか１つに記載の計算装置。
【０１９５】
（構成１６）  
前記第１変数更新は、前記第１変数更新前の前記ｉ番目の前記第１変数ｘｉを保持部から取得し、前記第１変数更新後の前記ｉ番目の前記第１変数ｘｉを前記保持部に保持させることを含み、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉを前記保持部から取得し、前記第２変数更新後の前記ｉ番目の前記第２変数ｙｉを前記保持部に保持させることを含む、構成１〜１５のいずれか１つに記載の計算装置。
【０１９６】
（構成１７）
前記第１変数更新は、前記第２変数群{ｙ}の少なくとも一部を前記保持部から取得して前記ｉ番目の前記第１関数を計算し、前記ｉ番目の前記第１変数ｘｉに前記ｉ番目の前記第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することをさらに含み、
前記第２変数更新は、前記ｉ番目の前記第１変数ｘｉを前記保持部から取得して前記ｉ番目の前記第２関数を計算し、前記第１パラメータ群｛Ｊ｝の前記少なくとも一部及び前記第１変数群｛ｘ｝の前記少なくとも一部を前記保持部から取得して前記ｉ番目の前記第３関数を計算し、前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の前記第２関数及び前記ｉ番目の前記第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することをさらに含む、構成１６記載の計算装置。
【０１９７】
（構成１８）
前記保持部をさらに備えた、構成１６または１７に記載の計算装置。
【０１９８】
（構成１９）  
前記処理部は、第１計算部と、第２計算部と、を含み、
前記第１計算部は、前記第３関数の計算の一部を実施し、
前記第２計算部は、前記第３関数の前記計算の別の一部を実施し、
前記第１計算部における前記第３関数の前記計算の前記一部の前記実施の少なくとも一部と、前記第２計算部における前記第３関数の前記計算の前記別の一部の前記実施の少なくとも一部は、同時に行われる、構成１６〜１８のいずれか１つに記載の計算装置。
【０１９９】
（構成２０）
前記保持部は、第１保持領域及び第２保持領域を含み、
前記第１パラメータ群｛Ｊ｝は、第１計算使用部分と、第２計算使用部分と、を含み、前記第１計算使用部分は、前記第３関数の前記計算の前記一部で用いられ、前記第２計算使用部分は、前記第３関数の前記計算の前記別の一部で用いられ、
前記第１計算部は、前記第１計算使用部分を前記第１保持領域に保持させ、
前記第２計算部は、前記第２計算使用部分を前記第２保持領域に保持させる、構成１６〜１９のいずれか１つに記載の計算装置。
【０２００】
（構成２１）  
前記処理部は、第３計算部と、第４計算部と、を含み、
前記第３計算部は、前記第１変数更新の計算の一部及び前記第２関数の計算の一部を実施し、
前記第４計算部は、前記第１変数更新の計算の別の一部及び前記第２関数の前記計算の別の一部を実施し、
前記第３計算部における前記実施の少なくとも一部と、前記第４計算部における前記実施の少なくとも一部は、同時に行われる、構成１５〜１９のいずれか１つに記載の計算装置。
【０２０１】
（構成２２）  
コンピュータに、処理手順を繰り返させる計算プログラムであって、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の前記第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の第３関数は、前記第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ及び前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力させる、計算プログラム。
【０２０２】
（構成２３）  
コンピュータに、処理手順を繰り返させる計算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の前記第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の前記第３関数は、第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ及び前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力させる、記録媒体。
【０２０３】
（構成２４）  
処理手順を繰り返し、
前記処理手順は第１変数更新及び第２変数更新を含み、
前記第１変数更新は、前記第１変数更新前のｉ番目（ｉは１以上Ｎ以下の整数であり、前記Ｎは２以上の整数）の第１変数ｘｉに前記ｉ番目の第１関数を加えて前記ｉ番目の前記第１変数ｘｉを更新することを含み、前記ｉ番目の前記第１変数ｘｉは、第１変数群｛ｘ｝の１つであり、前記ｉ番目の前記第１関数の変数は、前記ｉ番目の第２変数ｙｉを含み、前記ｉ番目の前記第２変数ｙｉは、第２変数群｛ｙ｝の１つであり、前記ｉ番目の前記第１関数は、第１関数群の１つであり、
前記第２変数更新は、前記第２変数更新前の前記ｉ番目の前記第２変数ｙｉに前記ｉ番目の第２関数及び前記ｉ番目の第３関数を加えて前記ｉ番目の前記第２変数ｙｉを更新することを含み、前記ｉ番目の前記第２関数の変数は、前記ｉ番目の第１変数ｘｉを含み、前記ｉ番目の前記第３関数の変数は、第１パラメータ群｛Ｊ｝の少なくとも一部及び前記第１変数群｛ｘ｝の少なくとも一部を含み、前記ｉ番目の前記第２関数は、第２関数群の１つであり、前記ｉ番目の前記第３関数は、第３関数群の１つであり、
前記第１関数群の変数は、前記処理手順の前後で変化する計算パラメータを含み、
前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉ及び前記処理手順を前記繰り返した後に得られる前記ｉ番目の前記第１変数ｘｉの関数の少なくともいずれかを出力する、計算方法。
【０２０４】
実施形態によれば、最適化問題を高速に計算できる計算装置、計算プログラム、記録媒体及び計算方法が提供できる。
【０２０５】
以上、例を参照しつつ、本発明の実施の形態について説明した。しかし、本発明は、これらの例に限定されるものではない。例えば、計算装置に含まれる処理部、取得部及び保持部などの各要素の具体的な構成に関しては、当業者が公知の範囲から適宜選択することにより本発明を同様に実施し、同様の効果を得ることができる限り、本発明の範囲に包含される。
【０２０６】
各例のいずれか２つ以上の要素を技術的に可能な範囲で組み合わせたものも、本発明の要旨を包含する限り本発明の範囲に含まれる。
【０２０７】
本発明の実施の形態として上述した計算装置、計算プログラム、記録媒体及び計算方法を基にして、当業者が適宜設計変更して実施し得る全ての計算装置、計算プログラム、記録媒体及び計算方法も、本発明の要旨を包含する限り、本発明の範囲に属する。
【０２０８】
本発明の思想の範疇において、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の範囲に属するものと了解される。
【０２０９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２１０】
１０…保持部、  １０Ａ、１０Ｂ…第１、第２保持領域、  １５Ａ〜１５Ｃ…第１〜第３回路、  １５Ｘ…制御回路部、  １６Ａ、１６Ｂ…第１、第２制御部、  １６Ｘ…回路、  ２０…処理部、  ２０Ａ〜２０Ｄ…第１〜第４計算部、  ３１…取得部、  ３２…操作部、  ３３…表示部、  １１０、１１１…計算装置、  １１０Ｅ、１１９Ｒ…計算結果、  ＮＬ…処理手順の繰り返し回数、  Ｎｍｃ…カット数、  Ｔｃ…計算時間、  Ｖａｖｅ…平均値
【図１】
2020046766.tif 000021
【図２】
2020046766.tif 000022
【図３】
2020046766.tif 000023
【図４】
2020046766.tif 000024
【図５】
2020046766.tif 000025
【図６】
2020046766.tif 000026
【図７】
2020046766.tif 000027
【図８】
2020046766.tif 000028
【図９】
2020046766.tif 000029
【図１０】
2020046766.tif 000030
【図１１】
2020046766.tif 000031
【図１２】
2020046766.tif 000032
【図１３】
2020046766.tif 000033
【図１４】
2020046766.tif 000034
【図１５】
2020046766.tif 000035