(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-24
(45)【発行日】2024-10-02
(54)【発明の名称】シミュレーテッドアニーリング装置およびシミュレーテッドアニーリング方法
(51)【国際特許分類】
G06N 99/00 20190101AFI20240925BHJP
G06N 10/60 20220101ALI20240925BHJP
【FI】
G06N99/00 180
G06N10/60
(21)【出願番号】P 2023516961
(86)(22)【出願日】2021-04-28
(86)【国際出願番号】 JP2021017018
(87)【国際公開番号】W WO2022230119
(87)【国際公開日】2022-11-03
【審査請求日】2023-09-06
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103090
【氏名又は名称】岩壁 冬樹
(74)【代理人】
【識別番号】100124501
【氏名又は名称】塩川 誠人
(72)【発明者】
【氏名】井手口 裕太
【審査官】北川 純次
(56)【参考文献】
【文献】国際公開第2020/054062(WO,A1)
【文献】特開2021-043508(JP,A)
【文献】特開2020-046997(JP,A)
【文献】鈴木 基己 ほか,投機を用いた擬似焼きなまし法の分散並列処理手法,情報処理学会 研究報告 ハイパフォーマンスコンピューティング(HPC),日本,情報処理学会,2020年09月25日,Vol.2020-HPC-176, No.2,pp.1-6,ISSN 2188-8841
【文献】KNOPMAN Jonas et al.,Parallel simulated annealing: an adaptive approach,Proceedings 11th International Parallel Processing Symposium [online],IEEE,1997年,pp.522-526,[検索日 2021.07.07], インターネット: <URL: https://ieeexplore.ieee.org/abstract/document/580950>,<DOI: 10.1109/IPPS.1997.580950>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
組合せ最適化問題をシミュレーテッドアニーリング方式で求解するシミュレーテッドアニーリング装置であって、
前記組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行する確認手段と、
m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新する更新手段と、
次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する変更手段とを備える
ことを特徴とするシミュレーテッドアニーリング装置。
【請求項2】
確認手段は、k・n番目のスピンがフリップするか否かが確定した後に(k・n+1)番目~(k+1)・n番目のn個のスピンそれぞれに対して確認処理を並列数nで並列に実行する
請求項1記載のシミュレーテッドアニーリング装置。
【請求項3】
エネルギー関数を構成する全てのスピンに渡ってスピンのフリップによるエネルギーの変化量をそれぞれ計算する計算手段を備え、
確認手段は、前記エネルギーの変化量がそれぞれ計算された後に最初の確認処理を実行する
請求項1または請求項2記載のシミュレーテッドアニーリング装置。
【請求項4】
確認手段および更新手段は、ベクトル演算器で実現される
請求項1から請求項3のうちのいずれか1項に記載のシミュレーテッドアニーリング装置。
【請求項5】
組合せ最適化問題は、巡回セールスマン問題である
請求項1から請求項4のうちのいずれか1項に記載のシミュレーテッドアニーリング装置。
【請求項6】
組合せ最適化問題をシミュレーテッドアニーリング方式で求解するシミュレーテッドアニーリング方法であって、
コンピュータが、前記組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行し、
前記コンピュータが、m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新し、
前記コンピュータが、次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する
ことを特徴とするシミュレーテッドアニーリング方法。
【請求項7】
コンピュータが、k・n番目のスピンがフリップするか否かが確定した後に(k・n+1)番目~(k+1)・n番目のn個のスピンそれぞれに対して確認処理を並列数nで並列に実行する
請求項6記載のシミュレーテッドアニーリング方法。
【請求項8】
組合せ最適化問題をシミュレーテッドアニーリング方式で求解するコンピュータにおいて実行されるシミュレーテッドアニーリングプログラ
ムであって、
前記コンピュー
タに、
前記組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行
する並列処理、
m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新
する更新処理、
および
次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する
変更処理
を実行させるためのシミュレーテッドアニーリングプログラ
ム。
【請求項9】
コンピュー
タに、
並列処理で、k・n番目のスピンがフリップするか否かが確定した後に(k・n+1)番目~(k+1)・n番目のn個のスピンそれぞれに対して確認処理を並列数nで並列に実行
させる
請求項8記載のシミュレーテッドアニーリングプログラ
ム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シミュレーテッドアニーリング装置、シミュレーテッドアニーリング方法およびシミュレーテッドアニーリングプログラムに関する。
【背景技術】
【0002】
量子アニーリングマシンの実用化を契機に、組合せ最適化問題に関する研究が再度注目されている。組合せ最適化問題は、最適となる組合せを求める問題である。現実社会における課題を表した組合せ最適化問題として、巡回セールスマン問題、ナップサック問題、シフト最適化問題、および配送計画問題等が挙げられる。
【0003】
上記の組合せ最適化問題は、例えば、イジングモデル形式で記述される。イジングモデルは、個々のスピンによって磁性体の振る舞いを表す統計力学上のモデルである。イジングモデルでは、個々のスピンの向きは、“1”または“-1”で表される。イジングモデルは、多くの組合せ最適化問題を定式化できる。
【0004】
組合せ最適化問題がイジングモデル形式で記述される場合、最初に組合せ最適化問題におけるエネルギーを表す式が作成される。次いで、組合せ最適化問題におけるエネルギーを表す式が、イジングモデルにおけるエネルギー関数に変換される。なお、イジングモデルにおけるエネルギー関数への変換方法は、公知である。イジングモデルにおけるエネルギー関数は、以下の式(1)のように表される。
【0005】
【0006】
なお、式(1)におけるi,jは、いずれもスピンを表す変数である。また、式(1)におけるsiは、スピンiの向きを表す変数であり、sjは、スピンjの向きを表す変数である。すなわち、si,sjは、“1”または“-1”のいずれかである変数である。
【0007】
また、式(1)におけるhiは、スピンiに対応する定数である。iの取り得る値毎に、hiは定数として定められる。また、式(1)におけるJij は、スピンiおよびスピンjの組合せに対応する定数である。iの取り得る値とjの取り得る値の組合せ毎に、Jij は定数として定められる。
【0008】
また、イジングモデルにおけるエネルギー関数の代わりに、QUBO(Quadratic Unconstrained Binary Optimization )のエネルギー関数が用いられてもよい。QUBOは、個々のスピンの向きを“1”または“0”で表すモデルである。
【0009】
すなわち、組合せ最適化問題におけるエネルギーを表す式は、QUBOにおけるエネルギー関数に変換可能である。この変換方法は、公知である。また、イジングモデルにおけるエネルギー関数と、QUBOにおけるエネルギー関数とは、相互に変換可能である。
【0010】
式(1)に示すエネルギー関数が与えられた場合、組合せ最適化問題が求解されると、最適な個々のスピンの向き(1または-1)が求められる。求められた最適な個々のスピンの向きは、組合せ最適化問題の解を表している。
【0011】
多くの組合せ最適化問題は、例えば、与えられた制約条件の下で任意の目的関数(最小化対象)を最小にする組合せを求める問題である最小化問題に帰着可能である。組合せ最適化問題が最小化問題である場合、最適な個々のスピンの向きは、エネルギー関数が示すエネルギーE ができるだけ小さくなるような個々のスピンの向きである。
【0012】
イジングモデル形式で記述された組合せ最適化問題は、例えばシミュレーテッドアニーリング方式(以下、SA方式とも呼ぶ。)で求解される。非特許文献1には、VLSI(Very Large Scale Integration)回路内のモジュールの配置に適用した場合のシミュレーテッドアニーリングアルゴリズムの並列化が記載されている。
【先行技術文献】
【非特許文献】
【0013】
【文献】Jonas Knopman and Julio S. Aude, ”Parallel simulated annealing: An adaptive approach,” In Proceedings 11th International Parallel Processing Symposium, 1997.
【発明の概要】
【発明が解決しようとする課題】
【0014】
組合せ最適化問題を求解する時、SA方式は、スピンをフリップ(反転)させた際のエネルギーが下がればスピンのフリップを受理する。また、SA方式は、スピンをフリップさせた際のエネルギーが上がればスピンのフリップを受理しない。
【0015】
SA方式は、上記の処理を、スピンを変えて数千回、数万回、または数万回以上繰り返し実行する。繰り返し実行することによって、SA方式は、組合せ最適化問題の最適解を求める。
【0016】
しかし、各スピンには依存関係があるため、複数のスピンのフリップが受理されるか否かを同時に計算することは困難である。すなわち、SA方式による繰り返し処理を効率良く並列化することは困難である。また、SA方式による繰り返し処理を効率良く並列化することは、非特許文献1にも記載されていない。
【0017】
そこで、本発明は、シミュレーテッドアニーリング方式による繰り返し処理を効率良く並列化できるシミュレーテッドアニーリング装置、シミュレーテッドアニーリング方法およびシミュレーテッドアニーリングプログラムを提供することを目的とする。
【課題を解決するための手段】
【0018】
本発明によるシミュレーテッドアニーリング装置は、組合せ最適化問題をシミュレーテッドアニーリング方式で求解するシミュレーテッドアニーリング装置であって、組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行する確認手段と、m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新する更新手段と、次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する変更手段とを備えることを特徴とする。
【0019】
本発明によるシミュレーテッドアニーリング方法は、組合せ最適化問題をシミュレーテッドアニーリング方式で求解するシミュレーテッドアニーリング方法であって、コンピュータが、組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行し、コンピュータが、m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新し、コンピュータが、次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更することを特徴とする。
【0020】
本発明によるシミュレーテッドアニーリングプログラムは、組合せ最適化問題をシミュレーテッドアニーリング方式で求解するコンピュータにおいて実行されるシミュレーテッドアニーリングプログラムであって、コンピュータに、組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行する並列処理、m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新する更新処理、および次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する変更処理を実行させることを特徴とする。
【発明の効果】
【0021】
本発明によれば、シミュレーテッドアニーリング方式による繰り返し処理を効率良く並列化できる。
【図面の簡単な説明】
【0022】
【
図1】一般的なSA方式による組合せ最適化問題求解処理の動作を示すフローチャートである。
【
図2】一般的なSA方式による組合せ最適化問題求解処理の並列化の例を示す説明図である。
【
図3】本発明の実施形態のシミュレーテッドアニーリング装置の構成例を示すブロック図である。
【
図4】シミュレーテッドアニーリング装置100による組合せ最適化問題求解処理の並列化の例を示す説明図である。
【
図5】一般的なSA方式による並列処理とシミュレーテッドアニーリング装置100による並列処理の例を示す説明図である。
【
図6】一般的なSA方式による並列処理とシミュレーテッドアニーリング装置100による並列処理の他の例を示す説明図である。
【
図7】一般的なSA方式による並列処理とシミュレーテッドアニーリング装置100による並列処理の他の例を示す説明図である。
【
図8】本実施形態のシミュレーテッドアニーリング装置100による組合せ最適化問題求解処理の動作を示すフローチャートである。
【
図9】本発明によるシミュレーテッドアニーリング装置のハードウェア構成例を示す説明図である。
【
図10】本発明によるシミュレーテッドアニーリング装置の概要を示すブロック図である。
【発明を実施するための形態】
【0023】
最初に、上述した課題の内容を具体的に説明する。SA方式は、組合せ最適化問題を近似的に求解する汎用手法である。SA方式は、以下の4つの処理を1つのサイクルとして組合せ最適化問題を求解する。
【0024】
1.スピンを1つ選択する
2.選んだスピンをフリップさせた場合のエネルギーの変化量Δを計算する
3.確率min(exp(-Δ/T),1)で、スピンのフリップを受理する
4.フリップが受理された場合、選んだスピンをフリップさせる
【0025】
具体的には、SA方式は、上記のステップ2で選択されたスピンの向きを-1→1、または1→-1に反転させ、スピンをフリップさせた場合のエネルギーの変化量Δを計算する。
【0026】
次いで、SA方式は、計算されたΔが負の場合、上記のステップ3でスピンのフリップを受理する。また、計算されたΔが正の場合、SA方式は、上記のように計算される確率でスピンのフリップを受理する。
【0027】
次いで、SA方式は、フリップが受理された場合、上記のステップ4で選んだスピンをフリップさせる。
【0028】
すなわち、ステップ3での計算結果に応じて、SA方式は、スピンのフリップを受理しない。スピンのフリップが受理されない場合、選択されたスピンは、フリップせず元の状態のままである。
【0029】
SA方式は、上記のステップ1~4の処理(以下、繰り返し処理とも呼ぶ。)を繰り返し実行することによって、エネルギーE が最小になるスピンの向きの組合せを求める。
【0030】
図1は、一般的なSA方式による組合せ最適化問題求解処理の動作を示すフローチャートである。
【0031】
最初に、SA方式は、スピン1を選択する(ステップS001)。次いで、SA方式は、スピン1をフリップさせた場合のエネルギーの変化量Δを計算する(ステップS002)。次いで、SA方式は、スピン1のフリップが受理されるか否かを決定するために求められる計算(例えば、確率min(exp(-Δ/T),1)の計算)であるフリップチェック計算を実行する(ステップS003)。
【0032】
次いで、SA方式は、ステップS003における計算結果に応じてスピン1のフリップを受理するか否かを決定する(ステップS004)。フリップを受理すると決定した場合(ステップS004におけるYes )、SA方式は、スピン1をフリップさせる(ステップS005)。フリップを受理しないと決定した場合(ステップS004におけるNo)、SA方式は、ステップS006に進む。
【0033】
すなわち、いずれの結果であっても、SA方式は、スピン1のフリップを受理するか否かを決定してから、次のスピン2を選択する(ステップS006)。ステップS006以降で、SA方式は、ステップS001~S005と同じ処理を繰り返し実行する。
【0034】
図1に示すように、SA方式は、スピンを1つ選択し、選択されたスピンのフリップを受理するか否かを決定する。すなわち、前に選択されたスピンのフリップが受理されるか否かに応じて、次に選択されるスピンのフリップが受理されるか否かも変わる。よって、SA方式による繰り返し処理を並列化することは困難である。
【0035】
図2は、一般的なSA方式による組合せ最適化問題求解処理の並列化の例を示す説明図である。
図2に示す例は、エネルギーの変化量Δを計算する処理の負荷が高いため、スピンで並列化することによって組合せ最適化問題求解処理を高速化する例である。
【0036】
図2に示す1つの矩形が、上記の1つの繰り返し処理を表す。また、
図2に示す矩形内の「p」は処理番号、「s」はスピン番号をそれぞれ表す。また、
図2に示す黒色の矩形は、スピンのフリップが受理される処理を表す。また、
図2に示す破線の矩形で囲まれた矩形は、無駄になる処理を表す。
【0037】
例えば、
図2の最上段に示す4つの矩形は、スピン番号が0のスピンに対する処理番号が0の処理、スピン番号が1のスピンに対する処理番号が1の処理、スピン番号が2のスピンに対する処理番号が2の処理、およびスピン番号が3のスピンに対する処理番号が3の処理が、並列数4で並列に実行される並列処理を表す。
【0038】
また、
図2の最上段に示す4つの矩形は、処理番号が1の処理でスピン番号が1のスピンのフリップが受理されること、および処理番号が3の処理でスピン番号が3のスピンのフリップが受理されることを表す。
【0039】
すなわち、処理番号が1の処理でスピン番号が1のスピンのフリップが受理されるので、スピン番号が2以降のスピンに対する繰り返し処理は、スピン番号が1のスピンがフリップした状態で再度やり直すことが求められる。
【0040】
よって、
図2の最上段に示すように、処理番号が2の処理、および処理番号が3の処理は、どちらも無駄になる。スピン番号が3のスピンも、元の状態のままになる。すなわち、SA方式による組合せ最適化問題求解処理の並列化では、スピンのフリップが受理されても、そのスピンの状態が変わらない場合がある。
【0041】
スピンがフリップさせられた後、SA方式は、フリップさせられたスピンの次のスピンから繰り返し処理をやり直す。
図2の2段目に示すように、SA方式は、処理番号が0の処理をスピン番号が2のスピンに対する処理とする。
【0042】
SA方式は、スピン番号が2のスピンに対する処理番号が0の処理、スピン番号が3のスピンに対する処理番号が1の処理、スピン番号が4のスピンに対する処理番号が2の処理、およびスピン番号が5のスピンに対する処理番号が3の処理を、並列数4で並列に実行する。
【0043】
図2の2段目以降に示す内容は、最上段に示す内容と同様である。
図2に示すように、フリップが頻繁に受理される場合、無駄になる処理が多くなる。
【0044】
少しでも処理時間を短くするために、SA方式は、繰り返し処理における「2.選んだスピンをフリップさせた場合のエネルギーの変化量Δを計算する」処理だけ、先に全てのスピンに渡って並列に計算してもよい。ステップ2の処理を先に実行する場合、SA方式は、以下の4つの処理を繰り返し処理として組合せ最適化問題を求解する。
【0045】
11.スピンを1つ選択する
12.確率min(exp(-Δ/T),1)で、スピンのフリップを受理する
13.フリップが受理された場合、選んだスピンをフリップさせる
14.関連するスピンのエネルギーの変化量Δを更新する
【0046】
すなわち、上記の繰り返し処理は、先にエネルギーの変化量を計算し、スピンがフリップさせられた場合にのみ、フリップしたスピンに関連するスピンのエネルギーの変化量を更新する処理である。
【0047】
ただし、ステップ11~14の処理の1回あたりの演算量は大きくない。よって、メモリを共有し、各プロセスや各スレッドが繰り返し処理を並列に実行してから同期がとられるマルチプロセス方式やマルチスレッド方式で複数の繰り返し処理が並列に実行されても、処理全体では同期によるオーバヘッドの方が支配的になる。すなわち、マルチプロセス方式やマルチスレッド方式による並列化の効果は小さい。
【0048】
以下、フリップが頻繁に受理される場合に無駄になる処理を削減でき、かつ組合せ最適化問題求解処理全体における同期によるオーバヘッドの影響を削減できる本発明の実施形態を、図面を参照して説明する。
【0049】
[構成の説明]
図3は、本発明の実施形態のシミュレーテッドアニーリング装置の構成例を示すブロック図である。
【0050】
図3に示すように、本実施形態のシミュレーテッドアニーリング装置100は、エネルギー計算部110と、フリップ確認部120と、開始位置・並列数計算部130と、エネルギー更新部140とを備える。
【0051】
なお、本実施形態のシミュレーテッドアニーリング装置100は、先に全てのスピンに渡ってスピンのフリップによるエネルギーの変化量Δを並列に計算し、ステップ11~14の4つの処理を1つのサイクルとして組合せ最適化問題を求解する方式を採用する。
【0052】
エネルギー計算部110は、全てのスピンに渡ってスピンのフリップによるエネルギーの変化量Δを並列に計算する機能を有する。
【0053】
フリップ確認部120は、ステップ11~13の処理を並列に実行する機能を有する。すなわち、フリップ確認部120は、スピンを選択し、確率min(exp(-Δ/T),1)で、スピンのフリップを受理する。フリップが受理された場合、フリップ確認部120は、選んだスピンをフリップさせる。
【0054】
開始位置・並列数計算部130は、ステップ11~13の処理の結果を基に、次の並列処理を開始させるスピンの位置、および並列処理の並列数を計算する機能を有する。
【0055】
エネルギー更新部140は、ステップ14の処理を並列に実行する機能を有する。すなわち、エネルギー更新部140は、スピンがフリップさせられた場合にのみ、フリップしたスピンに関連するスピンのエネルギーの変化量を並列に更新する。
【0056】
本実施形態のシミュレーテッドアニーリング装置100は、ベクトル演算器で並列化を実現することを特徴とする。例えば、フリップ確認部120およびエネルギー更新部140は、ベクトル演算器で実現される。
【0057】
ベクトル演算器は、マルチプロセスやマルチスレッドと異なり、最初から並列処理に特化したデバイスである。ベクトル演算器による並列化では、同期によるオーバヘッドの影響が無い。また、ベクトル演算器は、並列化の対象を変更できるため、フリップ確認部120による処理、およびエネルギー更新部140による処理のいずれも並列化できる。
【0058】
また、本実施形態のシミュレーテッドアニーリング装置100は、繰り返し幅を固定化することによって、
図2に示す無駄な処理を削減するという特徴を有する。無駄な処理を減らして並列数が削減される場合、ベクトル演算器で実現されるフリップ確認部120およびエネルギー更新部140は、並列処理をより高速に実行できる。
【0059】
並列数を減らす利点を以下に説明する。マルチプロセスやマルチスレッドで並列処理が実行される場合、一般的に並列数が変更されても、処理速度は大きく変わらない場合が多い。例えば、処理Xが1プロセスで実行された時間と、処理Xが4つに分割されて4プロセスで並列に実行された時間が、ほぼ等しくなる場合がある。
【0060】
また、ベクトル演算器で実行される場合や分割された各処理の時間が短い場合等でも、並列数に応じて処理速度が異なる。例えば、条件次第で、処理Xが1プロセスで実行された時間よりも、処理Xが4つに分割されて4プロセスで並列に実行された時間の方が長くなる場合もある。
【0061】
よって、無駄な演算をせずに並列数を減らした方が、並列処理の処理時間が短くなる可能性がある。また、並列処理自体が効率的に実行される。
図2の最上段に示す並列処理であれば、処理番号が2の処理、および処理番号が3の処理はどちらも無駄な処理である。並列数が4の並列処理よりも並列数が2の並列処理の方が処理時間が短い可能性が高いので、並列数は4から2に削減される方が好ましい。
【0062】
図4は、シミュレーテッドアニーリング装置100による組合せ最適化問題求解処理の並列化の例を示す説明図である。
【0063】
図4の最上段に示す4つの矩形が表す内容は、
図2の最上段に示す4つの矩形が表す内容と同様である。
図4の最上段に示すように、処理番号が2の処理、および処理番号が3の処理は、どちらも無駄になる。
【0064】
図4の2段目に示すように、本実施形態のシミュレーテッドアニーリング装置100は、最上段に示す4つの矩形が表す処理のうちやり直しが求められる残りの2つの処理のみを、並列数を4から2に減らすことによって並列に実行する。
【0065】
本実施形態において「繰り返し幅を固定化」は、並列処理の対象のスピン全ての向きが確定するまで次のスピンに対して繰り返し処理が実行されないことを表している。
図4に示す例では、固定幅が4に設定されている。なお、開始位置・並列数計算部130が、並列処理を再開させるスピンの位置の計算と、並列数の更新とを実行する。
【0066】
よって、
図4の2段目に示すように、シミュレーテッドアニーリング装置100は、スピン番号が2のスピンに対する処理番号が0の処理、およびスピン番号が3のスピンに対する処理番号が1の処理を、並列数2で並列に実行する。なお、
図4の2段目に示すように、並列処理の最後の処理でスピンのフリップが受理されても、次の並列処理に影響は及ばない。
【0067】
図4の2段目に示す並列処理が終了した段階で最初に並列処理の対象とされたスピン番号0~3の4つのスピン全ての向きが確定したので、シミュレーテッドアニーリング装置100は、次のスピン番号4~7の4つのスピンを対象として並列処理を実行する。
【0068】
図4の3段目に示すように、処理番号が2の処理でスピン番号が6のスピンのフリップが受理されている。よって、
図4の4段目に示すように、シミュレーテッドアニーリング装置100は、3段目に示す4つの矩形が表す処理のうちやり直しが求められる残りの処理に対応する、スピン番号が7のスピンに対する処理番号が0の処理を、並列数を4から1に減らして並列に実行する。
【0069】
図4の4段目に示す並列処理が終了した段階で2回目に並列処理の対象とされたスピン番号4~7の4つのスピン全ての向きが確定したので、シミュレーテッドアニーリング装置100は、次のスピン番号8~11の4つのスピンを対象として並列処理を実行する。
【0070】
以下、本実施形態のシミュレーテッドアニーリング装置100が奏する効果を説明する。
図5は、一般的なSA方式による並列処理とシミュレーテッドアニーリング装置100による並列処理の例を示す説明図である。
【0071】
図5の上段に示す細長い矩形は、順番に並べられた処理対象スピンを表す。また、黒色の矩形は、フリップが受理されるスピンであるフリップスピンを表す。また、縦線と縦線の間の長さは、固定幅を表す。すなわち、
図5に示す例は、固定幅内にフリップスピンが1つ存在する場合の例である。なお、
図5に示す各表記の意味は、
図6~7においても同様である。
【0072】
図5の中段に示す細長い矩形は、一般的なSA方式による並列処理を表す。
図5の中段に示すように、一般的なSA方式では、前回フリップしたスピンの位置に応じて、並列処理の開始位置が異なる。
【0073】
図5に示す斜線が付された矩形は、無駄になる演算を表す。並列処理の開始位置が異なると、無駄になる演算の量も変化する。例えば、
図5に示す処理Aでは、1つ目の並列処理が終了した後、2つ目の並列処理の対象の前の方のスピンがフリップしている。すなわち、無駄になる演算の量が比較的多くなる。
【0074】
また、例えば、
図5に示す処理Bでは、1つ目の並列処理の対象の後ろの方のスピンがフリップしている。すなわち、無駄になる演算の量が比較的少なくなる。
【0075】
図5の下段に示す細長い矩形は、シミュレーテッドアニーリング装置100による並列処理を表す。シミュレーテッドアニーリング装置100による並列処理では、前回フリップしたスピンの位置に関係なく、並列処理の開始位置が異ならない。
【0076】
並列処理の開始位置が異ならないため、無駄になる演算の量も変化しない。例えば、
図5の下段に示す処理では、1つ目の並列処理が終了した後、2つ目の並列処理の対象の中央のスピン(フリップスピン)がフリップしている。シミュレーテッドアニーリング装置100は、フリップスピンの次のスピンを開始位置として、残りの並列処理を実行する。すなわち、無駄になる演算の量は、フリップスピンの位置のみで決定される。
【0077】
一般的なSA方式による並列処理の開始位置が、1つ目の縦線からフリップスピンまでの間である場合(例えば、処理Aの場合)には、シミュレーテッドアニーリング装置100は、無駄になる演算の量を削減できる。換言すると、固定幅内にフリップスピンが1つ存在する場合、一般的なSA方式に比べてシミュレーテッドアニーリング装置100が無駄になる演算の量を削減できる確率は、50%である。
【0078】
図6は、一般的なSA方式による並列処理とシミュレーテッドアニーリング装置100による並列処理の他の例を示す説明図である。
図6の上段に示すように、本例の処理対象スピンには、フリップスピンが2つ存在する。
【0079】
図6の中段に示す細長い矩形は、一般的なSA方式による並列処理を表す。
図6に示す右上がり斜線が付された矩形は、1つ目のフリップスピンが原因で無駄になる演算を表す。
図6の中段に示すように、
図5に示す例と同様、並列処理の開始位置が異なると、1つ目のフリップスピンが原因で無駄になる演算の量も変化する。
【0080】
また、
図6に示す右下がり斜線が付された矩形は、2つ目のフリップスピンが原因で無駄になる演算を表す。
図6に示す処理C~Eのいずれにおいても、並列処理が1つ目のフリップスピンの次のスピンから再開されるため、2つ目のフリップスピンが原因で無駄になる演算の量は同一になる。すなわち、2つ目のフリップスピンが原因で無駄になる演算の量は、2つのフリップスピンの位置で決定される。
【0081】
図6の下段に示す細長い矩形は、シミュレーテッドアニーリング装置100による並列処理を表す。
図6の下段に示す処理では、1つ目の並列処理が終了した後、2つ目の並列処理の対象の中央のスピン(1つ目のフリップスピン)がフリップしている。シミュレーテッドアニーリング装置100は、1つ目のフリップスピンの次のスピンを開始位置として、残りの並列処理を実行する。
【0082】
また、3つ目の並列処理の対象の中央のスピン(2つ目のフリップスピン)がフリップしている。シミュレーテッドアニーリング装置100は、2つ目のフリップスピンの次のスピンを開始位置として、残りの並列処理を実行する。
【0083】
固定幅内にフリップスピンが2つ存在する時、シミュレーテッドアニーリング装置100は、
図6に示すように、一般的なSA方式に比べて、2つ目のフリップスピンが原因で無駄になる演算の量のうち両端矢印の長さ分の量を必ず削減できる。両端矢印の長さは、1つ目の縦線から1つ目のフリップスピンの位置までの長さに相当する。
【0084】
上記のように、
図5に示す例と異なり、
図6に示す固定幅内にフリップスピンが2つ存在する例では、一般的なSA方式に比べてシミュレーテッドアニーリング装置100は、フリップスピンが原因で無駄になる演算の量を必ず削減できる。
【0085】
図7は、一般的なSA方式による並列処理とシミュレーテッドアニーリング装置100による並列処理の他の例を示す説明図である。
図7の上段に示すように、本例の処理対象スピンには、フリップスピンが3つ存在する。
【0086】
図7の中段に示す細長い矩形は、一般的なSA方式による並列処理を表す。
図7に示す右上がり斜線が付された矩形は、1つ目のフリップスピンが原因で無駄になる演算を表す。
図5に示す例と同様、1つ目の並列処理の開始位置に応じて、1つ目のフリップスピンが原因で無駄になる演算の量は異なる。
【0087】
また、
図7に示す右下がり斜線が付された矩形は、2つ目のフリップスピンが原因で無駄になる演算を表す。2つ目の並列処理は1つ目のフリップスピンの次のスピンから再開されるため、2つ目のフリップスピンが原因で無駄になる演算の量は不変である。
【0088】
また、
図7に示す縦線が付された矩形は、3つ目のフリップスピンが原因で無駄になる演算を表す。3つ目の並列処理は2つ目のフリップスピンの次のスピンから再開されるため、3つ目のフリップスピンが原因で無駄になる演算の量は不変である。3つ目のフリップスピンが原因で無駄になる演算の量は、2つ目のフリップスピンの位置と3つ目のフリップスピンの位置で決定される。
【0089】
図7の下段に示す細長い矩形は、シミュレーテッドアニーリング装置100による並列処理を表す。
図7の下段に示す処理では、1つ目の並列処理が終了した後、2つ目の並列処理の対象の中央のスピン(1つ目のフリップスピン)がフリップしている。シミュレーテッドアニーリング装置100は、1つ目のフリップスピンの次のスピンを開始位置として、残りの並列処理を実行する。
【0090】
また、3つ目の並列処理の対象の中央のスピン(2つ目のフリップスピン)がフリップしている。シミュレーテッドアニーリング装置100は、2つ目のフリップスピンの次のスピンを開始位置として、残りの並列処理を実行する。
【0091】
また、4つ目の並列処理の対象の中央のスピン(3つ目のフリップスピン)がフリップしている。シミュレーテッドアニーリング装置100は、3つ目のフリップスピンの次のスピンを開始位置として、残りの並列処理を実行する。
【0092】
固定幅内にフリップスピンが3つ存在する時、シミュレーテッドアニーリング装置100は、
図7に示すように、一般的なSA方式に比べて、2つ目のフリップスピンが原因で無駄になる演算の量のうち、破線の両端矢印の長さ分の量を必ず削減できる。破線の両端矢印の長さは、1つ目の縦線から1つ目のフリップスピンの位置までの長さに相当する。
【0093】
同様に、シミュレーテッドアニーリング装置100は、
図7に示すように、一般的なSA方式に比べて、3つ目のフリップスピンが原因で無駄になる演算の量のうち、両端矢印の長さ分の量を必ず削減できる。両端矢印の長さは、1つ目の縦線から2つ目のフリップスピンの位置までの長さに相当する。
【0094】
上記のように、
図5に示す例と異なり、
図7に示す固定幅内にフリップスピンが3つ存在する例では、一般的なSA方式に比べてシミュレーテッドアニーリング装置100は、フリップスピンが原因で無駄になる演算の量を必ず削減できる。また、シミュレーテッドアニーリング装置100は、固定幅内にフリップスピンが多く存在するほど、無駄になる演算の量を多く削減できる。
【0095】
以上のように、本実施形態のシミュレーテッドアニーリング装置100は、組合せ最適化問題をシミュレーテッドアニーリング方式で求解するシミュレーテッドアニーリング装置である。シミュレーテッドアニーリング装置100は、エネルギー計算部110と、フリップ確認部120と、開始位置・並列数計算部130と、エネルギー更新部140とを備える。
【0096】
フリップ確認部120は、組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行する。
【0097】
また、エネルギー更新部140は、m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新する。
【0098】
また、開始位置・並列数計算部130は、次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する。
【0099】
また、フリップ確認部120は、k・n番目のスピンがフリップするか否かが確定した後に(k・n+1)番目~(k+1)・n番目のn個のスピンそれぞれに対して確認処理を並列数nで並列に実行する。
【0100】
また、エネルギー計算部110は、エネルギー関数を構成する全てのスピンに渡ってスピンのフリップによるエネルギーの変化量をそれぞれ計算する。フリップ確認部120は、エネルギーの変化量がそれぞれ計算された後に最初の確認処理を実行する。
【0101】
また、上記のように、フリップ確認部120およびエネルギー更新部140は、ベクトル演算器で実現されてもよい。また、組合せ最適化問題は、巡回セールスマン問題でもよい。
【0102】
[動作の説明]
以下、本実施形態のシミュレーテッドアニーリング装置100の動作を
図8を参照して説明する。
図8は、本実施形態のシミュレーテッドアニーリング装置100による組合せ最適化問題求解処理の動作を示すフローチャートである。
【0103】
最初に、シミュレーテッドアニーリング装置100に、イジングモデル形式で記述された組合せ最適化問題が入力される。
【0104】
開始位置・並列数計算部130は、入力された組合せ最適化問題をSA方式で求解する際の並列処理の初期並列数K(Kは2以上の整数)を決定する(ステップS101)。
【0105】
次いで、エネルギー計算部110は、イジングモデルにおけるエネルギー関数を構成する全てのスピンに渡ってスピンのフリップによるエネルギーの変化量を並列に計算する(ステップS102)。次いで、シミュレーテッドアニーリング装置100は、イテレーションに入る(ステップS103)。
【0106】
次いで、シミュレーテッドアニーリング装置100は、スピンループに入る(ステップS104)。次いで、開始位置・並列数計算部130は、並列処理の開始位置と、並列数N(Nは2以上の整数)を変更する(ステップS105)。
【0107】
1回目のスピンループでは、開始位置・並列数計算部130は、並列処理の開始位置を1番目のスピンに設定する。また、開始位置・並列数計算部130は、並列数Nを初期並列数Kに設定する。
【0108】
次いで、フリップ確認部120は、1番目からK番目までのK個のスピンに対してそれぞれ、フリップチェック計算を並列に実行する(ステップS1061 ~S106N )。
【0109】
次いで、フリップ確認部120は、1番目からK番目までのK個のスピンに対してそれぞれ、フリップを受理するか否かを並列に決定する(ステップS1071 ~S107N )。
【0110】
次いで、フリップ確認部120は、フリップが受理されるスピンが最後尾(K番目のスピン)以外で少なくとも1つ存在するか否かを確認する(ステップS108)。
【0111】
フリップが受理されるスピンが最後尾以外で少なくとも1つ存在する場合(ステップS108におけるYes )、フリップ確認部120は、フリップが受理されるスピンのうち最初のスピンをフリップさせる(ステップS109)。
【0112】
次いで、エネルギー更新部140は、フリップしたスピンに関連するスピンのエネルギーの変化量を並列に更新する(ステップS110)。
【0113】
次いで、開始位置・並列数計算部130は、並列処理の開始位置と、並列数Nを変更する(ステップS111)。例えば、フリップが受理されるスピンのうち最初のスピンがM番目(Mは1以上K未満の整数)のスピンである場合、開始位置・並列数計算部130は、並列処理の開始位置を、(M+1)番目のスピンに変更する。
【0114】
また、開始位置・並列数計算部130は、並列数Nを、(K-M)に変更する。開始位置と並列数Nを変更した後、フリップ確認部120は、ステップS1061 ~S106N の処理を再度並列に実行する。
【0115】
例えば、フリップ確認部120は、(M+1)番目からK番目までの(K-M)個のスピンに対してそれぞれ、フリップチェック計算を並列に実行する(ステップS1061 ~S106N )。
【0116】
また、フリップ確認部120は、(M+1)番目からK番目までの(K-M)個のスピンに対してそれぞれ、フリップを受理するか否かを並列に決定する(ステップS1071 ~S107N )。
【0117】
フリップが受理されるスピンが最後尾以外で1つも存在しない場合(ステップS108におけるNo)、開始位置・並列数計算部130は、再度ステップS105の処理を実行する。
【0118】
2回目のスピンループを開始する時、開始位置・並列数計算部130は、並列処理の開始位置を、(K+1)番目のスピンに変更する。また、開始位置・並列数計算部130は、並列数Nを初期並列数Kに変更する(ステップS105)。
【0119】
シミュレーテッドアニーリング装置100は、イジングモデルにおけるエネルギー関数を構成するスピンのうち未だに向きが確定していないスピンが存在する間、ステップS105~S111の処理を繰り返し実行する。全てのスピンの向きが確定した時、シミュレーテッドアニーリング装置100は、スピンループを抜ける(ステップS112)。
【0120】
シミュレーテッドアニーリング装置100は、例えばイテレーション回数が所定の回数(数千回、数万回等)に到達するまでの間、ステップS104~S112の処理を繰り返し実行する。イテレーション回数が所定の回数に到達した時、シミュレーテッドアニーリング装置100は、イテレーションを抜け(ステップS113)、組合せ最適化問題求解処理を終了する。
【0121】
[効果の説明]
本実施形態のシミュレーテッドアニーリング装置100では、並列処理の対象のスピンがフリップした場合、開始位置・並列数計算部130が並列処理の開始位置と、並列数を変更する。開始位置と並列数が変更された上で、残りの並列処理が実行される。
【0122】
上記のように並列数を変更しながら並列処理を実行することによって、シミュレーテッドアニーリング装置100は、フリップが受理されるスピンが多いほど、一般的なSA方式に比べて無駄になる演算の量を削減できる。よって、シミュレーテッドアニーリング装置100は、シミュレーテッドアニーリング方式による繰り返し処理を効率良く並列化できる。
【0123】
また、本実施形態のシミュレーテッドアニーリング装置100のフリップ確認部120およびエネルギー更新部140は、ベクトル演算器で実現される場合がある。ベクトル演算器で実現されることによって、マルチプロセスやマルチスレッドによる並列化で生じていた同期によるオーバヘッドの影響が無くなる。
【0124】
以下、本実施形態のシミュレーテッドアニーリング装置100のハードウェア構成の具体例を説明する。
図9は、本発明によるシミュレーテッドアニーリング装置のハードウェア構成例を示す説明図である。
【0125】
図9に示すシミュレーテッドアニーリング装置100は、CPU(Central Processing Unit )11と、主記憶部12と、通信部13と、補助記憶部14とを備える。また、ユーザが操作するための入力部15や、ユーザに処理結果または処理内容の経過を提示するための出力部16を備える。
【0126】
シミュレーテッドアニーリング装置100は、
図9に示すCPU11が各構成要素が有する機能を提供するプログラムを実行することによって、ソフトウェアにより実現される。
【0127】
すなわち、CPU11が補助記憶部14に格納されているプログラムを、主記憶部12にロードして実行し、シミュレーテッドアニーリング装置100の動作を制御することによって、各機能がソフトウェアにより実現される。
【0128】
なお、
図9に示すシミュレーテッドアニーリング装置100は、CPU11の代わりにDSP(Digital Signal Processor)を備えてもよい。または、
図9に示すシミュレーテッドアニーリング装置100は、CPU11とDSPとを併せて備えてもよい。
【0129】
主記憶部12は、データの作業領域やデータの一時退避領域として用いられる。主記憶部12は、例えばRAM(Random Access Memory)である。
【0130】
通信部13は、有線のネットワークまたは無線のネットワーク(情報通信ネットワーク)を介して、周辺機器との間でデータを入力および出力する機能を有する。
【0131】
補助記憶部14は、一時的でない有形の記憶媒体である。一時的でない有形の記憶媒体として、例えば磁気ディスク、光磁気ディスク、CD-ROM(Compact Disk Read Only Memory )、DVD-ROM(Digital Versatile Disk Read Only Memory )、半導体メモリが挙げられる。
【0132】
入力部15は、データや処理命令を入力する機能を有する。入力部15は、例えばキーボードやマウス等の入力デバイスである。
【0133】
出力部16は、データを出力する機能を有する。出力部16は、例えば液晶ディスプレイ装置等の表示装置、またはプリンタ等の印刷装置である。
【0134】
また、
図9に示すように、シミュレーテッドアニーリング装置100において、各構成要素は、システムバス17に接続されている。
【0135】
シミュレーテッドアニーリング装置100において、補助記憶部14は、エネルギー計算部110、フリップ確認部120、開始位置・並列数計算部130、およびエネルギー更新部140を実現するためのプログラムを記憶している。
【0136】
なお、シミュレーテッドアニーリング装置100は、例えば内部に
図3に示すような機能を実現するLSI(Large Scale Integration )等のハードウェア部品が含まれる回路が実装されてもよい。
【0137】
また、シミュレーテッドアニーリング装置100は、CPU等の素子を用いるコンピュータ機能を含まないハードウェアにより実現されてもよい。例えば、各構成要素の一部または全部は、汎用の回路(circuitry )または専用の回路、プロセッサ等やこれらの組み合わせによって実現されてもよい。これらは、単一のチップ(例えば、上記のLSI)によって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各構成要素の一部または全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
【0138】
また、シミュレーテッドアニーリング装置100の各構成要素の一部または全部は、演算部と記憶部とを備えた1つまたは複数の情報処理装置で構成されていてもよい。
【0139】
各構成要素の一部または全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【0140】
次に、本発明の概要を説明する。
図10は、本発明によるシミュレーテッドアニーリング装置の概要を示すブロック図である。本発明によるシミュレーテッドアニーリング装置20は、組合せ最適化問題をシミュレーテッドアニーリング方式で求解するシミュレーテッドアニーリング装置であって、組合せ最適化問題を表すイジングモデルにおけるエネルギー関数を構成する{(k-1)・n+1}番目~k・n番目(kは1以上の整数、nは2以上の整数)のn個のスピンそれぞれに対して、フリップが受理されるか否かの確認処理を並列数nで並列に実行する確認手段21(例えば、フリップ確認部120)と、m番目(mは{(k-1)・n+1}以上k・n未満の整数)のスピンで最初にフリップの受理が確認されると、m番目のスピンに関連するスピンのエネルギーの変化量をm番目のスピンがフリップした状態で更新する更新手段22(例えば、エネルギー更新部140)と、次の確認処理が実行されるスピンを(m+1)番目~k・n番目のスピンに、並列数を(n-m)にそれぞれ変更する変更手段23(例えば、開始位置・並列数計算部130)とを備える。
【0141】
そのような構成により、シミュレーテッドアニーリング装置は、シミュレーテッドアニーリング方式による繰り返し処理を効率良く並列化できる。
【0142】
また、確認手段21は、k・n番目のスピンがフリップするか否かが確定した後に(k・n+1)番目~(k+1)・n番目のn個のスピンそれぞれに対して確認処理を並列数nで並列に実行してもよい。
【0143】
そのような構成により、シミュレーテッドアニーリング装置は、シミュレーテッドアニーリング方式による繰り返し処理を効率良く並列化できる。
【0144】
また、シミュレーテッドアニーリング装置20は、エネルギー関数を構成する全てのスピンに渡ってスピンのフリップによるエネルギーの変化量をそれぞれ計算する計算手段(例えば、フリップ確認部120)を備え、確認手段21は、エネルギーの変化量がそれぞれ計算された後に最初の確認処理を実行してもよい。
【0145】
そのような構成により、シミュレーテッドアニーリング装置は、より高速に組合せ最適化問題を求解できる。
【0146】
また、確認手段21および更新手段22は、ベクトル演算器で実現されてもよい。
【0147】
そのような構成により、シミュレーテッドアニーリング装置は、マルチプロセスやマルチスレッドによる並列化における、同期によるオーバヘッドの影響を削減できる。
【0148】
また、組合せ最適化問題は、巡回セールスマン問題でもよい。
【0149】
そのような構成により、シミュレーテッドアニーリング装置は、より高速に巡回セールスマン問題を求解できる。
【0150】
以上、実施形態および実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【0151】
11 CPU
12 主記憶部
13 通信部
14 補助記憶部
15 入力部
16 出力部
17 システムバス
20、100 シミュレーテッドアニーリング装置
21 確認手段
22 更新手段
23 変更手段
110 エネルギー計算部
120 フリップ確認部
130 開始位置・並列数計算部
140 エネルギー更新部