(57)【特許請求の範囲】
【請求項１】
イジングモデルの１つのスピンを３以上の状態で表現する値を記憶する第１のメモリセルと、
前記１つのスピンに相互作用を及ぼす他のスピンからの相互作用を示す相互作用係数を記憶する第２のメモリセルと、
前記他のスピンの状態を表現する値と前記相互作用係数を定数または変数として持つ関数に基づいて、前記１つのスピンの次状態を決定する論理回路と、
を有する単位ユニットを複数備える半導体装置。
【請求項２】
前記イジングモデルの１つのスピンの値を記憶する第１のメモリセルは、前記１つのスピンの値として＋１の状態、−１の状態、＋１でも−１でもない状態、の少なくとも３つの状態を表現できる、
請求項１記載の半導体装置。
【請求項３】
前記イジングモデルの１つのスピンの値を記憶するメモリセルは、前記＋１でも−１でもない状態として０の状態を表現できる、
請求項２記載の半導体装置。
【請求項４】
前記１つのスピンの第１バイアス係数を記憶する第１バイアス用メモリセルを備え、
該第１バイアス用メモリセルに、
一時的に疑似的な第１バイアス係数を記憶させるとともに、
任意のタイミングで前記疑似的な第１バイアス係数を０に変更可能なインタフェースを有する、
請求項１記載の半導体装置。
【請求項５】
全ての前記単位ユニットの前記論理回路で共通して用いる係数を、
外部から入力するインタフェースを有する、
請求項１記載の半導体装置。
【請求項６】
前記１つのスピンの第２バイアス係数を記憶する第２バイアス用メモリセルをさらに備え、
前記関数の計算時に前記第２バイアス係数を用い、
前記インタフェースは、
前記共通して用いる係数として、
前記第２バイアス係数の前記関数の計算における影響を変化させるスケジュール係数を、
外部から入力する、
請求項５記載の半導体装置。
【請求項７】
前記１つのスピンの第１バイアス係数を記憶する第１バイアス用メモリセルを備え、
前記インタフェースは、
前記共通して用いる係数として、
前記関数の計算における前記第１バイアス係数にランダムな値を付加するランダムパルス列および、該ランダムパルス列の効果をイネーブル／ディスエーブルするランダム効果制御信号を、
外部から入力する、
請求項５記載の半導体装置。
【請求項８】
イジングモデルの１つのスピンの値を記憶する第１のメモリセルと、
前記１つのスピンに相互作用を及ぼす他のスピンからの相互作用係数を記憶する第２のメモリセルと、
前記１つのスピン及び他のスピンからなる系の前記スピンの値及び相互作用係数を定数または変数とする関数に基づいて、前記１つのスピンの次状態を決定する論理回路と、
を有する単位ユニットを複数備え、
前記論理回路における前記関数計算に用いる係数の値を、前記複数の単位ユニットで共通に変化させるインタフェースを有する、半導体装置。
【請求項９】
前イジングモデルの１つのスピンの値を記憶する第１のメモリセルは、多値（３値以上）を格納するメモリセルである、
請求項８記載の半導体装置。
【請求項１０】
前記単位ユニットは、
前記関数計算に用いる係数に影響する値として前記１つのスピンの付加係数を記憶する第３のメモリセルを有する、
請求項８記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、相互作用モデルの計算を行う装置に関するものである。
【背景技術】
【０００２】
現在、コンピュータアーキテクチャの主流はノイマン型である。ノイマン型アーキテクチャの基本動作は命令列の逐次的な実行にある。これまで、コンピュータの性能向上は主としてクロック周波数の向上に依っていた。しかし、近年では頭打ちになったクロック周波数にかわって、マルチコア化による並列処理で性能向上を実現する方策が主流になっている。
【０００３】
マルチコア化による並列処理では、逐次的な命令列から並列実行可能な箇所を見出し（並列性の抽出）、並列実行することで性能向上を図る。しかし、逐次的なアルゴリズムを命令列として書き下したプログラムから並列性を抽出することは容易ではない。
【０００４】
このような状況を鑑みると、今後、コンピュータの性能向上を図っていくためには、従来のように逐次的な命令列の実行を基本とするのではなく、本質的に並列な情報処理に移行していく必要がある。そのためには、従来の逐次的な命令列による問題の記述方法に替わって、本質的に並列な情報処理を実現するために適した問題の記述方法が必要となる。
【０００５】
種々の物理現象や社会現象は相互作用モデルで表現することができる。相互作用モデルとは，モデルを構成する複数個の主体（entity）あるいはノード（node）と，主体間の相互作用，さらに必要であれば主体毎のバイアスで定義されるモデルである。物理学や社会科学では種々のモデルが提案されているが，いずれも相互作用モデルの一形態であると解釈できる。また，相互作用モデルの特徴として，主体間の影響を２個の主体間の相互作用に限定している（２体間の相互作用）ことがあげられる。例えば，宇宙空間にある惑星の力学を考えてみると，惑星という主体の間に万有引力による相互作用がある点で相互作用モデルの一種とも解釈できるが，惑星間の影響は２個の惑星間にとどまらず，３個以上の惑星が互いに影響し合って複雑な挙動を示す（いわゆる３体問題や多体問題と言われる問題になる）。  相互作用モデルの一例としてイジングモデルがある。イジングモデルは磁性体の振舞いを説明するための統計力学のモデルであり、磁性体の研究に用いられている。イジングモデルはサイト（＋１／−１の２値をとるスピン）間の相互作用として定義される。トポロジが非平面グラフになるイジングモデルの基底状態を求めることは、ＮＰ困難問題であることが知られている。イジングモデルは空間方向に広がった相互作用係数で問題を表現するため、本質的な並列性を利用した情報処理を実現できる可能性がある。
【０００６】
ところで、イジングモデルの基底状態を求めることは、前述した通りＮＰ困難問題であるから、ノイマン型コンピュータで解くことは計算時間の面で困難を伴う。ヒューリスティックを導入して高速化を図るアルゴリズムも提案されているが、ノイマン型コンピュータではなく物理現象をより直接的に利用した計算、すなわちアナログコンピュータでイジングモデルの基底状態を高速に求める方法が提案されている。
【０００７】
このような装置として、例えば特許文献１に記載の装置がある。このような装置では、解くべき問題に対応した並列度が必要になってくる。イジングモデルの場合では、基底状態を探索すべきイジングモデルのスピン数に対応して、スピンや相互作用を実現する素子が必要となる。例えば特許文献１に記載の装置ではスピンとレーザーを対応させており、スピン数に比例した数のレーザーが必要となる。すなわち、多数の素子を実現できるスケーラビリティの高さが必要となる。
【０００８】
また，生物学の世界では脳をモデル化したニューラルネットワークが相互作用モデルの一例である。ニューラルネットワークは神経細胞のニューロンを模した人工ニューロンを主体として，人工ニューロン間はシナプス結合という相互作用を持つ。また，各ニューロン毎にバイアスを与える場合もある。社会科学の世界では，例えば人間のコミュニケーションを考えると，人間という主体と言語や通信で成される相互作用があることは容易に理解できよう。また，各人間には個別にバイアスがあることも想像できる。そのため，人間のコミュニケーションを，相互作用モデルという点で共通なイジングモデル等に模してその特性を明らかにしようという研究もなされている（例えば，特許文献２（特開２０１２−２１７５１８））。
【０００９】
また、特許文献３に示すように、超伝導素子における量子力学的な効果を利用して、イジングモデルの基底状態探索を行おうという試みもある。量子力学的な効果とは、いわゆる重ね合わせの状態を利用することであり、スピンの状態の重ね合わせを利用することで、収束性能を高めようとするものである。
【００１０】
しかし、スケーラビリティの観点からは、上記の装置とは異なるアプローチが求められる。すなわち、より多くのスピン数を実現するためには、大量のレーザーを並べたり、高度な冷却技術を必要とする超伝導素子では限界がある。より簡便に大きなスケーラビリティが得られる方法が求められる。現在の実装技術において最もスケーラビリティに優れているのは半導体装置（半導体集積回路）である。半導体集積回路はシリコン等の半導体基板上に、フォトリソグラフィと呼ばれる印刷技術に類似した手法で回路を形成する。また、半導体基板上に形成可能な素子や配線の大きさは年々小さくなっており（半導体の微細化と呼ばれている）、同一面積に実装可能な回路規模は年々大きくなっている。
【００１１】
半導体集積回路のスケーラビリティの高さはノイマン型コンピュータの性能向上をこれまで支え続けてきたが、上述したような新しい種類のコンピュータにおいても、スケーラビリティの高さを持つ半導体装置として実現可能な形態が求められるであろう。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】国際公開第２０１２／１１８０６４号
【特許文献２】特開２０１２−２１７５１８号公報
【特許文献３】特表２０１１−５２４０２６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
半導体装置の技術を適用して作成した固体素子で、相互作用モデルの計算を行う構成を実現することを目的とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するための、本発明の一側面は半導体装置として提供される。この装置は、相互作用モデルの注目主体（entity）の値を記憶するための多値（３値以上）を格納するメモリセルと、注目主体に相互作用を及ぼす隣接主体からの相互作用係数を記憶するメモリセルと、注目主体及び隣接主体からなる系の主体の値および相互作用係数を定数または変数として持つ関数に基づいて、前記注目主体の次状態を決定する論理回路と、を有する単位ユニットを複数備える。
【００１５】
本発明の他の側面は、相互作用モデルの注目主体の値を記憶するメモリセルと、注目主体に相互作用を及ぼす隣接主体からの相互作用係数を記憶するメモリセルと、注目主体及び隣接主体からなる系の主体の値及び相互作用係数を定数または変数とする関数に基づいて、注目主体の次状態を決定する論理回路と、を有する単位ユニットを複数備え、論理回路における関数計算に用いる係数の値を、複数の単位ユニットで共通に変化させるインタフェースを有する。
【００１６】
また、本発明の他の側面は、入力装置、出力装置、記憶装置、および処理装置からなる情報処理装置により、注目主体及び隣接主体からなる系の、主体の値および主体相互の相互作用係数を定数または変数として持つ関数で表現される、相互作用モデルの前記関数の値を所望の値とする解である主体の配列もしくはその近似解を計算する情報処理方法である。この方法では、計算において、主体配列の主体の値として＋１、−１、およびこれらの中間的な値として離散化された多値の値を使用する。ここで、注目主体及び隣接主体からなる系の主体の値は、その全てを変数として持ってもよいし、一部を固定（定数）とし、他を変数としてもよい。また、相互作用係数については、その全てを変数あるいは定数として持ってもよいし、一部を定数とし、他を変数として持ってもよい。
【発明の効果】
【００１７】
半導体装置の技術を適用して作成した固体素子で、相互作用モデルを表す関数において、所望の値をとる状態の解の探索を行う構成を実現することができる。
【００１８】
上記した以外の課題、構成、及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１９】
【図１】イジングチップが解くグラフ問題の一例を説明するグラフ図。
【図２】イジングチップが解くグラフ問題の一例のカットの概念を説明するグラフ図。
【図３】イジングチップが解くグラフ問題の一例の最大カットを説明するグラフ図。
【図４】グラフ問題に対応する相互作用モデルの一例を説明するグラフ図。
【図５】グラフ問題に対応する相互作用モデルの一例の解を説明するグラフ図。
【図６】本発明の一実施例であるイジングチップの構成を説明するブロック図。
【図７】本発明の一実施例であるイジングチップを備える情報処理装置の構成を説明するブロック図。
【図８】３次元格子のスピンアレイの構成の一例を説明する斜視図。
【図９】スピンユニット間の相互作用を行う構成例を示す回路図。
【図１０】スピンユニットが有するメモリセルにアクセスするための構成例を示す回路図。
【図１１】３次元格子中のスピンユニットの構成例を説明する斜視図。
【図１２】イジングチップのメモリマップの一例を示す平面図。
【図１３】イジングチップ上のスピンユニットの配置の一例を説明するブロック図。
【図１４】３次元格子のスピンアレイとスピンユニットの対応関係の一例を説明する斜視図。
【図１５】スピンユニット間の相互作用を行う配線の一例を説明する配線図。
【図１６】イジングチップの制御手順の一例を説明するフローチャート。
【図１７】イジングチップの問題定義の構成を示す表図。
【図１８】イジングチップの問題データの構成を示す表図。
【図１９】イジングチップの解データの構成を示す表図。
【図２０】量子状態を表現するブロッホ球の斜視図。
【図２１】２値で表現されたスピンの状態の概念図。
【図２２】ブロッホ球のｘｚ平面上でx方向の横磁場を導入して表現した量子スピンの概念図。
【図２３】ｘが正の値のみをとる場合の、量子スピンの状態を示す概念図。
【図２４】量子スピンの状態を３ビットの多値で示す概念図。
【図２５】スケジュール係数α[t]の例を示すグラフ図。
【図２６】ランダム性制御インタフェースを備えたイジングチップのブロック図。
【図２７】ランダム性制御インタフェースとスピンユニットの結線を示すブロック図。
【図２８】ランダムパルス列（ＲＳ）、ランダム効果制御信号（ＲＥ）とクロックの関係を示すタイミング図。
【図２９】相互作用アドレス１８０、相互作用クロック１８１、およびスケジュール制御信号（ＡＴ）の関係を示すタイミング図。
【図３０】本発明の一実施例でスピンユニットの回路図。
【図３１】本発明の一実施例である基底探索処理のフロー図。
【発明を実施するための形態】
【００２０】
物理学の世界で代表的な相互作用モデルの例として，イジングモデルをあげることができる。イジングモデルとは＋１／−１（ないしは上，下など）の２状態を取るスピンを主体として，２個のスピン間の相互作用を決める相互作用係数と，個々のスピンに対するバイアスである外部磁場係数でモデルが定義される。本実施例では、相互作用モデルの計算を行う手段として、イジングモデルを扱うことができる装置であるイジングチップを例に説明を行う。もっとも、本発明は、相互作用モデル一般において、モデルを表現する関数の値を所望の値に収斂させた際に、当該関数の変数がとる値を高速に求める技術を提供するものであり、応用がイジングモデルに限定されるものではない。また、実施例中の装置は便宜的にイジングチップと呼称しているが、イジングモデル以外のモデルに適用することを妨げるものではない。
【００２１】
本実施例の一例は半導体装置として提供される。この半導体装置は、量子スピンの状態を疑似的に表現する構成であって、イジングモデルの注目スピンの値を記憶するための多値（３値以上）を格納するメモリセルと、注目スピンに相互作用を及ぼす隣接スピンからの相互作用係数を記憶するメモリセルと、注目スピンの外部磁場係数を記憶するメモリセルと、注目スピン及び隣接スピンからなる系のエネルギー関数に基づいて、注目スピンの次状態を決定する論理回路からなるスピンユニットを複数備えている。複数のスピンユニットはアレイ構造を形成している。
【００２２】
注目スピンの値を記憶するメモリセルは、スピンの値として＋１の状態、−１の状態、＋１でも−１でもない状態、の少なくとも３つの状態を表現できることが望ましく、＋１でも−１でもない状態としては０の状態がある。
【００２３】
本実施例の他の例では、イジングモデルの注目スピンの値を記憶するメモリセルと、注目スピンに相互作用を及ぼす隣接スピンからの相互作用係数を記憶するメモリセルと、注目スピンの外部磁場係数を記憶するメモリセルと、注目スピン及び隣接スピンからなる系のエネルギー関数に基づいて、注目スピンの次状態を決定する論理回路と、を有するスピンユニットを複数備える半導体装置である。この装置は、論理回路におけるエネルギー関数計算に用いる係数の値を、複数のスピンユニットで共通に変化させるインタフェースを有する。複数のスピンユニットで異なる係数を用いる場合には、各スピンユニットに横磁場係数を格納するメモリセルを準備し、当該メモリセルの横磁場係数値に重みづけする信号を、上記のインタフェースから配給してもよい。
【００２４】
また、本発明の他の例は、入力装置、出力装置、記憶装置、および処理装置からなる情報処理装置により、イジングモデルのエネルギーを最少とするスピン配列である基底状態、もしくはその近似解を計算する情報処理方法あるいは情報処理装置である。この方法では、計算においてスピン配列のスピンの値として＋１、−１、およびこれらの中間的な値として離散化された多値の値を使用する。
【００２５】
上記の方法あるいは装置において、好ましくは、計算に横磁場係数を導入し、横磁場係数は、複数のスピンユニットに共通するインタフェースにより制御される。
【００２６】
上記の方法あるいは装置において、好ましくは、計算において外部磁場係数にランダムな値を付加する。ランダムな値は、複数のスピンユニットに共通するインタフェースにより制御される。
【００２７】
上記の方法あるいは装置において、好ましくは、計算において、外部磁場係数の値が０の場合は、０の値の代わりにランダムな値を外部磁場係数とし、所定のタイミングで０に戻す処理を採用する。
【００２８】
以下、本発明の実施例を図面により説明する。前半で相互作用モデルの基底状態探索を行う、イジングチップの基本構成の実施例を説明する。後半でイジングチップの応用についての実施例を説明する。
【００２９】
ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００３０】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略する。
【００３１】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。
【００３２】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００３３】
本明細書で引用した刊行物、特許および特許出願は、そのまま本明細書の説明の一部を構成する。
【００３４】
（１）イジングチップの基本構成
以下で、本発明の相互作用モデルの基底状態探索を行うデバイスの具体的な実施例であるイジングチップについて説明する。イジングチップは、第１〜第７の２値または多値（３値以上を多値と呼ぶ）のメモリセルを備えるユニットを複数備える。ある一つのユニット（注目ユニット）には、他の第１〜第５のユニットの第７のメモリセルのデータが入力され、当該他のユニットからの５つのデータと注目ユニットの第１〜第６のメモリセルのデータに基づいて演算を行い、演算結果に従って注目ユニットの第７のメモリセルのデータを書き換える。このとき、イジングチップは、当該ユニットの第７のメモリセルのデータと、他の第１〜第５のユニットの第７のメモリセルのデータが同時に書き換えられないように制御する。以上の構成のイジングチップに、イジングモデルのトポロジに従って、メモリセルのデータとユニットの接続関係を規定する。
【００３５】
（１−１）解くべき問題のイジングモデルの基底状態探索問題への変換
イジングモデルは磁性体の振舞いを説明するための統計力学のモデルである。イジングモデルは典型的には、＋１／−１（または０／１、または上／下）の２値をとるスピンと、スピン間の相互作用を示す相互作用係数、および、スピン毎に付随する外部磁場係数で定義される。
【００３６】
イジングモデルは与えられたスピン配列、相互作用係数、および、外部磁場係数から、その時のエネルギーを計算することが出来る。イジングモデルのエネルギー関数Ｅ(σ)は一般的に次式（数１)で表わされる。なお、σｉ，σｊはそれぞれｉ番目とｊ番目のスピンの値、Ｊi,jはｉ番目とｊ番目のスピンの間の相互作用係数、ｈｉはｉ番目のスピンに対する外部磁場係数、＜ｉ，ｊ＞は隣接する２つのサイトの組合せ、σはスピンの配列を表わすものとする。
【００３７】
【数１】
0005865456.tif 000002
【００３８】
イジングモデルの基底状態を求めるというのは、イジングモデルのエネルギー関数を最小化するスピンの配列を求める最適化問題である。例えば、因数分解や巡回セールスマン問題など、一見すると磁性体と何ら関係の無い問題をイジングモデルに変換することができる。そして、変換して得られたイジングモデルの基底状態は、元の問題の解に対応している。このことから、イジングモデルの基底状態を探索することのできる装置は、汎用的な用途に利用可能なコンピュータであると言える。
【００３９】
本実施例において、解きたい問題からイジングチップの設定までを通して説明するために、例題としてグラフの最大カット問題を示す。
【００４０】
図１は、イジングチップが解くグラフ問題の一例を説明するグラフ図である。  
まず、グラフの意味を説明する。図１のグラフＧ＝（Ｖ，Ｅ）は頂点の集合Ｖ＝｛Ａ，Ｂ，Ｃ，Ｄ｝と、辺の集合Ｅ＝｛ａ，ｂ，ｃ，ｄ，ｅ，ｆ｝から構成される。各辺は重み係数を持っており、ａ，ｂ，ｃ，ｄ，ｅ，ｆと書いたときにその重み係数を表わすものとする。
【００４１】
図２に示すように、このグラフの頂点Ｖを２つの部分集合Ｖ’とＶ’＼Ｖに分割することをカットと呼ぶ。Ｖ’＼ＶはＶからＶ’を除いた集合を示す。ここで、分割されたＶ’とＶ’＼Ｖの間を跨っている辺（図２の例ではｃ，ｄ，ｅ，ｆ）をカットを跨いでいるエッジ、もしくは、カットエッジと呼ぶ。重みが無いグラフの場合にはカットエッジの本数、図２のように重み付きのグラフの場合にはカットエッジの重みの総和を、カットの大きさと呼ぶ。図２の例では、カットの大きさはｃ＋ｄ＋ｅ＋ｆである。なお、図１、及び、図２は無向グラフの例であるが、有向グラフに拡張することも出来る。
【００４２】
最大カット問題とは、グラフＧ＝（Ｖ，Ｅ）を与えられた時、カットの大きさを最大化するカットを求めることである。換言すれば、カットの大きさを最大化するように、頂点の集合ＶをＶ’とＶ’＼Ｖにグループ分けすることと言っても良い。
【００４３】
図３に最大カット問題の具体的な例を示す。この例では頂点ＶをＶ’＝｛Ａ，Ｂ｝とＶ’＼Ｖ＝｛Ｃ,Ｄ｝に分けるようにカットした時に、カットの大きさｗ（Ｖ’）＝２となり、このグラフにおける最大カットとなる。
【００４４】
図２に戻ってグラフのカットとイジングモデルの関係について説明する。図２のグラフでは、カットの大きさｗ（Ｖ’）＝ｃ＋ｄ＋ｅ＋ｆである。ここで、図２のグラフをイジングモデルと見なすと、辺Ｅ＝｛ａ，ｂ，ｃ，ｄ，ｅ，ｆ｝の重みは、イジングモデルの相互作用係数となる。そして、頂点Ｖ＝｛Ａ，Ｂ，Ｃ，Ｄ｝はイジングモデルではそれぞれ＋１／−１の２値の状態を持つスピンとなる。ここで、カットした頂点Ｖ’に属する頂点は＋１のスピン、Ｖ’＼Ｖに属する頂点は−１のスピンとする。つまり、Ａ＝＋１，Ｂ＝＋１，Ｃ＝−１，Ｄ＝−１とする。このときのイジングモデルのエネルギーは、（数１）に示したエネルギー関数に沿って計算すると、−（ａ＋ｂ−ｃ−ｄ−ｅ−ｆ）＝−ａ−ｂ＋ｃ＋ｄ＋ｅ＋ｆとなる。ところで、カットの大きさｗ（Ｖ’）＝ｃ＋ｄ＋ｅ＋ｆであることから、このエネルギー関数は（数２）のように書くことが出来る。
【００４５】
【数２】
0005865456.tif 000003
【００４６】
図２の例に沿って具体的に計算してみると、−（（ａ＋ｂ＋ｃ＋ｄ＋ｅ＋ｆ）−２（ｃ＋ｄ＋ｅ＋ｆ））＝−（ａ＋ｂ−ｃ−ｄ−ｅ−ｆ）となることが確かめられよう。（数２）を見るとカットの大きさｗ（Ｖ’）を最大化すれば、エネルギーＥ（σ）も大きくなることが分かる。つまり、カットの大きさを最大化すると、イジングモデルのエネルギーは最大化される。逆に、カットの大きさを最小化すると、イジングモデルのエネルギーは最小化される。つまり、イジングモデルの基底状態探索は、最小カットを求めることに対応している。そこで、最小カットを求めるためには、最大カット問題の重みの符号を全て反転させることで、最小カットを求めることに変換する。
【００４７】
図４に図３に示した最大カット問題を、イジングモデルの基底状態探索問題に変換した例を示す。図４の各辺についている相互作用係数ＪＡＢ、ＪＡＣ、ＪＡＤ、ＪＢＣ、ＪＢＣ、ＪＣＤを見ると、図３の重みの符号を反転したものになっている。これが前述した最大カット問題から最小カット問題への変換に対応する。
【００４８】
図５に、図４のイジングモデルの基底状態を探索し、エネルギーが最小となるようにスピンσＡ，σＢ，σＣ，σＤを決定したものを示す。なお、図５の例ではσＡ＝＋１，σＢ＝＋１，σＣ＝−１，σＤ＝−１だが、イジングモデルでは全てのスピンの状態を反転させたものも同じエネルギーとなるので、σＡ＝−１，σＢ＝−１，σＣ＝＋１，σＤ＝＋１も基底状態となる。図５の例をみると、カットＶ’に属する頂点はスピンの値が＋１となり、Ｖ’＼Ｖに属する頂点はスピンの値が−１となっている。このように、イジングモデルの基底状態探索を行い、スピンの値で頂点をグループ分けすることで、最大カット、または、最小カットを実現することができるのである。
【００４９】
（１−２）イジングチップの構成
次に、図４に示したイジングモデルの基底状態探索を実現する装置であるイジングチップと、その制御方法を示す。ここでは、３次元格子のイジングモデルの基底状態探索を実現する装置の例を示す。しかし、本発明は３次元格子のイジングモデルに限られるものではなく、任意のトポロジ、任意のスピン数に対して適用可能である。
【００５０】
図６は、本実施例のイジングチップ１００の構成図の例である。イジングチップ１００はスピンアレイ１１０、Ｉ／Ｏドライバ１２０、Ｉ／Ｏアドレスデコーダ１３０、および、相互作用アドレスデコーダ１４０から構成される。
【００５１】
本実施例ではイジングチップ１００は現在広く用いられているＣＭＯＳ集積回路として実装されることを想定して説明するが、他の固体素子でも実現可能である。本実施例では、スピンアレイ１１０は半導体メモリアレイで構成されている。メモリの種類は問わないが、ここでは高速動作可能なＳＲＡＭ（Ｓｔａｔｉｃ Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）を用いた例で説明する。イジングチップ１００は、スピンアレイ１１０にリード／ライトを行うための、ＳＲＡＭ互換インタフェースによって駆動可能である。ＳＲＡＭ互換インタフェースは、アドレスバス１９０、データバス１９１、Ｒ／Ｗ制御線１９３、および、Ｉ／Ｏクロック１９２を含む。
【００５２】
イジングチップ１００では、イジングモデルのスピンσｉ、相互作用係数Ｊi,j、および、外部磁場係数ｈｉを、全てスピンアレイ１１０内のメモリセルに記憶する情報で表現する。これらの値のスピンアレイのメモリセルへのリード／ライトは、ＳＲＡＭ互換インタフェースで行う。
【００５３】
基底状態を探索すべきイジングモデルをイジングチップ１００に設定するために、メモリセルにはアドレスが付与されている。また、スピンアレイ１１０のスピンσｉ、相互作用係数Ｊi,j、および、外部磁場係数ｈｉは、メモリセルのアドレスに対応付けられている。任意のアドレスのメモリセルに情報をリード／ライトする手法は、公知の半導体メモリの制御技術と同様である。
【００５４】
なお、ＳＲＡＭ互換インタフェースを構成するアドレスバス１９０、データバス１９１、および、Ｒ／Ｗ制御線１９３は、Ｉ／Ｏクロック１９２に入力されるクロックに同期して動作する。但し、本発明においてインタフェースが同期式である必要性は無く、非同期式のインタフェースでも良い。本実施例では、同期式のインタフェースであるという前提で説明を行う。
【００５５】
また、イジングチップ１００は基底状態探索を行うために、スピンアレイ１１０の内部でスピン間の相互作用を実現する。ここで、相互作用とは、スピンアレイ１１０のメモリセルの値を読み出し、読み出した値からエネルギーを計算し、エネルギーが小さくなるようなスピンの値を決定し、決定したスピンの値をメモリセルに書き込む一連の処理をいう。
【００５６】
この相互作用を外部から制御するのが相互作用制御インタフェースであり、具体的には相互作用を行うスピン群を指定するアドレスを相互作用アドレス１８０で入力し、相互作用クロック１８１に入力されるクロックに同期して相互作用を行う。
【００５７】
なお、相互作用は必ずしもクロック同期回路で実現される必要はなく、非同期回路であっても構わない。この場合、相互作用クロック１８１の役割はクロックの入力ではなく、相互作用の実行を許可するイネーブル信号であるものとする。相互作用制御インタフェースについても必ずしも同期式である必要はなく非同期式のインタフェースでも良いが、本実施例では同期式のインタフェースを用い、相互作用が相互作用クロック１８１に同期して行われるという前提で説明を行う。
【００５８】
図６の乱数発生器１５０、ビット調整期１５１、乱数発生クロック１６０については後述する。また、相互作用アドレスデコーダ１４０についても詳細を後述する。
【００５９】
（１−３）イジングチップを備えた情報処理装置の構成
このイジングチップ１００を１個、または、複数個用いて情報処理を実現するが、そのためには前述したＳＲＡＭインタフェースを制御しなければならない。
【００６０】
図７は図６のイジングチップを制御する情報処理装置の構成の一例を説明する図である。この例では、イジングチップ１００は情報処理装置２００の一部として利用される。
【００６１】
情報処理装置２００の典型例としては、現在一般的に用いられているパーソナルコンピュータに、イジングチップ１００で構成されたアクセラレータを装着したものである。情報処理装置２００は、中央処理装置（ＣＰＵ）２１０、一時メモリ（ＲＡＭ）２２０、記憶装置（ＨＤＤ）２６０、を有し、これらがシステムバス２３０で結合されている。
【００６２】
加えて、システムバス２３０にイジングチップコントローラ２５０が接続され、その先に１個ないしは複数個のイジングチップ（図７の例では、２個のイジングチップ１００−１、及び、イジングチップ１００−２を有する。これ以降、２個のイジングチップを特に区別する必要の無いときには、単にイジングチップ１００と称する。）を持つ。このイジングチップコントローラ２５０とイジングチップ１００がアクセラレータに相当するものであり、例えばＰＣＩ Ｅｘｐｒｅｓｓ（登録商標）のようなペリフェラル拡張用インタフェースに挿入して使う拡張カードの形態を取ることができる。
【００６３】
イジングチップコントローラ２５０はシステムバス２３０（例えばＰＣＩ Ｅｘｐｒｅｓｓ（登録商標）やＱＰＩ）のプロトコルを、イジングチップ１００のインタフェースに合せて変換するものである。情報処理装置２００のＣＰＵ２１０上で動作するソフトウェアは、一般的には特定のアドレスに対してリード／ライトを行うことで（いわゆるＭＭＩＯ、Ｍｅｍｏｒｙ Ｍａｐｐｅｄ Ｉ／Ｏ）、イジングチップコントローラ２５０を経由して、イジングチップ１００を制御することが出来る。
【００６４】
図７の情報処理装置２００でイジングチップ１００に問題を解かせようとする場合には、例えばＨＤＤ２６０に問題データを格納しておく。また、問題データをイジングモデルの基底状態探索問題に変換するためのプログラムやイジングチップ１００を制御するためのプログラムが、ＲＡＭ２２０に格納され、ＣＰＵ２１０で実行される。
【００６５】
（１−４）イジングモデルの構造
イジングチップ１００内のスピンアレイ１１０は、イジングモデルに対応し、これをシミュレートするものである。スピンアレイ１１０は、１個のスピン（注目スピン）とそれに付随する相互作用係数、及び、外部磁場係数の保持と、基底状態探索処理を実現するスピンユニットを基本構成単位としている。
【００６６】
図８はスピンユニット３００を複数個並べることで、３次元格子状のトポロジを持つイジングモデルを構成する例を示している。図８の例は、３（Ｘ軸方向）×３（Ｙ軸方向）×２（Ｚ軸方向）の大きさの３次元格子である。
【００６７】
座標軸の定義は図示した通り、図面右方向をＸ軸、図面下方向をＹ軸、図面奥行き方向をＺ軸としている（以下の図面でも同様）。この座標軸は実施例の説明上便宜的に必要なだけであり、発明とは関係しない。３次元格子以外のトポロジ、例えばツリー状のトポロジなどを利用する場合には、座標軸とは別にツリーの段数等で表現することになる。図８の３次元格子状のトポロジにおいて、スピン間の相互作用をグラフとしてとらえると、最大で次数５のスピン（頂点）が必要となる。なお、外部磁場係数の接続も含めて考えると、最大で次数６が必要となる。
【００６８】
図８に示す１個のスピンユニット３００は隣接するスピン（例えば隣接するスピンが５個の場合）σj，σｋ，σｌ，σｍ，σｎの値が入力される。また、スピンユニット３００はスピンσｉと外部磁場係数ｈｉに加え、前記した隣接するスピンとの相互作用係数であるＪj,i，Ｊk,i，Ｊl,i，Ｊm,i，Ｊn,i（隣接する５スピンとの相互作用係数）を保持するメモリセルを有している。
【００６９】
ところで、イジングモデルは一般的に無向グラフで表現される相互作用を有している。前記した（数１）では、相互作用を表わす項として、Ｊi,j×σｉ×σｊがあるが、これはｉ番目スピンからｊ番目スピンへの相互作用を示している。この時、一般的なイジングモデルではｉ番目スピンからｊ番目スピンへの相互作用と、ｊ番目スピンからｉ番目スピンへの相互作用を区別することはない。つまり、Ｊi,jとＪj,iは同一である。しかし、本発明のイジングチップ１００では、このイジングモデルを有向グラフに拡張し、ｉ番目スピンからｊ番目スピンへの相互作用と、ｊ番目スピンからｉ番目スピンへの相互作用を非対称にすることを実現している。これにより、モデルの表現能力が高まり、多くの問題をより小規模のモデルで表現することが可能になる。
【００７０】
そのため、１個のスピンユニット３００をｉ番目スピンσｉを含むユニットと考えた時に、このスピンユニットが保持する相互作用係数であるＪj,i，Ｊk,i，Ｊl,i，Ｊm,i，Ｊn,iは、隣接するｊ番目、ｋ番目、ｌ番目、ｍ番目、ｎ番目のスピンσj，σｋ，σｌ，σｍ，σｎから、ｉ番目スピンσｉへの相互作用を決めるものである。
【００７１】
このことは、図８において、スピンユニット３００に含まれている相互作用係数が対応する矢印（相互作用）が、図示されているスピンユニット３００の外部のスピンから、スピンユニット３００の内部のスピンに向かっていることに対応している。
【００７２】
（１−５）スピンユニットの回路構成
図８で示されたスピンモデルの基底状態を求めるため、スピンユニット３００を固体素子で構成する。本実施例では、半導体メモリおよび論理回路で構成されたスピンユニット３００を複数個並べて、スピンアレイ１１０を構成する。スピンユニット３００の構成の一例を図９と図１０を用いて説明する。
【００７３】
図９は、スピンユニットの回路構成例について説明する図である。図９には、スピンユニット間の相互作用を実現するための回路を図示している。
【００７４】
図１０は、図９の構成において、スピンユニットが有するメモリセルにイジングチップ１００外からアクセスするためのインタフェースである、ワード線とビット線に注目して図示したものである。
【００７５】
１個のスピンユニット３００は、図９と図１０の双方の構成を備えるが、配線の接続関係を理解しやすくするため、便宜上図９と図１０に分けて説明している。
【００７６】
なお、図９の相互作用を実現するための回路において図示されているインタフェースであるＥＮ，ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎを、複数のスピンユニット間でどのように結線するかについては、後に図１５を参照して説明する。また、図１０のワード線及びビット線を複数のスピンユニット間でどのように結線するかについては、後に図１３を参照して説明する。
【００７７】
スピンユニット３００は、イジングモデルのスピンσｉ、相互作用係数Ｊj,i、……Ｊn,iおよび、外部磁場係数ｈｉを保持するために、１ビットのメモリセルを複数個備えている。この１ビットのメモリセルは図９、図１０中に、Ｎ（７０１），ＩＳ０，ＩＳ１，ＩＵ０，ＩＵ１，ＩＬ０，ＩＬ１，ＩＲ０，ＩＲ１，ＩＤ０，ＩＤ１，ＩＦ０，ＩＦ１（以上７０２）として図示されているものである。なお、ＩＳ０とＩＳ１、ＩＵ０とＩＵ１、ＩＬ０とＩＬ１、ＩＲ０とＩＲ１、ＩＤ０とＩＤ１、および、ＩＦ０とＩＦ１はそれぞれ２個１組で役割を果たすものであるため、それぞれまとめてＩＳｘ，ＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，および、ＩＦｘと略記する。
【００７８】
スピンユニット３００が有する各メモリセルの構造の一例としては、公知のＳＲＡＭメモリのセルを利用することができる。すなわち、メモリセルはＣＭＯＳインバータ２個で構成されるデータ保持部を有する。インバータと直列に接続されるパスゲートトランジスタのゲートをワード線で制御し、ソース・ドレイン経路をビット線に接続することで、データ保持部へのデータ読み書きを実現する。もっとも、メモリセル構造はこれに限られず、少なくとも２値を記憶できる構成であればよい。例えば、ＤＲＡＭやフラッシュメモリのような他のメモリを用いることができる。
【００７９】
図９の例では、各メモリセルは１ビット格納できるＳＲＡＭメモリセルとしている。しかし、多値化したメモリセルを用いてもよい。多値化したメモリセルは、物理的に１つのメモリセルを用いてもよいし、複数の１ビットメモリセルを用いて複数ビットを格納できるように構成してもよい。メモリセルを多値化すると、使用できる係数の値の自由度が広がる。一方、回路規模や処理時間は拡大する。したがって、解くべき問題の種類や用途に応じて、適切なメモリを選択すればよい。
【００８０】
ここで、スピンユニット３００はｉ番目のスピンを表現するものとして説明を行う。メモリセルＮはスピンσｉを表現するためのメモリセルでありスピンの値を保持する。スピンの値はイジングモデルでは＋１／−１（＋１を上、−１を下とも表現する）であるが、これをメモリセルの２値である１／０に対応させる。本明細書では、＋１を１、−１を０に対応させることにするが、逆の対応でもかまわない。
【００８１】
図１１を用いて、図９および図１０のスピンユニット３００が有するメモリセルと、図８に示したイジングモデルのトポロジとの対応関係を示す。ＩＳｘは外部磁場係数を表現する。また、ＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，ＩＦｘはそれぞれ相互作用係数を表現する。ＩＵｘは上側のスピン（Ｙ軸方向で−１）、ＩＬｘは左側のスピン（Ｘ軸方向で−１）、ＩＲｘは右側のスピン（Ｘ軸方向で＋１）、ＩＤｘは下側のスピン（Ｙ軸方向で＋１）、ＩＦｘは奥行き方向に接続するスピン（Ｚ軸方向で＋１ないしは−１）との相互作用係数を示している。また、イジングモデルを有向グラフとして捉えた場合に、あるスピンから見ると他のスピンが自スピンに及ぼす影響の係数を持つことになる。自スピンが他のスピンに与える影響の係数は、それぞれの他のスピンに属する。すなわち、このスピンユニット３００は最大で５個のスピンと接続される。
【００８２】
本実施例のイジングチップ１００では、外部磁場係数、及び、相互作用係数は、＋１／０／−１の３値に対応する。そのため、外部磁場係数、および、相互作用係数を表わすためには、少なくともそれぞれ２ビットのメモリセルが必要となる。図９、図１０で示すように、ＩＳｘ，ＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，ＩＦｘは、末尾の数字が０と１の２つのメモリセル（例えばＩＳｘの場合にはＩＳ０とＩＳ１）の組合せで、＋１／０／−１の３値を表現する。例えば、ＩＳｘの場合には、ＩＳ１で＋１／−１を表現し、ＩＳ１が１の時は＋１，０の時には−１を表現する。これに加えて、ＩＳ０が０の時には外部磁場係数を０と見なし、ＩＳ０が１の時にはＩＳ１で決まる＋１／−１のいずれかを外部磁場係数とする。外部磁場係数が０の時は外部磁場係数をディセーブルしていると考えれば、ＩＳ０は外部磁場係数のイネーブルビットであると言うことができる（ＩＳ０＝１の時に、外部磁場係数がイネーブルされる）。相互作用係数を表現するＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，ＩＦｘも同様に係数とビットの値を対応させている。
【００８３】
図１０はスピンユニット３００のメモリセルと、ワード線及びビット線の関係を示す図である。
【００８４】
スピンユニット３００内のメモリセルＮ，ＩＳ０，ＩＳ１，ＩＵ０，ＩＵ１，ＩＬ０，ＩＬ１，ＩＲ０，ＩＲ１，ＩＤ０，ＩＤ１，ＩＦ０，ＩＦ１は、それぞれイジングチップ１００の外部からリード／ライト可能でなければならない。そのために、図１０に示すように、スピンユニット３００はビット線４１０とワード線４２０をそれぞれ有している。先に述べたように、図１０では末尾の数字が０と１の２つのメモリセルのセットで、＋１／０／−１の３値を表現しているが、４値以上の係数を表現したい場合には、セットを構成する１ビットメモリセルの数を増やし、ビット線方向に追加すればよい。
【００８５】
スピンユニット３００は、半導体基板上にタイル状に並べてビット線４１０とワード線４２０を接続する。図６に示すＩ／Ｏアドレスデコーダ１３０とＩ／Ｏドライバ１２０で駆動、制御、読み出しすることで、一般的なＳＲＡＭと同様に、スピンユニット３００内のメモリセルをイジングチップ１００のＳＲＡＭ互換インタフェースでリード／ライトすることが出来る。
【００８６】
以上の構成により、図８に示した３×３×２の３次元格子イジングモデルを、イジングチップ１００上のメモリにマッピングすることができる。
【００８７】
図１２にイジングチップ１００のメモリマップ２０００の例を示す。図８のイジングモデルに対応した、１８個のサイトに対応する１８個のブロックを示している。各ブロックは、図９に示した、Ｎ，ＩＳ０，ＩＳ１，ＩＵ０，ＩＵ１，ＩＬ０，ＩＬ１，ＩＲ０，ＩＲ１，ＩＤ０，ＩＤ１，ＩＦ０，ＩＦ１に対応する１３個のビットを含む。
【００８８】
（１−６）スピンアレイ内のスピンユニット配置
図１３は、イジングチップ１００上のスピンユニット３００の配置の一例を説明する図である。スピンアレイ１１０の構成を、半導体装置としてのレイアウトの観点から説明している。
【００８９】
図１４は図８のスピンアレイに、スピンユニット３００を識別する符号「Ｎ０００」等を表記したものである。ＮｘｙｚというようにＸ軸、Ｙ軸、Ｚ軸上の位置によって符号を付与している。本実施例のスピンアレイは３次元格子のトポロジを持つため、２次元平面上に回路を構成する半導体装置として実現するためには、レイアウト上の工夫が必要となる。スピンユニットは、イジングモデルのトポロジを維持した状態で、半導体基板上の２次元平面に配置、接続する。
【００９０】
図１２、図１３では、図１４中のスピンユニット３００の符号「Ｎ０００」等と対応する符号を表記してあり、図１２、図１３上で表現されているスピンユニット３００が、図１４の３次元格子のトポロジでどの頂点に対応するかが示されている。図１３からわかるように、本実施例では、３×３×２の３次元格子頂点を２次元平面上に配置するために、Ｘ軸方向の格子頂点配列の間隔にＺ軸方向の格子頂点配列の各格子頂点を挿入するように配置している。
【００９１】
すなわち、図１３の２次元平面上でのＹ軸方向（図面下側がＹ軸正の方向）にはＮｘ０ｚ，Ｎｘ１ｚ，Ｎｘ２ｚというように配置されるが、Ｘ軸方向（図面右側がＸ軸正の方向）にはＮ０ｙ０，Ｎ０ｙ１，Ｎ１ｙ０，Ｎ１ｙ１，Ｎ２ｙ０，Ｎ２ｙ１というように、Ｚ軸方向座標が０と１のスピンユニットが交互に配置される。
【００９２】
イジングチップ１００上には物理的にはスピンユニット３００を図１３に示すように配置し、その上に図１３に示すワード線９０１−１，９０１−２，９０１−３と、ビット線９０２−１，９０２−２，９０２−３，９０２−４，９０２−５，９０２−６を配線する。これらのワード線、ビット線は図１０に示したスピンユニット３００のワード線４２０とビット線４１０に結線される。各スピンユニット３００はワード線の配列方向に１３個のメモリセルを有する（ワード線４２０は１３ビット）ので、ワード線９０１−１，９０１−２，９０１−３はそれぞれ１３ビットとなる。
【００９３】
（１−７）イジングモデルの基底状態探索処理の制御
イジングモデルの基底状態探索を実現するためには、イジングモデル全体のエネルギーがより低いスピン配列になるように遷移するように、スピン間の相互作用を実現しなければならない。このための相互作用は、与えられた相互作用係数と外部磁場係数に基づいて行われる。つまり、あるスピンの次の値を、そのスピンに接続されている他のスピンからの相互作用と、そのスピンが持つ外部磁場係数から決定する。このとき、スピンの次の値は、そのスピンが接続されている範囲内での局所的なエネルギーを最小化するような値になる。
【００９４】
このスピンの更新は、それぞれのスピンを１個ずつ逐次的に更新することがまず考えられるが、この方法ではスピン数に比例した時間がかかってしまい、並列性を利用することが出来ない。そこで、スピン間の相互作用を全てのスピンについて同時並行的に行うことが望ましい。
【００９５】
しかし、全てのスピンを同時に更新しようとすることは適当でない。あるスピンを更新するときに、隣接スピンの値に基づいて、隣接スピンとの間でエネルギーを最小化するようにスピンを更新するので、それと同時に隣接スピンの値を更新すると、両方の更新が重複してしまい、エネルギーを最小化できず振動してしまう。すなわち、あるスピンを更新するときに、そのスピンに接続されているスピン（あるスピンに相互作用係数を介して直接接続されているスピンをこれ以降隣接スピンと呼ぶ）を同時に更新することは避けるべきである。
【００９６】
そこで、本実施例では隣接スピンは同時に更新しないように、スピンアレイ１１０内のスピンユニット３００をグループ分けして、一度に同時に更新するのは１つのグループだけにする。図８に示すようなトポロジであれば、２グループに分ければ良い。そして、この２グループを交互に更新していく。
【００９７】
図６を再度参照する。図６の構成では、あるタイミングで更新するグループを指示するために、イジングチップ１００は相互作用アドレス１８０を入力インタフェースとして有する。相互作用アドレス１８０は前述したグループのうち、更新するグループを指定するためのインタフェースであり、相互作用クロック１８１の入力によって、相互作用アドレス１８０で指定されるグループに属するスピン（スピンユニット３００）が同時に更新される。
【００９８】
この方法であれば、スピンユニット３００内に追加のハードウェアは必要なく、イジングチップ１００全体に対して一組の相互作用アドレスデコーダ１４０を設けるだけで良い。そのため、構成単位であるスピンユニット３００を複雑化することなく、前記の問題が解決できる。
【００９９】
上記の例は、隣接スピンが同時に更新されないように２つのグループに分けたが、隣接スピンが同時に更新されない分け方であれば、３以上のグループに分けてもよい。
【０１００】
（１−８）次のスピンの状態を決定するための回路構成
図９を再度参照して説明する。
【０１０１】
スピンユニット３００は複数並行して同時に更新を行うために、相互作用を計算して次のスピンの状態を決定するための回路を、スピンユニット３００毎に独立して持っている。スピンの次状態を決定するための回路を図９に示す。図９ではスピンユニットは外部とのインタフェースとして、ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎを有する。Ｎは当該スピンユニットのスピンの値を他のスピンユニット（図８のトポロジで隣接するユニット）に出力するインタフェースである。ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦはそれぞれ他のスピンユニットの有するスピンの値を入力するためのインタフェース８３０である。ＮＵは上側のスピン（Ｙ軸方向で−１）、ＮＬは左側のスピン（Ｘ軸方向で−１）、ＮＲは右側のスピン（Ｘ軸方向で＋１）、ＮＤは下側のスピン（Ｙ軸方向で＋１）、ＮＦは奥行き方向に接続するスピン（Ｚ軸方向で＋１ないしは−１）からの入力である。なお、イジングモデルのトポロジを考える上で、端の処理を決める必要がある。
【０１０２】
図８のトポロジのように単に端は打ち切るのであれば、ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦのうち端に対するものは何も入力しなくて良い（回路上は０ないしは１の固定値に接続するなど、未使用入力端子として適切な処理をとる）。例えばＮ０００のスピンユニットの場合には、ＮＵ及びＮＬの２端子は入力が無い。
【０１０３】
スピンユニット３００では隣接スピンとの間でエネルギーを最小化するようにスピンの次状態を決定するが、それは隣接スピンと相互作用係数の積、及び、外部磁場係数を評価した時に、正の値と負の値のどちらが支配的か判断することと等価である。例えば、ｉ番目スピンσｉに、スピンσj，σｋ，σｌ，σｍ，σｎが隣接しているとして、スピンσｉの次状態は以下のように決まる。まず、隣接スピンの値はσj＝＋１，σｋ＝−１，σｌ＝＋１，σｍ＝−１，σｎ＝＋１とし、相互作用係数はＪj,i＝＋１，Ｊk,i＝＋１，Ｊl,i＝＋１，Ｊm,i＝−１，Ｊn,i＝−１、外部磁場係数ｈｉ＝＋１とする。このとき、相互作用係数と隣接スピンの積、及び、外部磁場係数をそれぞれ並べると、σj×Ｊj,i＝＋１，σｋ×Ｊk,i＝−１，σｌ×Ｊl,i＝＋１，σｍ×Ｊm,i＝＋１，σｎ×Ｊn,i＝−１，ｈｉ＝＋１となる。外部磁場係数は、常に値が＋１のスピンとの相互作用係数と読み替えて良い。
【０１０４】
ここで、ｉ番目のスピンと隣接スピンとの間での局所的なエネルギーは、前述した係数にそれぞれｉ番目スピンの値を乗じて、さらに符号を反転させたものになる。例えば、ｊ番目スピンとの間での局所的なエネルギーは、ｉ番目スピンを＋１とした時には−１、ｉ番目スピンを−１としたときには＋１となるので、ｉ番目スピンを＋１にするほうが、ここでの局所的なエネルギーを小さくする方向に働く。
【０１０５】
このような局所的なエネルギーを全ての隣接スピン間と外部磁場係数について考えた時に、ｉ番目スピンを＋１／−１のどちらにしたほうがエネルギーを小さくできるかを計算する。これは、先程示した相互作用係数と隣接スピンの積、及び、外部磁場係数をそれぞれ並べたものにおいて、＋１と−１のどちらが多いか数えれば良い。先程の例では、＋１が４個、−１が２個である。仮に、ｉ番目スピンを＋１とするとエネルギーの総和は−２、ｉ番目スピンを−１とするとエネルギーの総和は＋２になる。よって、＋１の個数が多い時にはｉ番目スピンの次状態を＋１とし、−１の個数が多い時にはｉ番目スピンの次状態を−１にするという多数決で、エネルギーを最小化するｉ番目スピンの次状態を決定することが出来る。
【０１０６】
図９のスピンユニット３００に図示する論理回路８１０は前記した相互作用を行うための回路である。まず、隣接スピンの状態と相互作用係数の＋１／−１を示すメモリセルとの排他的論理和の否定（ＸＮＯＲ）で、その相互作用だけを見た時にエネルギーを最小化するスピンの次状態を計算することができる（＋１は１、−１は０にエンコードされているものとする）。もし、相互作用係数が＋１／−１だけであれば、この出力のうち＋１／−１のどちらが多いか多数決論理で判定すればスピンの次状態を決定することができる。外部磁場係数に関しては、常に状態＋１のスピンとの相互作用係数に相当するものと考えれば、単に外部磁場係数の値がスピンの次状態を決定する多数決論理に入力すべき値となる。
【０１０７】
次に、係数０の実現方法について考える。ｎ入力の多数決論理ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ）があるとき、以下の命題は真であると言える。まず、入力Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎの複製Ｉ’１，Ｉ’２，Ｉ’３，．．．，Ｉ’ｎがあるとする（任意のｋについて、Ｉｋ＝Ｉ’ｋである）。このとき、ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ）の出力は、複製もあわせて入力したｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ，Ｉ’１，Ｉ’２，Ｉ’３，．．．，Ｉ’ｎ）と等しい。つまり、各入力変数をそれぞれ２個ずつ入れても、出力は不変である。さらに、入力Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎの他に、もう一つの入力Ｉｘと、その反転！Ｉｘがあるとする。このとき、ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ，Ｉｘ，！Ｉｘ）の出力は、ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ）と等しい。つまり、入力変数とその反転を入力すると、多数決においてその入力変数の影響をキャンセルするように働く。多数決論理のこの性質を利用して係数０を実現する。
【０１０８】
具体的には、図９に示すように、ＸＯＲを利用して、係数のイネーブルを決めるビット（ＩＳ０など）の値により、多数決論理に、先に述べたスピン次状態の候補となる値の複製か、その反転を同時に入力する。例えば、ＩＳ０が０の場合、ＩＳ１の値と、ＩＳ１の反転の値が同時に多数決論理に入力されるので、外部磁場係数の影響は無い（外部磁場係数が０に相当する）ことになる。また、ＩＳ０が１の場合には、ＩＳ１の値と、その値と同じ値（複製）が同時に多数決論理に入力されることになる。
【０１０９】
上記の説明では、スピン及び各係数は２〜３値の値をとるため、多数決論理回路を用いて回路を実現している。しかし、前述のように基底状態探索の本質は、隣接スピンと相互作用係数の積、及び、外部磁場係数を評価した時に、正の値と負の値のどちらが支配的か判断することである。よって、スピンや各係数が多値の値をとる場合は、正と負の値それぞれの加算回路として実現することができる。
【０１１０】
（１−９）イジングモデルの基底状態探索における局所最適解の回避
（１−９−１）乱数発生器を用いる方法
前述したスピン間の相互作用によるエネルギー最小化で、適用されたイジングモデルの基底状態探索を実現することが出来るが、これだけでは局所最適解に陥ってしまう可能性がある。前述の論理回路８１０では基本的に、エネルギーを小さくする方向の動きしかないため、一旦局所最適解に陥るとそこから抜け出すことが出来ず、大域最適解に到達しない。そのため、局所最適解から脱出するために、所定の確率でエネルギーを大きくする遷移を許容する処理を取り入れる。
【０１１１】
本実施例では、スピンの値を仮想的な温度Ｔで決まる確率で反転させることにした。ここで温度Ｔは基底状態探索の過程を物理的なアニーリングに例えたものである。基底状態探索の初期では高い温度とし、徐々に温度を下げながら局所的な探索を行い、最終的に温度がゼロとなる状態まで冷却していく。
【０１１２】
図６を再度参照すると、本実施例では、スピンの値を所定確率で反転させるために、乱数発生器１５０と乱数発生クロック１６０を用いる。ビット調整器１５１は、基底状態探索の初期では高い確率でスピンの値を反転させ、終期では低い確率でスピンの値を反転させるように、乱数発生器１５０からの出力ビットを調整するものである。具体的には、乱数発生器１５０の出力から所定ビット数を取り出し、多入力のＡＮＤ回路またはＯＲ回路で演算することにより、基底状態探索の初期では１が多く、基底状態探索の終期では０が多く発生するように出力を調整する。
【０１１３】
図９において、ビット調整器１５１からの出力がＶＡＲである。ビット調整器出力ＶＡＲはアンプ８２１を通過し、反転論理回路８２０に入力される。論理回路８１０の出力は局所解であるスピンの値を出力するが、反転論理回路８２０でＶＡＲが１だった場合、スピンの値を反転させる。このようにして、スピンの値を格納するメモリセル７０１には、所定確率で反転された値が格納されることになる。
【０１１４】
ライン８２２は、複数のスピンユニット３００で単一の乱数発生器１５０とビット調整器１５１を共有するための構成であり、隣接するスピンユニットへビット調整器１５１出力を転送する。アンプ８２１は、ビット調整器１５１出力を分岐しても出力が落ちないようにするためのものである。
【０１１５】
なお、図６に示すように、イジングチップ１００内に乱数発生回路１５０を設けて各スピンユニットに乱数を配送して利用する他に、各スピンユニット３００内に乱数発生回路を設けても良い。また、イジングチップ１００の外に乱数発生回路を設けて、チップではチップ外からの乱数を配送するようにしても良い。
【０１１６】
（１−９−２）電源電圧を制御する方法
図６の例では、乱数発生器を用いたが、所定の確率でエネルギーを大きくする遷移を発生させる他の手段として、スピンを表現するメモリセルに供給する電源電圧を下げることで、メモリセルのビットエラーを誘発し、スピン配列をランダムに変化させる方法がある。
【０１１７】
そのための構成として、スピンユニット３００が有するメモリセルのうち、係数を保持するメモリセルは通常電源線で供給する電圧で動作させ、スピンを表現するメモリセルＮはスピン専用電源線で供給する電圧で動作させる。なお、メモリセル以外の構成要素、例えば相互作用を計算するための論理ゲート等は全て通常電源線で供給する電圧で動作する。
【０１１８】
メモリセルのビットエラーレートはメモリセルへの供給電圧に比例している。一般的にはメモリセルにこの１Ｖ程度の電圧を供給し、記憶内容の保持に適したビットエラーレートで用いる。この電圧から、電圧を下げていくと、電圧の下げ幅に比例してビットエラーレートも悪化していく。例えば、０．６Ｖ程度まで電圧を下げることで、１０−１程度のビットエラーレートになり、このようなビットエラーが発生しやすい状態を、局所最適解からの脱出に用いる。
【０１１９】
そのため、前述したスピンの値を格納するメモリセルＮは、例えば基底状態探索の初期では解空間をより広く探索することで局所最適解に陥らないようにするため、０．６Ｖなどの低い電源電圧をスピン用電源線に供給して、ランダムなビットエラーが生じる状況で相互作用による基底状態探索を行う。この状況では、基本的には相互作用によってエネルギーが小さい状態に遷移していくが、それと並行してビットエラーにより、状態がランダムに遷移していくことで、相互作用だけでは遷移しえない状態への遷移も発生し、解空間を広く探索することができる。基底状態探索の進行と共に、状態を安定させていくために、ビットエラーレートが起こりにくい状態へと少しずつ電圧を変化させていく。
【０１２０】
（１−１０）スピンユニット間の配線
図１５はスピンユニット間の相互作用を行う配線の一例を説明する図である。
【０１２１】
図１５は、図９で示したスピンユニットのインタフェースである、ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎの配線の例について示す。図１５は、ある１個のスピンユニットＮｘｙｚに注目した時に、図８に示すようなトポロジを図１３のように配置したスピンユニットで実現するために適した配線を示している。このような配線をスピンユニット毎に行うことで、図８のトポロジを回路上に実現することが出来る。
【０１２２】
（１−１１）動作シーケンス
図１６に、処理装置２００において、イジングチップ１００をＣＰＵ２１０が制御して基底状態探索を行う手順の概略を示す。
【０１２３】
ステップＳ１６００において、対象問題を表現するイジングモデルの相互作用係数と外部磁場係数を生成する。これは、最大カット問題の例で言えば、図３に示すような最大カット問題が与えられた時に、図４に示すイジングモデルを生成することである。
【０１２４】
ステップＳ１６０１では、スピン割当てマップを生成する。スピン割当てマップとは、解きたいイジングモデルを解く際に、イジングチップ１００にどのようにイジングモデルを割当てるか定義した情報である。例えば図４のイジングモデルを、図１４のような３次元格子に当てはめ、これを図１３のスピンアレイ上にマッピングし、図１２のようなメモリマップを生成する。
【０１２５】
ステップＳ１６０２で初期スピン配列を生成する。通常はスピンの初期値はランダムな値とする。
【０１２６】
ステップＳ１６０３では、メモリマップに基づいて、係数と初期スピン配列をスピンアレイに書き込む。
【０１２７】
ステップＳ１６０４では、相互作用アドレスを設定し、例えばスピンアレイの第１のグループと第２のグループを交互に指定する。
【０１２８】
ステップＳ１６０５では、同じくスピンアレイの第１のグループと第２のグループのためのクロックを生成する。
【０１２９】
ステップＳ１６０６では、相互作用アドレスと相互作用クロックに従って、スピンアレイの値を読み出し、次のスピンの状態を決定し、スピンを書き換える。このとき、前述のように局所解に陥らないように、所定確率でスピンをランダムに書き換える。
【０１３０】
ステップＳ１６０７で所定の回数相互作用計算を行った場合、ステップＳ１６０８でスピン配列を読み出す。このスピン配列が解となる。
【０１３１】
以上のような全体の制御は、図７に示した情報処理装置のＣＰＵ２１０が、ＲＡＭ２２０に格納されたソフトウェアに基づいて行うことができる。
【０１３２】
（１−１２）イジングモデルを表現するデータ構造と書式
図１７に、情報処理装置２００上でイジングモデルを表現するデータ構造の例を示す。イジングモデルは、問題定義１７００で定義され、相互作用係数を定義する相互作用定義部１７１０と、外部磁場係数を定義する外部磁場係数部１７２０とから構成される。
【０１３３】
相互作用定義部１７１０は、相互作用の元となるスピンを指定する識別子（例えば、スピンに一意な番号を付与して、それを識別子とする）、相互作用の先となるスピンの識別子、及び、相互作用係数を一組として、この組を相互作用の数だけ並べる。これは、グラフをコンピュータ上で扱う時のデータ構造である隣接リストに近い。ここでは、表現されているイジングモデルは、有向グラフとなっている。
【０１３４】
外部磁場係数定義部１７２０は、外部磁場を与えるスピンを指定する識別子と、外部磁場係数とを一組として、外部磁場係数の数だけ並べる。
【０１３５】
なお、相互作用定義部１７１０で定義されていないスピン間の相互作用係数や、外部磁場係数１７２０で定義されていないスピンへの外部磁場係数は０とする。つまり、デフォルト値は、相互作用係数の場合には当該スピン間には相互作用が存在しないことを示す０であり、外部磁場係数の場合いは当該スピンには外部磁場が存在しないことを示す０となる。
【０１３６】
図１８は、図１７のデータ構造のより具体的な表現形式、特にＨＤＤ２６０上でデータを保持する場合の書式（ファイルフォーマット）の一例を示す。図１８のデータ構造は、ＨＤＤ２６０上ではテキストファイルとして実現される。そのテキストファイルのフォーマットは、図１８において問題データ１８００として示すように、相互作用か外部磁場を識別するための識別子と、スピンの識別子及び係数とを並べたものである。
【０１３７】
（１−１３）解を表現するデータ構造と書式
図１９は、図１６のスピン配列読み出し（Ｓ１６０８）で読み出した、解または解候補となるスピン配列を示す解データを情報処理装置２００上で表現するデータ構造の例１９００と、そのＨＤＤ２６０上での書式の例とを示す。イジングモデルの解はスピン配列であることから、そのデータ構造は解１９００のようにスピンの識別子と、そのスピンの値とを一組にして並べたものになる。そして、全てのスピンについて省略無く値を書き出すという前提の元に、スピンの識別子を省略して、解データ１９２０のようにスピンの値だけを列挙したテキストファイルとしてＨＤＤ２６０上に保持することが出来る。
【０１３８】
（２）疑似的な量子アニーリングへの拡大
（２-１）量子ビットの表現方法
「（１）イジングチップの基本構成」で説明した構成では、スピンの上向きと下向きの状態を、１ビットのメモリセルで表現することができる。この構成では、シミュレーテッド・アニーリング（Simulated Annealing：SA）と呼ばれる概念において、温度に相当する遷移確率を、「（１−９）イジングモデルの基底状態探索における局所最適解の回避」で説明したスピンの所定確率での反転で模倣している。
【０１３９】
一方、量子揺らぎに類似した過程によって基底状態を探す方法として、量子アニーリング（quantum annealing: QA）が知られている。量子アニーリングは、元のハミルトニアンに外部パラメータを導入し、それを徐々に弱めることにより、元のハミルトニアンの安定状態を得る方法である。量子アニーリングでは、スピンの値は上向きと下向きが重ね合わせて存在する状態となる。すなわち、スピンは古典的な２値の値にはならず、量子力学的な振る舞いにより、上向きか下向きかが確定せずに、観測時に確率的に上か下かが観測されることになる。
【０１４０】
このような量子力学的スピン（量子スピン）の状態は、単純な２値の値をとらない量子ビットで表す必要があり、１ビットのメモリセルに当てはめることができない。量子ビットは２値とその重ね合わせの状態を持つことができる。しかも、その重ね合わせは単に０と１（２値を０と１とした場合。２値を−１と＋１というように見做すこともできる。）が半々というようなものにとどまらず、様々な確率を取りうる。しかし、量子ビットを実現するためには高度な物理システムが必要であり、また観測によって状態が確定してしまう（重ね合わせではなくなってしまう）ことから、外乱を抑止する様々な技術を要する。そのため、極低温で動作させるなど、特殊な動作環境を必要とするものが多い。
【０１４１】
図２０に、量子状態を単位球面上に表す表記法であるブロッホ球を示す。量子ビットの状態はブロッホ球の中で、ｘ、ｙ、ｚ方向に自由度を持ち、要素θ、φで規定される単位ベクトル２０００で表すことができる。ブロッホ球の球面上のどこを単位ベクトル２０００が指しているかによって、どのような重ね合わせの状態にあるかは異なる。
【０１４２】
図２１は、古典的な２値のスピンをとる状態であり、スピンは＋１と―１の状態しかとらない。これは、ブロッホ球上ではｚ軸上に単位ベクトルが固定されていることに相当する。ここで、イジングモデルで量子アニーリング的な動作を模倣するために、量子スピンの状態を表現する外部パラメータとして、横磁場の概念を導入する。横磁場は図２０のブロッホ球でｘ方向の力として表現することにする。
【０１４３】
図２２は、図２０のブロッホ球で、x方向の横磁場を導入して表現した量子スピンを表す。いま、横磁場を導入するためには、ｘ方向とｚ方向が定義できればよく、ｙ方向のパラメータは使用しないので、図２２はブロッホ球をｙ＝０（すなわちφ=0）の平面でカットした状態に相当する。
【０１４４】
図２３は、図２２でｘが正の値のみをとる場合の、量子スピンの状態を示す図である。横磁場は正の値しかとらないので、図２３の単位ベクトル２０００で表現されるスピン状態を、イジングチップ上で扱えるようにすればよい。そのためには、θやφで表わす方法、ｘｚ座標で表わす方法、単位ベクトルのｘ軸ないしz軸上の射影で表す方法等がある。例えば、単位ベクトルのz軸上の射影で表す方法によれば、図２３に示すように、スピン変数δは、＋１から−１までの任意の値をとることができる。また、その任意の値を量子化することで、イジングチップで扱いやすくすることができる。
【０１４５】
図２４は、量子スピンを3bitとして離散化した場合の概念を示す。3bitの符号付2進数で表現できる整数＋３〜−４のうち，＋３〜−３を使用しており、−４は未使用となっている。以上のように、量子スピンの状態は、疑似的に離散的な多値で表現でき、これはスピンが＋１、−１の値をとる期待値に相当する。
【０１４６】
以降の例では、イジングモデルを例にとって説明を行う。ただし、以下で説明される技術は、主体（例えばスピン）に多値の概念を導入し、さらに、多値概念の導入によっても相互作用モデルで表現される系を表す関数の計算を、問題なく実行できる装置および方法を提供する。このような、本発明はイジングモデルだけでなく、相互作用モデルの計算一般に適用が可能である。
【０１４７】
（２-２）係数の設定とスピン次状態の演算
本実施例では、イジングチップで量子アニーリング的な処理を実現する例を示す。
【０１４８】
（数３）はスピンと係数が２値をとる場合の、スピンの次状態決定の条件を示す。ここで、δn[t]は時刻ｔにおけるｎ番目のスピンの値である。Nは隣接スピンの集合であり、ｎ番目のスピンは隣接スピンに含まれるスピンである。Jijはi番目のスピンとj番目のスピンの間の相互作用係数である。ｈiはi番目スピンの外部磁場係数である。
【０１４９】
Fi[t]は時刻tにおけるi番目スピンの有効磁場を示す。この式は（数１）と等価である。計算されたFi[t]の値により次状態δi[t+1]が決定できる。(数３）の条件で行うスピンの次状態の決定は、図９で説明した回路で実現できる。
【０１５０】
【数３】
0005865456.tif 000004
【０１５１】
（数４）は、スピンの状態を離散的な多値で表し、量子アニーリング的な処理を実現する際の、スピンの次状態決定の条件を示す。δn[t]は時刻ｔにおけるｎ番目のスピンの値である。
【０１５２】
【数４】
0005865456.tif 000005
【０１５３】
ここで、スピンの値は多値をとるので、δn[t]は＋１から−１までの任意の実数をとる。N、Jij、ｈiの定義は（数３）と同様である。また、相互作用係数Jijと外部磁場係数ｈiは多値をとることにする。
【０１５４】
ri[t]は、i番目のスピンが時刻tに観測するランダムノイズである。α[t]は時刻tにおけるスケジュール係数である。γは横磁場係数であり、多値をとることにする。
【０１５５】
以上の係数を定義した上で、スピンの次状態は（数４）で求まる。図２３で説明したように、スピンの状態はｘ軸方向とｚ軸方向に成分を有するため、（数４）でもｘ方向の成分xi[t]とｚ方向の成分zi[t]を持つ。xi[t]は時刻ｔにおけるx方向の力を示し、zi[t]は時刻tにおけるｚ方向の力を示す。
【０１５６】
zi[t]の式は、基本的に（数３）のFi[t]同様の構成であるが、スケジュール係数としてα[t]を持っている。また、zi[t]は基本的に横磁場γで定まるが、係数として（１−α[t]）を持っている。
【０１５７】
図２５はスケジュール係数α[t]の例を示すグラフである。横軸に基底状態探索の時間（相互作用回数）を定義し、縦軸にα[t]（０〜１の値に正規化）を定義している。図２５ではα[t]が一次関数の例を示したが、これに限るものではない。二次関数でもよいし、曲線的に変化させてもよいし、段階的に変化してもよい。スケジュール係数α[t]は、次状態を決定する際に、x方向の力とz方向の力のどちらを支配的にするかを設定するものであり、通常は図２５に示すように、基底状態探索の初期に０、終期に１の値をとる。すなわち、（数４）のzi[t]は基底状態探索の初期に０、終期に絶対値で最大値をとる。また、１−α[t]は逆の傾きをとるので、（数４）のｘi[t]は基底状態探索の初期にγ、終期に０の値をとる。スケジュール係数の作用は、横磁場γを徐々に弱めることに相当し、量子アニーリング的な現象を模倣している。
【０１５８】
ランダムノイズri[t]は、スピンと係数の値が０をとり得る本実施例において、（数４）のzi[t]の右辺カッコ内の値が継続的にゼロにならないようにする。上述のように、基底状態探索の開始時にスケジュール係数α[t]は０をとるので、すべてのzi[t]は０になる。このため、すべてのδi[t+1]も０になり、すべてのスピンの値が０になる。次の相互作用であるzi[t+1]の計算時には、α[t]は０ではないが、スピンの値が０のため、外部磁場ｈiが０の条件では、ランダムノイズri[t]がないとzi[t+1]も０となり、この状態が最後まで続き解を得られない。そこで、外部磁場がない場合には、ランダムノイズri[t]を導入し、スピンの値が０の状態を脱出する。
【０１５９】
（２-３）量子アニーリングの模倣のためのイジングチップの構成
前述のように、本実施例では、スピンが上向き（＋１）と下向き（−１）の重ね合わせで存在する状態を利用し，重ね合わせの状態の段階は無制限である。観測時は確率的に＋１か−１が観測される。この状態に近い状態をモデル化するため、スピンを多値化する。すなわち、＋１と−１の間の中間的な値（離散化された多値）を用いて，スピンに働く力の段階を表現する。
【０１６０】
この状況をイジングチップで実現する構成を以下に説明する。基本的な構成は、「（１）イジングチップの基本構成」を踏襲するので、異なる部分について説明する。
【０１６１】
図２６は量子アニーリングを模倣するイジングチップのブロック図である。基本構成は図６に示したものと同様であるが、乱数発生器１５０、ビット調整期１５１、乱数発生クロック１６０が省略されている。これらは、シミュレーテッド・アニーリングにおいて、スピンの遷移確率を調整するための構成であった。量子アニーリングにおいては、この代わりにランダム性制御インタフェース２６００を備えている。ランダム性制御インタフェース２５００は、スケジュール制御信号（ＡＴ）、ランダムパルス列（ＲＳ）、ランダム効果制御信号（ＲＥ）の入力を含む。ここで、スケジュール制御信号（ＡＴ）は、(数４）のスケジュール係数α[t]に対応するものである。ランダムパルス列（ＲＳ）は（数４）のランダムノイズri[t]に対応するものである。ランダム効果制御信号（ＲＥ）は、ランダムノイズri[t]の適用を制御する。
【０１６２】
図２７は図２６のスピンアレイ１１０内のスピンユニット３００を示すブロック図である。各スピンユニット３００には、ランダム性制御インタフェース２５００の、スケジュール制御信号（ＡＴ）、ランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）の信号が配給されている。これらの信号線は独立に構成されているが、便宜上１本の線で示している。スピンユニット３００には「Ｎ０００」等のＩＤと、Ａ，Ｂの符号が付されている。ＡとＢは、隣接するスピンが同時に書き換えられないように、相互作用アドレスデコーダ１４０で交互に相互作用が実行される、グループの別を示している。
【０１６３】
図２８は、図２７のスピンユニットに入力されるランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）を示している。相互作用アドレス１８０と相互作用クロック１８１は、スピンユニットのＡとＢのグループに、交互に相互作用を生じさせる。この構成は、図６と同様である。ランダムパルス列ri[t]（ＲＳ）は、１ビットに限るものではないが、本例では＋１と−１の値をとる１ビットパルスとした。この信号は通常の乱数発生器で生成することができる。ランダム効果制御信号（ＲＥ）は、この信号がHIGHの間、ランダムパルス列ri[t]（ＲＳ）を有効にし、LOWの間無効にする。ランダムパルス列ri[t]が無効な間はri[t]の値は０になり、有効な間はri[t]の値は、＋１または−１のランダムな値をとる。通常は、基底状態探索の初期において、ランダムパルス列ri[t]を有効とする。
【０１６４】
図２９は、相互作用アドレス１８０、相互作用クロック１８１、およびスケジュール制御信号（ＡＴ）の関係を示す。図２９では、ＡＴ（１）とＡＴ（２）の２種類の例を示した。スケジュール制御信号（ＡＴ）は、図２５に示したように、暫時値が増加する信号であるが、ＡＴ（１）とＡＴ（２）の例では、クロックに同期して段階的に増加する信号としている。例えば、信号ＡＴ（１）では、１クロックサイクルで１ずつ値が増加しており、信号ＡＴ（２）では、２クロックサイクルで２ずつ値が増加している。ここで、信号ＡＴの最大値をＡＴmaxとしたとき、スピンユニット３００内で（数４）の演算に用いるαは、
α ＝ ＡＴ／ＡＴmax
となる。
【０１６５】
スケジュール制御信号（ＡＴ）の値の増加幅や増加頻度は任意であるが、解くべき問題の内容や、解の精度、処理時間を考慮して設定すればよい。
【０１６６】
（２-４）量子アニーリングの模倣のためのスピンユニットの構成
図３０に図２７のスピンユニット３００の一例を示す。
【０１６７】
入力としては、隣接スピンであるＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦからはスピンの値を示す値が、スピン次状態演算回路３０００に入力される。また、スケジュール制御信号（ＡＴ）、ランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）の信号が、スピン次状態演算回路３０００に入力される。
【０１６８】
イネーブル信号（ＥＮ）は、相互作用アドレス１８０によって制御され、相互作用によるスピンの書き換えを許容／禁止する。
【０１６９】
メモリセルであるＮＩＵ，ＮＩＬ，ＮＩＲ，ＮＩＤ，ＮＩＦには相互作用係数Jijが格納されている。メモリセルＮＩＳは外部磁場係数hiを格納し、メモリセルＮＩＸは横磁場係数γを格納する。また、メモリセルＮはスピンの値を格納する。図３０の例では、係数を格納するメモリセルはｍビット幅の符号付数値を格納するものとし、スピンを格納するメモリセルは、ｎビット幅の符号付数値を格納するものとした。例えば、上位１ビットが正負の符号を表し、下位ビットが数値（絶対値）を表すものとする。
以上の係数はスピン次状態決定回路３０００に入力される。スピンの値は隣接するスピンユニットの入力となる。
【０１７０】
スピン次状態演算回路は、（数４）に示す演算を行い、スピンの次状態であるδi[t+1]を出力する。出力は、マルチプレクサ３０１０の入力となり、イネーブル信号（ＥＮ）が１のときはメモリセルＮのスピンの値を書き換える。イネーブル信号（ＥＮ）が０のときはメモリセルＮのスピンの値は書き換えられない。
【０１７１】
（２−５）全体システムおよび処理フロー
疑似的な量子アニーリングによって基底状態を探索するイジングチップにおいても、基本的な全体システムは、図７に示したものと同様である。また、処理フローは、図１６に示したものと同様である。
【０１７２】
以下、疑似的な量子アニーリングに特有の点について、図１６と図７を参照して捕捉説明する。
【０１７３】
図１６は、処理装置２００において、イジングチップ１００をＣＰＵ２１０が制御して基底状態探索を行う手順の概略である。解くべき問題のデータはＨＤＤ２６０に格納される。各処理は、ＲＡＭ２２０に格納されＣＰＵ２１０で実行されるプログラムで実行される。このとき必要な情報をユーザが入力してもよい。また、情報処理装置２００はネットワークインターフェースを介して外部のサーバ等に接続が可能であり、当該サーバのリソースを適宜利用できるように構成してもよい。
【０１７４】
ステップＳ１６００において、対象問題を表現するイジングモデルの相互作用係数、外部磁場係数、および横磁場係数を生成する。本実施例においては、相互作用係数、外部磁場係数、および横磁場係数は多値をとり得るものとする。横磁場係数γは各スピンユニット共通の値でもよい。
【０１７５】
ステップＳ１６０１では、スピン割当てマップを生成する。本実施例でも図１２のようなメモリマップを生成すればよいが、数値を格納するメモリセルは多値を格納可能なメモリセルである。なお、横磁場係数γが各スピンユニット共通の場合は、横磁場係数を格納するメモリセルは省略可能であり、イジングチップの外部から入力することができる。
【０１７６】
ステップＳ１６０２で初期スピン配列を生成する。本実施例では、基底状態探索の最初の段階では、スピンの値は影響しないので、数値はすべて同じ値でもよいが、通常はスピンの初期値はランダムな値とする。
【０１７７】
ステップＳ１６０３では、メモリマップに基づいて、係数と初期スピン配列をスピンアレイに書き込む。
【０１７８】
ステップＳ１６０３以降で、疑似的な量子アニーリング特有の処理について、以下に説明する。外部磁場係数が０の場合とそうでない場合で、処理が異なる。
【０１７９】
（２−５−１）ひとつでも外部磁場係数を持つ（０でない）スピンがある場合
以下で、ひとつでも外部磁場係数を持つ（０でない）スピンがある場合のフローを説明する。ただし、以下の例では、０でないスピンが１つでもあるか否かでフローの選択を判断するが、０であるスピン数が所定数（閾値）以下か否かでフローの選択を判断してもよい。
【０１８０】
図３１に、図１６のステップＳ１６０３以降の変更点を含めたフローを示す。図１６と同じ符号は基本的に同じ処理である。
【０１８１】
ステップＳ３１００では、スケジュール係数α[t]の値を０にセットする。スケジュール係数α[t]は、スケジュール制御信号（ＡＴ）としてスピンユニットに供給される。
【０１８２】
ステップＳ１６０４では、相互作用アドレスを設定し、例えばスピンアレイの第１のグループと第２のグループを交互に指定する。
【０１８３】
ステップＳ１６０５では、同じくスピンアレイの第１のグループと第２のグループのためのクロックを生成する。
【０１８４】
ステップＳ１６０６では、相互作用アドレスと相互作用クロックに従って、スピンアレイの値を読み出し、次のスピンの状態を決定し、スピンを書き換える。このとき、本実施例では図６の例のように、所定確率でスピンをランダムに書き換えることはせず、スケジュール制御信号（ＡＴ）による制御を行う。
【０１８５】
スケジュール制御信号（ＡＴ）は、エネルギー関数の計算時に用いる横磁場係数γの重みを制御する信号である。これにより、横磁場係数の、エネルギー関数の計算における影響を変化させることができる。図３０と（数４）の例では、横磁場係数γはスピンユニット内のメモリセルに格納され、スケジュール制御信号（ＡＴ）によって決まる（１−α[t]）が乗算されるが、これに限るものではない。また、横磁場係数γが各スピンユニットで共通であれば、横磁場係数γはスピンユニット内のメモリセルに格納する必要はなく、スケジュール制御信号（ＡＴ）そのものとして配給することもできる。
【０１８６】
ステップＳ１６０７では、相互作用計算の数をカウントする。所定の回数を実行していない場合は、再度相互作用計算を実行する。所定回数実行した場合は、ステップＳ３１０１でスケジュール係数に増分を加算する。（表１）に、Ｓ１６０７の分岐条件である所定回数の例を示した。この例ではスケジュール係数は０.２ずつ増分し、最大値は１である。(表１）の例では、初期値０を設定したスケジュール係数は、相互作用を１００回行うと、Ｓ３１０１で０．２が加算され、スケジュール係数は０.２になる。スケジュール係数０.２で、さらに相互作用を１００回行うと、Ｓ３１０１で０．２が加算され、スケジュール係数は０.４になる。スケジュール係数は、ランダム性制御インタフェース２５００の、スケジュール制御信号（ＡＴ）で制御できるので、全てのスピンユニットの論理回路で共通して用いることができる。
【０１８７】
スケジュール制御信号は（表１）のように、係数そのものを示すものでもよいし、タイミングのみを示す信号として、スピンユニット内で、タイミングに合わせて所定値（例えば０．２）を加算する構成としてもよい。
【０１８８】
【表１】
0005865456.tif 000006
【０１８９】
Ｓ３１０２では、スケジュール係数が最大値を超えたかどうかをチェックする。最大値が１の場合は、これを超えるまでは相互作用を継続し、これを超えた場合は、ステップＳ１６０８でスピン配列を読み出す。（表１）の例では、スケジュール係数が１.２になった場合、スピン配列を読み出す。
【０１９０】
読み出されるスピンの値は＋１または−１の２値ではなく、通常中間の値をとる。これはスピンの値の期待値に相当するが、解としては＋１または−１に決めなければならないので、スピンの値が０より大きければ当該スピンの値を＋１とし、０より小さければ当該スピンの値を−１として出力する。０であれば、当該スピンの値はランダムに決めて出力する。このスピン配列が解となる。
【０１９１】
なお、上記のすべてのスピンに対して外部磁場係数がある場合には、ランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）の信号は用いない。
【０１９２】
以上の制御は、ＲＡＭ２２０に格納される問題変換プログラムやイジングチップ制御プログラムを、ＣＰＵ２１０が実行することにより行われる。（表１）のような設定は、プログラムに内蔵していてもよいし、ユーザが外部から入力してもよい。
【０１９３】
（２−５−２）すべてのスピンの外部磁場係数がない（０である）場合
次に、すべてのスピンの外部磁場係数がない（０である）場合のフローを説明する。先に説明したように、外部磁場係数を持たないスピンはゼロのまま変化しないので、疑似的な外部磁場としてランダム効果制御を行う。
【０１９４】
この場合のフローは基本的に図３１と同様である。ただし、以下が異なる。
【０１９５】
Ｓ３１００で、スケジュール係数を０に設定するとともに、ランダム効果制御信号（ＲＥ）をイネーブルする。この設定により、その後の相互作用計算（数４）においては、ランダムパルス列（ＲＳ）のランダムノイズ係数ri[t]が有効となる。図２８の例によると、ri[t]は＋１か−１の１ビット値をランダムにとるが、多ビット化してもよい。
【０１９６】
Ｓ３１０１で、スケジュール係数に増分を加算するとともに、相互作用の所定回数の実行を条件に、ランダム効果制御信号（ＲＥ）をディセーブルする。この設定により、その後の相互作用計算（数４）においては、ランダムパルス列（ＲＳ）のランダムノイズ係数ri[t]は無効、すなわち０となる。ランダムノイズは、スピンがゼロのまま変化しないことを防止するための一種の外乱なので、相互作用を所定回数行った基底状態探索の終盤では、無効にすることが望ましい。
【０１９７】
（表２）にランダム効果制御の一例を示す。この例では、相互作用が３００回まではランダム効果制御信号（ＲＥ）はイネーブル（ＥＮ）され、３０１回以降ディセーブル（ＤＳ）される。図２８で示したランダム効果制御信号（ＲＥ）の例だと、イネーブル（ＥＮ）は（ＨＩＧＨ）で、ディセーブル（ＤＳ）は（ＬＯＷ）の信号だが、ランダムノイズ係数を制御できるものであれば、これに限られない。ランダム効果制御信号（ＲＥ）とランダムパルス列（ＲＳ）は、各スピンユニットで共通して用いることができ、このために、ランダム性制御インタフェース２６００を用いることができる。（表２）の例では、ランダム効果制御をスケジュール係数の制御と連動させたが、図２７に示すように、各信号線を独立に構成し、其々独立に制御してもよい。
【０１９８】
【表２】
0005865456.tif 000007
【０１９９】
（２−５−３）すべてのスピンの外部磁場係数がない（０である）場合（例２）
次に、すべてのスピンの外部磁場係数がない（０である）場合の別のフローを説明する。
【０２００】
この場合のフローは基本的に図３１と同様である。ただし、以下が異なる。  
Ｓ１６０３で、係数を書き込む際に、外部磁場係数がない（０である）スピンについては、外部磁場係数をランダムに設定し、外部磁場係数hiの値を書き込んでおく。すなわち、外部磁場係数がないスピンについては、ダミーの外部磁場が書き込まれることになる。なお、外部磁場係数を書き込むメモリは、図３０のＮＩＳで示すメモリである。メモリの書き込み・書換えは、ＳＲＡＭ互換インタフェースで行うことができる。
【０２０１】
Ｓ３１０１で、スケジュール係数に増分を加算するとともに、相互作用の所定回数の実行を条件に、外部磁場係数がないスピンのダミーの外部磁場を０に書き換える。この設定により、外部磁場係数がないスピンは本来の状態に戻る。ダミーの外部磁場は、スピンがゼロのまま変化しないことを防止するための一種の外乱なので、相互作用を所定回数行った基底状態探索の終盤では、ゼロにすることが望ましい。
【０２０２】
（表３）にダミーの外部磁場制御の一例を示す。この例では、相互作用が３００回までは外部磁場係数がないスピンに、ダミーの外部磁場（random）が付加されている。３０１回以降は、ダミーの外部磁場を０にするために、メモリの値が０に書き換えられる。このような制御は、ランダム性制御インタフェース２５００を用いて行うことができる。（表３）の例では、外部磁場係数の書換えをスケジュール係数の制御と連動させたが、其々独立に制御してもよい。独立に制御する場合は、外部磁場を制御するための配線を、図２７の配線に追加する必要がある。
【０２０３】
【表３】
0005865456.tif 000008
【０２０４】
なお、上記の場合には、ランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）の信号は用いないでよい。
【０２０５】
（２-５-４）システム構成
実際に問題を解く場合、外部磁場係数が０のものがあるかどうかは、係数を生成する段階（図１６のＳ１６００）で判明するので、この時点でひとつでも外部磁場係数を持つ（０でない）スピンがある場合のフロー（２−５−１）か、すべてのスピンの外部磁場係数がない（０である）場合のフロー（（２−５−２）または（２−５−３））に分岐すればよい。ハードウェア構成としては、（２−５−２）の例では、ランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）用の配線が必要である（図２７参照）。（２−５−３）の例では、ランダムパルス列（ＲＳ）およびランダム効果制御信号（ＲＥ）用の配線は不要であるが、外部磁場係数が０のメモリセルを検出する機能、および、そのメモリセルの値をランダムと０の間で切り替える手段が必要である。これらは、イジングチップ制御プログラムでソフトウェア的に実現することができる。
【０２０６】
図１６と図３１で説明した基底状態探索は複数回の相互作用計算で実行され、一つの解が得られる。この解は、実際には基底状態の近似解となるので、より精度の高い結果を得るためには、基底状態探索を複数回行い、もっとも、エネルギーが小さくなった解を最終的な解とすればよい。
【０２０７】
（２−６）データの関係
（表４）にスピンの値と、スピンの値を示すメモリセルＮに格納される多値データ、および解の関係を示す。イジングモデルの量子スピンの状態は本来＋１と−１しか取れず、その間の値は＋１と−１の重ね合わせの状態となる（＃１）。このスピンの値を、図３０のメモリＮ７０１にn-ビット幅（符号付数値）として、例えば図２４の３ビットの補数表現で表すと、＋３〜−３の多値データとなる（＃２）。これは、スピン状態に換算すると＋１、−１およびその中間の値となる（＃３）。基底状態探索終了時、このスピン状態δiが得られるので、解としては、これを＋１または−１のいずれかに変換する（＃４）。このように本発明では、スピンの＋１と−１の重ね合わせの状態を、データとして＋１と−１の間の離散的な多値で表現している。なお、多値データＮは、多値で表されたスピン状態と対応が取れるものであれば、（表４）の例に限るものではない。
【０２０８】
【表４】
0005865456.tif 000009
【０２０９】
以上の構成は、単体のコンピュータで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。発明の思想としては等価であり、変わるところがない。
【０２１０】
本実施例中、ソフトウエアで構成した機能と同等の機能は、FPGA（Field Programmable Gate Array）、ASIC（Application Specific Integrated Circuit）などのハードウエアでも実現できる。そのような態様も本願発明の範囲に含まれる。
【０２１１】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【０２１２】
１００，１００−１，１００−２ イジングチップ
１１０ スピンアレイ
１２０ Ｉ／Ｏドライバ
１３０ Ｉ／Ｏアドレスデコーダ
１４０ 相互作用アドレスデコーダ
１８０ 相互作用アドレス
１８１ 相互作用クロック
１９０ アドレスバス(ＳＲＡＭ互換インタフェース)
１９１ データバス(ＳＲＡＭ互換インタフェース)
１９２ Ｉ／Ｏクロック(ＳＲＡＭ互換インタフェース)
１９３ Ｒ／Ｗ制御線(ＳＲＡＭ互換インタフェース)
２００ 情報処理装置
２１０ ＣＰＵ
２２０ ＲＡＭ
２３０ システムバス
２５０ イジングチップコントローラ
２６０ ＨＤＤ
３００ スピンユニット
４１０ ビット線
４２０ ワード線
Ｎ スピンを表現するメモリセル、及び、スピンの値を出力するインタフェース
【要約】
【目的】イジングモデルの基底状態を求めるために基本構成単位となる構成要素をアレイ状に配置した半導体装置で、量子スピンの状態を疑似的に表現する構成の応用例を実現する。
【構成】
イジングモデルの１つのスピンを３以上の状態で表現する値を記憶する第１のメモリセルと、１つのスピンに相互作用を及ぼす他のスピンからの相互作用を示す相互作用係数を記憶する第２のメモリセルと、他のスピンの状態を表現する値と前記相互作用係数を定数または変数として持つ関数に基づいて、１つのスピンの次状態を決定する論理回路と、を有する単位ユニットを複数備える半導体装置が開示される。
【選択図】  図３０【図１】
0005865456.tif 000010
【図２】
0005865456.tif 000011
【図３】
0005865456.tif 000012
【図４】
0005865456.tif 000013
【図５】
0005865456.tif 000014
【図６】
0005865456.tif 000015
【図７】
0005865456.tif 000016
【図８】
0005865456.tif 000017
【図９】
0005865456.tif 000018
【図１０】
0005865456.tif 000019
【図１１】
0005865456.tif 000020
【図１２】
0005865456.tif 000021
【図１３】
0005865456.tif 000022
【図１４】
0005865456.tif 000023
【図１５】
0005865456.tif 000024
【図１６】
0005865456.tif 000025
【図１７】
0005865456.tif 000026
【図１８】
0005865456.tif 000027
【図１９】
0005865456.tif 000028
【図２０】
0005865456.tif 000029
【図２１】
0005865456.tif 000030
【図２２】
0005865456.tif 000031
【図２３】
0005865456.tif 000032
【図２４】
0005865456.tif 000033
【図２５】
0005865456.tif 000034
【図２６】
0005865456.tif 000035
【図２７】
0005865456.tif 000036
【図２８】
0005865456.tif 000037
【図２９】
0005865456.tif 000038
【図３０】
0005865456.tif 000039
【図３１】
0005865456.tif 000040