IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧 ▶ 東芝ソリューション株式会社の特許一覧

特許7562509情報処理装置、情報処理システム、情報処理方法、記憶媒体およびプログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-27
(45)【発行日】2024-10-07
(54)【発明の名称】情報処理装置、情報処理システム、情報処理方法、記憶媒体およびプログラム
(51)【国際特許分類】
   G06F 17/10 20060101AFI20240930BHJP
   G06N 99/00 20190101ALI20240930BHJP
【FI】
G06F17/10 Z
G06N99/00 180
【請求項の数】 15
(21)【出願番号】P 2021509675
(86)(22)【出願日】2020-03-27
(86)【国際出願番号】 JP2020014272
(87)【国際公開番号】W WO2020196883
(87)【国際公開日】2020-10-01
【審査請求日】2023-03-24
(31)【優先権主張番号】P 2019064276
(32)【優先日】2019-03-28
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】301063496
【氏名又は名称】東芝デジタルソリューションズ株式会社
(74)【代理人】
【識別番号】100091487
【弁理士】
【氏名又は名称】中村 行孝
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100118876
【弁理士】
【氏名又は名称】鈴木 順生
(74)【代理人】
【識別番号】100202429
【弁理士】
【氏名又は名称】石原 信人
(72)【発明者】
【氏名】鈴木 賢
(72)【発明者】
【氏名】後藤 隼人
(72)【発明者】
【氏名】辰村 光介
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2019-145010(JP,A)
【文献】米国特許出願公開第2016/0071021(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06N 99/00
(57)【特許請求の範囲】
【請求項1】
第1変数を要素とする第1ベクトルおよび前記第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新するように構成された情報処理装置であって、
前記第1変数および前記第2変数を記憶するように構成された記憶部と、
前記第1変数に対応する前記第2変数を重み付け加算することによって前記第1ベクトルを更新し、
前記第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前記第2変数に加算し、複数の前記第1変数を用いて問題項を計算し、前記問題項を前記第2変数に加算することによって前記第2ベクトルを更新し、
前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、擬似乱数によって前記第2ベクトルの前記第2変数を初期化し、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返すように構成された処理回路と
を備え
前記問題項は、対象の問題に応じて決定されるイジングエネルギーに由来する項である、
情報処理装置。
【請求項2】
前記処理回路は、前記第2ベクトルの前記第2変数の初期化が行われる回数に応じて前記擬似乱数の生成関数の最大絶対値を変えるように構成されている、
請求項1に記載の情報処理装置。
【請求項3】
前記処理回路は、前記第2ベクトルの前記第2変数の初期化が行われる回数に応じて前記擬似乱数の生成関数の最大絶対値を単調減少させるように構成されている、
請求項1に記載の情報処理装置。
【請求項4】
前記処理回路は、前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、前記第1ベクトルに基づいて目的関数の値を計算し、前記第1ベクトルおよび前記目的関数の値を前記記憶部に保存した後、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返すように構成されている、
請求項1ないし3のいずれか一項に記載の情報処理装置。
【請求項5】
前記処理回路は、前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、正値である前記第1変数を第1値に変換し、負値である前記第1変数を前記第1値より小さい第2値に変換することによって前記第1ベクトルより解ベクトルを計算し、前記解ベクトルに基づいて目的関数の値を計算し、前記解ベクトルおよび前記目的関数の値を前記記憶部に保存した後、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返すように構成されている、
請求項1ないし3のいずれか一項に記載の情報処理装置。
【請求項6】
前記処理回路が生成する前記擬似乱数は、正規乱数である、
請求項1ないし5のいずれか一項に記載の情報処理装置。
【請求項7】
前記処理回路が生成する前記擬似乱数は、一様乱数である、
請求項1ないし5のいずれか一項に記載の情報処理装置。
【請求項8】
前記処理回路が計算する前記問題項は、イジングモデルに基づいている、
請求項1ないし7のいずれか一項に記載の情報処理装置。
【請求項9】
前記処理回路が計算する前記問題項は、多体相互作用の項を含んでいる、
請求項8に記載の情報処理装置。
【請求項10】
複数の前記処理回路を備え、
それぞれの前記処理回路は、並列的に前記第1ベクトルの少なくとも一部および前記第2ベクトルの少なくとも一部を更新するように構成されている、
請求項1ないし9のいずれか一項に記載の情報処理装置。
【請求項11】
第1変数を要素とする第1ベクトルおよび前記第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新するように構成された情報処理システムであって、
前記第1変数および前記第2変数を記憶するように構成された記憶装置と、
前記第1変数に対応する前記第2変数を重み付け加算することによって前記第1ベクトルを更新し、
前記第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前記第2変数に加算し、複数の前記第1変数を用いて問題項を計算し、前記問題項を前記第2変数に加算することによって前記第2ベクトルを更新し、
前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、擬似乱数によって前記第2ベクトルの前記第2変数を初期化し、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返すように構成された情報処理装置と
を備え
前記問題項は、対象の問題に応じて決定されるイジングエネルギーに由来する項である、
情報処理システム。
【請求項12】
複数の前記情報処理装置を備え、
それぞれの前記情報処理装置は、並列的に前記第1ベクトルの少なくとも一部および前記第2ベクトルの少なくとも一部を更新するように構成されている、
請求項11に記載の情報処理システム。
【請求項13】
第1変数を要素とする第1ベクトルおよび前記第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新する情報処理方法であって、
コンピュータが、
前記第1変数に対応する前記第2変数を重み付け加算することによって前記第1ベクトルを更新するステップと、
前記第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前記第2変数に加算し、複数の前記第1変数を用いて問題項を計算し、前記問題項を前記第2変数に加算することによって前記第2ベクトルを更新するステップと
実行することを含み、
前記コンピュータが前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、擬似乱数によって前記第2ベクトルの前記第2変数を初期化し、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返し、
前記問題項は、対象の問題に応じて決定されるイジングエネルギーに由来する項である、
情報処理方法。
【請求項14】
コンピュータに第1変数を要素とする第1ベクトルおよび前記第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新させるプログラムであって、
前記第1変数に対応する前記第2変数を重み付け加算することによって前記第1ベクトルを更新するステップと、
前記第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前記第2変数に加算し、複数の前記第1変数を用いて問題項を計算し、前記問題項を前記第2変数に加算することによって前記第2ベクトルを更新するステップとを含み、
前記コンピュータに前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、擬似乱数によって前記第2ベクトルの前記第2変数を初期化し、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返させ
前記問題項は、対象の問題に応じて決定されるイジングエネルギーに由来する項である、
プログラムを格納している、
非一時的なコンピュータ可読な記憶媒体。
【請求項15】
コンピュータに第1変数を要素とする第1ベクトルおよび前記第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新させるプログラムであって、
前記第1変数に対応する前記第2変数を重み付け加算することによって前記第1ベクトルを更新するステップと、
前記第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前記第2変数に加算し、複数の前記第1変数を用いて問題項を計算し、前記問題項を前記第2変数に加算することによって前記第2ベクトルを更新するステップとを含み、
前記コンピュータに前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、擬似乱数によって前記第2ベクトルの前記第2変数を初期化し、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返させ
前記問題項は、対象の問題に応じて決定されるイジングエネルギーに由来する項である、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、情報処理装置、情報処理システム、情報処理方法、記憶媒体およびプログラムに関する。
【背景技術】
【0002】
組合せ最適化問題とは、複数の組合せの中から目的に最も適した組合せを選ぶ問題である。組合せ最適化問題は、数学的には、「目的関数」と呼ばれる、複数の離散変数を有する関数を最大化させる問題、または、当該関数を最小化させる問題に帰着される。組合せ最適化問題は、金融、物流、交通、設計、製造、生命科学など各種の分野において普遍的な問題であるが、組合せ数が問題サイズの指数関数のオーダーで増える、いわゆる「組合せ爆発」のため、必ず最適解を求めることができるとは限らない。また、最適解に近い近似解を得ることすら難しい場合が多い。
【0003】
各分野における問題を解決し、社会のイノベーションおよび科学技術の進歩を促進するために、組合せ最適化問題の解を実用的な時間内で計算する技術の開発が求められている。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2017-73106号公報
【非特許文献】
【0005】
【文献】H. Goto, K. Tatsumura, A. R. Dixon, Sci. Adv. 5, eaav2372 (2019).
【文献】H. Goto, Sci. Rep. 6, 21686 (2016).
【文献】土屋、西山、辻田:分岐特性を用いた組合せ最適化問題の近似解法URL:http://www.ynl.t.u-tokyo.ac.jp/project/RobotBrainCREST/publications/pdf/tsuchiya/4_01.pdf
【文献】土屋、西山、辻田:決定論的アニーリングアルゴリズムの解析URL:http://www.ynl.t.u-tokyo.ac.jp/project/RobotBrainCREST/publications/pdf/tsuchiya/4_02.pdf
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の実施形態は、組合せ最適化問題の解を実用的な時間内で計算する情報処理装置、情報処理システム、情報処理方法、記憶媒体およびプログラムを提供する。
【課題を解決するための手段】
【0007】
本発明の実施形態としての情報処理装置は、第1変数を要素とする第1ベクトルおよび前記第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新するように構成された情報処理装置であって、前記第1変数および前記第2変数を記憶するように構成された記憶部と、前記第1変数に対応する前記第2変数を重み付け加算することによって前記第1ベクトルを更新し、前記第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前記第2変数に加算し、複数の前記第1変数を用いて問題項を計算し、前記問題項を前記第2変数に加算することによって前記第2ベクトルを更新し、前記第1ベクトルおよび前記第2ベクトルの更新を繰り返した後、擬似乱数によって前記第2ベクトルの前記第2変数を初期化し、再び前記第1ベクトルおよび前記第2ベクトルの更新を繰り返すように構成された処理回路とを備える。
【図面の簡単な説明】
【0008】
図1】情報処理システムの構成例を示した図。
図2】管理サーバの構成例を示したブロック図。
図3】管理サーバの記憶部に保存されるデータの例を示す図。
図4】計算サーバの構成例を示したブロック図。
図5】計算サーバのストレージに保存されるデータの例を示す図。
図6】時間発展によってシミュレーテッド分岐アルゴリズムの解を計算する場合における処理の例を示したフローチャート。
図7】変形例1によるアルゴリズムの例を示したフローチャート。
図8】変形例2によるアルゴリズムの例を示したフローチャート。
図9図7および図8のステップS114において実行される処理の第1の例を示したフローチャート。
図10図7および図8のステップS114において実行される処理の第2の例を示したフローチャート。
図11】結合係数行列の例を示したテーブル。
図12】局所磁場ベクトルの例を示したテーブル。
図13】乱数の最大絶対値の例を示したテーブル。
図14】第1ベクトルの例を示したテーブル。
図15】第2ベクトルの例を示したテーブル。
図16】解ベクトルおよびハミルトニアンの値の例を示したテーブル。
図17】変形例3によるアルゴリズムの例を示したフローチャート。
図18】変形例3によるアルゴリズムの例を示したフローチャート。
図19】変形例4によるアルゴリズムの例を示したフローチャート。
図20】係数の例を示したテーブル。
図21】変形例5によるアルゴリズムの例を示したフローチャート。
図22】変形例5によるアルゴリズムの例を示したフローチャート。
図23図6のアルゴリズムによって計算を行った場合における結果の例を示したグラフ。
図24図7のアルゴリズムによって計算を行った場合における結果の例を示したグラフ。
図25図17および図18のアルゴリズムによって計算を行った場合における結果の例を示したグラフ。
図26図21および図22のアルゴリズムによって計算を行った場合における結果の例を示したグラフ。
図27】マルチプロセッサ構成の例を概略的に示した図。
図28】GPUを使った構成の例を概略的に示した図。
図29】組合せ最適化問題を解くために実行される全体的な処理の例を示したフローチャート。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら、本発明の実施形態について説明する。また、図面において同一の構成要素は、同じ番号を付し、説明は、適宜省略する。
【0010】
図1は、情報処理システム100の構成例を示したブロック図である。図1の情報処理システム100は、管理サーバ1と、ネットワーク2と、計算サーバ(情報処理装置)3a~3cと、ケーブル4a~4cと、スイッチ5と、記憶装置7を備えている。また、図1には、情報処理システム100と通信可能なクライアント端末6が示されている。管理サーバ1、計算サーバ3a~3c、クライアント端末6および記憶装置7は、ネットワーク2を介して互いにデータ通信をすることができる。例えば、計算サーバ3a~3cは、記憶装置7にデータを保存したり、記憶装置7よりデータを読み出したりすることができる。ネットワーク2は、例えば、複数のコンピュータネットワークが相互に接続されたインターネットである。ネットワーク2は、通信媒体として有線、無線、または、これらの組合せを用いることができる。また、ネットワーク2で使われる通信プロトコルの例としては、TCP/IPがあるが、通信プロトコルの種類については特に問わない。
【0011】
また、計算サーバ3a~3cは、それぞれケーブル4a~4cを介してスイッチ5に接続されている。ケーブル4a~4cおよびスイッチ5は、計算サーバ間のインターコネクトを形成している。計算サーバ3a~3cは、当該インターコネクトを介して互いにデータ通信をすることも可能である。スイッチ5は、例えば、Infinibandのスイッチである。ケーブル4a~4cは、例えば、Infinibandのケーブルである。ただし、Infinibandのスイッチ/ケーブルの代わりに、有線LANのスイッチ/ケーブルを使ってもよい。ケーブル4a~4cおよびスイッチ5で使われる通信規格および通信プロトコルについては、特に問わない。クライアント端末6の例としては、ノートPC、デスクトップPC、スマートフォン、タブレット、車載端末などが挙げられる。
【0012】
組合せ最適化問題の求解では、処理の並列化および/または処理の分散化を行うことができる。したがって、計算サーバ3a~3cおよび/または計算サーバ3a~3cのプロセッサは、計算処理の一部のステップを分担して実行してもよいし、異なる変数について同様の計算処理を並列的に実行してもよい。管理サーバ1は、例えば、ユーザによって入力された組合せ最適化問題を各計算サーバが処理可能な形式に変換し、計算サーバを制御する。そして、管理サーバ1は、各計算サーバから計算結果を取得し、集約した計算結果を組合せ最適化問題の解に変換する。こうして、ユーザは、組合せ最適化問題の解を得ることができる。組合せ最適化問題の解は、最適解と、最適解に近い近似解とを含むものとする。
【0013】
図1には、3台の計算サーバが示されている。ただし、情報処理システムに含まれる計算サーバの台数を限定するものではない。また、組合せ最適化問題の求解に使われる計算サーバの台数についても特に問わない。例えば、情報処理システムに含まれる計算サーバは1台であってもよい。また、情報処理システムに含まれる複数の計算サーバのうち、いずれかの計算サーバを使って組合せ最適化問題の求解を行ってもよい。また、情報処理システムに、数百台以上の計算サーバが含まれていてもよい。計算サーバは、データセンターに設置されたサーバであってもよいし、オフィスに設置されたデスクトップPCであってもよい。また、計算サーバは異なるロケーションに設置された複数の種類のコンピュータであってもよい。計算サーバとして使われる情報処理装置の種類については特に問わない。例えば、計算サーバは、汎用的なコンピュータであってもよいし、専用の電子回路または、これらの組合せであってもよい。
【0014】
図2は、管理サーバ1の構成例を示したブロック図である。図2の管理サーバ1は、例えば、中央演算処理装置(CPU)とメモリとを含むコンピュータである。管理サーバ1は、プロセッサ10と、記憶部14と、通信回路15と、入力回路16と、出力回路17とを備えている。プロセッサ10、記憶部14、通信回路15、入力回路16および出力回路17は、互いにバス20を介して接続されているものとする。プロセッサ10は、内部の構成要素として、管理部11と、変換部12と、制御部13とを含んでいる。
【0015】
プロセッサ10は、演算を実行し、管理サーバ1の制御を行う電子回路である。プロセッサ10は、処理回路の一例である。プロセッサ10として、例えば、CPU、マイクロプロセッサ、ASIC、FPGA、PLDまたはこれらの組合せを用いることができる。管理部11は、ユーザのクライアント端末6を介して管理サーバ1の操作を行うためのインタフェースを提供する。管理部11が提供するインタフェースの例としては、API、CLI、ウェブページなどが挙げられる。例えば、ユーザは、管理部11を介して組合せ最適化問題の情報の入力を行ったり、計算された組合せ最適化問題の解の閲覧および/またはダウンロードを行ったりすることができる。変換部12は、組合せ最適化問題を各計算サーバが処理可能な形式に変換する。制御部13は、各計算サーバに制御指令を送信する。制御部13が各計算サーバから計算結果を取得した後、変換部12は、複数の計算結果を集約し、組合せ最適化問題の解に変換する。また、制御部13は、各計算サーバまたは各サーバ内のプロセッサが実行する処理内容を指定してもよい。
【0016】
記憶部14は、管理サーバ1のプログラム、プログラムの実行に必要なデータ、およびプログラムによって生成されたデータを含む各種のデータを記憶する。ここで、プログラムは、OSとアプリケーションの両方を含むものとする。記憶部14は、揮発性メモリ、不揮発性メモリ、またはこれらの組合せであってもよい。揮発性メモリの例としては、DRAM、SRAMなどがある。不揮発性メモリの例としては、NANDフラッシュメモリ、NORフラッシュメモリ、ReRAM、またはMRAMが挙げられる。また、記憶部14として、ハードディスク、光ディスク、磁気テープまたは外部の記憶装置を使ってもよい。
【0017】
通信回路15は、ネットワーク2に接続された各装置との間でデータの送受信を行う。通信回路15は、例えば、有線LANのNIC(Network Interface Card)である。ただし、通信回路15は、無線LANなど、その他の種類の通信回路であってもよい。入力回路16は、管理サーバ1へのデータ入力を実現する。入力回路16は、外部ポートとして、例えば、USB、PCI-Expressなどを備えているものとする。図2の例では、操作装置18が入力回路16に接続されている。操作装置18は、管理サーバ1に情報を入力するための装置である。操作装置18は、例えば、キーボード、マウス、タッチパネル、音声認識装置などであるが、これに限られない。出力回路17は、管理サーバ1からのデータ出力を実現する。出力回路17は、外部ポートとしてHDMI、DisplayPortなどを備えているものとする。図2の例では、表示装置19が出力回路17に接続されている。表示装置19の例としては、LCD(液晶ディスプレイ)、有機EL(有機エレクトロルミネッセンス)ディスプレイ、またはプロジェクタがあるが、これに限られない。
【0018】
管理サーバ1の管理者は、操作装置18および表示装置19を使って、管理サーバ1のメンテナンスを行うことができる。なお、操作装置18および表示装置19は、管理サーバ1に組み込まれたものであってもよい。また、管理サーバ1に必ず操作装置18および表示装置19が接続されていなくてもよい。例えば、管理者は、ネットワーク2と通信可能な情報端末を用いて管理サーバ1のメンテナンスを行ってもよい。
【0019】
図3は、管理サーバ1の記憶部14に保存されるデータの例を示している。図3の記憶部14には、問題データ14Aと、計算データ14Bと、管理プログラム14Cと、変換プログラム14Dと、制御プログラム14Eとが保存されている。例えば、問題データ14Aは、組合せ最適化問題のデータを含む。例えば、計算データ14Bは、各計算サーバから収集された計算結果を含む。例えば、管理プログラム14Cは、上述の管理部11の機能を実現するプログラムである。例えば、変換プログラム14Dは、上述の変換部12の機能を実現するプログラムである。例えば、制御プログラム14Eは、上述の制御部13の機能を実現するプログラムである。
【0020】
図4は、計算サーバの構成例を示したブロックである。図4の計算サーバは、例えば、第1ベクトルおよび第2ベクトルの計算を単独で、または、他の計算サーバと分担して実行する情報処理装置である。
【0021】
図4には、例示的に計算サーバ3aの構成が示されている。他の計算サーバは、計算サーバ3aと同様の構成であってもよいし、計算サーバ3aと異なる構成であってもよい。
【0022】
計算サーバ3aは、例えば、通信回路31と、共有メモリ32と、プロセッサ33A~33Dと、ストレージ34と、ホストバスアダプタ35とを備えている。通信回路31、共有メモリ32、プロセッサ33A~33D、ストレージ34およびホストバスアダプタ35は、バス36を介して互いに接続されているものとする。
【0023】
通信回路31は、ネットワーク2に接続された各装置との間でデータの送受信を行う。通信回路31は、例えば、有線LANのNIC(Network Interface Card)である。ただし、通信回路31は、無線LANなど、その他の種類の通信回路であってもよい。共有メモリ32は、プロセッサ33A~33Dからアクセス可能なメモリである。共有メモリ32の例としては、DRAM、SRAMなどの揮発性メモリが挙げられる。ただし、共有メモリ32として、不揮発性メモリなどその他の種類のメモリが使われてもよい。共有メモリ32は、例えば、第1ベクトルおよび第2ベクトルを記憶するように構成されていてもよい。プロセッサ33A~33Dは、共有メモリ32を介してデータの共有を行うことができる。なお、必ず計算サーバ3aのすべてのメモリが共有メモリとして構成されていなくてもよい。例えば、計算サーバ3aの一部のメモリは、いずれかのプロセッサのみからアクセスできるローカルメモリとして構成されていてもよい。なお、共有メモリ32および後述するストレージ34は、情報処理装置の記憶部の一例である。
【0024】
プロセッサ33A~33Dは、計算処理を実行する電子回路である。プロセッサは、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)、またはASIC(Application Specific Integrated Circuit)のいずれであってもよいし、これらの組合せであってもよい。また、プロセッサは、CPUコアまたはCPUスレッドであってもよい。プロセッサがCPUである場合、計算サーバ3aが備えるソケット数については、特に問わない。また、プロセッサは、PCI expressなどのバスを介して計算サーバ3aのその他の構成要素に接続されていてもよい。
【0025】
図4の例では、計算サーバが4つのプロセッサを備えている。ただし、1台の計算サーバが備えているプロセッサの数はこれとは異なっていてもよい。例えば、計算サーバによって実装されているプロセッサの数および/または種類が異なっていてもよい。ここで、プロセッサは、情報処理装置の処理回路の一例である。情報処理装置は、複数の処理回路を備えていてもよい。
【0026】
情報処理装置は、例えば、第1変数x(i=1、2、・・・、N)を要素とする第1ベクトルおよび第1変数に対応する第2変数y(i=1、2、・・・、N)を要素とする第2ベクトルを繰り返し更新するように構成されている。情報処理装置の記憶部は、第1変数および第2変数を記憶するように構成されていてもよい。
【0027】
例えば、情報処理装置の処理回路は、第1変数に対応する第2変数を重み付け加算することによって第1ベクトルを更新し、第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する第2変数に加算し、複数の第1変数を用いて問題項を計算し、問題項を第2変数に加算することによって第2ベクトルを更新し、第1ベクトルおよび第2ベクトルの更新を繰り返した後、擬似乱数によって第2ベクトルの第2変数を初期化し、再び第1ベクトルおよび第2ベクトルの更新を繰り返すように構成されている。問題項は、イジングモデルに基づいて計算されるものであってもよい。また、問題項は、多体相互作用を含むものであってもよい。第1係数、問題項、イジングモデルおよび多体相互作用の詳細については、後述する。
【0028】
情報処理装置では、例えば、プロセッサ単位で処理内容(タスク)の割り当てを行うことができる。ただし、処理内容の割り当てが行われる計算資源の単位を限定するものではない。例えば、計算機単位で処理内容の割り当てを行ってもよいし、プロセッサ上で動作するプロセス単位またはCPUスレッド単位で処理内容の割り当てを行ってもよい。
【0029】
以下では、再び図4を参照し、計算サーバの構成要素を説明する。
【0030】
ストレージ34は、計算サーバ3aのプログラム、プログラムの実行に必要なデータ、およびプログラムによって生成されたデータを含む各種のデータを記憶する。ここで、プログラムは、OSとアプリケーションの両方を含むものとする。ストレージ34は、例えば、第1ベクトルおよび第2ベクトルを記憶するように構成されていてもよい。ストレージ34は、揮発性メモリ、不揮発性メモリ、またはこれらの組合せであってもよい。揮発性メモリの例としては、DRAM、またはSRAMなどがある。不揮発性メモリの例としては、NANDフラッシュメモリ、NORフラッシュメモリ、ReRAM、またはMRAMが挙げられる。また、ストレージ34として、ハードディスク、光ディスク、磁気テープ、または外部の記憶装置が使われてもよい。
【0031】
ホストバスアダプタ35は、計算サーバ間のデータ通信を実現する。ホストバスアダプタ35は、ケーブル4aを介してスイッチ5に接続されている。ホストバスアダプタ35は、例えば、HCA(Host Channel Adaptor)である。ホストバスアダプタ35、ケーブル4a、およびスイッチ5を使って高スループットを実現可能なインターコネクトを形成することにより、並列的な計算処理の速度を向上させることができる。
【0032】
図5は、計算サーバのストレージに保存されるデータの例を示している。図5のストレージ34には、計算データ34Aと、計算プログラム34Bと、制御プログラム34Cとが保存されている。計算データ34Aは、計算サーバ3aの計算途中のデータまたは計算結果を含んでいる。なお、計算データ34Aの少なくとも一部は、共有メモリ32、プロセッサのキャッシュ、またはプロセッサのレジスタなど、異なる記憶階層に保存されていてもよい。計算プログラム34Bは、所定のアルゴリズムに基づき、各プロセッサにおける計算処理および、共有メモリ32およびストレージ34へのデータの保存処理を実現するプログラムである。制御プログラム34Cは、管理サーバ1の制御部13から送信された指令に基づき、計算サーバ3aを制御し、計算サーバ3aの計算結果を管理サーバ1に送信するプログラムである。
【0033】
次に、組合せ最適化問題の求解に関連する技術について説明する。組合せ最適化問題を解くために使われる情報処理装置の一例として、イジングマシンが挙げられる。イジングマシンとは、イジングモデルの基底状態のエネルギーを計算する情報処理装置のことをいう。これまで、イジングモデルは、主に強磁性体や相転移現象のモデルとして使われることが多かった。しかし、近年、イジングモデルは、組合せ最適化問題を解くためのモデルとしての利用が増えている。下記の式(1)は、イジングモデルのエネルギーを示している。
【数1】
ここで、s、sはスピンである、スピンは、+1または-1のいずれかの値をとる2値変数である。Nは、スピンの数である。hは、各スピンに作用する局所磁場である。Jは、スピン間における結合係数の行列である。行列Jは、対角成分が0である実対称行列となっている。したがって、Jijは行列Jのi行j列の要素を示している。なお、式(1)のイジングモデルは、スピンについての2次式となっているが、後述するように、スピンの3次以上の項を含む拡張されたイジングモデル(多体相互作用を有するイジングモデル)を使ってもよい。
【0034】
式(1)のイジングモデルを使うと、エネルギーEIsingを目的関数とし、エネルギーEIsingを可能な限り小さくする解を計算することができる。イジングモデルの解は、スピンのベクトル(s、s、・・・、s)の形式で表される。このベクトルを解ベクトルとよぶものとする。特に、エネルギーEIsingが最小値となるベクトル(s、s、・・・、s)は、最適解とよばれる。ただし、計算されるイジングモデルの解は、必ず厳密な最適解でなくてもよい。以降では、イジングモデルを使ってエネルギーEIsingが可能な限り小さくなる近似解(すなわち、目的関数の値が可能な限り最適値に近くなる近似解)を求める問題をイジング問題とよぶものとする。
【0035】
式(1)のスピンsは2値変数であるため、式(1+s)/2を使うことにより、組合せ最適化問題で使われる離散変数(ビット)との変換を容易に行うことができる。したがって、組合せ最適化問題をイジング問題に変換し、イジングマシンに計算を行わせることにより、組合せ最適化問題の解を求めることが可能である。0または1のいずれかの値をとる離散変数(ビット)を変数とする2次の目的関数を最小化する解を求める問題は、QUBO(Quadratic Unconstrained Binary Optimization、制約なし2値変数2次最適化)問題とよばれる。式(1)で表されるイジング問題は、QUBO問題と等価であるといえる。
【0036】
例えば、量子アニーラ、コヒーレントイジングマシン、または量子分岐マシンなどがイジングマシンのハードウェア実装として提案されている。量子アニーラは、超伝導回路を使って量子アニーリングを実現する。コヒーレントイジングマシンは、光パラメトリック発振器で形成されたネットワークの発振現象を利用する。量子分岐マシンは、カー効果を有するパラメトリック発振器のネットワークにおける量子力学的な分岐現象を利用する。これらのハードウェア実装は、計算時間の大幅な短縮を実現する可能性がある一方、大規模化や安定的な運用が難しいという課題もある。
【0037】
そこで、広く普及しているデジタルコンピュータを使ってイジング問題の求解を行うことも可能である。デジタルコンピュータは、上述の物理的現象を使ったハードウェア実装と比べ、大規模化と安定運用が容易である。デジタルコンピュータでイジング問題の求解を行うためのアルゴリズムの一例として、シミュレーテッドアニーリング(SA)が挙げられる。シミュレーテッドアニーリングをより高速に実行する技術の開発が行われている。ただし、一般のシミュレーテッドアニーリングはそれぞれの変数が逐次更新される逐次更新アルゴリズムであるため、並列化による計算処理の高速化は難しい。
【0038】
上述の課題を踏まえ、デジタルコンピュータにおける並列的な計算によって、規模の大きい組合せ最適化問題の求解を高速に行うことが可能なシミュレーテッド分岐アルゴリズムが提案されている。以降では、シミュレーテッド分岐アルゴリズムを使って組合せ最適化問題を解く情報処理装置、情報処理システム、情報処理方法、記憶媒体およびプログラムについて説明する。
【0039】
はじめに、シミュレーテッド分岐アルゴリズムの概要について述べる。
【0040】
シミュレーテッド分岐アルゴリズムでは、それぞれN個ある2つの変数x,y(i=1、2、・・・、N)について、下記の(2)の連立常微分方程式を数値的に解く。N個の変数xのそれぞれは、イジングモデルのスピンsに対応している。一方、N個の変数yのそれぞれは、運動量に相当している。変数x,yは、いずれも連続変数であるものとする。以下では、変数x(i=1、2、・・・、N)を要素とするベクトルを第1ベクトル、変数y(i=1、2、・・・、N)を要素とするベクトルを第2ベクトルとそれぞれよぶものとする。
【数2】
【0041】
ここで、Hは、下記の式(3)のハミルトニアンである。
【数3】
【0042】
なお、(2)では、式(3)のハミルトニアンHに代わり、下記の式(4)に示した、項G(x、x、・・・x)を含めたハミルトニアンH´を使ってもよい。ハミルトニアンHだけでなく項G(x、x、・・・x)も含む関数を拡張ハミルトニアンとよび、もとのハミルトニアンHと区別するものとする。
【数4】
以下では、関数G(x、x、・・・x)が補正項である場合を例に処理を説明する。ただし、関数G(x、x、・・・x)は、組合せ最適化問題の制約条件より導かれるものであってもよい。ただし、関数G(x、x、・・・x)の導出方法と種類を限定するものではない。また、式(4)では、もとのハミルトニアンHに関数G(x、x、・・・x)が加算されている。ただし、関数G(x、x、・・・x)は、これとは異なる方法で拡張ハミルトニアンに組み込まれていてもよい。
【0043】
式(3)のハミルトニアンおよび(4)の拡張ハミルトニアンを参照すると、それぞれの項が第1ベクトルの要素xまたは第2ベクトルの要素yのいずれかの項になっている。下記の式(5)に示すように、第1ベクトルの要素xの項Uと、第2ベクトルの要素yの項Vに分けることが可能な拡張ハミルトニアンを使ってもよい。
【数5】
【0044】
シミュレーテッド分岐アルゴリズムの時間発展の計算では、変数x,y(i=1、2、・・・、N)の値が繰り返し更新される。そして、所定の条件が満たされたときに変数xを変換することによってイジングモデルのスピンs(i=1、2、・・・、N)を求めることができる。以下では、時間発展の計算が行われる場合を想定して処理の説明を行う。ただし、シミュレーテッド分岐アルゴリズムの計算は、時間発展以外の方式で行われてもよい。
【0045】
(2)および(3)において、係数Dは、離調(detuning)に相当する。係数p(t)は、上述の第1係数に相当し、ポンピング振幅(pumping amplitude)ともよばれる。時間発展の計算において、係数p(t)の値を更新回数に応じて単調増加させることができる。係数p(t)の初期値は0に設定されていてもよい。
【0046】
なお、以下では、第1係数p(t)が正値であり、更新回数に応じて第1係数p(t)の値が大きくなる場合を例に説明する。ただし、以下で提示するアルゴリズムの符号を反転し、負値の第1係数p(t)を使ってもよい。この場合、更新回数に応じて第1係数p(t)の値が単調減少する。ただし、いずれの場合においても、更新回数に応じて第1係数p(t)の絶対値が単調増加する。
【0047】
係数Kは、正のカー係数(Kerr coefficient)に相当する。係数cとして、定数係数を使うことができる。例えば、係数cの値を、シミュレーテッド分岐アルゴリズムによる計算の実行前に決めてもよい。例えば、係数cをJ(2)行列の最大固有値の逆数に近い値に設定することができる。例えば、c=0.5D√(N/2n)という値を使うことができる。ここで、nは、組合せ最適化問題に係るグラフのエッジ数である。また、a(t)は、時間発展の計算時においてp(t)とともに増加する係数である。例えば、a(t)として、√(p(t)/K)を使うことができる。なお、(3)および(4)における局所磁場のベクトルhは、省略すること可能である。
【0048】
例えば、係数p(t)の値が所定の値を超えた時に、第1ベクトルにおいて、正値である変数xを+1、負値である変数xを-1にそれぞれ変換すると、スピンsを要素とする解ベクトルを得ることができる。この解ベクトルは、イジング問題の解に相当する。なお、第1ベクトルおよび第2ベクトルの更新回数に基づき、上述の変換を実行し、解ベクトルを求めるか否かを判定してもよい。
【0049】
シミュレーテッド分岐アルゴリズムの計算を行う場合、シンプレクティック・オイラー法を使い、上述の(2)を離散的な漸化式に変換し、求解を行うことができる。下記の(6)は、漸化式に変換後のシミュレーテッド分岐アルゴリズムの例を示している。
【数6】
ここで、tは、時刻であり、Δtは、時間ステップ(時間刻み幅)である。なお、(6)では、微分方程式との対応関係を示すために、時刻tおよび時間ステップΔtが使われている。ただし、実際にアルゴリズムをソフトウェアまたはハードウェアに実装する際に必ず時刻tおよび時間ステップΔtが明示的なパラメータとして含まれていなくてもよい。例えば、時間ステップΔtを1とすれば、実装時のアルゴリズムから時間ステップΔtを除去することが可能である。アルゴリズムを実装する際に、明示的なパラメータとして時間tを含めない場合には、(6)において、x(t+Δt)をx(t)の更新後の値であると解釈すればよい。すなわち、上述の(6)における“t”は、更新前の変数の値、“t+Δt”は、更新後の変数の値を示すものとする。
【0050】
(6)のうち、3段目に記載された項は、イジングエネルギーに由来する。この項の形式は、解きたい問題に応じて決まるため、問題項(problem term)とよぶものとする。
【0051】
シミュレーテッド分岐アルゴリズムの時間発展を計算する場合、p(t)の値を初期値(例えば、0)から所定の値まで増加させた後における変数xの符号に基づき、スピンsの値を求めることができる。例えば、x>0のときsgn(x)=+1、x<0のときsgn(x)=-1となる符号関数を使うと、p(t)の値が所定の値まで増加したとき、変数xを符号関数で変換することによってスピンsの値を求めることができる。符号関数として、例えば、x≠0のときに、sgn(x)=x/|x|、x=0のときにsgn(x)=+1または-1になる関数を使うことができる。組合せ最適化問題の解(例えば、イジングモデルのスピンs)を求めるタイミングについては、特に問わない。例えば、第1ベクトルおよび第2ベクトルの更新回数、第1係数pの値または目的関数の値がしきい値より大きくなったときに組合せ最適化問題の解(解ベクトル)を求めてもよい。
【0052】
図6のフローチャートは、時間発展によってシミュレーテッド分岐アルゴリズムの解を計算する場合における処理の例を示している。以下では、図6を参照しながら処理を説明する。
【0053】
はじめに、計算サーバは、管理サーバ1より問題に対応する行列Jijおよびベクトルhを取得する(ステップS101)。そして、計算サーバは、係数p(t)およびa(t)を初期化する(ステップS102)。例えば、ステップS102で係数pおよびaの値を0にすることができるが、係数pおよびaの初期値を限定するものではない。次に、計算サーバは、第1変数xおよび第2変数yを初期化する(ステップS103)。ここで、第1変数xは、第1ベクトルの要素である。また、第2変数yは、第2ベクトルの要素である。ステップS103で計算サーバは、例えば、xおよびyをそれぞれ0で初期化してもよい。ただし、xおよびyの初期化の方法を限定するものではない。後述するように、これとは異なるタイミングに変数の初期化を行ってもよい。また、少なくともいずれかの変数を複数回初期化してもよい。
【0054】
次に、計算サーバは、第2ベクトルの要素yに基づき対応する第1ベクトルの要素xを更新する(ステップS104)。例えば、計算サーバは、ステップS104で第1ベクトルの要素xに対応する第2ベクトルの要素yを重み付け加算することによって第1ベクトルを更新する。例えば、ステップS104では、変数xにΔt×D×yを加算することができる。そして、計算サーバは、第2ベクトルの要素yを更新する(ステップS105およびS106)。例えば、ステップS105では、変数yにΔt×[(p-D-K×x×x)×x]を加算することができる。ステップS106では、さらに変数yに-Δt×c×h×a-Δt×c×ΣJij×xを加算することができる。
【0055】
次に、計算サーバは、係数pおよびaの値を更新する(ステップS107)。例えば、係数pに一定の値(Δp)を加算し、係数aを更新後の係数pの正の平方根に設定することができる。ただし、後述するように、これは係数pおよびaの値の更新方法の一例にしかすぎない。そして、計算サーバは、第1ベクトルおよび第2ベクトルの更新回数がしきい値未満であるか否かを判定する(ステップS108)。更新回数がしきい値未満である場合(ステップS108のYES)、計算サーバは、ステップS104~S107の処理を再度実行する。更新回数がしきい値以上である場合(ステップS108のNO)、第1ベクトルの要素xに基づいて解ベクトルの要素であるスピンsを求める(ステップS109)。ステップS109では、例えば、第1ベクトルにおいて、正値である変数xを+1、負値である変数xを-1にそれぞれ変換し、解ベクトルを得ることができる。
【0056】
なお、ステップS108の判定において、更新回数がしきい値未満である場合(ステップS108のYES)に第1ベクトルに基づきハミルトニアンの値を計算し、第1ベクトルおよびハミルトニアンの値を記憶してもよい。これにより、ユーザは、複数の第1ベクトルより最適解に最も近い近似解を選択することが可能となる。
【0057】
なお、図6のフローチャートに示した少なくともいずれかの処理を並列的に実行してもよい。例えば、第1ベクトルおよび第2ベクトルのそれぞれが有するN個の要素の少なくとも一部が並列的に更新されるよう、ステップS104~S106の処理を並列的に実行してもよい。例えば、複数台の計算サーバを使って処理を並列化してもよい。複数のプロセッサによって処理を並列化してもよい。ただし、処理の並列化を実現するための実装および処理の並列化の態様を限定するものではない。
【0058】
上述のステップS105~S106に示した変数xおよびyの更新処理の実行順序は、一例にしかすぎない。したがって、これとは異なる順序で変数xおよびyの更新処理を実行してもよい。例えば、変数xの更新処理と変数yの更新処理が実行される順序が入れ替わっていてもよい。また、各変数の更新処理に含まれるサブ処理の順序も限定しない。例えば、変数yに対する加算処理の実行順序が図6の例とは異なっていてもよい。各変数の更新処理を実行するための前提となる処理の実行順序およびタイミングも特に限定しない。例えば、問題項の計算処理が、変数xの更新処理を含むその他の処理と並行で実行されていてもよい。変数xおよびyの更新処理、各変数の更新処理に含まれるサブ処理および問題項の計算処理が実行される順序およびタイミングが限定されない点は、以降に示す各フローチャートの処理についても、同様である。
【0059】
[変数の初期化処理のバリエーション]
最適化問題の計算処理で得られる第1ベクトルは、必ず最適解またはそれに近い近似解(実用的な解という)に相当しているとは限らない。例えば、図6のフローチャートの処理の実行後に得られる第1ベクトルが実用的な解とは異なる局所解である可能性もある。また、拡張ハミルトニアンが形成するポテンシャルの形状によっては、計算処理の途中(例えば、図6のループ処理内のいずれかのイタレーション)より第1ベクトルが局所解の近傍に貼りついてしまう可能性もある。また、限られた計算時間内に実用的な解を得るためには、解空間の広い範囲を探索可能なアルゴリズムを使うことが望ましい。
【0060】
図6のフローチャートでは、第1変数xおよび第2変数yの更新に係るループ処理の開始前に、第1変数xおよび第2変数yの初期化処理が実行されていた。ただし、第1変数xおよび第2変数yの初期化が行われる回数およびタイミングを限定するものではない。例えば、シミュレーテッド分岐アルゴリズムをN個の粒子の運動状態を計算する物理モデルであると解釈した場合、第1変数xは、各粒子の位置に、第2変数yは、各粒子の運動量にそれぞれ相当する。このため、物理モデルに例えると、第2変数yを初期化する処理は、対応する粒子の運動状態を変える処理に相当する。例えば、第2変数yの初期化処理を実行する回数を増やすと、対応する粒子の運動状態を変える頻度を上げることができる。また、擬似乱数を使って第2変数yを初期化すると、対応する粒子の運動状態をランダムに変えることができる。各イタレーションにおいて、第1変数xは、第2変数yの値に基づいて更新されるため、第2変数yの初期化を実行する回数を増やすと、計算処理中における第1変数xの挙動も変化する。これにより、計算処理の途中で第1ベクトルが局所解の近傍にはりつくことを防止し、解空間のより広い領域を探索することができる。複数の局所解を探索ができるようになるため、計算処理によって最適解またはそれに近い近似解が得られる確率を上げることができる。
【0061】
なお、擬似乱数を使って第1変数xおよび第2変数yの初期化処理を行う場合、使われる乱数の種類を限定するものではない。例えば、一様乱数を使って変数の初期化を行ってもよいし、正規乱数を使って変数の初期化を行ってもよい。
【0062】
すなわち、情報処理装置の処理回路が生成する擬似乱数は、正規乱数であってもよい。また、情報処理装置の処理回路が生成する擬似乱数は、一様乱数であってもよい。
【0063】
図7のフローチャートは、変形例1によるアルゴリズムの例を示している。以下では、図7を参照しながら、処理を説明する。ここで、第1変数xは、第1ベクトルの要素であり、第2変数yは、第2ベクトルの要素であるものとする。
【0064】
はじめに、計算サーバは、管理サーバ1より問題に対応する行列Jijおよびベクトルhを取得し、擬似乱数の最大絶対値y0を決定する(ステップS110)。例えば、y0=0.1に設定した場合、(-0.1,+0.1)の擬似乱数に生成される。ただし、y0の設定値は、これとは異なっていてもよい。例えば、第2変数yの初期化後における第1変数xの変化量を大きくしたい場合には、y0の設定値を大きくすることができる。また、第2変数yの初期化後における第1変数xの変化量を抑えたい場合には、y0の設定値を小さくすることができる。なお、ステップS110のタイミングで擬似乱数のシードs0を決定してもよい。擬似乱数のシードs0は、自動的に決められる値であってもよいし、ユーザが指定する値であってもよい。
【0065】
次に、計算サーバは、第1変数xを初期化する(ステップS111)。例えば、xを擬似乱数で初期化してもよい。また、xを0で初期化してもよく、xの初期化方法については問わない。そして、計算サーバは、係数p(t)、a(t)およびτを初期化する(ステップS112)。また、ステップS112で変数tを初期化してもよい。例えば、ステップS112でp、a、τおよびtの値を0にすることができるが、p、a、τおよびtの初期値を限定するものではない。
【0066】
次に、計算サーバは、第2変数yを擬似乱数によって初期化する(ステップS113)。なお、後述するステップS116の判定処理を行うために、計算サーバは、ステップS113でカウンタ変数τをインクリメントしてもよい。これにより、第2変数yの初期化回数をカウントすることができる。また、後述するステップS115の判定でカウンタ変数tが使われている場合、ステップS113でカウンタ変数tを初期化してもよい。例えば、tの値を0に設定することができる。
【0067】
そして、計算サーバは、時間発展の計算処理を実行し、第1変数x、第2変数y、係数pおよび係数aを更新する(ステップS114)。例えば、計算サーバは、ステップS114で図6のステップS104~ステップS107に相当する処理を実行することができる。変数tが使われている場合、例えば、tにΔtを加算してもよい。
【0068】
次に、計算サーバは、第1ベクトルおよび第2ベクトルの更新回数が第1しきい値未満であるか否かを判定する(ステップS115)。更新回数が第1しきい値未満である場合(ステップS115のYES)、計算サーバは、再びステップS114の処理を実行する。更新回数が第1しきい値以上である場合(ステップS115のNO)、計算サーバは、第2変数yの初期化回数が第2しきい値未満であるか否かを判定する(ステップS116)。この場合、ステップS116でカウンタ変数τの値を第2しきい値と比較することができる。
【0069】
第2変数yの初期化回数が第2しきい値未満である場合(ステップS116のYES)、計算サーバは、再びステップS113以降の処理を実行する。すなわち、計算サーバは、第2変数yを擬似乱数によって初期化(ステップS113)した後、時間発展の計算処理を実行する(ステップS114)。第2変数yの初期化回数が第2しきい以上である場合(ステップS116のNO)、計算サーバは、第1変数xをスピンsに変換し、行列Jij、ベクトルhおよびスピンsに基づきハミルトニアンの値を計算する(ステップS117)。例えば、ステップS117で(1)に基づいてエネルギーの関数の値を計算することができる。
【0070】
なお、計算サーバは、ループ処理内の各イタレーションを実行した後(例えば、ステップS115またはステップS116のタイミング)に第1ベクトルを記憶領域に保存してもよい。同様に、計算サーバは、ループ処理内の各イタレーションを実行した後(例えば、ステップS115またはステップS116のタイミング)に第2ベクトルを記憶領域に保存してもよい。この場合、ステップS117において計算サーバは、第1ベクトルおよび対応する第2ベクトルの複数の組合せを使って拡張ハミルトニアンの値を計算することができる。これにより、計算サーバは、拡張ハミルトニアンの値に基づき、最適解に最も近い第1ベクトルを選択することができる。そして、計算サーバは、選択した第1ベクトルをスピンsのベクトル(解ベクトル)に変換してもよい。
【0071】
そして、計算サーバは、スピンsのベクトルと目的関数の値を出力する(ステップS118)。例えば、計算サーバは、クライアント端末6の画面にスピンsのベクトルとハミルトニアンの値を表示させてもよい。また、計算サーバは、外部記憶装置またはクラウドのストレージにスピンsのベクトルとハミルトニアンの値を保存してもよい。
【0072】
ステップS117およびステップS118は、計算サーバ以外の情報処理装置によって実行されてもよい。例えば、管理サーバ1がステップS117およびステップS118の処理を実行してもよい。また、ステップS117およびステップS118のタイミングで実行される処理の内容が図7とは異なっていてもよい。例えば、(1)のエネルギーの関数の値の計算を行う代わりに、(3)または(4)のハミルトニアンの値を計算してもよい。そして、ハミルトニアンの値に基づき、最適解に最も近い第1ベクトルを選択してもよい。ハミルトニアンのパラメータにスピンsが含まれていない場合、第1ベクトルを解ベクトルに変換する処理をスキップしてもよい。
【0073】
目的関数または拡張ハミルトニアンの値の計算を行うことにより、第1ベクトルの最適解への近さを評価することができる。例えば、(1)、(3)および(4)の定義を使う場合、ハミルトニアンの値が小さいほど、第1ベクトルが最適解に近くなる。このため、目的関数または拡張ハミルトニアンの値の計算処理を解の評価処理とよぶことができる。図7のフローチャートにおいて、ステップS117で解の評価処理が実行されているが、解の評価処理は、これとは異なるタイミングに実行されていてもよい。例えば、ループ処理内の各イタレーションが実行された後(例えば、ステップS115またはステップS116のタイミング)に解の評価処理が実行されてもよい。なお、解の評価処理においては、第1ベクトルだけでなく、それに対応する目的関数または拡張ハミルトニアンの値を記憶領域に保存してもよい。
【0074】
図8のフローチャートは、変形例2によるアルゴリズムの例を示している。図8のフローチャートは、ステップS116の判定が肯定的である(第2変数yの初期化回数が第2しきい値未満である)場合に実行される処理が図7のフローチャートと異なっている。図8のフローチャートでは、第2変数yの初期化回数が第2しきい値未満である場合(ステップS116のYES)、第2変数yの初期化処理(ステップS113)だけでなく、係数p(t)およびa(t)を初期化処理(ステップS112)も実行される。この相違点を除けば、図8のフローチャートにおいて実行される処理は、図7のフローチャートと同様である。
【0075】
図9のフローチャートは、図7および図8のステップS114において実行される処理の第1の例を示している。図9のフローチャートでは、第1変数xの更新処理(ステップS1141)、第2変数yの更新処理(ステップS1142)、t、pおよびaの更新処理(ステップS1143)の順で時間発展に相当する処理が実行されている。
【0076】
一方、図10のフローチャートは、図7および図8のステップS114において実行される処理の第2の例を示している。図10のフローチャートでは、第2変数yの更新処理(ステップS1142)、第1変数xの更新処理(ステップS1141)、t、pおよびaの更新処理(ステップS1143)の順で時間発展に相当する処理が実行されている。このように、ステップS114において第1変数xが先に更新されてもよいし、第2変数yが先に更新されてもよい。各変数の更新処理および各変数の更新処理内のサブ処理の実行順序を限定するものではない。
【0077】
図9および図10に示した時間発展の計算処理は、例にしかすぎない。したがって、時間発展の計算処理は、図9および図10に示した処理と異なっていてもよい。
【0078】
次に、情報処理装置または情報処理システムで実行される処理において使用されるデータの例を示す。
【0079】
図11のテーブルは、(1)~(4)および(6)における行列Jijの例を示している。図12のテーブルは、(1)~(4)および(6)におけるベクトルhの例を示している。図13は、乱数の最大絶対値y0の例を示している。図14は、図13のy0を使ったときに得られた第1ベクトルの例を示している。一方、図15は、図13のy0を使ったときに得られた第2ベクトルの例を示している。図16は、図7または図8のステップS117で得られた解ベクトルおよびハミルトニアンの値の例を示している。
【0080】
上述の図7図10に示したアルゴリズムを実行することにより、局所解の数に関わらず、解空間のより広い範囲を探索することが可能となる。このため、限られた計算時間内に実用的な解を得ることができる。また、より大規模な組合せ最適化問題をより短期間に解くことが可能となる。
【0081】
[ハミルトニアンを複数回計算し、比較を行う場合]
図7図10のフローチャートは、情報処理装置および情報処理システムが実行可能な処理の例にしかすぎない。したがって、情報処理装置および情報処理システムは、これとは異なる処理によって組合せ最適化問題の解を求めてもよい。以下では、ハミルトニアンを複数回計算し、比較を行う場合における処理の例を説明する。
【0082】
図17および図18のフローチャートは、変形例3によるアルゴリズムの例を示している。以下では、図17および図18を参照しながら処理を説明する。ここで、第1変数xは、第1ベクトルの要素であり、第2変数yは、第2ベクトルの要素であるものとする。
【0083】
はじめに、計算サーバは、管理サーバ1より問題に対応する行列Jijおよびベクトルhを取得し、擬似乱数の最大絶対値y0を決定する(ステップS121)。例えば、y0=0.1に設定した場合、(-0.1,+0.1)の擬似乱数に生成される。ただし、y0の設定値は、これとは異なっていてもよい。例えば、第2変数yの初期化後における第1変数xの変化量を大きくしたい場合には、y0の設定値を大きくすることができる。また、第2変数yの初期化後における第1変数xの変化量を抑えたい場合には、y0の設定値を小さくすることができる。なお、ステップS121のタイミングで擬似乱数のシードs0を決定してもよい。擬似乱数のシードs0は、自動的に決められる値であってもよいし、ユーザが指定する値であってもよい。
【0084】
次に、計算サーバは、第1変数xを初期化する(ステップS122)。例えば、xを擬似乱数で初期化してもよい。また、xを0で初期化してもよく、xの初期化方法については問わない。そして、計算サーバは、係数p(t)、a(t)およびτを初期化する(ステップS123)。また、ステップS123で変数tを初期化してもよい。例えば、ステップS123でp、a、τおよびtの値を0にすることができるが、p、a、τおよびtの初期値を限定するものではない。
【0085】
次に、計算サーバは、第2変数yを擬似乱数によって初期化する(ステップS124)。なお、後述するステップS130の判定処理を行うために、計算サーバは、ステップS124でカウンタ変数τをインクリメントしてもよい。これにより、第2変数yの初期化回数をカウントすることができる。また、後述するステップS126の判定でカウンタ変数tが使われている場合、ステップS124でカウンタ変数tを初期化してもよい。例えば、tの値を0に設定することができる。
【0086】
そして、計算サーバは、時間発展の計算処理を実行し、第1変数x、第2変数y、係数pおよび係数aを更新する(ステップS125)。例えば、計算サーバは、ステップS125で図6のステップS104~ステップS107に相当する処理を実行することができる。また、計算サーバは、ステップS125で図9または図10に相当する処理を実行してもよい。変数tが使われている場合、例えば、tにΔtを加算してもよい。
【0087】
次に、計算サーバは、第1ベクトルおよび第2ベクトルの更新回数が第1しきい値未満であるか否かを判定する(ステップS126)。更新回数が第1しきい値未満である場合(ステップS126のYES)、計算サーバは、再びステップS125の処理を実行する。更新回数が第1しきい値以上である場合(ステップS126のNO)、計算サーバは、第1変数xをスピンsに変換し、行列Jij、ベクトルhおよびスピンsに基づきハミルトニアンの値を計算する(ステップS127)。例えば、(1)に基づいてハミルトニアンの値を計算することができる。
【0088】
そして、計算サーバは、記憶領域60を参照し、前ステップで計算されたハミルトニアンの値がこれまでの最小値であるか否かを判定する(ステップS128)。前ステップで計算されたハミルトニアンの値がこれまでの最小値である場合(ステップS128のYES)、計算サーバは、計算したハミルトニアンの値と、そのときのスピンsのベクトル(解ベクトル)を記憶領域60に保存する(ステップS129)。計算サーバは、ステップS129において、第1ベクトルを記憶領域60に保存してもよい。記憶領域60として、共有メモリ32またはストレージ34の記憶領域を使うことができる。また、記憶領域60として、計算サーバの外部の記憶装置またはクラウドストレージの記憶領域を使ってもよい。ただし、記憶領域60の場所を限定するものではない。なお、記憶領域60が充分に大きい場合、計算サーバは、ステップS128の判定をスキップし、ステップS129の処理を実行してもよい。計算サーバは、ステップS129の処理を実行した後、ステップS130の処理に進む。
【0089】
ステップS127で計算されたハミルトニアンの値がこれまでの最小値ではない場合(ステップS128のNO)、計算サーバは、ステップS129の処理をスキップし、ステップS130の処理に進む。
【0090】
ステップS130で計算サーバは、第2変数yの初期化回数が第2しきい値未満であるか否かを判定する。ステップS130でカウンタ変数τの値を第2しきい値と比較してもよい。第2変数yの初期化回数が第2しきい値未満である場合(ステップS130のYES)、計算サーバは、再びステップS124以降の処理を実行する。すなわち、計算サーバは、第2変数yを擬似乱数によって初期化(ステップS124)した後、時間発展の計算処理を実行する(ステップS125)。
【0091】
第2変数yの初期化回数がしきい以上である場合(ステップS130のNO)、計算サーバは、記憶領域60を参照し、スピンsのベクトルとハミルトニアンの値を出力する(ステップS131)。ステップS131で、過去のイタレーションで得られた解ベクトルのうち、最適解に最も近い解ベクトルを出力することができる。また、ステップS139で第1ベクトルが記憶領域60に保存された場合、計算サーバは、ステップS161で第1ベクトルを解ベクトルに変換してもよい。例えば、計算サーバは、クライアント端末6の画面にスピンsのベクトルとハミルトニアンの値を表示させてもよい。また、計算サーバは、他の情報処理装置にスピンsのベクトルとハミルトニアンの値を転送してもよい。
【0092】
図17および図18の処理を実行することにより、ハミルトニアンの値に基づき、自動的に最適解に最も近い第1ベクトルを選択し、当該第1ベクトルに基づくスピンsのベクトル(解ベクトル)を得ることができる。これにより、解空間のより広い範囲を探索し、限られた計算時間内に実用的な解を得ることが可能となる。
【0093】
図17および図18のフローチャートでは、ハミルトニアンとして(1)のエネルギーの関数が使われていた。ただし、(3)のハミルトニアンまたは(4)の拡張ハミルトニアンなど、その他の形式のハミルトニアンを使ってもよい。したがって、ハミルトニアンのパラメータが第1変数xおよび第2変数yである場合には、第1ベクトルを解ベクトルに変換する処理をスキップしてもよい。
【0094】
上述のように、情報処理装置の処理回路は、第1ベクトルおよび第2ベクトルの更新を繰り返した後、第1ベクトルに基づいてハミルトニアンの値を計算し、第1ベクトルおよびハミルトニアンの値を記憶部に保存した後、再び第1ベクトルおよび第2ベクトルの更新を繰り返すように構成されていてもよい。
【0095】
また、情報処理装置の処理回路は、第1ベクトルおよび第2ベクトルの更新を繰り返した後、正値である第1変数を第1値に変換し、負値である第1変数を第1値より小さい第2値に変換することによって第1ベクトルより解ベクトルを計算し、解ベクトルに基づいてハミルトニアン(目的関数)の値を計算し、解ベクトルおよびハミルトニアン(目的関数)の値を記憶部に保存した後、再び第1ベクトルおよび第2ベクトルの更新を繰り返すように構成されていてもよい。
【0096】
[擬似乱数の最大絶対値の調整]
上述では、第2変数yが擬似乱数によって初期化される例について説明した。情報処理装置および情報処理システムは、ループ処理のイタレーションによって使用する擬似乱数の性質を変えてもよい。例えば、早い段階のイタレーションでは、生成する擬似乱数の最大絶対値を比較的大きい値に設定することができる。これにより、第2変数yの初期化後における第1変数xおよび第2変数yの変化が大きくなり、解空間の広い範囲を探索することが可能となる。これにより、複数の局所解より最適解を見つけ出す確率を高めることができる。一方、遅い段階のイタレーションでは、生成する擬似乱数の最大絶対値を比較的小さい値に設定することができる。これにより、第2変数yの初期化後における第1変数xおよび第2変数yの変化が抑えられる。このため、複数回の更新処理によって第1ベクトルが最適解の近傍に到達している場合、第1ベクトルを最適解に接近させ、計算の精度を高めることができる。
【0097】
以下では、ループ処理のイタレーションに応じて使用する擬似乱数の最大絶対値を変化させる場合における処理の例について説明する。
【0098】
図19のフローチャートは、変形例4によるアルゴリズムの例を示している。以下では、図19を参照しながら処理を説明する。ここで、第1変数xは、第1ベクトルの要素であり、第2変数yは、第2ベクトルの要素であるものとする。
【0099】
はじめに、計算サーバは、管理サーバ1より問題に対応する行列Jijおよびベクトルhを取得し、擬似乱数の生成に使われる係数y0を決定する(ステップS141)。例えば、擬似乱数の最大絶対値を0.1に設定した場合、(-0.1,+0.1)の擬似乱数に生成される。例えば、y0=0.1に設定することができる。ただし、y0の設定値は、これとは異なっていてもよい。なお、ステップS141のタイミングで擬似乱数のシードs0を決定してもよい。擬似乱数のシードs0は、自動的に決められる値であってもよいし、ユーザが指定する値であってもよい。
【0100】
次に、計算サーバは、第1変数xを初期化する(ステップS142)。例えば、xを擬似乱数で初期化してもよい。また、xを0で初期化してもよく、xの初期化方法については問わない。そして、計算サーバは、係数p(t)、a(t)およびτを初期化する(ステップS143)。また、ステップS143で変数tを初期化してもよい。例えば、ステップS143でp、a、τおよびtの値を0にすることができるが、p、a、τおよびtの初期値を限定するものではない。
【0101】
次に、計算サーバは、カウンタ変数τをインクリメントし、第2変数yを最大絶対値y0+dy×τの擬似乱数によって初期化する(ステップS144)。dyとして負値を使うことができる。例えば、図20に示したように、dy=-0.01に設定してもよい。カウンタ変数τは、第2変数yの初期化回数をカウントするために使われる。擬似乱数の最大絶対値がy0+dy×τ(dy<0)で与えられるため、ループ処理の各イタレーションでτをインクリメントすると、擬似乱数の最大絶対値を単調減少させることが可能となる。これにより、高い精度で計算を行うことが可能となる。
【0102】
そして、計算サーバは、時間発展の計算処理を実行し、第1変数x、第2変数y、係数pおよび係数aを更新する(ステップS145)。例えば、計算サーバは、ステップS145で図6のステップS104~ステップS107に相当する処理を実行することができる。また、計算サーバは、ステップS145で図9または図10に相当する処理を実行してもよい。変数tが使われている場合、例えば、tにΔtを加算してもよい。
【0103】
次に、計算サーバは、第1ベクトルおよび第2ベクトルの更新回数が第1しきい値未満であるか否かを判定する(ステップS146)。更新回数が第1しきい値未満である場合(ステップS146のYES)、計算サーバは、再びステップS145の処理を実行する。更新回数が第1しきい値以上である場合(ステップS146のNO)、計算サーバは、第2変数yの初期化回数が第2しきい値未満であるか否かを判定する(ステップS147)。
【0104】
第2変数yの初期化回数が第2しきい値未満である場合(ステップS147のYES)、計算サーバは、再びステップS144以降の処理を実行する。すなわち、計算サーバは、第2変数yを最大絶対値y0+dy×τの擬似乱数によって初期化(ステップS144)した後、時間発展の計算処理を実行する(ステップS145)。
【0105】
第2変数yの初期化回数が第2しきい以上である場合(ステップS147のNO)、計算サーバは、第1変数xをスピンsに変換し、行列Jij、ベクトルhおよびスピンsに基づきハミルトニアンの値を計算する(ステップS148)。例えば、ステップS148で(1)に基づいてハミルトニアンの値を計算することができる。そして、計算サーバは、スピンsのベクトルとハミルトニアンの値を出力する(ステップS149)。例えば、計算サーバは、クライアント端末6の画面にスピンsのベクトルとハミルトニアンの値を表示させてもよい。また、計算サーバは、他の情報処理装置にスピンsのベクトルとハミルトニアンの値を転送してもよい。さらに、計算サーバは、外部記憶装置またはクラウドのストレージにスピンsのベクトルとハミルトニアンの値を保存してもよい。
【0106】
なお、図19で使った擬似乱数の最大絶対値がy0+dy×τ(dy<0)は、一例にしかすぎない。このため、擬似乱数の最大絶対値は、これとは異なる式によって定義されていてもよい。
【0107】
後述の図21および図22のフローチャートのように、情報処理装置および情報処理システムは、(1)擬似乱数の最大絶対値を調整し、さらに、(2)ハミルトニアンを複数回計算し、ハミルトニアンの値の比較を行ってもよい。
【0108】
図21および図22のフローチャートは、変形例5によるアルゴリズムの例を示している。以下では、図21および図22を参照しながら処理を説明する。ここで、第1変数xは、第1ベクトルの要素であり、第2変数yは、第2ベクトルの要素であるものとする。
【0109】
はじめに、計算サーバは、管理サーバ1より問題に対応する行列Jijおよびベクトルhを取得し、擬似乱数の生成に使われる係数y0を決定する(ステップS151)。例えば、擬似乱数の最大絶対値を0.1に設定した場合、(-0.1,+0.1)の擬似乱数に生成される。例えば、y0=0.1に設定することができる。ただし、y0の設定値は、これとは異なっていてもよい。なお、ステップS151のタイミングで擬似乱数のシードs0を決定してもよい。擬似乱数のシードs0は、自動的に決められる値であってもよいし、ユーザが指定する値であってもよい。
【0110】
次に、計算サーバは、第1変数xを初期化する(ステップS152)。例えば、xを擬似乱数で初期化してもよい。また、xを0で初期化してもよく、xの初期化方法については問わない。そして、計算サーバは、係数p(t)、a(t)およびτを初期化する(ステップS153)。また、ステップS153で変数tを初期化してもよい。例えば、ステップS153でp、a、τおよびtの値を0にすることができるが、p、a、τおよびtの初期値を限定するものではない。
【0111】
次に、計算サーバは、カウンタ変数τをインクリメントし、第2変数yを最大絶対値y0+dy×τの擬似乱数によって初期化する(ステップS154)。dyとして負値を使うことができる。例えば、図20に示したように、dy=-0.01に設定してもよい。カウンタ変数τは、第2変数yの初期化回数をカウントするために使われる。擬似乱数の最大絶対値がy0+dy×τ(dy<0)で与えられるため、ループ処理の各イタレーションでτをインクリメントすると、擬似乱数の最大絶対値を単調減少させることが可能となる。これにより、計算精度を改善することができる。
【0112】
そして、計算サーバは、時間発展の計算処理を実行し、第1変数x、第2変数y、係数pおよび係数aを更新する(ステップS155)。例えば、計算サーバは、ステップS155で図6のステップS104~ステップS107に相当する処理を実行することができる。また、計算サーバは、ステップS155で図9または図10に相当する処理を実行してもよい。変数tが使われている場合、例えば、tにΔtを加算してもよい。
【0113】
次に、計算サーバは、第1ベクトルおよび第2ベクトルの更新回数が第1しきい値未満であるか否かを判定する(ステップS156)。更新回数が第1しきい値未満である場合(ステップS156のYES)、計算サーバは、再びステップS155の処理を実行する。更新回数が第1しきい値以上である場合(ステップS156のNO)、計算サーバは、第1変数xをスピンsに変換し、行列Jij、ベクトルhおよびスピンsに基づきハミルトニアンの値を計算する(ステップS157)。例えば、(1)に基づいてハミルトニアンの値を計算することができる。
【0114】
そして、計算サーバは、記憶領域60を参照し、前ステップで計算されたハミルトニアンの値がこれまでの最小値であるか否かを判定する(ステップS158)。前ステップで計算されたハミルトニアンの値がこれまでの最小値である場合(ステップS158のYES)、計算サーバは、計算したハミルトニアンの値と、そのときのスピンsのベクトル(解ベクトル)を記憶領域60に保存する(ステップS159)。計算サーバは、ステップS159において、第1ベクトルを記憶領域60に保存してもよい。記憶領域60として、共有メモリ32またはストレージ34の記憶領域を使うことができる。また、記憶領域60として、計算サーバの外部の記憶装置またはクラウドストレージの記憶領域を使ってもよい。ただし、記憶領域60の場所を限定するものではない。なお、記憶領域60が充分に大きい場合、計算サーバは、ステップS158の判定をスキップし、ステップS159の処理を実行してもよい。計算サーバは、ステップS159の処理を実行した後、ステップS160の処理に進む。
【0115】
ステップS157で計算されたハミルトニアンの値がこれまでの最小値ではない場合(ステップS158のNO)、計算サーバは、ステップS159の処理をスキップし、ステップS160の処理に進む。
【0116】
ステップS160で計算サーバは、第2変数yの初期化回数が第2しきい値未満であるか否かを判定する。ステップS160でカウンタ変数τの値を第2しきい値と比較してもよい。第2変数yの初期化回数が第2しきい値未満である場合(ステップS160のYES)、計算サーバは、再びステップS154以降の処理を実行する。すなわち、計算サーバは、第2変数yを最大絶対値y0+dy×τの擬似乱数によって初期化(ステップS154)した後、時間発展の計算処理を実行する(ステップS155)。
【0117】
第2変数yの初期化回数がしきい以上である場合(ステップS160のNO)、計算サーバは、記憶領域60を参照し、スピンsのベクトルとハミルトニアンの値を出力する(ステップS161)。ステップS161で、過去のイタレーションで得られた解ベクトルのうち、最適解に最も近い解ベクトルを出力することができる。また、ステップS159で第1ベクトルが記憶領域60に保存された場合、計算サーバは、ステップS161で第1ベクトルを解ベクトルに変換してもよい。例えば、計算サーバは、クライアント端末6の画面にスピンsのベクトルとハミルトニアンの値を表示させてもよい。また、計算サーバは、他の情報処理装置にスピンsのベクトルとハミルトニアンの値を転送してもよい。
【0118】
図21および図22の処理を実行することにより、ハミルトニアンの値に基づき、自動的に最適解に最も近い第1ベクトルを選択し、当該第1ベクトルに基づくスピンsのベクトル(解ベクトル)を得ることができる。これにより、解空間のより広い範囲を探索し、限られた計算時間内に実用的な解を得ることが可能となる。また、擬似乱数の最大絶対値を調整することによって計算の精度を改善することもできる。
【0119】
図21および図22のフローチャートでは、ハミルトニアンとして(1)のエネルギーの関数が使われていた。ただし、(3)のハミルトニアンまたは(4)の拡張ハミルトニアンなど、その他の形式のハミルトニアンを使ってもよい。したがって、ハミルトニアンのパラメータが第1変数xおよび第2変数yである場合には、第1ベクトルを解ベクトルに変換する処理をスキップしてもよい。
【0120】
上述のように、情報処理装置の処理回路は、第2ベクトルの第2変数の初期化が行われる回数に応じて擬似乱数の最大絶対値を変えるように構成されていてもよい。また、情報処理装置の処理回路は、第2ベクトルの第2変数の初期化が行われる回数に応じて擬似乱数の最大絶対値を単調減少させるように構成されていてもよい。
【0121】
ここでは、ループ処理内のイタレーションによって擬似乱数の最大絶対値を変える処理を例として説明した。ただし、これとは異なる方法によって生成される擬似乱数の性質を変えてもよい。例えば、イタレーションによって擬似乱数の生成に使用するアルゴリズムの種類を変更してもよい。また、イタレーションによって擬似乱数の生成に使用するシードの値を変えてもよい。
【0122】
図23のグラフは、図6のアルゴリズムによって計算を行った場合における結果の例を示している。図23の横軸は、正規化された第1変数xの値を示している。一方、図23の縦軸(棒グラフの高さ)は、計算後に第1変数xがそれぞれのレンジの値をとった頻度を示している。図23において、実線で描かれた曲線は、ハミルトニアンの値に相当する。図23のグラフでは、この曲線の最大のピークが最適解に対応している。図23では、破線で最適解に相当する第1変数xの値が示されている。図23の例では、“normalized x”=1の近傍が最適解に対応している。
【0123】
図23の例では、計算後に第1変数xの値が最適解を含まないレンジ(破線を含まないレンジ)になっている頻度が高い。このため、計算処理で最適解を得られる確率が充分に高くない。このような場合、実用的な解を得るために、計算処理を複数回繰り返す必要がある。組合せ最適化問題の求解においては、より少ない計算時間で実用的な解が得られることが望まれる。
【0124】
図24のグラフは、図7のアルゴリズムによって計算を行った場合における結果の例を示している。図24においても、実線で描かれた曲線がハミルトニアンの値に相当し、当該曲線の最大のピークが最適解に対応している。また、図24においても、破線で最適解に相当する第1変数xの値が示されている。
【0125】
図24の例では、計算後に第1変数xの値が最適解を含むレンジ(破線を含むレンジ)に入っている頻度が、他のレンジに入る頻度より高くなっている。このため、図23の例と比べ、計算処理で最適解を得られる確率が高い。このため、図23の例より少ない計算時間で組合せ最適化問題の実用的な解を得ることができる。
【0126】
図25のグラフは、図17および図18のアルゴリズムによって計算を行った場合における結果の例を示している。図25においても、実線で描かれた曲線がハミルトニアンの値に相当し、当該曲線の最大のピークが最適解に対応している。また、図25においても、破線で最適解に相当する第1変数xの値が示されている。
【0127】
図25の例においても、計算後に第1変数xの値が最適解を含むレンジ(破線を含むレンジ)に入っている頻度が、他のレンジに入る頻度より高い。このため、図23の例と比べ、高い確率で最適解を得ることができる。このため、図23の例より少ない計算時間で組合せ最適化問題の実用的な解を得ることができる。
【0128】
図26のグラフは、図21および図22のアルゴリズムによって計算を行った場合における結果の例を示している。図26においても、実線で描かれた曲線がハミルトニアンの値に相当し、当該曲線の最大のピークが最適解に対応している。また、図26においても、破線で最適解に相当する第1変数xの値が示されている。
【0129】
図26の例では、計算後に第1変数xの値が最適解を含むレンジ(破線を含むレンジ)に入っている頻度が、他のレンジに入る頻度より顕著に高くなっている。このため、図23図25の例と比べて高い確率で最適解を得ることができる。このため、図26の例では、図23図26の例のうち、最も少ない計算時間で組合せ最適化問題の実用的な解が得ることが可能である。
【0130】
本実施形態に係る情報処理装置および情報処理システムでは、擬似乱数を使って第2変数yの初期化を複数回行うことにより、局所解の数に関わらず、解空間のより広い領域について、解を探索することができる。これにより、最適解またはそれに近い近似解が得られる確率を高めることができる。また、ループ処理内でハミルトニアンの値を計算することによって、計算処理の途中に最適解またはそれに近い近似解に到達した場合に、それを見落とさずに検出することが可能となる。これにより、ユーザに組合せ最適化問題の解を実用的な時間内で計算する情報処理装置または情報処理システムを提供することができる。
【0131】
以下では、情報処理システム、情報処理方法、記憶媒体およびプログラムの例を示す。
【0132】
情報処理システムは、第1変数を要素とする第1ベクトルおよび第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新するように構成されていてもよい。情報処理システムは、記憶装置と、情報処理装置とを備えていてもよい。記憶装置は、第1変数および第2変数を記憶するように構成されている。情報処理装置は、第1変数に対応する第2変数を重み付け加算することによって第1ベクトルを更新する。また、情報処理装置は、第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する第2変数に加算し、複数の第1変数を用いて問題項を計算し、問題項を第2変数に加算することによって第2ベクトルを更新する。さらに、情報処理装置は、第1ベクトルおよび第2ベクトルの更新を繰り返した後、擬似乱数によって第2ベクトルの第2変数を初期化し、再び第1ベクトルおよび第2ベクトルの更新を繰り返す。
【0133】
情報処理方法は、第1変数を要素とする第1ベクトルおよび第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新してもよい。ここで、情報処理方法は、第1変数に対応する第2変数を重み付け加算することによって第1ベクトルを更新するステップと、第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する第2変数に加算し、複数の第1変数を用いて問題項を計算し、問題項を第2変数に加算することによって第2ベクトルを更新するステップとを含んでいてもよい。また、情報処理方法は、第1ベクトルおよび第2ベクトルの更新を繰り返した後、擬似乱数によって第2ベクトルの第2変数を初期化し、再び第1ベクトルおよび第2ベクトルの更新を繰り返してもよい。
【0134】
プログラムは、コンピュータに第1変数を要素とする第1ベクトルおよび第1変数に対応する第2変数を要素とする第2ベクトルを繰り返し更新させてもよい。ここで、プログラムは、第1変数に対応する第2変数を重み付け加算することによって第1ベクトルを更新するステップと、第1変数を更新回数に応じて単調増加または単調減少する第1係数で重み付けし対応する前2変数に加算し、複数の第1変数を用いて問題項を計算し、問題項を第2変数に加算することによって第2ベクトルを更新するステップとを含んでいてもよい。また、プログラムは、コンピュータに第1ベクトルおよび第2ベクトルの更新を繰り返した後、擬似乱数によって第2ベクトルの第2変数を初期化し、再び第1ベクトルおよび第2ベクトルの更新を繰り返す処理を実行させるものであってもよい。また、非一時的なコンピュータ可読な記憶媒体は、上述のプログラムを格納するものであってもよい。
【0135】
[多体相互作用の項を含む計算]
シミュレーテッド分岐アルゴリズムを使うことにより、3次以上の目的関数を有する組合せ最適化問題を解くことも可能である。2値変数を変数とする3次以上の目的関数を最小化する変数の組合せを求める問題は、HOBO(Higher Order Binary Optimization)問題とよばれる。HOBO問題を扱う場合、高次へ拡張されたイジングモデルにおけるエネルギー式として、下記の式(7)を使うことができる。
【数7】
ここで、J(n)はn階テンソルであり、式(1)の局所磁場hと結合係数の行列Jを一般化させたものである。例えば、テンソルJ(1)は、局所磁場hのベクトルに相当する。n階テンソルJ(n)では、複数の添え字に同じ値があるとき、要素の値は0となる。式(7)では、3次の項までが示されているが、それより高次の項も式(7)と同様に定義することができる。式(7)は多体相互作用を含むイジングモデルのエネルギーに相当する。
【0136】
なお、QUBOと、HOBOはいずれも、制約なし多項式2値変数最適化(PUBO:Polynomial Unconstrained Binary Optimization)の1種であるといえる。すなわち、PUBOのうち、2次の目的関数を有する組合せ最適化問題は、QUBOである。また、PUBOのうち、3次以上の目的関数を有する組合せ最適化問題は、HOBOであるといえる。
【0137】
シミュレーテッド分岐アルゴリズムを使ってHOBO問題を解く場合、上述の式(3)のハミルトニアンHを下記の式(8)のハミルトニアンHに置き換えればよい。
【数8】
【0138】
また、式(8)より下記の式(9)に示した複数の第1変数を用いて問題項が導かれる。
【数9】
(9)の問題項zは、(8)の2番目の式を、いずれかの変数x(第1ベクトルの要素)について偏微分した形式をとっている。偏微分される変数xは、インデックスiによって異なる。ここで、変数xのインデックスiは、第1ベクトルの要素および第2ベクトルの要素を指定するインデックスに相当する。
【0139】
多体相互作用の項を含む計算を行う場合、上述の(6)の漸化式は、下記の(10)の漸化式に置き換わる。
【数10】
(10)は、(6)の漸化式をさらに一般化したものに相当する。
【0140】
上述に示した問題項は、本実施形態による情報処理装置が使うことができる問題項の例にしかすぎない。したがって、計算で使われる問題項の形式は、これらとは異なるものであってもよい。
【0141】
[アルゴリズムの変形例]
ここでは、シミュレーテッド分岐アルゴリズムの変形例について説明する。例えば、誤差の軽減または計算時間の短縮を目的に、上述のシミュレーテッド分岐アルゴリズムに各種の変形を行ってもよい。
【0142】
例えば、計算の誤差を軽減するために、第1変数の更新時に追加の処理を実行してもよい。例えば、更新によって第1変数xの絶対値が1より大きくなったとき、第1変数xの値をsgn(x)に置き換える。すなわち、更新によってx>1となったとき、変数xの値は1に設定される。また、更新によってx<-1となったとき、変数xの値は-1に設定される。これにより、変数xを使ってスピンsをより高い精度で近似することが可能となる。このような処理を含めることにより、アルゴリズムは、x=±1の位置に壁があるN粒子の物理モデルと等価になる。より一般的に述べると、演算回路は、値が第2値より小さい第1変数を第2値に設定し、値が第1値より大きい第1変数を第1値に設定するように構成されていてもよい。
【0143】
さらに、更新によってx>1となったとき、変数xに対応する変数yに係数rfを乗算してもよい。例えば、-1<r≦0の係数rfを使うと、上記の壁は、反射係数rfの壁となる。特に、rf=0の係数rfを使った場合、アルゴリズムは、x=±1の位置に完全非弾性衝突の起こる壁がある物理モデルと等価になる。より一般的に述べると、演算回路は、値が第1値より小さい第1変数に対応する第2変数、または、第2値より大きい第1変数に対応する第2変数を、もとの第2変数に、第2係数を乗じた値に更新するように構成されていてもよい。例えば、演算回路は、値が-1より小さい第1変数に対応する第2変数、または、値が1より大きい第1変数に対応する第2変数を、もとの第2変数に第2係数を乗じた値に更新するように構成されていてもよい。ここで、第2係数は上述の係数rfに相当する。
【0144】
なお、演算回路は、更新によってx>1となったとき、変数xに対応する変数yの値を擬似乱数に設定してもよい。例えば、[-0.1,0.1]の範囲の乱数を使うことができる。すなわち、演算回路は、値が第2値より小さい第1変数に対応する第2変数の値、または、値が第1値より大きい第1変数に対応する第2変数の値を、擬似乱数に設定するように構成されていてもよい。
【0145】
以上のようにして|x|>1となることを抑止するように更新処理を実行すれば、(6)および(10)の非線形項K×x を除去しても、xの値が発散することはなくなる。したがって、下記の(11)に示したアルゴリズムを使うことが可能となる。
【数11】
【0146】
(11)のアルゴリズムでは、問題項において、離散変数ではなく、連続変数xが使われている。このため、本来の組合せ最適化問題で使われている離散変数との誤差が生ずる可能性がある。この誤差を軽減するために、下記の(12)のように、問題項の計算において、連続変数xの代わりに、連続変数xを符号関数で変換した値sgn(x)を使うことができる。
【数12】
(12)において、sgn(x)は、スピンsに相当する。
【0147】
(12)では、問題項の中の1階のテンソルを含む項の係数αを定数(例えば、α=1)にしてもよい。(12)のアルゴリズムでは、問題項で現れるスピンどうしの積が必ず-1または1のいずれかの値をとるため、高次の目的関数を有するHOMO問題を扱った場合、積演算による誤差の発生を防ぐことができる。上述の(12)のアルゴリズムのように、計算サーバが計算するデータは、さらに、変数s(i=1、2、・・・、N)を要素とするスピンのベクトル(s,s,・・・,s)を含んでいてもよい。第1ベクトルのそれぞれの要素を符号関数で変換することにより、スピンのベクトルを得ることができる。
【0148】
[変数の更新処理の並列化の例]
以下では、シミュレーテッド分岐アルゴリズムの計算時における変数の更新処理の並列化の例について説明する。
【0149】
はじめに、PCクラスタへシミュレーテッド分岐アルゴリズムを実装した例について説明する。PCクラスタとは、複数台のコンピュータを接続し、1台のコンピュータでは得られない計算性能を実現するシステムである。例えば、図1に示した情報処理システム100は、複数台の計算サーバおよびプロセッサを含んでおり、PCクラスタとして利用することが可能である。例えば、PCクラスタにおいては、MPI(Message Passing Interface)を使うことにより、情報処理システム100のような複数の計算サーバにメモリが分散して配置されている構成でも並列的な計算を実行することが可能である。例えば、MPIを使って管理サーバ1の制御プログラム14E、各計算サーバの計算プログラム34Bおよび制御プログラム34Cを実装することができる。
【0150】
PCクラスタで利用するプロセッサ数がQである場合、それぞれのプロセッサに、第1ベクトル(x,x,・・・,x)に含まれる変数xのうち、L個の変数の計算を行わせることができる。同様に、それぞれのプロセッサに、第2ベクトル(y,y,・・・,y)に含まれる変数yのうち、L個の変数の計算を行わせることができる。すなわち、プロセッサ#j(j=1,2,・・・,Q)は、変数{x|m=(j-1)L+1,(j-1)L+2,・・・,jL}および{y|m=(j-1)L+1,(j-1)L+2,・・・,jL}の計算を行う。また、プロセッサ#jによる{y|m=(j-1)L+1,(j-1)L+2,・・・,jL}の計算に必要な下記の(13)に示されたテンソルJ(n)は、プロセッサ#jがアクセス可能な記憶領域(例えば、レジスタ、キャッシュ、メモリなど)に保存されるものとする。
【数13】
【0151】
ここでは、それぞれのプロセッサが第1ベクトルおよび第2ベクトルの一定数の変数を計算する場合を説明した。ただし、プロセッサによって、計算対象とする第1ベクトルおよび第2ベクトルの要素(変数)の数が異なっていてもよい。例えば、計算サーバに実装されるプロセッサによって性能差がある場合、プロセッサの性能に応じて計算対象とする変数の数を決めることができる。
【0152】
変数yの値を更新するためには、第1ベクトル(x,x,・・・,x)のすべての成分の値が必要となる。2値変数への変換は、例えば、符号関数sgn()を使うことによって行うことができる。そこで、Allgather関数を使い、第1ベクトル(x,x,・・・,x)のすべての成分の値をQ個のプロセッサに共有させることができる。第1ベクトル(x,x,・・・,x)については、プロセッサ間での値の共有が必要であるものの、第2ベクトル(y,y,・・・,y)およびテンソルJ(n)については、プロセッサ間での値の共有を行うことは必須ではない。プロセッサ間でのデータの共有は、例えば、プロセッサ間通信を使ったり、共有メモリにデータを保存したりすることによって実現することができる。
【0153】
プロセッサ#jは、問題項{z|m=(j-1)L+1,(j-1)L+2,・・・,jL}の値を計算する。そして、プロセッサ#jは、計算した問題項{{z|m=(j-1)L+1,(j-1)L+2,・・・,jL}の値に基づき、変数{y|m=(j-1)L+1,(j-1)L+2,・・・,jL}を更新する。
【0154】
上述の各式に示したように、問題項のベクトル(z,z,・・・,z)の計算では、テンソルJ(n)と、ベクトル(x,x,・・・,x)との積の計算を含む、積和演算が必要である。積和演算は、上述のアルゴリズムにおいて最も計算量の大きい処理であり、計算速度の向上においてボトルネックとなりうる。そこで、PCクラスタの実装では、積和演算を、Q=N/L個のプロセッサに分散して並列的に実行し、計算時間の短縮をはかることができる。
【0155】
図27は、マルチプロセッサ構成の例を概略的に示している。図27の複数の計算ノードは、例えば、情報処理システム100の複数の計算サーバに相当する。また、図27の高速リンクは、例えば、情報処理システム100のケーブル4a~4cおよびスイッチ5によって形成された計算サーバ間のインターコネクトに相当する。図27の共有メモリは、例えば、共有メモリ32に相当する。図27のプロセッサは、例えば、各計算サーバのプロセッサ33A~33Dに相当している。なお、図27には複数の計算ノードが示されているが、単一計算ノードの構成を用いることを妨げるものではない。
【0156】
図27には、各構成要素に配置されるデータおよび構成要素間で転送されるデータが示されている。各プロセッサでは、変数x、yの値が計算される。また、プロセッサと共有メモリ間では、変数xが転送される。各計算ノードの共有メモリには、例えば、第1ベクトル(x,x,・・・,x)、第2ベクトル(y,y,・・・,y)のL個の変数、およびテンソルJ(n)の一部が保存される。そして、計算ノード間を接続する高速リンクでは、例えば、第1ベクトル(x,x,・・・,x)が転送される。Allgather関数を使う場合、各プロセッサで変数yを更新するために、第1ベクトル(x,x,・・・,x)の全要素が必要となる。
【0157】
なお、図27に示したデータの配置および転送は一例にしかすぎない。PCクラスタにおけるデータの配置方法、転送方法および並列化の実現方法については、特に問わない。
【0158】
また、GPU(Graphics Processing Unit)を使ってシミュレーテッド分岐アルゴリズムの計算を行ってもよい。
【0159】
図28は、GPUを使った構成の例を概略的に示している。図28には、互いに高速リンクで接続された複数のGPUが示されている。それぞれのGPUには、共有メモリにアクセス可能な複数のコアが搭載されている。また、図28の構成例では、複数のGPUが高速リンクを介して接続されており、GPUクラスタを形成している。例えば、GPUが図1のそれぞれの計算サーバに搭載されている場合、高速リンクは、ケーブル4a~4cおよびスイッチ5によって形成された計算サーバ間のインターコネクトに相当する。なお、図28の構成例では、複数のGPUが使われているが、ひとつのGPUを使った場合にも、並列的な計算を実行することが可能である。すなわち、図28のそれぞれのGPUは、図16のそれぞれの計算ノードに相当する計算を実行できる。すなわち、情報処理装置(計算サーバ)のプロセッサ(処理回路)は、Graphics Processing Unit(GPU)のコアであってもよい。
【0160】
GPUにおいて、変数xおよびy、ならびにテンソルJ(n)はデバイス変数として定義される。GPUは、変数yの更新に必要なテンソルJ(n)と第1ベクトル(x,x,・・・,x)の積を、行列ベクトル積関数によって並列的に計算することができる。なお、行列とベクトルの積演算を繰り返し実行することにより、テンソルとベクトルの積を求めることができる。また、第1ベクトル(x,x,・・・,x)の計算と、第2ベクトル(y,y,・・・,y)のうち、積和演算以外の部分については、それぞれのスレッドにi番目の要素(x,y)の更新処理を実行させ、処理の並列化を実現することができる。
【0161】
情報処理装置は、複数の処理回路を備えていてもよい。この場合、それぞれの処理回路は、並列的に第1ベクトルの少なくとも一部および第2ベクトルの少なくとも一部を更新するように構成されていてもよい。
【0162】
また、情報処理システムは、複数の情報処理装置を備えていてもよい。この場合、それぞれの処理回路は、並列的に第1ベクトルの少なくとも一部および第2ベクトルの少なくとも一部を更新するように構成されていてもよい。
【0163】
[組合せ最適化問題を解くための全体的な処理]
以下では、シミュレーテッド分岐アルゴリズムを用いて組合せ最適化問題を解くために実行される全体的な処理を説明する。
【0164】
図29のフローチャートは、組合せ最適化問題を解くために実行される全体的な処理の例を示している。以下では、図29を参照しながら、処理を説明する。
【0165】
はじめに、組合せ最適化問題を定式化する(ステップS201)。そして、定式化された組合せ最適化問題をイジング問題(イジングモデルの形式)に変換する(ステップS202)。次に、イジングマシン(情報処理装置)によってイジング問題の解を計算する(ステップS203)。そして、計算された解を検証する(ステップS204)。例えば、ステップS204では、制約条件が満たされているか否かの確認が行われる。また、ステップS204で目的関数の値を参照し、得られた解が最適解またはそれに近い近似解であるか否かの確認を行ってもよい。
【0166】
そして、ステップS204における検証結果または計算回数の少なくともいずれかに応じて再計算をするか否かを判定する(ステップS205)。再計算をすると判定された場合(ステップS205のYES)、ステップS203およびS204の処理が再び実行される。一方、再計算をしないと判定された場合(ステップS205のNO)、解の選択を行う(ステップS206)。例えば、ステップS206では、制約条件の充足または目的関数の値の少なくともいずれかに基づき選択を行うことができる。なお、複数の解が計算されていない場合には、ステップS206の処理をスキップしてもよい。最後に、選択した解を組合せ最適化問題の解に変換し、組合せ最適化問題の解を出力する(ステップS207)。
【0167】
上述で説明した情報処理装置、情報処理システム、情報処理方法、記憶媒体およびプログラムを使うことにより、組合せ最適化問題の解を実用的な時間内で計算することが可能となる。これにより、組合せ最適化問題の求解がより容易となり、社会のイノベーションおよび科学技術の進歩を促進することが可能となる。
【0168】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組合せてもよい。
【符号の説明】
【0169】
1 管理サーバ
2 ネットワーク
3a、3b、3c 計算サーバ
4a、4b、4c ケーブル
5 スイッチ
6 クライアント端末
10 プロセッサ
11 管理部
12 変換部
13 制御部
14 記憶部
14A 問題データ
14B 計算データ
14C 管理プログラム
14D 変換プログラム
14E、34C 制御プログラム
15、31 通信回路
16 入力回路
17 出力回路
18 操作装置
19 表示装置
20 バス
32 共有メモリ
33A、33B、33C、33D プロセッサ
34 ストレージ
34A 計算データ
34B 計算プログラム
35 ホストバスアダプタ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29