(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-01
(45)【発行日】2023-09-11
(54)【発明の名称】情報処理装置および情報処理方法
(51)【国際特許分類】
G06N 99/00 20190101AFI20230904BHJP
【FI】
G06N99/00 180
(21)【出願番号】P 2019162856
(22)【出願日】2019-09-06
【審査請求日】2022-07-25
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(73)【特許権者】
【識別番号】504173471
【氏名又は名称】国立大学法人北海道大学
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】メティック ノーマン
(72)【発明者】
【氏名】竹本 享史
(72)【発明者】
【氏名】高前田 伸也
(72)【発明者】
【氏名】山本 佳生
(72)【発明者】
【氏名】本村 真人
(72)【発明者】
【氏名】坂井 哲
(72)【発明者】
【氏名】寺本 央
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2018-063626(JP,A)
【文献】特開2016-051349(JP,A)
【文献】米国特許出願公開第2016/0260013(US,A1)
【文献】内藤有紀 ほか,"イジングモデルによる求解における更新方法の性能の検討",電子情報通信学会技術研究報告,Vol.118,No.296,一般社団法人電子情報通信学会,2018年11月05日,p.19-24,MSS2018-37
【文献】PRA, Paolo Dai et al.,"Sampling from a Gibbs measure with pair interaction by means of PCA",arXiv [online],2012年01月,[2023年05月18日検索],インターネット<URL:https://arxiv.org/abs/1201.5756v1>,1201.5756v1
(58)【調査した分野】(Int.Cl.,DB名)
G06N 99/00
G06N 10/00-10/80
(57)【特許請求の範囲】
【請求項1】
アニーリング制御部と、スピン相互作用メモリと、乱数生成部と、スピン状態更新部を備え、イジングモデルを用いて解を求める情報処理装置であって、
前記アニーリング制御部は、アニーリングのステップを制御するとともに、温度のパラメータと自己作用のパラメータを制御し、
前記スピン相互作用メモリは、スピンの相互作用係数を記憶し、
前記乱数生成部は、所定の乱数を生成し、
前記スピン状態更新部は、
複数のスピンの値を記憶するスピンバッファと、
複数のスピンの瞬間磁場を計算する瞬間磁場計算部と、
複数のスピンの更新確率を計算する確率計算部と、
前記更新確率と前記乱数に基づいてスピンの値の更新を行うスピン状態決定部と、
を備える、情報処理装置。
【請求項2】
前記スピン状態更新部は、
複数のスピンの瞬間磁場を並列的に計算する複数の瞬間磁場計算部と、
複数のスピンの更新確率を並列的に計算する複数の確率計算部と、
前記更新確率と前記乱数に基づいて複数のスピンの値の更新を並列的に行う複数のスピン状態決定部と、
を備える、
請求項1記載の情報処理装置。
【請求項3】
アニーリングのステップの開始前において、前記瞬間磁場は、前記スピンの値と、外部磁場係数と、前記相互作用係数とに基づいて、初期設定され、
前記瞬間磁場計算部は、
前記アニーリングのステップの進行に伴って前記瞬間磁場の値を更新する、
請求項2記載の情報処理装置。
【請求項4】
前記瞬間磁場計算部は、
瞬間磁場の値を格納する瞬間磁場レジスタを備え、
前記アニーリングのステップの進行に伴って前記瞬間磁場の値を更新する際に、直前のアニーリングのステップで変更されたスピンに関し、スピンの値と当該スピンに関する相互作用係数と、前記瞬間磁場レジスタに格納されている更新前の瞬間磁場の値を用いて、当該スピンの更新後の瞬間磁場を計算する、
請求項3記載の情報処理装置。
【請求項5】
反転スピンバッファと反転スピン選択回路を備え、
前記スピン状態決定部は、
前記アニーリングのステップの進行に伴って、スピンの値の更新を行う際に、更新したスピンの値と更新したスピンを特定する反転フラグを前記反転スピンバッファに格納し、
前記反転スピン選択回路は、
前記更新したスピンの値を前記瞬間磁場計算部に送り、前記反転フラグに基づいて更新したスピンを特定する情報を前記スピン相互作用メモリに送り、
前記スピン相互作用メモリは、
前記更新したスピンを特定する情報に基づいて、当該スピンに関連する相互作用係数を、前記瞬間磁場計算部に送る、
請求項4記載の情報処理装置。
【請求項6】
前記スピン状態決定部は、
所定の関数と前記所定の乱数とを比較して、比較結果に基づいて前記スピンを反転させて更新するか、あるいは、スピンの状態を保持するかを決定する、
請求項2記載の情報処理装置。
【請求項7】
前記所定の関数は、シグモイド関数を線形近似した関数である、
請求項6記載の情報処理装置。
【請求項8】
前記アニーリング制御部は、
前記温度のパラメータとして2Tの値を制御し、前記自己作用のパラメータとしてqTの値を制御し、
前記乱数生成部は、
-2Tから2Tの間の値を持つ乱数を生成し、
前記所定の関数は、スピンの値と、瞬間磁場と、qTを引数とする、
請求項6記載の情報処理装置。
【請求項9】
前記自己作用のパラメータは、最後のアニーリングのステップで最大値を取る、
請求項1記載の情報処理装置。
【請求項10】
前記反転スピン選択回路は、
所定のアニーリングのステップにおいて、全ての前記更新したスピンの値を前記瞬間磁場計算部に送り、前記反転フラグに基づいて更新した全てのスピンを特定する情報を前記スピン相互作用メモリに送ると、ステップ終了信号を前記アニーリング制御部に送り、
前記アニーリング制御部は、
前記ステップ終了信号を受けると、アニーリングのステップを1進めるとともに、温度のパラメータと自己作用のパラメータを更新する、
請求項5記載の情報処理装置。
【請求項11】
前記スピン相互作用メモリとして、第1のスピン相互作用メモリと第2のスピン相互作用メモリを備え、
前記スピン状態更新部として、第1のスピン状態更新部と第2のスピン状態更新部を備え、
前記第1のスピン状態更新部は、第1の瞬間磁場計算部と第1の反転スピンバッファと第1の反転スピン選択回路を備え、
前記第2のスピン状態更新部は、第2の瞬間磁場計算部と第2の反転スピンバッファと第2の反転スピン選択回路を備え、
前記第1の瞬間磁場計算部は、前記第1のスピン相互作用メモリと前記第2のスピン相互作用メモリから相互作用係数を受信し、前記第1の反転スピンバッファと前記第2の反転スピンバッファからスピンの値を受信し、
前記第2の瞬間磁場計算部は、前記第1のスピン相互作用メモリと前記第2のスピン相互作用メモリから相互作用係数を受信し、前記第1の反転スピンバッファと前記第2の反転スピンバッファからスピンの値を受信し、
前記アニーリング制御部は、
前記第1の反転スピン選択回路からの第1のステップ終了信号と、前記第2の反転スピン選択回路からの第2のステップ終了信号との両方を受け取ると、アニーリングのステップを1進めるとともに、温度のパラメータと自己作用のパラメータを更新する、
請求項10記載の情報処理装置。
【請求項12】
請求項1記載の情報処理装置を実装した半導体チップを複数備え、複数の前記半導体チップの間で、スピン相互作用メモリの相互作用係数とスピンの値を共有する、
情報処理装置。
【請求項13】
複数のスピンをグルーピングし、1つのグループの中のスピンは、当該グループのスピンの値の多数決で定まる値に統一する、
請求項1記載の情報処理装置。
【請求項14】
アニーリング制御部と、スピン相互作用メモリと、乱数生成部と、スピン状態更新部を備える情報処理装置により、イジングモデルを用いて解を求める情報処理方法であって、
前記アニーリング制御部は、アニーリングのステップを制御するとともに、温度のパラメータと自己作用のパラメータを更新し、
前記スピン相互作用メモリは、スピンの相互作用係数を記憶し、
前記乱数生成部は、所定の乱数を生成し、
前記スピン状態更新部は、前記アニーリングのステップ毎に、
前記相互作用係数を用いて複数のスピンの瞬間磁場を並列的に計算し、
前記瞬間磁場を用いて複数のスピンの更新確率を並列的に計算し、
前記更新確率と前記乱数を用いて複数のスピンの値を並列的に更新し、
前記瞬間磁場の計算に用いる前記相互作用係数は、直前のアニーリングのステップで更新されたスピンに係る相互作用係数である、
情報処理方法。
【請求項15】
前記温度のパラメータを2Tとし、
前記自己作用のパラメータをqTとし、
前記所定の乱数は-2Tから2Tの間の値を取り、
前記更新確率は前記瞬間磁場の値あるいは前記瞬間磁場の符号を反転した値に前記qTを加えた値である、
請求項14記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理技術、特に最適解の探索を行うアルゴリズムとしてアニーリングを採用する技術に関する。
【背景技術】
【0002】
最適解の探索を行う汎用アルゴリズムとしてアニーリングが知られている。アニーリングマシンはアニーリングを実行し近似最適解を出力する専用の装置である(例えば特許文献1~5、非特許文献2参照)。アニーリングマシンでは汎用的に問題を受け付け可能な計算モデルとして、イジングモデルを用いている。アニーリングマシンはイジングモデルのパラメータを入力として持つ。そのためアニーリングマシンのユーザは解きたい問題をイジングモデルに変換する必要がある。
【0003】
図1Aは、イジングモデルのエネルギーランドスケープの概念図を示す。横軸にスピンの状態(スピン配列)、縦軸にそのスピン配列におけるエネルギー関数をプロットしたものである。イジングモデルは、与えられたスピン配列、相互作用係数、および、外部磁場係数で構成される。イジングモデルのエネルギー関数H(σ
i)(一般にハミルトニアンと呼ばれる)は
図1Aに示すとおりである。σ
i、σ
jはそれぞれi番目とj番目のスピンの値で、通常上向きまたは下向きの2値をとる。J
ijはi番目とj番目のスピンの間の相互作用係数、h
iはi番目のスピンに対する外部磁場係数を表わす。E、Vは制約条件を示す。
【0004】
確率的な遷移では、スピンの状態は現在の状態σの近傍のある状態σ’へ確率的に遷移を繰り返す。状態σから状態σ’へ遷移する確率を、遷移確率P(σ,σ’)と呼ぶ。遷移確率としてメトロポリス法やギブス法などが知られている(特許文献2、3、5参照)。一般に温度Tと呼ばれるパラメータにより、遷移確率を調整する。
【0005】
近傍の状態σ’を生成する方法として、現在の状態σから一つのスピンの値を更新することが一般的である。更新するスピンを一つずつ順番に変えることで、スピン全体の探索を行う。温度Tを大きな値から徐々に減少させつつ遷移を実行するとき、エネルギーは局所解を経由して、エネルギーが最も低い状態(基底状態)に漸近的に収束する。これにより最小化問題の最適解または近似解を求める手法は、シミュレーティッド・アニーリング法(SA法)として知られる。
【0006】
図1Bに、イジングモデルにおけるスピンの更新の概念を示す。イジングモデルとして問題をモデル化する場合、疎グラフと完全グラフの区別がある。図左側に示す疎グラフは、一つのノード(スピン)が限定された一部のノードとのみ接続されているモデルである。図中の上または下を向いた矢印がスピンの向きを示している。疎グラフでは同時に複数スピンを更新することができる(並列更新)。しかし、疎グラフでは結合されるノードの数に制限があるために、処理性能を向上させることが難しい。
【0007】
一方、図右側に示す完全グラフは、一つのノードが他の全てのノードと接続されているモデルである。完全グラフでは、ノードは互いに相互作用(図中jの文字と添え字で示す)を及ぼしあっているので、複数スピンを同時に更新することができない。そこで、SA法では例えばノードを2つに分け、ひとつずつ更新する方式をとる(図右側中段。「単一更新(非並列)」)。しかし、これでは処理時間がかかるため、
図1B中の式で示されるように、スピン更新は並列ではないが、瞬間磁場(mean field、cavity field、局所場などとも呼ばれる)を並列更新して、高速化する手法が提案されている(特許文献2~5、非特許文献2参照)。なお、図中h
iとオーバーラインで示す瞬間磁場を、明細書等ではIh
iで示す。
【先行技術文献】
【特許文献】
【0008】
【文献】国際公開WO2015-132883
【文献】特開2019-16077号公報
【文献】特開2019-16129号公報
【文献】特開2019-71113号公報
【文献】特開2019-87273号公報
【非特許文献】
【0009】
【文献】”Sampling from a Gibbs Measure with Pair Interaction by Means of PCA”, Paolo Dai Pra et. Al., J Stat Phys (2012) 149:722-737 DOI 10.1007/s10955-012-0612-9
【文献】”An accelerator architecture for combinatorial optimization problems”, Sanroku Tsukamoto et. Al., Fujitsu Sci. Tech. J., Vol. 53, No. 5 (September 2017)
【発明の概要】
【発明が解決しようとする課題】
【0010】
図2に、発明者らが特許文献2~5、非特許文献2を検討して整理した、従来の最適解求める手順を示した。前提として、既に最適化問題は完全グラフの形でモデル化されているものとする。
【0011】
処理S201はデータの初期化である。初期アニーリングステップと最大ステップ(t_max)を設定し、スピンの更新を何回繰り返すかを設定する。逆温度β(=1/T)を初期値β0に設定する。モデルが含むN個のスピン(ノード)σのそれぞれに対してランダムに初期状態を設定する。スピンの値は2値であればよいが、ここではプラス1とマイナス1とする。各ノードに対して外部磁場係数hiを定め、各ノード間の相互作用係数jijを定める。瞬間磁場Ihi=hi+Σj=1~Nσjjijを求める。スピンの反転を示す反転フラグFと反転したスピンを指定する反転インデクスjを初期値0に設定する。これらのデータは、モデルに基づいて定め、アニーリングマシンに設定される。アニーリングマシンの具体的な構成については、特許文献1~5、非特許文献2に記載がある。次に、処理S202~S204はスピンの更新フローを示している。
【0012】
処理S202では、瞬間磁場Ihiを更新する。反転フラグFが1であれば、瞬間磁場Ihiを各スピンで並列に計算して更新する。この方式では、スピンは一つずつ更新され、スピンの変化分だけを瞬間磁場に反映すればよいので、Ihi←Ihi+2σjjjiとなる。
【0013】
処理S203では、それぞれのスピンの更新確率piを並列に計算して更新する。
pi←sigmoid(-2σiIhiβ)
sigmoidはシグモイド関数である。
【0014】
処理S204では、スピンの更新確率piによって、各スピンの更新可否を決定する。更新可能なスピンがあれば、更新可能なスピンからランダムに一つσjを選択し、スピンを更新し(σj←-σj)、反転フラグを変更する(F←1)。
【0015】
処理S205では、アニーリングステップを1進める(t←t+1)。また、逆温度を更新する(β=β(t))。アニーリングでは、温度の逆数である逆温度は次第に大きくなっていく。
【0016】
処理S202~S205は、判定処理S206でアニーリングステップtがt_maxになるまで繰り返される。アニーリングステップtがt_maxになると、スピン配列を読み出して、(疑似的に)最適化されたスピン配列として出力する(S207)。
【0017】
上記の方式は、瞬間磁場の更新とスピンの更新確率の計算について並列的に処理ができ、高速化を図ることができる。しかし、スピンの更新については並列に行わず、スピン1つずつの順次処理となる。
【0018】
そこで、アニーリングマシンにおいてスピンの更新を並列に行い得る方式の検討を行った。
【課題を解決するための手段】
【0019】
本発明の好ましい一側面は、アニーリング制御部と、スピン相互作用メモリと、乱数生成部と、スピン状態更新部を備え、イジングモデルを用いて解を求める情報処理装置である。アニーリング制御部は、アニーリングのステップを制御するとともに、温度のパラメータと自己作用のパラメータを制御する。スピン相互作用メモリは、スピンの相互作用係数を記憶する。乱数生成部は、所定の乱数を生成する。スピン状態更新部は、複数のスピンの値を記憶するスピンバッファと、複数のスピンの瞬間磁場を計算する瞬間磁場計算部と、複数のスピンの更新確率を計算する確率計算部と、更新確率と乱数に基づいてスピンの値の更新を行うスピン状態決定部と、を備える。
【0020】
本発明の好ましい他の一側面は、アニーリング制御部と、スピン相互作用メモリと、乱数生成部と、スピン状態更新部を備える情報処理装置により、イジングモデルを用いて解を求める情報処理方法である。アニーリング制御部は、アニーリングのステップを制御するとともに、温度のパラメータと自己作用のパラメータを更新する。スピン相互作用メモリは、スピンの相互作用係数を記憶する。乱数生成部は、所定の乱数を生成する。スピン状態更新部は、アニーリングのステップ毎に、相互作用係数を用いて複数のスピンの瞬間磁場を並列的に計算し、瞬間磁場を用いて複数のスピンの更新確率を並列的に計算し、更新確率と乱数を用いて複数のスピンの値を並列的に更新し、瞬間磁場の計算に用いる相互作用係数は、直前のアニーリングのステップで更新されたスピンに係る相互作用係数である。
【発明の効果】
【0021】
アニーリングマシンにおいてスピンの更新を並列に行い得る。
【図面の簡単な説明】
【0022】
【
図2】スピンの更新を1つずつ行うアニーリングマシンの処理を示すフロー図。
【
図3】実施例のアニーリングマシンのスピンの更新原理を示す概念図。
【
図4】実施例1のアニーリングマシンの処理を示すフロー図。
【
図5】実施例2のアニーリングマシンの処理を示すフロー図。
【
図6】アニーリングマシンの構成例を示すブロック図。
【
図7A】アニーリング制御部の機能を説明するブロック図。
【
図7B】ステップ更新/アニーリング終了判定部の詳細ブロック図。
【
図7C】温度更新部と自己作用更新部の詳細ブロック図。
【
図8A】アニーリング制御部とPCAステップ部の詳細を示すブロック図。
【
図10A】反転スピンバッファおよび反転スピン選択回路のブロック図。
【
図10B】反転スピン選択回路の機能を説明するためのタイムチャート。
【
図11A】シグモイド関数によるスピン反転確率pを線形近似する説明図。
【
図11B】線形近似のグラフのスケーリング変換の説明図。
【
図11C】スケーリング変換した線形近似のグラフの符号変換の説明図。
【
図11D】スピン反転確率xとξの関係を示す説明図。
【
図12A】スピン反転確率pを使ったスピンの更新の処理フロー図。
【
図12B】スピン反転確率xを使ったスピンの更新の処理フロー図。
【
図12C】スピン反転確率pを用いたスピン状態決定部の機能ブロック図。
【
図12D】スピン反転確率xを用いたスピン状態決定部の機能ブロック図。
【
図13B】実施例の乱数生成の処理を説明する概念図。
【
図15】アニーリング制御部とPCAステップ部の詳細を示すブロック図。
【
図16A】アニーリング制御部の機能を説明するブロック図。
【
図17A】マルチアニーラチップの概要を示す概念図。
【
図17B】アニーラチップのスピン相互作用メモリに格納される相互作用係数の行列を示す概念図。
【
図17C】マルチアニーラチップ間での変化スピン情報の共有シーケンスを説明する概念図。
【
図18】マルチアニーラチップのアニーリング制御部とPCAステップ部の詳細を示すブロック図。
【
図19B】実施例4のアニーリングマシンの処理を示すフロー図。
【発明を実施するための形態】
【0023】
実施の形態について、図面を用いて詳細に説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0024】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。
【0025】
同一あるいは同様な機能を有する要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、複数の要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【0026】
本明細書等における「第1」、「第2」、「第3」などの表記は、構成要素を識別するために付するものであり、必ずしも、数、順序、もしくはその内容を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【0027】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【0028】
本明細書で引用した刊行物、特許および特許出願は、そのまま本明細書の説明の一部を構成する。
【0029】
本明細書において単数形で表される構成要素は、特段文脈で明らかに示されない限り、複数形を含むものとする。
【0030】
図3は、以下で説明する実施例の原理を説明する概念図である。以下の実施例では、最適化問題は
図3(A)のように完全グラフの形でモデル化される。そして、スピンの状態は
図3(B)のように、各スピンを1対のコピーで置き換えることで並列的に更新される。スピンを並列更新するために、本実施例では新しいパラメータとして自己作用qT(t)を導入する。
【実施例1】
【0031】
図4は、実施例1のアニーリングマシンがスピンの更新を並列に行う処理を示すフロー図である。前提として、既に最適化問題は完全グラフの形でモデル化されているものとする。
【0032】
処理S401はデータの初期化である。初期アニーリングステップtを0に設定する。最大ステップ(t_max)を設定し、スピンの更新を何回繰り返すかを設定する。温度Tあるいは逆温度β(=1/T)を、初期値T0あるいはβ0に設定する。モデルが含むN個のスピン(ノード)σのそれぞれに対してランダムに初期状態を設定する。スピンの値は2値であればよいが、ここではプラス1とマイナス1とする。各ノードに対して外部磁場係数hiを定め、各ノード間の相互作用係数jijを定める。本実施例ではパラメータとして自己作用qを導入し、自己作用を初期値q ← q0に設定する。これらのデータは、モデルに基づいて定め、アニーリングマシンに設定される。アニーリングマシンの具体的な構成については、特許文献1~5、非特許文献2に記載がある。次に、処理S402~S404はスピンの更新フローを示している。
【0033】
処理S402では、瞬間磁場を計算する。瞬間磁場Ihiを各スピンで並列に計算する。この方式では、スピンは並列に更新されるので、すべてのスピンの変化を反映し、Ihi ← hi+Σj=1~Nσjjijとなる。
【0034】
処理S403では、それぞれのスピンの更新確率piを並列に計算して更新する。
pi ← ρ(-βσiIhi-q)
ここでρはシグモイド関数を用いるのが一般的だが、他の関数でも可能である。
【0035】
処理S404では、スピンの更新確率piによって、各スピンの更新可否を決定し、並列的に更新する(σi ← -σi)。
【0036】
処理S405では、アニーリングステップを1進める(t ← t+1)。また、温度Tまたは逆温度βを更新する((T ← T(t))あるいは(β ← β(t)))。また、自己作用qを更新する(q ← q(t))。ここで、T(t)、β(t)、q(t)は、ユーザによって定義された関数とする。
【0037】
T(t)、β(t)、q(t)の設定は、ユーザが任意に選択できる。一般に、温度Tはアニーリングステップが進むにつれて次第に小さく、逆数である逆温度βは次第に大きくなっていく。また、q(t)は原理的に、
図3(B)に示した左側スピン群のi番目のスピンと右側スピン群のi番目のスピンとが、基底状態において同値となるように設定すればよい。すなわちアニーリングの最終ステップにおいて、q(t)が十分大きくなるような関数を選ぶ。一般に、最後のアニーリングのステップにおいて、q(t)は最大値を取る。
【0038】
処理S402~S405は、判定処理S406でアニーリングステップtがt_maxになるまで繰り返される。アニーリングステップtがt_maxになると、スピン配列σiを読み出して、(疑似的に)最適化されたスピン配列として出力する(S407)。
【0039】
スピンの更新に係る処理S402~S404の原理は、PCA(Probabilistic Cellular Automaton)と呼ばれるアルゴリズムを応用したものである(非特許文献1参照)。非特許文献1では、パラメータとして自己作用qを導入し、パラメータqは更新の1ステップにおけるスピン反転の平均個数を制御するとしている。ただし、非特許文献1は、ギブス測度(Gibbs Measure)に関する研究論文で、最適化問題やアニーリングに関するものではない。
【0040】
イジングモデルにおいては通常、2つの結合スピンを同時に更新することはできない。これは、それらのエネルギー変化の推定値に誤差が生じるためである。よって、
図3(A)に示した完全グラフを用いる場合、スピンの同時(並列)更新ができない。PCAは
図3(B)に示したように、各スピンについてコピーを導入し、一対のスピン配列にするものと解釈できる。
図3(B)右側のスピンの一つは左側のスピンの全てと接続されている。左側のスピンの一つは右側のスピンの全てと接続されている。一方、右側のスピン同士は接続されていない。また、左側のスピン同士は接続されていない。このため、右側のスピンは同時に更新することができる。また、左側のスピンは同時に更新することができる。
【0041】
しかしながら、
図3(B)の右側のスピン配列と左側のスピン配列は、異なる最適スピン配置をとることができるので、通常は
図3(B)に示すように対応する左右のスピンは異なる。このため、パラメータqを導入し、qを十に大きくすることにより、右側のスピン配列と左側のスピン配列が同一になるように制御する。この条件が満たされると、
図3(A)に示した完全グラフを、
図3(B)に示した一対のスピン配列に置き換えることが可能となり、
図3(B)の一対のスピン配列を用いて並列更新を実行することができる。
【0042】
実施例1では、基本的な概念を示した。この方式では、瞬間磁場の計算、スピンの更新確率の計算、スピンの更新が全て並列に実行可能である。ただし、瞬間磁場の計算は全てのノードの状態を反映しなければならない。また、シグモイド関数を用いる場合にはそれを計算する必要がある。次の実施例2では、さらに計算効率を考慮した具体的なインプリメンテーションについて説明する。
【実施例2】
【0043】
図5は、実施例2のアニーリングマシンがスピンの更新を並列に行う処理を示すフロー図である。前提として、既に最適化問題は完全グラフの形でモデル化されているものとする。
【0044】
実施例2では、スピンの更新確率をx
i=σ
iIh
i+qTで計算する。再度
図3(B)を用いて計算の例を説明する。
図3(B)の左側の現在の状態σに基づいて、
図3(B)の右側の更新されたスピンの状態σ′を計算するため、更新確率x
i=σ
iIh
i+qTを計算する必要がある。
図3(B)は、i=1のスピン(一番上のスピン)σ′
1を得るためのx
1の計算の一例を示している。いま単純化するために、5つのスピンで考え、h
i=0,J
ii=0とする。
Ih
i=h
i+Σ
j=1~5σ
jj
ij
であるから、
図3(B)のx
1を計算するため、
x
1
=σ
1Ih
1+qT
=qT+σ
1Ih
1
=qT+σ
1(h
1+Σ
j=1~5σ
jj
1j)
=qT+σ
1(σ
2J
21+σ
3j
31+σ
4j
41+σ
5j
51)
となる。ここで、スピンの値がσ
1=σ
2=σ
3=σ
5=1、σ
4=-1とすると、
x
1=qT+J
21+j
31-j
41+j
51
となる。
【0045】
<1.処理の全体像>
処理S501はデータの初期化である。アニーリングステップtを初期値0に設定する。最大ステップ(t_max)を設定し、スピンの更新を何回繰り返すかを設定する。温度2Tあるいは逆温度β(=1/2T)を、初期値2T
0あるいは1/2T
0に設定する。モデルが含むN個のスピン(ノード)σのそれぞれに対してランダムに初期状態を設定する。スピンの値は2値であればよいが、ここではプラス1とマイナス1とする。各ノードに対して外部磁場係数h
iを定め、各ノード間の相互作用係数j
ijを定める。
図2と同様に瞬間磁場Ih
i=h
i+Σ
j=1~Nσ
jj
ijを用意する。本実施例ではパラメータとして自己作用qTを導入し、自己作用を初期値qT ← qT
0に設定する。各ノードに反転スピンフラグF
jを設定し、初期値F
j=0を設定する。これらのデータは、モデルに基づいて定め、アニーリングマシンに設定される。アニーリングマシンの具体的な構成については、特許文献1~5、非特許文献2に記載がある。次に、処理S502~S504はスピンの更新フローを示している。
【0046】
実施例1との差異としては、温度がTの2倍となっており、また自己作用qとして温度との積qTを用いる。理由については後述する。
【0047】
処理S502では、瞬間磁場を更新する。瞬間磁場Ihiを各スピンで並列に計算して更新する。本方式では各スピンは並列的に更新されているが、瞬間磁場の計算では、反転スピンフラグFj=1であるノード、すなわちスピンが更新されたノードの影響だけを反映する。すなわちIhi ← Ihi+2jijσjとなる。
【0048】
処理S503では、それぞれのスピンの更新確率xiを並列に計算して更新する。
xi= σiIhi+qT
ここでxiにはシグモイド関数を線形近似した関数を用いる。
【0049】
処理S504では、スピンの更新確率xiによって、各スピンの更新可否を決定して並列的に更新する。更新するスピンではσi ← -σiとする。また更新されたスピン集合の反転スピンフラグを更新しFi ← 1とする。
処理S505では、アニーリングステップを1進める(t ← t+1)。また、温度または逆温度を更新する((2T ← 2T(t))あるいは(β/2 ← β/2(t)))。温度2Tはステップが進むにつれて次第に小さく、逆数である逆温度β/2は次第に大きくなっていく。また、自己作用qTを更新する(qT← qT(t))。ここで、2T(t)、β/2(t)、qT(t)は、ユーザによって定義された関数とする。自己作用qT(t)の設定の条件は、実施例1と同様である。
【0050】
処理S502~S505は、判定処理S506でアニーリングステップtがt_maxになるまで繰り返される。アニーリングステップtがt_maxになると、スピン配列σiを読み出して、(疑似的に)最適化されたスピン配列として出力する(S507)。
【0051】
<2.装置構成の全体像>
図6は、
図5の処理を実行するための情報処理装置の構成を示すブロック図である。情報処理装置は、制御装置610とアニーリングマシン620からなる。
【0052】
<2.1.制御装置>
制御装置610は例えばパーソナルコンピュータ(PC)であり、PCAアニーラ制御部611と相互作用・瞬間磁場準備部612を含む。制御装置610は、アニーリングマシン620の上位装置として、これを制御する。また制御装置610は、初期化の処理S501を実行する。
【0053】
PCAアニーラ制御部611は、アニーリングマシン620との間のデータの入出力や、アニーリングステップおよび各種パラメータの設定等、アニーリングマシン620の全体的な制御を行う。相互作用・瞬間磁場準備部612は、最適化問題をイジングモデル化し、相互作用係数jij、外部磁場係数hi、瞬間磁場Ihiを計算して準備する。PCAアニーラ制御部611は、これらのデータをアニーリングマシン620に入力して設定する。
【0054】
制御装置610は、通常のPCと同様に、入力装置、出力装置、処理装置、記憶装置を備える。本実施例では計算や制御等の機能は、記憶装置に格納されたプログラムが処理装置によって実行されることで、定められた処理を他のハードウェアと協働して実現される。計算機などが実行するプログラム、その機能、あるいはその機能を実現する手段を、「機能」、「手段」、「部」、「ユニット」、「モジュール」等と呼ぶ場合がある。
【0055】
以上の構成は、単体のコンピュータで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。本実施例中、ソフトウエアで構成した機能と同等の機能は、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)などのハードウェアでも実現できる。
【0056】
<2.2.アニーリングマシン>
アニーリングマシン620は、I/Oインターフェース621とPCAアニーラ622を含む。PCAアニーラ622は、メモリアクセスインターフェース623、アニーリング制御部700、PCAステップ部800を含む。アニーリングマシン620は、アニーリングを実行するアニーリング専用の回路である。
【0057】
I/Oインターフェース621は、アニーリングマシン620と制御装置610との間のデータの送受信を司る。メモリアクセスインターフェース623は、アニーリングマシン620が含む各種のメモリに対して、データの記録および読み出しを行う。
【0058】
<3.PCAアニーラ>
PCAアニーラ622は、I/Oインターフェース621を介して、制御装置610とデータを交換する。メモリアクセスインターフェース623は、I/Oインターフェース621から受け取ったデータをPCAアニーラ622内のメモリに格納する。また、メモリからデータをI/Oインターフェース621経由で制御装置610へ読み出す。メモリへのデータの書き込みや読み出しは、例えばSRAM(Static Random Access Memory)の技術を適用して構成することができる。このようなハードウェアについては、例えば特許文献1に記載がある。
【0059】
アニーリング制御部700は、ステップ更新/アニーリング終了判定部710、温度更新部720、自己作用更新部730、アニーリング制御レジスタ740を含む。アニーリング制御部700は、アニーリングプロセスに伴う、スピンの更新のための各種パラメータの初期値設定や更新を行う。アニーリング制御部700は、例えばマイクロコンピュータで構成することができる。アニーリング制御レジスタ740は、現在の温度2Tや自己作用qTの値とそれらの変更パラメータ、現在のステップ数tと最大ステップ数tmaxを格納している。温度更新部720や自己作用更新部730は、アニーリング制御レジスタ740の数値を用いて、温度や自己作用を更新する。
【0060】
PCAステップ部800は、スピン相互作用メモリ810、スピン状態更新部820、乱数生成部830を含む。スピン相互作用メモリ810は、相互作用係数jijを格納する。スピン状態更新部820は、N個のスピン更新ユニット821を備え、各スピン更新ユニット821は、瞬間磁場レジスタ822を備える。PCAステップ部800は、N個のスピン更新ユニット821のスピンの値を並列的に更新する。また、N個の瞬間磁場レジスタ822の瞬間磁場の値を並列的に更新する。乱数生成部830は乱数を生成する。
【0061】
<3.アニーリング制御部>
<3.1.全体構成>
図7Aは、アニーリング制御部700の機能を説明する図である。アニーリング制御部700へは、スピン状態更新部820からの信号が入力される。スピン状態更新部820からスピン状態の更新完了を示す信号(ステップ終了信号)を得るとステップ数がインクリメントされ、ステップ更新/アニーリング終了判定部710、温度更新部720、自己作用更新部730により、アニーリング制御レジスタ740の内容が更新される。
【0062】
ステップ更新/アニーリング終了判定部710で、アニーリングステップが最大値tmaxになったかを判定して、最大値であれば、反転スピンバッファ826内のN個のスピン状態を出力する。N個のスピン状態は、メモリアクセスインターフェース623、I/Oインターフェース621経由で、最適化されたスピン配列として制御装置610に出力される。アニーリングステップが最大値でなければ、アニーリングステップt ← t+1とし、温度更新部720で温度2Tを、自己作用更新部730で自己作用qTを更新し、アニーリング制御レジスタ740の値を更新する。更新された温度2Tや自己作用qTは、スピン状態更新部820に出力される。
【0063】
<3.2.ステップ更新/アニーリング終了判定部>
図7Bは、ステップ更新/アニーリング終了判定部710の詳細ブロック図である。ステップ更新/アニーリング終了判定部710は、スピン状態更新部820からステップ終了信号を得ると、アニーリング制御レジスタ740から現在のアニーリングステップ数tと、最大ステップ数t
maxを読み込む。現在のアニーリングステップ数tに1加算する(t ← t+1)。比較器712では、t+1<t
maxでなければアニーリングステップを終了し、t+1<t
maxであれば、アニーリング制御レジスタ740のアニーリングステップ数tを更新する(t ← t+1)。
【0064】
<3.3.温度更新部および自己作用更新部>
図7Cは、温度更新部720と自己作用更新部730の詳細ブロック図である。両者はパラメータの更新部として同様の構成をとるため、パラメータX更新部として説明する。図中(x,x
mult)はそれぞれ(2T,2T
mult)または(β/2,β/2
mult)、および(qT,qT
mult)、を表す。
【0065】
スピン状態更新部820からステップ終了信号を得ると、アニーリング制御レジスタ740から現在のパラメータxとパラメータの更新パラメータxmultを読み込む。パラメータxとパラメータの更新パラメータxmultを積算し、x ← x*xmultを新たなパラメータとしてアニーリング制御レジスタ740に書き込む。
【0066】
<4.PCAステップ部>
<4.1.全体構成>
図8Aは、アニーリング制御部700とPCAステップ部800の詳細を示すブロック図である。
スピン相互作用メモリ810には、N個のスピンに対応するノードのそれぞれに、相互作用係数j
ijが記憶されている。具体的なハードウェア構成は、例えばSRAMの技術を適用した特許文献1に詳しい。
【0067】
アニーリング制御部700のアニーリング制御レジスタ740から乱数生成部830へ温度2Tが入力され、-2T~2Tの範囲の値を持つ乱数が生成される。それぞれ異なる乱数が、スピン状態決定部825に入力される。
【0068】
スピンの値は、スピン状態更新部820により更新される。スピン状態更新部820は、瞬間磁場計算部823、確率計算部824、スピン状態決定部825、反転スピンバッファ826、反転スピン選択回路827を含む。スピン状態更新部820へは、アニーリング制御部700のアニーリング制御レジスタ740から自己作用qTが入力される。また、乱数生成部830から乱数が入力される。また、スピン相互作用メモリから相互作用係数jijが入力される。これらに基づいて、各スピンの状態を更新する。
【0069】
<4.2.瞬間磁場計算部>
図8Bは、瞬間磁場計算部823の説明のためのブロック図である。瞬間磁場計算部823は、入力として、スピン相互作用メモリ810の相互作用係数の値j
ijと、反転スピン選択回路のスピンの値σ
iを読み込む。相互作用係数の値j
ijは、反転スピン選択回路827で指定されたアドレスに対応しており、前のアニーリングステップで更新された1または複数のスピンσ
jに対応している。
【0070】
プラス1あるいはマイナス1を持つスピンの値σiを符号拡張する。「<<1」は、ビットを1桁左にシフトすることを意味し、2を掛けることと同じである。これにより2σjjijを計算する。瞬間磁場レジスタ822の現在の瞬間磁場Ihiの値に2σjjijを加算して、新たな瞬間磁場の値を瞬間磁場レジスタ822にIhi ← Ihi+2σjjijとして書き込む。瞬間磁場Ihiの値は、確率計算部824に入力される。
【0071】
図5で説明したように、Ih
i+2σ
jj
ijの計算において、j∈{j=1,…,N|F
j=1}である。反転スピン選択回路827は、前のアニーリングステップで更新されたスピンの反転フラグF
jの値を“1”に設定して(F
j=1)、更新されたスピンを指定している。よって、瞬間磁場計算部823は、アニーリングステップでスピンが更新(変更)されたスピンに基づいて、瞬間磁場を計算する。
【0072】
<4.3.確率計算部>
図9Aは、反転確率x
iを計算するための、確率計算部824の詳細を説明する図である。確率計算部824は、入力として反転スピン選択回路のスピンの値σ
i(瞬間磁場計算部823から引き継げばよい)、瞬間磁場計算部823から得た瞬間磁場Ih
i、アニーリング制御部700のアニーリング制御レジスタ740から得た自己作用qTを得る。
【0073】
プラス1あるいはマイナス1を持つスピンの値σiを符号拡張し、瞬間磁場Ihiσiを計算し、自己作用qTに加算する。これにより、反転確率xi=σiIhi+qTを得る。
【0074】
<4.4.スピン状態決定部>
図9Bは、スピンの更新を決定するための、スピン状態決定部825の詳細を説明する図である。スピン状態決定部825は、入力として確率計算部824から得た反転確率x
i、乱数生成部830から得た疑似乱数、反転スピン選択回路のスピンの値σ
i(確率計算部824から引き継げばよい)を得る。乱数生成部830は、N個のスピン状態決定部825毎に異なる乱数を与える。乱数生成部830における乱数の生成は温度2Tで制御される。乱数がとる値は-2から2Tの範囲である。
【0075】
スピン状態決定部825は、反転確率xiと乱数を比較し、反転確率xiが乱数より小さければ、スピンの値σiの符号を反転する。スピンを反転した場合、反転スピンバッファ826の反転フラグFiを設定する。すでに述べたように、Fiはスピン状態決定部825でスピンσiが反転されたとき“1”が、スピン状態決定部825でスピンσiが反転されなかったとき“0”が、設定される。
【0076】
<4.5.スピン更新のタイムチャート>
図9Cは、i=1のスピン状態更新のタイムチャートである。瞬間磁場計算部823では、前のアニーリングステップで更新されたスピンによる瞬間磁場の変化分を加算して、瞬間磁場Ih
iを更新(Ih
1 ← Ih
1+2σ
jj
1j)し、瞬間磁場レジスタ822に格納する。瞬間磁場を求めたら、アニーリング制御部700から自己作用qTを、乱数生成部830から乱数randを得る。確率計算部824が、自己作用qT、瞬間磁場Ih
1、およびスピンσ
1から反転確率x
1を計算する。スピン状態決定部825が、反転確率x
1、乱数rand、およびスピンσ
iからスピンの更新有無を決定し、反転スピンバッファ826の反転フラグF
1を設定しスピンσ
1を更新する。
【0077】
<4.6.反転スピンバッファおよび反転スピン選択回路>
図10Aは、反転スピンバッファ826および反転スピン選択回路827の詳細を説明する図である。N個の各スピンに対応するスピン状態決定部825で生成された反転フラグF
iとスピンの値σ
iは(iはスピン(ノード)の番号を示す)、反転スピンバッファ826に並列に書き込まれる。反転フラグF
iは例えば、“1”または“0”を示す任意のビットの符号でよい。上述のように、反転フラグF
iはスピンσ
iが更新されたかどうかを示す。
【0078】
反転スピン選択回路827のセレクタ1001を介して、スピンの値σiを対応する瞬間磁場計算部823へ送る。また、反転フラグFiの値が“1”であるスピンのアドレスをスピン相互作用メモリ310へ送る。スピン相互作用メモリ310は、アドレスで指定された相互作用jijを瞬間磁場計算部823へ送る。
【0079】
プライオリティ回路1002は、すべてのデータの送付が終了したら、アニーリング制御部700へステップ終了信号を送信する。アニーリング制御部700は、ステップ終了信号を受けると、次のステップを開始する。
【0080】
<4.7.反転フラグの例>
図10Bは、反転スピン選択回路827の機能を説明するための図である。ここでは、σ
1,σ
2,σ
3,σ
4のスピンが4個のみの系で、反転フラグの機能を説明する。また、σ
1,σ
2,σ
4はスピン状態決定部825でスピンが更新されており、σ
3はスピンが更新されていないものとする。すなわち、スピン状態決定部825は、反転フラグをF
1=F
2=F
4=1,F
3=0にして、反転スピンバッファ826に設定している。
【0081】
反転スピン選択回路827が処理を開始するサイクル1で、反転フラグは“F4F3F2F1”=“1011”に設定されている。プライオリティ回路1002は、反転フラグ“1011”により、F4=1であり、σ4のスピンが更新されていることを知る。よって、セレクタ1001は、反転スピンバッファの更新されたスピンσ4を瞬間磁場計算部823に送り、対応するアドレス“11”をスピン相互作用メモリ810に送る。スピン相互作用メモリ810は、アドレス“11”に対応するj41、j42、j43を瞬間磁場計算部823に送る。次にF4=0に設定し、反転フラグを“0011”に変更する。
【0082】
サイクル2で、反転フラグは“F4F3F2F1”=“0011”に変更されている。プライオリティ回路1002は、反転フラグ“0011”により、F2=1であり、σ2のスピンが更新されていることを知る。よって、セレクタ1001は、反転スピンバッファの更新されたスピンσ2を瞬間磁場計算部823に送り、対応するアドレス“01”をスピン相互作用メモリ810に送る。次にF2=0とし、反転フラグを“0001”に変更する。
【0083】
以下のサイクルも同様であり、最終的に反転フラグがオールゼロになれば、プライオリティ回路1002は、処理が終了したことを判定してステップ終了フラグを生成する。そして、ステップ終了信号をアニーリング制御部700に送る。
【0084】
<5.スピンの反転確率の計算>
実施例1では、スピン更新確率pとしてシグモイド関数を用いるのが一般的であると述べた。しかし、シグモイド関数を用いた場合、計算の負荷が大きい。そこで、線形近似を用いて、回路規模や計算量を減少させることを検討した。
【0085】
図11Aに、シグモイド関数を線形近似する概念を説明する。ここで、スピン更新確率p
iを以下のシグモイド関数で規定する。
p
i=sigmoid(-x
i/T)
x
i=σ
iIh
i+qT
もし、p
i>rand’’∈(0,1)であれば、スピンを反転させ、σ
i ← -σ
iとする。
【0086】
ここでpiを以下のように線形近似する。
xi<-2Tのとき、pi≒1
-2T≦xi≦2Tのとき、pi≒1/2-xi/4T
2T<xiのとき、pi≒0
もし、pi>rand’’であれば、スピンを反転させ、σi ← -σiとする。
【0087】
以上で、
図11Aのグラフにおいて、点線(1)で示すシグモイド関数を、実線(2)で示すように線形近似することができる。
【0088】
図11Bは、
図11Aの線形近似のグラフをスケーリング変換したものである。
図11Aでは乱数rand’’のとる値は0から1の間である。これを、-2Tから2Tの間の値をとる乱数rand’にスケーリング変換する。この変換は以下のように実行できる。
rand’=(rand’’-1/2)×4T
また、スピン更新確率ηは以下になる。
η
i=(p
i-1/2)×4T
線形近似により、
x
i<-2Tのとき、η
i≒2T
-2T≦x
i≦2Tのとき、η
i≒-x
i
2T<x
iのとき、η
i≒-2T
もし、η
i>rand’であれば、スピンを反転させ、σ
i ← -σ
iとする。
【0089】
図11Cは、
図11Bのスケーリング変換したグラフを符号変換したものである。符号変換により、
rand=-rand’
とする。
また、スピン更新確率ξは以下になる。
ξ
i=-η
i
線形近似により、
x
i<-2Tのとき、ξ
i≒-2T
-2T≦x
i≦2Tのとき、ξ
i≒x
i
2T<x
iのとき、ξ
i≒2T
もし、ξ
i<randであれば、スピンを反転させ、σ
i ← -σ
iとする。
【0090】
図11Dは、ξ
iとx
iを重ねて描いたものである。上に述べたように、-2T≦x
i≦2Tのとき、ξ
i≒x
iであるから、ξ
iの代わりにx
iを使っても、乱数の比較結果が変わらないことがわかる。そこで、もし、x
i<randであれば、スピンを反転させ、σ
i ← -σ
iとすることができる。
【0091】
<6.スピンの更新の処理フロー>
図12Aは、
図11Aのスピン反転確率pを使ったスピンの更新の処理フローを示している。反転確率を計算してp
iを得る(S1201a)。p
iを0から1の間の値をとる乱数rand’’と比較する(S1202a)。乱数rand’’よりp
iが大きければ、スピンの状態を反転する(S1203a)。乱数rand’’よりp
iが大きくなければ、スピンの状態を維持する(S1204a)。
【0092】
図12Bは、
図11Dのスピン反転確率xを使ったスピンの更新の処理フローを示している。反転確率を計算してx
iを得る(S1201b)。x
iを-2Tから2Tの間の値をとる乱数randと比較する(S1202b)。乱数randよりx
iが小さければ、スピンの状態を反転する(S1203b)。乱数randよりx
iが小さくなければ、スピンの状態を維持する(S1204b)。
【0093】
<7.スピンの更新の処理回路>
図12Cは、
図12Aのシグモイド関数pを使ったスピン状態決定部825aの構成を示している。入力は、乱数生成部830aから得る0から1の間の値を取る乱数rand’’と、確率計算部824aから得るx
iと、温度更新部720aから得る逆温度β(t)=1/T(t)である。p
i=sigmoid(-x
i/T)を得るために、x
iの符号を反転して積算し、シグモイド関数p
iを計算する必要がある。
【0094】
図12Dは、
図12Bの線形近似とスケール変換した関数xを使ったスピン状態決定部825bの構成を示している。入力は、乱数生成部830bから得る-2Tから2Tの間の値を取る乱数randと、確率計算部824bから得るx
iである。この方式では、乱数randとx
iを比較するだけでよい。符号拡張および積算器は不要であり、シグモイド関数p
iを計算する必要もない。
【0095】
<8.乱数の生成方法>
図13Aは、乱数生成部830における、-2Tから2Tの間の値をとる乱数の生成フローである。
【0096】
図13Bは、乱数生成部830における、乱数生成の処理を説明する概念図である。乱数生成部830は、各スピン状態決定部825に異なる乱数を与える。ここでは、そのうちの一つの乱数の生成について説明するが、同様の構成がスピンの数Nだけ並列に動作すればよい。
【0097】
まず公知の方法で所定ビット(たとえば32ビット)の乱数を生成する(S1301)。
図13B(A)に生成した32ビットの乱数(以下の説明で「乱数(A)」という)を示す。
【0098】
次に、乱数生成部830は2Tマスクを作成する(S1302)。2Tマスクは、2Tの1の存在する最上位ビット以下のビットを1に変更したものである。たとえば、2Tが“01010”の場合、2Tマスクは“01111”である。
【0099】
そして、2Tマスクと乱数(A)の論理積(AND)をとる(S1303)。
図13B(B)に、2Tマスクと生成した乱数のANDの結果(以下の説明で「AND結果(B)」という)を示す。2TマスクとANDをとることにより、乱数(A)は最大で2Tマスクの最上位ビットと同じ桁までが切り出される。しかし、AND結果(B)は、まだ2Tより大きい可能性がある。ここで、AND結果(B)の0から2Tまでの値をP1、2Tから2
ceil(log(2T)までの値をP2とする。ceilは、引数として与えた数以上の最小の整数を返す関数である。
【0100】
次に、AND結果(B)と2Tを比較する(S1304)。AND結果が2Tより小さくない場合には、AND結果(B)と2Tマスクの排他的論理和(XOR)をとる。
図13B(C)に、AND結果(B)と2TマスクのXORの結果(以下の説明で「XOR結果(C)」という)を示す。2TマスクとXORをとることにより、AND結果(B)の最上位ビットが”1”だった場合には、”0”に変更されるので、XOR結果(C)は2Tより小さくなる。XOR結果(C)を符号拡張して、-2Tから2Tの間の値(D)を得る。
図13B(D)に、符号拡張した結果(D)を示す。
【0101】
AND結果(B)が2Tより小さい場合には、AND結果(B)をそのまま符号拡張して-2Tから2Tの乱数を得る。
【0102】
図13Cは、上記の処理を実現する乱数生成部830の構成例である。疑似乱数列生成法の1つであるXOR-shift831を用いて乱数(A)を生成する(S1301)。任意に定めた2Tを入力する。マスク作成部832は、2Tに基づいて2Tマスクを作成する(S1302)。AND回路833で、2Tマスクと乱数(A)の論理積(AND)をとる(S1303)。
【0103】
比較器835で、AND結果(B)と2Tを比較する(S1304)。比較結果はセレクタ836に入力される。セレクタ836は、AND結果(B)が2Tより小さい場合には、AND結果(B)を符号拡張器837に入力する。セレクタ836は、AND結果(B)が2Tより小さくない場合には、XOR回路834で生成された、AND結果(B)と2Tマスクの排他的論理和(XOR)を符号拡張器837に入力する。符号拡張器837は-2Tから2Tの乱数を生成する。
【0104】
以上の説明したように、本実施例では並列処理により計算速度が高速化される。また、並列処理の個々の計算量も圧縮することにより、回路構成が簡単になり消費電力を低減するとともにさらに処理速度が高速化される。
【実施例3】
【0105】
実施例2では、
図10Bで説明したように、更新されたスピンの処理は、セレクタ1001で1つずつシーケンシャルに実行されている。すなわち反転スピン選択回路827による、スピン状態の瞬間磁場計算部823への送信、スピン相互作用メモリ810の読み出しの処理はスピンの数に比例したサイクル数を必要とする。実施例3では、この部分の並列化により処理時間を圧縮する例を示す。
【0106】
図14は、実施例3のシステムの概念図である。スピン相互作用メモリ810a,810bとスピン状態更新部820a,820bのように、並列動作可能な複数の回路に分割する。スピン相互作用メモリ810aは、i=1~N/2の番号のスピンの相互作用を格納し、スピン相互作用メモリ810bはN/2+1~Nの番号のスピンの相互作用を格納する。スピン状態更新部820aはi=1~N/2の番号のスピンの更新を行い、スピン状態更新部820bはN/2+1~Nの番号のスピンの更新を行う。
【0107】
図15は、アニーリング制御部700-2とPCAステップ部800-2の詳細を示すブロック図である。基本的に
図8Aと同様だが、添字aとbで示す並列動作可能な2ブロックに分割されている。
【0108】
図16Aは、アニーリング制御部700-2の機能を説明する図である。基本的に
図7Aと同様だが、並列動作可能な2ブロックを調整する機能を含む。すなわち、一対のスピン状態更新部1(820a)とスピン状態更新部2(820b)からのステップ終了信号の論理積を取り、両方の信号が得られてから、すなわち両方のアニーリングステップが終了してから、次のアニーリングステップに移るように構成されている。
【0109】
図16Bは、瞬間磁場計算部823-2の説明のためのブロック図である。並列的にスピン相互作用計算を行う。瞬間磁場計算部823-2は、入力として、反転スピン選択回路827a,827bでアドレスを指定されたスピン相互作用メモリ810a,810bの相互作用係数の値j
ki,j
miと、反転スピン選択回路827a,827bのスピンの値σ
k、σ
mを並列に読み込む。プラス1あるいはマイナス1を持つスピンの値σ
k、σ
mを符号拡張する。「<<1」は、ビットを1桁左にシフトすることを意味し、2を掛けることと同じである。これにより2σ
kj
ikと2σ
mj
imを計算してこれらを加算する。瞬間磁場レジスタ822の現在の瞬間磁場Ih
iの値に2σ
kj
ik+2σ
mj
imを加算して、新たな瞬間磁場の値を瞬間磁場レジスタ822にIh
i ← Ih
i+2σ
kj
ik+2σ
mj
imとして書き込む。瞬間磁場Ih
iの値は、確率計算部824-2に入力される。このような構成により、2つのブロックで更新されたスピンの情報を瞬間磁場計算部823-2で得ることができる。
【実施例4】
【0110】
多数のスピンを含む大規模なイジングモデルの基底状態を探索可能なアニーリングマシンを構築するためには、単位素子をスピン数に応じた数だけ半導体チップに搭載する必要がある。このような半導体装置は、チップサイズが大きく、製造コストも高くなる。従って、このような半導体装置を実現するに際しては、ある程度の数の単位素子が搭載された半導体チップを複数接続して構築することが望ましい。実施例4は、実施例1で説明したアニーリングマシンを複数接続したものである。ここで、アニーリングマシンは半導体製造技術で作成された半導体チップであり、アニーラチップと呼ぶことにする。
【0111】
図17Aは、実施例4のマルチアニーラチップの概要を示す概念図である。アニーラチップ1700は、アニーリングマシン620の構成を基本的に含む半導体チップである。ここでは、L個のアニーラチップを接続した例を示している。各アニーラチップは、N個のスピンをL分割して処理を担当する。例えば、アニーラチップ1700aはσ
1~σ
N/Lのスピンを担当しアニーラチップ1700bはσ
N/L+1~σ
2N/Lのスピンを担当する。各マルチアニーラチップは、データを循環して転送可能な構成になっている。
【0112】
図17Bは、例としてL=4の場合の各アニーラチップのスピン相互作用メモリ810に格納される相互作用係数の行列を示す概念図である。
【0113】
マルチアニーラチップの構成では、チップ相互でスピン状態σiと更新されたスピンの情報を共有する必要がある。このため、これらの情報は、アニーラチップ1700間で送信データとして送られる。送信データの内容は、更新されたスピンの値σiと相互作用係数jijである。
【0114】
図17Cは、L=4の場合の各アニーラチップにおける処理の流れを説明する図である。
図5のアニーリングステップの、最初の更新確率計算S503とスピンの更新S504で、更新されるスピンとその値が各アニーラチップで計算される(最初の段階では瞬間磁場は初期値である)。瞬間磁場の更新処理S502のためには、更新されたスピンの相互作用係数とスピンの値を他のアニーラチップに知らせなければならない。
【0115】
図17Cでは、ステップ1で、各アニーラチップ0~3では、自分のチップで更新されたスピンに関する情報(変化スピン0~3)を得る。続くステップ2~4において、変化スピン0~3を順次隣接するアニーラチップに転送する。ステップ4で、すべての更新されたスピンに関する情報が、各アニーラチップに行き渡るので、瞬間磁場の更新処理S502が可能となる。
【0116】
図18は、マルチアニーラチップ構成における、アニーリング制御部700とPCAステップ部800の詳細を示すブロック図である。
図8Aとほぼ同様な構成であるが、PCAステップ部800は、反転スピンキュー1801を備える。反転スピンキュー1801は、
図17Cのステップ1では、自チップの変化スピンの情報を隣接チップに転送する。ステップ2以降ではステップごと、隣接するアニーラチップから送られてくる変化スピンの情報を記憶し、さらに隣接するアニーラ―チップに転送する。アニーラチップがN個あれば、Nステップ後に瞬間磁場の更新処理S502が可能となる。
【実施例5】
【0117】
この実施例では、スピンに代えてマクロスピンを用いた例を示す。マクロスピンは、個々のスピンの値に代えて、複数のスピンの値の多数派の値を適用するものである。
【0118】
図19Aに、マクロスピンの概念を示す。N個のスピンがM個のグループに分割されている。i番目のスピンの値がσ
iで表される。各グループに属する複数のスピンの値の多数決によって、m番目のグループのマクロスピンσ’
mが決定される。マクロスピンσ’
mは、m番目のグループに属するスピン全ての値として適用される。
【0119】
例えば、あるグループに属するスピンの数が6だとする。6個のスピンの値が1,1,-1,1,-1,1であるとすると、”1”が4個、”-1”が2個なので、このグループのマクロスピンは”1”ということになる。当該グループのスピンの値は全て”1”として扱われる。マクロスピンを用いることにより、計算量を圧縮することができる。
【0120】
図19Bは、実施例5のアニーリングマシンがマクロスピンを用いて行う処理を示すフロー図である。前提として、既に最適化問題は完全グラフの形でモデル化されているものとする。基本的な処理は
図5に示した実施例と同様なので、特に差異について説明する。
【0121】
初期化処理S1901は、
図5の初期化処理S501と同様である。ただし、初期化処理S1901では、初期マクロスピンサイズM=M
init(2≦M
init≦N)を設定する。
【0122】
マクロスピンの状態決定処理S1902では、上述の多数決によりマクロスピンの値を決定する。例えば、グループm内のスピンの値σiの合計が0より大きければ、マクロスピンσ’m=1、そうでなければσ’m=-1とする。
【0123】
スピンの更新処理S1903では、マクロスピンを用いてそれぞれのスピンの瞬間磁場Ihと更新確率xを計算しスピンを更新する。スピンの代わりにマクロスピンを用いること以外は、
図5の実施例と同様でよい。
【0124】
処理S1904では、アニーリングパラメータを更新する。更新の内容は
図5の実施例と同様でよい。マクロスピンサイズMも更新する。マクロスピンサイズMは、例えば徐々に大きくしてNに近づけていく。アニーリングステップの最後ではM=Nとして、マクロスピンは用いなくすることが望ましい。
【0125】
判定処理S1905でアニーリングステップtがt_maxになるまで繰り返される。アニーリングステップtがt_maxになると、スピン配列σiを読み出して、(疑似的に)最適化されたスピン配列として出力する(S1906)。
【0126】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【0127】
制御装置610、アニーリングマシン620、PCAアニーラ制御部611、相互作用・瞬間磁場準備部612、アニーリング制御部700、ステップ更新/アニーリング終了判定部710、温度更新部720、自己作用更新部730、アニーリング制御レジスタ740、PCAステップ部800、スピン相互作用メモリ810、スピン状態更新部820、乱数生成部830