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

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

▶ 株式会社東芝の特許一覧

特許7521080計算システム、計算方法、プログラムおよび回路情報
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-12
(45)【発行日】2024-07-23
(54)【発明の名称】計算システム、計算方法、プログラムおよび回路情報
(51)【国際特許分類】
   G06N 99/00 20190101AFI20240716BHJP
【FI】
G06N99/00 180
【請求項の数】 16
(21)【出願番号】P 2023113973
(22)【出願日】2023-07-11
(62)【分割の表示】P 2019185297の分割
【原出願日】2019-10-08
(65)【公開番号】P2023130468
(43)【公開日】2023-09-20
【審査請求日】2023-07-11
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】辰村 光介
(72)【発明者】
【氏名】後藤 隼人
(72)【発明者】
【氏名】山崎 雅也
(72)【発明者】
【氏名】日高 亮
(72)【発明者】
【氏名】酒井 良哲
【審査官】渡辺 順哉
(56)【参考文献】
【文献】国際公開第2018/037388(WO,A1)
【文献】特表2018-529142(JP,A)
【文献】特開2019-080232(JP,A)
【文献】米国特許出願公開第2013/0282636(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
計算システムであって、
N個の2値変数(Nは2以上の整数)を含む2次関数を最小化するQUBO(quadratic unconstrained binary optimization)問題を解く計算装置と、
前記2次関数を構成するA個の項(Aは2以上の整数)におけるA個の係数のうちの一部の係数を表す情報を含むパケットを受信する受信装置と、
前記A個の係数のうちの少なくとも一部の複数の係数を記憶するバッファメモリを含む転送回路と、
を備え、
前記計算装置は、前記A個の係数を記憶するメモリを有し、前記メモリに記憶された前記A個の係数に基づき前記QUBO問題の解を算出し、
前記転送回路は、
前記受信装置が前記パケットを受信した場合、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換え、
所定タイミングにおいて、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
計算システム。
【請求項2】
前記計算装置は、
仮想的なN個の粒子の位置を表すN個の位置変数および前記N個の粒子の運動量を表すN個の運動量変数を、初期時刻から終了時刻まで単位時間毎に更新し、
前記N個の2値変数のそれぞれの値を、前記終了時刻における前記N個の位置変数のうちの、対応する粒子の位置変数に基づき決定し、
前記N個の粒子は、前記QUBO問題における前記N個の2値変数に対応する
請求項1に記載の計算システム。
【請求項3】
前記計算装置は、前記単位時間毎に、
対象時刻における前記N個の位置変数を、前記N個の運動量変数に基づき算出し、
前記対象時刻における前記N個の運動量変数を、前記N個の位置変数、および、前記メモリに記憶された前記A個の係数に基づき算出する
請求項2に記載の計算システム。
【請求項4】
前記QUBO問題の解に基づき外部装置に与える指示を生成し、生成した指示を含む出力パケットを出力する出力装置をさらに備える
請求項1から3の何れか1項に記載の計算システム。
【請求項5】
前記受信装置は、複数の前記パケットを順次に受信し、
前記転送回路は、前記受信装置が前記パケットを受信する毎に、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換える
請求項1から4の何れか1項に記載の計算システム。
【請求項6】
前記受信装置は、不定期に送信される前記パケットを順次に受信する
請求項5に記載の計算システム。
【請求項7】
前記計算装置は、前記QUBO問題の解を算出する処理を、前記受信装置が前記パケットを受信したことをトリガとして実行する
請求項6に記載の計算システム。
【請求項8】
前記計算装置は、前記QUBO問題の解を算出する処理を、一定期間毎に繰り返して実行する
請求項5または6に記載の計算システム。
【請求項9】
前記転送回路は、前記一定期間毎に、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
請求項8に記載の計算システム。
【請求項10】
前記バッファメモリに記憶されている前記複数の係数のうちのいずれも変更がない場合には、前記メモリへの係数の書き込みをスキップする
請求項9に記載の計算システム。
【請求項11】
前記転送回路は、前記受信装置により前記パケットの受信とは非同期に、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
請求項5または6に記載の計算システム。
【請求項12】
前記バッファメモリは、前記複数の係数に対して一対一で対応する複数のメモリ回路を含み、
前記複数のメモリ回路は、前記複数の係数のうちの対応する係数を記憶し、
前記転送回路は、
前記受信装置が前記パケットを受信する毎に、前記複数のメモリ回路のうちの、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により選択されたメモリ回路に係数を書き込み、
所定時間毎に、前記複数のメモリ回路に記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
請求項1から11の何れか1項に記載の計算システム。
【請求項13】
計算システムにおいて実行される計算方法であって、
前記計算システムは、
N個の2値変数(Nは2以上の整数)を含む2次関数を最小化するQUBO(quadratic unconstrained binary optimization)問題を解く計算装置と、
前記2次関数を構成するA個の項(Aは2以上の整数)におけるA個の係数のうちの一部の係数を表す情報を含むパケットを受信する受信装置と、
前記A個の係数のうちの少なくとも一部の複数の係数を記憶するバッファメモリを含む転送回路と、
を備え、
前記計算装置が、前記A個の係数を記憶するメモリを有し、前記メモリに記憶された前記A個の係数に基づき前記QUBO問題の解を算出し、
前記転送回路が、
前記受信装置が前記パケットを受信した場合、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換え、
所定タイミングにおいて、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
計算方法。
【請求項14】
情報処理装置を、計算装置と、受信装置と、転送回路とを備える計算システムにおける前記転送回路として機能させるためのプログラムであって、
前記計算装置は、N個の2値変数(Nは2以上の整数)を含む2次関数を最小化するQUBO(quadratic unconstrained binary optimization)問題を解き、
前記受信装置は、前記2次関数を構成するA個の項(Aは2以上の整数)におけるA個の係数のうちの一部の係数を表す情報を含むパケットを受信し、
前記転送回路は、前記A個の係数のうちの少なくとも一部の複数の係数を記憶するバッファメモリを含み、
前記計算装置は、前記A個の係数を記憶するメモリを有し、前記メモリに記憶された前記A個の係数に基づき前記QUBO問題の解を算出し、
前記情報処理装置は、
前記受信装置が前記パケットを受信した場合、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換え、
所定タイミングにおいて、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
プログラム。
【請求項15】
ハードウェア記述言語により記載された、回路の構成を表す回路情報であって、
前記回路を、計算システムとして機能させ、
前記計算システムは、
N個の2値変数(Nは2以上の整数)を含む2次関数を最小化するQUBO(quadratic unconstrained binary optimization)問題を解く計算装置と、
前記2次関数を構成するA個の項(Aは2以上の整数)におけるA個の係数のうちの一部の係数を表す情報を含むパケットを受信する受信装置と、
前記A個の係数のうちの少なくとも一部の複数の係数を記憶するバッファメモリを含む転送回路と、
を備え、
前記計算装置は、前記A個の係数を記憶するメモリを有し、前記メモリに記憶された前記A個の係数に基づき前記QUBO問題の解を算出し、
前記転送回路は、
前記受信装置が前記パケットを受信した場合、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換え、
所定タイミングにおいて、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
回路情報。
【請求項16】
再構成可能な半導体装置を動作させるために、前記再構成可能な半導体装置に書き込まれる回路情報であって、
前記再構成可能な半導体装置を、計算システムとして機能させ、
前記計算システムは、
N個の2値変数(Nは2以上の整数)を含む2次関数を最小化するQUBO(quadratic unconstrained binary optimization)問題を解く計算装置と、
前記2次関数を構成するA個の項(Aは2以上の整数)におけるA個の係数のうちの一部の係数を表す情報を含むパケットを受信する受信装置と、
前記A個の係数のうちの少なくとも一部の複数の係数を記憶するバッファメモリを含む転送回路と、
を備え、
前記計算装置は、前記A個の係数を記憶するメモリを有し、前記メモリに記憶された前記A個の係数に基づき前記QUBO問題の解を算出し、
前記転送回路は、
前記受信装置が前記パケットを受信した場合、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換え、
所定タイミングにおいて、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む
回路情報。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、計算システム、計算方法、プログラムおよび回路情報に関する。
【背景技術】
【0002】
社会システムの生産性を高めるための課題の多くは、組合せ最適化問題に帰着される。ノード(頂点)と、ノードとノードとを結ぶ有向エッジ(辺)とから構成されるグラフにおける、開始ノードと終点ノードとの間を結ぶ経路を何かしらの評価関数に基づき選択する問題は、経路探索問題と呼ばれる。例えば、為替等の裁定取引の機会を検知する裁定取引問題は、有向グラフにおける経路探索問題として定式化される。この場合、有向グラフは、ノードが通貨に対応し、有向エッジが開始ノードに対応する通貨から終了ノードに対応する通貨への交換に対応し、有向エッジに割り当てられた重み値が通貨の交換レートに対応する。
【0003】
また、イジングモデルの基底状態を算出するイジング問題が知られている。イジング問題は、±1の2値を取る変数(イジングスピン)の2次関数で与えられたコスト関数(イジングエネルギー)を最小化する組合せ最適化問題である。
【0004】
イジング問題は、イジングスピン(s)を1次関係式(s=2b-1)に変換することによって、ビット(b)を用いた式により表すことができる。bは、0また1の2値の変数である。つまり、イジング問題は、ビット(b)を用いた2次関数により表されるコスト関数を最小化する問題と同一となる。このような問題は、QUBO(quadratic unconstrained binary optimization)問題と呼ばれる。裁定取引問題は、QUBO問題として定式化できることが知られている。
【0005】
ところで、このような最適化問題を高速に解く装置が要求される。例えば、裁定取引問題を定式化した有向グラフから、交換の結果得られる利得(交換利得)が最大となる閉路(開始ノードと終了ノードとが同一の経路)を短時間で検出し、裁定取引の機会をより早く検知する装置が要求される。
【先行技術文献】
【特許文献】
【0006】
【文献】特許第5865456号公報
【文献】特開2018-005541号公報
【文献】特開2018-010474号公報
【非特許文献】
【0007】
【文献】Hayato Goto, Kosuke Tatsumura, Alexander R. Dixon, “Combinatorial optimization by simulating adiabatic bifurcations in nonlinear Hamiltonian systems”,Science Advances, Vol. 5, no. 4, eaav2372, 19 Apr. 2019
【文献】Soon Wanmei, and Heng-Qing Ye , "Currency arbitrage detection using a binary integer programming model", International Journal of Mathematical Education in Science and Technology,Volume 42, Issue 4, 369-376, 29 Nov. 2010
【文献】Gili Rosenberg, "Finding optimal arbitrage opportunities using a quantum annealer " 1QB Information Technologies Write Paper, 2016
【文献】M. W. Johnson et al., “Quantum annealing with manufactured spins”, Nature 473, 194-198, 11 May. 2011
【発明の概要】
【発明が解決しようとする課題】
【0008】
発明が解決しようとする課題は、最適化問題の解を高速に出力することにある。
【課題を解決するための手段】
【0009】
実施形態に係る計算システムは、計算装置と、受信装置と、転送回路とを備える。前記計算装置は、N個の2値変数(Nは2以上の整数)を含む2次関数を最小化するQUBO(quadratic unconstrained binary optimization)問題を解く。前記受信装置は、前記2次関数を構成するA個の項(Aは2以上の整数)におけるA個の係数のうちの一部の係数を表す情報を含むパケットを受信する。前記転送回路は、前記A個の係数のうちの少なくとも一部の複数の係数を記憶するバッファメモリを含む。前記計算装置は、前記A個の係数を記憶するメモリを有し、前記メモリに記憶された前記A個の係数に基づき前記QUBO問題の解を算出する。前記転送回路は、前記受信装置が前記パケットを受信した場合、前記バッファメモリに記憶された前記複数の係数のうちの受信された前記パケットに含まれる情報により示される前記一部の係数を、受信された前記パケットに含まれる情報に従って書き換え、所定タイミングにおいて、前記バッファメモリに記憶されている前記複数の係数の全てを、一括して前記計算装置が有する前記メモリに書き込む。
【図面の簡単な説明】
【0010】
図1】有向グラフを示す図。
図2】有向エッジに対応する値および変数が格納される行列を説明するための図。
図3】有向エッジに重み値が割り当てられた有向グラフを示す図。
図4】有向エッジにビットが対応付けられた有向グラフを示す図。
図5】第1実施形態に係る探索装置の構成を示す図。
図6】第1実施形態に係る探索装置の処理の流れを示すフローチャート。
図7】第2実施形態に係る探索装置の回路構成を示す図。
図8】メモリの構成を示す図。
図9】探索装置の処理の流れを示すフローチャート。
図10】TE回路に入出力される変数および値を示す図。
図11】GC回路に入出力される変数を示す図。
図12】CC回路に入出力される変数および値を示す図。
図13】MX回路に入出力される変数および値を示す図。
図14】TE回路による変数および値の読み出し順を示す図。
図15】MX回路による変数および値の読み出し順を示す図。
図16】TE処理、MX処理およびGC処理のタイミングを示す図。
図17】TE回路の構成を示す図。
図18】GC回路の構成を示す図。
図19】GC回路による位置変数の取得順序等を示す図。
図20】MX回路の構成を示す図。
図21】正規化回路の構成を示す図。
図22】CC回路の構成を示す図。
図23】第1のメイン疑似コードを示す図。
図24】第2のメイン疑似コードを示す図。
図25】TE疑似コードを示す図。
図26】MX疑似コードを示す図。
図27】並列化したTE回路を示す図。
図28】並列化したMX回路を示す図。
図29】並列化したGC回路の構成を示す図。
図30】並列化したGC回路による位置変数の取得順序等を示す図。
図31】並列化前後のTE処理およびMX処理のタイミングを示す図。
図32】裁定取引システムの構成を示す図。
図33】入力管理装置の構成を示す図。
【発明を実施するための形態】
【0011】
(第1実施形態)
第1実施形態に係る最適経路問題およびその解法について説明する。
【0012】
(前提)
図1は、有向グラフを示す図である。
【0013】
経路の探索対象となる有向グラフは、複数のノードと、複数の有向エッジとを含む。複数のノードのそれぞれには、固有のインデックスが割り当てられる。インデックスは、1以上の整数である。有向グラフがN個(Nは、3以上の整数)のノードを含む場合、複数のノードのそれぞれには、1からNまでの何れかの固有の整数が割り当てられる。なお、図1の例は、N=4の有向グラフを示す。
【0014】
複数の有向エッジのそれぞれは、方向を有し、複数のノードのうちの何れかのノード(開始ノード)から出て、複数のノードのうちの他のノード(終了ノード)へと向かう経路を表す。本実施形態において、各有向エッジの開始ノードと終了ノードとは、異なる。すなわち、本実施形態において、有向エッジは、開始ノードと終了ノードが同一となるエッジ(自己ループ)を含まない。
【0015】
なお、実施形態では、i番目(iは、1以上の整数、N以下の整数)のノードから出て、j番目(jは、1以上、N以下の整数であって、iとは異なる値)のノードに入る有向エッジを、ei,jと表す。また、実施形態では、様々な値および変数を、有向エッジに対応付けて取り扱う。これらの値および変数も、同様に、下付けの添え字により対応する有向エッジを識別する。
【0016】
図2は、有向エッジに対応する値および変数が格納されるN×Nの行列を説明するための図である。
【0017】
有向グラフに含まれるノードの数がN個である場合、実施形態では、これらの値および変数は、N行×N列の行列に格納される。実施形態では、行列は、行番号が対応する有向エッジの開始ノードのインデックスを表し、列番号が対応する有向エッジの終了ノードのインデックスを表す。ただし、有向エッジが自己ループを含まないので、行列は、対角成分(行番号と列番号とが同一の成分)の要素として、経路探索に影響を与えない値を格納する。図2の例は、N=4の場合の行列を示す。
【0018】
なお、行列は、行番号が対応する有向エッジの終了ノードのインデックスを表し、列番号が対応する有向エッジの開始ノードのインデックスを表してもよい。
【0019】
図3は、有向エッジに重み値が割り当てられた有向グラフを示す図である。
【0020】
有向グラフに含まれる複数の有向エッジのそれぞれには、重み値が割り当てられる。有向グラフがN個のノードを含む場合、i番目のノードから出て、j番目のノードに入る有向エッジに割り当てられた重み値は、wi,jと表される。
【0021】
最適経路問題の一つとして、有向グラフに対する最短経路を検出する問題がある。最短経路を検出する問題の解は、含まれている2つ以上の有向エッジに割り当てられた重み値の和が、最小となる経路である。
【0022】
最適経路問題の一つとして、最長経路を検出する問題、最小利得経路を検出する問題、および、最大利得経路を検出する問題もある。最長経路を検出する問題の解は、含まれている2つ以上の有向エッジに割り当てられた重み値の逆数の和が、最小となる経路である。最小利得経路を検出する問題の解は、含まれている2つ以上の有向エッジに割り当てられた重み値の対数値の和が、最小となる経路である。最大利得経路を検出する問題の解は、含まれている2つ以上の有向エッジに割り当てられた重み値の逆数の対数値の和が、最小となる経路である。つまり、最長経路問題、最小利得経路問題および最大利得経路問題は、最短経路問題として解くことができる。
【0023】
例えば、為替の裁定取引の機会を検知する裁定取引問題について考える。この場合、有向グラフは、ノードが通貨に対応し、有向エッジが、開始ノードの通貨から終了ノードの通貨への交換に対応する。そして、i番目のノードから出て、j番目のノードに入る有向エッジに割り当てられる重み値は、下記の式(1)のように表される。
【0024】
【数1】
【0025】
式(1)において、ri,jは、開始ノード(i番目のノード)の通貨から、直後ノード(j番目のノード)の通貨への交換レートを表す。
【0026】
このような有向グラフおいて、含まれている2つ以上の有向エッジに割り当てられた重み値の和が、最小となる閉路は、トータルレートが最大となる閉路を表す。従って、このような有向グラフの最短経路問題の解は、為替の裁定取引の機会を検知する裁定取引問題の解に相当する。
【0027】
また、例えば、最短距離を検出する問題の場合、有向グラフは、ノードが地点に対応し、有向エッジに割り当てられた重み値が開始ノードの地点から終了ノードの地点までの距離を表す。この場合、重み値は、正の値となる。また、この場合、i番目のノードから出てj番目のノードに入る有向エッジに割り当てられた重み値は、j番目のノードから出て、i番目のノードに入る有向エッジに割り当てられた重み値と同一となる。つまり、このような有向グラフは、無向グラフとみなせる。従って、無向グラフにおける最短距離を検出する問題は、有向グラフにおける最短経路問題として解くことができる。
【0028】
(閉路に関する問題)
最適経路問題には、閉路(ループ状の経路)に関する問題と、異なる2つのノード間を結ぶ経路に関する問題がある。まず、閉路に関する問題を説明し、次に、異なる2つのノード間を結ぶ経路に関する問題について説明する。
【0029】
図4は、有向エッジにビットが対応付けられた有向グラフを示す図である。有向グラフの最適経路問題は、0-1最適化問題として定式化することができる。
【0030】
有向グラフの最適経路問題を0-1最適化問題として定式化した場合、複数の有向エッジのそれぞれに、ビットが対応付けられる。すなわち、0-1最適化問題に含まれる複数のビットは、有向グラフに含まれる複数の有向エッジに対応する。なお、本実施形態において、i番目のノードから出て、j番目のノードに入る有向エッジに割り当てられたビットは、bi,jと表される。
【0031】
さらに、0-1最適化問題に含まれる複数のビットのそれぞれは、対応する有向エッジが最適経路に選択されたか否かを表す。本実施形態において、複数のビットのそれぞれは、1の場合に、対応する有向エッジが最適経路に選択されていることを表し、0の場合に、対応する有向エッジが最適経路に選択されていないことを表す。例えば、裁定取引問題であれば、複数のビットのそれぞれは、1の場合、開始ノードの通貨から終了ノードの通貨への交換を行うことを表し、0の場合、開始ノードの通貨から終了ノードの通貨への交換を行わないことを表す。
【0032】
そして、有向グラフの最適経路問題を0-1最適化問題として定式化した場合、最小化する式は、下記の式(2)により表される。
【0033】
E=M×C+M×P…(2)
【0034】
Cは、選択された経路に含まれる2つ以上の有向エッジに割り当てられた重み値の合計値を複数のビットを用いて表すコスト関数である。Pは、最適経路を満たす制約条件を複数のビットを用いて表すペナルティ関数である。MおよびMは、予め定められた正の定数である。すなわち、0-1最適化問題は、コスト関数Cと、ペナルティ関数Pとを含む合成コスト関数Eに定式化される。
【0035】
本実施形態において、コスト関数Cは、下記の式(3)のように表される。
【0036】
【数2】
【0037】
式(3)は、選択された経路に含まれる2つ以上の有向エッジに割り当てられた重み値の合計値(累加算値)を複数のビットを用いて表している。式(3)は、i=jの場合を除いた、iとjとの全ての組み合わせにおけるwi,j×bi,jを、総加算する式である。
【0038】
閉路に関する問題において、ペナルティ関数Pは、選択された経路が有向グラフの中で閉路を形成する条件を、複数のビットを用いて表す。有向グラフの中で閉路を形成する条件は、下記の通りである。
【0039】
第1は、N個のノードのそれぞれは、最適経路に選択された、出ていく有向エッジの数が1以下である、という条件である。
【0040】
第2は、N個のノードのそれぞれは、最適経路に選択された、入ってくる有向エッジの数が1以下である、という条件である。
【0041】
第3は、N個のノードのそれぞれは、最適経路に選択された、出ていく有向エッジの数と、最適経路に選択された、入ってくる有向エッジの数とが同一である、という条件である。
【0042】
第4は、i番目のノードから出てj番目のノードに入る有向エッジと、j番目のノードから出てi番目のノードに入る有向エッジとが、同時に最適経路に選択されない、という条件である。
【0043】
以上の条件を複数のビットを用いて表すペナルティ関数Pは、下記の式(4)のように表される。
【0044】
【数3】
【0045】
式(4)の右辺の第1項は、任意のiについての、j=j´以外の全てのjとj´の組み合わせについてbi,j×bi,j´を加算した加算値を、さらに、全てのiについて加算する式である。なお、j´は、1以上のN以下の、i以外の整数である。式(4)の右辺の第1項は、第1の条件を表す式である。
【0046】
式(4)の右辺の第2項は、任意のjについての、i=i´以外の全てのiとi´の組み合わせについてbi,j×bi´,jを加算した加算値を、さらに、全てのjについて加算する式である。なお、i´は、1以上のN以下の、j以外の整数である。式(4)の右辺の第2項は、第2の条件を表す式である。
【0047】
式(4)の右辺の第3項のカッコ内は、任意のiについての、全てのjについてのbi,jの加算値から全てのjについてのbj,iの加算値を減算した減算値の二乗を算出する式である。そして、式(4)の右辺の第3項は、カッコ内で算出した値を、全てのiについて加算する式である。式(4)の右辺の第3項は、第3の条件を表す式である。
【0048】
式(4)の右辺の第4項は、全てのiとjとの組み合わせについて、bi,j×bj,iを加算する式である。式(4)の右辺の第4項は、第4の条件を表す式である。
【0049】
なお、ペナルティ関数Pの全ての項についている1/2は、各項の0からの最小のズレ量が1となるようにするための係数である。また、ペナルティ関数Pは、閉路に関する最適経路を満たす制約条件を複数のビットを用いて表す式であれば、他の式であってもよい。例えば、ペナルティ関数Pは、bi,j =×bi,jを用いた式を含んでもよい。
【0050】
(閉路に関する問題の数値解析)
本実施形態に係る探索方法は、以上のような、0-1最適化問題に含まれる複数のビットの値を、非特許文献1に示された手法により、数値的に解く。
【0051】
非特許文献1に示された手法を用いた場合、0-1最適化問題に含まれる複数のビットは、仮想的な複数の粒子に対応づけられる。従って、複数の粒子は、有向グラフに含まれる複数の有向エッジに対応する。また、複数の粒子は、0-1最適化問題により全体のエネルギー(ハミルトニアン)が表される。そして、本実施形態に係る探索方法は、複数の粒子の運動方程式をシンプレクティック・オイラー法により数値的に解くことによって、複数のビットの値を算出する。
【0052】
例えば、本実施形態に係る探索方法は、下記の式(5)、式(6)、式(7)および式(8)に示す古典力学の運動方程式を、シンプレクティック・オイラー法により数値的に解くことにより、閉路に関する問題の解を算出する。
【0053】
【数4】
【0054】
式(5)~(8)において、tは、時刻を表す。iは、ノードのインデックスを表し、1以上、N以下の整数である。jは、ノードのインデックスを表し、i以外の1以上、N以下の整数である。wi,jは、i番目のノードから出てj番目のノードに入る有向エッジに割り当てられた重み値を表す。xi,jは、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の位置を表す。xj,iは、j番目のノードから出てi番目のノードに入る有向エッジに対応する粒子の位置を表す。yi,jは、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の運動量を表す。
【0055】
式(5)~式(8)において、XRは、i番目のノードの第1積算値を表す。XCは、i番目のノードの第2積算値を表す。XRは、j番目のノードの第1積算値を表す。XCは、j番目のノードの第2積算値を表す。MおよびMは、任意の定数を表す。
【0056】
式(5)は、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の位置xi,jの時間微分値を表す。
【0057】
式(6)は、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の運動量yi,jの時間微分値を表す。式(6)は、閉路に関する0-1最適化問題の合成コスト関数(式(2)のE)ををbi,jで偏微分したのち、bi,jをxi,jで置き換えた式に比例する。
【0058】
式(7)は、i番目のノードについて、出ていく2つ以上の有向エッジに対応する2つ以上の粒子の位置を累加算した第1積算値を表す。また、式(8)は、j番目のノードについて、入ってくる2つ以上の有向エッジに対応する2つ以上の粒子の位置を累加算した第2積算値を表す。
【0059】
本実施形態に係る探索方法は、このような式(5)~式(8)を用いて、仮想的な複数の粒子のそれぞれの位置および運動量を、初期時刻から終了時刻まで単位時間毎に時間積分する。この場合、本実施形態に係る探索方法は、シンプレクティック・オイラー法に基づき、位置と運動量とを、交互に算出する。すなわち、本実施形態に係る探索方法は、単位時間毎に、位置が算出された後に運動量が算出する、または、運動量が算出された後に位置が算出する。
【0060】
また、粒子の位置は、対応するビットの第1値(例えば0)から、対応するビットの第2値(例えば1)との間の値を表す連続値に制約される。なお、第2値は、第1値よりも大きい。
【0061】
従って、本実施形態に係る探索方法は、単位時間毎に、複数の粒子のそれぞれについて、位置が第1値(例えば0)より小さい場合、位置を第1値に修正し、第2値より大きい場合、位置が第2値(例えば1)に修正する。さらに、本実施形態に係る探索方法は、単位時間毎に、複数の粒子のそれぞれについて、位置が第1値より小さいまたは第2値より大きい場合、運動量を予め定められた値または予め定められた演算により定まる値に修正してもよい。
【0062】
そして、本実施形態に係る探索方法は、最終時刻における複数の粒子のそれぞれの位置を予め定められた閾値(例えば、0.5)により二値化し、0-1最適化問題に含まれる複数のビットのそれぞれの解として出力する。なお、このような探索方法に従った処理を実行する具体的な装置については、図5以降を参照して説明する。
【0063】
また、本実施形態に係る探索方法は、式(6)に代えて、下記の式(9)を用いて、閉路に関する問題の解を算出してもよい。
【0064】
【数5】
【0065】
pは、初期時刻において0であり、最終時刻において1となり、単位時刻毎に単調増加する値である。式(10)は、式(9)に組み込まれるhi,jを表す。xは、xi,jの初期時刻における値である。Nは、有向グラフに含まれるノードの数である。
【0066】
なお、式(9)は、式(6)に、0から1へ単調増加するpとそれに依存する式(10)のhi,jという2種類の時間変化パラメータが加算された式である。これらの時間変化パラメータは、初期時刻における運動量の時間微分値を0とし、終了時刻においては、式(9)の右辺で粒子の位置xに依存しない項であるhi,jは0となるように単位時間毎に変化する値である。
【0067】
(異なる2つのノード間を結ぶ経路に関する問題)
異なる2つのノード間を結ぶ経路に関する問題は、閉路に関する問題と比較して、ペナルティ関数Pが異なる。
【0068】
異なる2つのノード間を結ぶ経路に関する問題において、ペナルティ関数Pは、選択された経路が有向グラフの中で2つのノード間を結ぶ経路を形成する条件を、複数のビットを用いて表す。有向グラフの中で閉路を形成する条件は、下記の通りである。
【0069】
第1は、開始ノードは、最適経路に選択された、出ていく有向エッジの数が1である、および、終了ノードは、最適経路に選択された、入ってくる有向エッジの数が1である、という条件である。
第2は、開始ノードは、最適経路に選択された、入ってくる有向エッジの数が0である、および、終了ノードは、最適経路に選択された、出ていく有向エッジの数が0である、という条件である。
第3は、N個のノードのそれぞれは、最適経路に選択された、出ていく有向エッジの数が1以下である、という条件である。
【0070】
第4は、N個のノードのそれぞれは、最適経路に選択された、入ってくる有向エッジの数が1以下である、という条件である。
【0071】
第5は、開始ノードおよび終了ノード以外の、N-2個のノードのそれぞれは、最適経路に選択された、出ていく有向エッジの数と、最適経路に選択された、入ってくる有向エッジの数とが同一である、という条件である。
【0072】
第6は、i番目のノードから出てj番目のノードに入る有向エッジと、j番目のノードから出てi番目のノードに入る有向エッジとが、同時に最適経路に選択されない、という条件である。
【0073】
以上の条件を複数のビットを用いて表すペナルティ関数Pは、例えば、下記の式(21-1)、式(21-2)、式(21-3)、式(21-4)、式(21-5)および式(21-6)が組み込まれる。
【0074】
【数6】
【0075】
なお、sは、1以上、N以下の指定された1つの整数を表す。vは、1以上、N以下のs以外の指定された1つの整数を表す。kは、1以上、N以下の整数を表す。
【0076】
式(21-1)は、全てのjについてbs、jを加算した値が1であること、および、全てのiについてbi、vを加算した値が1であることを表す。式(21-1)は、第1の条件を表す式である。
【0077】
式(21-2)は、全てのiについてbi、sを加算した値が0であること、および、全てのjについてbv、jを加算した値が0であることを表す。式(21-2)は、第2の条件を表す式である。
【0078】
式(21-3)は、全てのjについてbk、jを加算した値が1以下であることを表す。式(21-3)は、第3の条件を表す式である。
【0079】
式(21-4)は、全てのiについてbi、kを加算した値が1以下であることを表す。式(21-4)は、第4の条件を表す式である。
【0080】
式(21-5)は、sおよびvを除く全てのiについてbi、kを加算した値と、sおよびvを除く全てのkについてbk、jを加算した値とが同一であることを表す。式(21-5)は、第5の条件を表す式である。
【0081】
式(21-6)は、bi、jとj、iとを乗算した値が0であることを表す。式(21-6)は、第6の条件を表す式である。
【0082】
(異なる2つのノード間を結ぶ経路に関する問題の数値解析)
本実施形態に係る探索方法は、下記の式(22)、式(23)、式(24)、式(25)、式(26)および式(27)に示す古典力学の運動方程式を、シンプレクティック・オイラー法により数値的に解くことにより、異なる2つのノード間を結ぶ経路に関する問題の解を算出する。
【0083】
【数7】
【0084】
式(22)~式(27)において、tは、時刻を表す。iは、ノードのインデックスを表し、1以上、N以下の整数である。jは、ノードのインデックスを表し、i以外の1以上、N以下の整数である。
【0085】
式(22)~式(27)において、sは、経路開始ノードのインデックスを表し、1以上、N以下のうちの指定された整数である。vは、経路終了ノードのインデックスを表し、s以外の1以上、N以下のうちの指定された整数である。kは、ノードのインデックスを表し、sおよびv以外の1以上、N以下の整数である。lは、ノードのインデックスを表し、s、vおよびk以外の1以上、N以下の整数である。ws,lは、経路開始ノードから出てl番目のノードに入る有向エッジに割り当てられた重み値を表す。wk,vは、k番目のノードから出て経路終了ノードに入る有向エッジに割り当てられた重み値を表す。wk,lは、k番目のノードから出てl番目のノードに入る有向エッジに割り当てられた重み値を表す。
【0086】
式(22)~式(27)において、xk,lは、k番目のノードから出てl番目のノードに入る有向エッジに対応する粒子の位置を表す。xl,kは、l番目のノードから出てk番目のノードに入る有向エッジに対応する粒子の位置を表す。ys,lは、経路開始ノードから出てl番目のノードに入る有向エッジに対応する粒子の運動量を表す。yk,vは、k番目のノードから出て終了のノードに入る有向エッジに対応する粒子の運動量を表す。yk,lは、k番目のノードから出てl番目のノードに入る有向エッジに対応する粒子の運動量を表す。
【0087】
式(22)~式(27)において、XRは、経路開始ノードの第1積算値を表す。XCは、経路終了ノードの第2積算値を表す。XRは、k番目のノードの第1積算値を表す。XCは、k番目のノードの第2積算値を表す。XRは、l番目のノードの第1積算値を表す。XCは、l番目のノードの第2積算値を表す。MおよびMは、任意の定数を表す。
【0088】
式(22)は、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の位置xi,jの時間微分値を表す。
【0089】
式(23)は、経路開始ノードから出てl番目のノードに入る有向エッジに対応する粒子の運動量ys,lの時間微分値を表す。式(23)は、異なる2つのノード間を結ぶ経路に関する0-1最適化問題の合成コスト関数(式(2)のE)をbs,lで偏微分したのち、bs,lをxs,lで置き換えた式に比例する。
【0090】
式(24)は、k番目のノードから出て経路終了ノードに入る有向エッジに対応する粒子の運動量yk,vの時間微分値を表す。式(23)は、異なる2つのノード間を結ぶ経路に関する0-1最適化問題の合成コスト関数(式(2)のE)をbk,vで偏微分したのち、bk,vをxk,vで置き換えた式に比例する。
【0091】
式(25)は、k番目のノードから出てl番目のノードに入る有向エッジに対応する粒子の運動量yk,lの時間微分値を表す。式(25)は、異なる2つのノード間を結ぶ経路に関する0-1最適化問題の合成コスト関数(式(2)のE)をbk,lで偏微分したのち、bk,lをxk,lで置き換えた式に比例する。
【0092】
式(26)は、i番目のノードについて、出ていく2つ以上の有向エッジに対応する2以上の粒子の位置を累加算した第1積算値を表す。また、式(27)は、j番目のノードについて、入ってくる2つ以上の有向エッジに対応する2以上の粒子の位置を累加算した第2積算値を表す。
【0093】
そして、本実施形態に係る探索方法は、このような式(22)~式(27)を用いて、閉路の場合の最適化問題と同様に、異なる2つのノード間を結ぶ経路に関する問題を解く。
【0094】
ただし、本実施形態に係る探索方法は、xs,v、xv,s、xk,sおよびxv,lを予め定められた値に固定して、問題を解く。例えば、本実施形態に係る探索方法は、xs,v、xv,s、xk,sおよびxv,lを0に固定する。
【0095】
なお、xs,vは、経路開始ノードから出て経路終了ノードに入る有向エッジに対応する粒子の位置を表す。xv,sは、経路終了ノードから出て経路開始ノードに入る有向エッジに対応する粒子の位置を表す。xk,sは、k番目のノードから出て経路開始ノードに入る有向エッジに対応する粒子の位置を表す。xv,lは、経路終了ノードから出てl番目のノードに入る有向エッジに対応する粒子の位置を表す。
【0096】
また、本実施形態に係る探索方法は、式(23)、式(24)および式(25)に代えて、下記の式(28)、式(29)および式(30)を用いて、異なる2つのノード間を結ぶ経路に関する問題の解を算出してもよい。
【0097】
【数8】
【0098】
pは、初期時刻において0であり、最終時刻において1となり、単位時刻毎に単調増加する値である。
【0099】
なお、下記の式(31)は、式(28)に組み込まれるhs,lを表す。下記の式(32)は、式(29)に組み込まれるhk,vを表す。下記の式(33)は、式(30)に組み込まれるhk,lを表す。xは、xi,jの初期時刻における値である。Nは、有向グラフに含まれるノードの数である。
【0100】
【数9】
【0101】
式(28)は、式(23)に、時間変化パラメータが加算された式である。式(29)は、式(24)に、時間変化パラメータが加算された式である。式(30)は、式(25)に、時間変化パラメータが加算された式である。時間変化パラメータは、初期時刻における運動量の時間微分値を0とし、終了時刻においては、式(28)(29)(30)の右辺で粒子の位置xに依存しない項であるhは0となるように単位時間毎に変化する値である。
【0102】
(探索装置10)
図5は、第1実施形態に係る探索装置10の構成を示す図である。第1実施形態に係る探索装置10は、演算部12と、入力部14と、出力部16と、設定部18とを備える。
【0103】
演算部12は、例えば情報処理装置により実現される。また、演算部12は、CPU(Central Processing Unit)等の1または複数のプロセッシング回路がプログラムを実行することにより実現されてもよい。また、演算部12は、FPGA(Field Programmable Gate Array)、ゲートアレイまたは特定用途向け集積回路(ASIC)等により実現されてもよい。
【0104】
演算部12は、時刻を表すパラメータであるtを、開始時刻(例えば0)から単位時間ずつ増加させる。演算部12は、仮想的な複数の粒子のそれぞれの位置および運動量を、初期時刻から終了時刻まで単位時間毎に時間積分することにより算出する。そして、演算部12は、終了時刻における複数の粒子のそれぞれの位置を予め設定された閾値により二値化することにより、0-1最適化問題に含まれる複数のビットのそれぞれの解を算出する。
【0105】
入力部14は、演算部12による演算処理に先だって、開始時刻における複数の粒子のそれぞれの位置および運動量を取得して、演算部12に与える。出力部16は、演算部12による演算処理の終了後に、0-1最適化問題に含まれる複数のビットのそれぞれの解を演算部12から取得する。そして、出力部16は、取得した解を出力する。設定部18は、演算部12による演算処理に先だって、各パラメータを演算部12に対して設定する。
【0106】
図6は、第1実施形態に係る探索装置10の処理の流れを示すフローチャートである。探索装置10の演算部12は、図6に示すフローチャートに従って処理を実行する。
【0107】
まず、S11において、演算部12は、パラメータを初期化する。より具体的には、演算部12は、t、pおよびhi,jを初期化する。例えば、演算部12は、tを開始時刻を表す0に初期化する。また、演算部12は、pを0に初期化する。例えば、演算部12は、p=0として、初期化したhi,jを算出する。なお、演算部12は、後述するS17においてpを用いない場合には、pを初期化しない。また、演算部12は、後述するS17においてhi,jを用いない場合には、hi,jを初期化しない。
【0108】
続いて、演算部12は、tがTより大きくなるまで、S13からS18までの処理を繰り返す(S12とS19との間のループ処理)。Tは、終了時刻を表す。これにより、演算部12は、初期時刻から終了時刻まで単位時間毎にS13からS18までの処理を繰り返すことができる。
【0109】
S13において、演算部12は、複数の粒子のそれぞれについて、対象時刻における位置(xi,j)を、対象時刻より1単位時間前の直前時刻における運動量(yi,j)に基づき算出する。例えば、演算部12は、複数の粒子のそれぞれについて、直前時刻における位置(xi,j)と、直前時刻における運動量(yi,j)に単位時間を乗じた値とを加算することにより、対象時刻における位置(xi,j)を算出する。より具体的には、演算部12は、下記の式(41)により、対応する粒子の対象時刻における位置(xi,j)を算出する。
【0110】
【数10】
【0111】
式(41)の右辺のxi,jは、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の、直前時刻における位置を表す。式(41)の右辺のyi,jは、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の、直前時刻における運動量を表す。dtは、単位時間を表す。
【0112】
続いて、S14において、演算部12は、複数の粒子のそれぞれについて、対象時刻における位置(xi,j)が予め定められた第1値より小さい場合、対象時刻における位置(xi,j)を第1値に修正する。また、演算部12は、複数の粒子のそれぞれについて、対象時刻における位置(xi,j)が予め定められた第2値より大きい場合、対象時刻における位置(xi,j)を第2値に修正する。なお、第2値は、第1値より大きい。
【0113】
ビットにおける、対応する有向エッジが選択されていないことを表す値が0である場合、第1値は、0である。ビットにおける、対応する有向エッジが選択されていることを表す値が1である場合、第2値は、1である。例えば、演算部12は、対象時刻における位置(xi,j)が0より小さい場合、対象時刻における位置(xi,j)を0とする。例えば、演算部12は、対象時刻における位置(xi,j)が1より大きい場合、対象時刻における位置(xi,j)を1とする。これにより、演算部12は、複数の粒子のそれぞれの位置(xi,j)を、ビットの取り得る2つの値の範囲内に制限することができる。
【0114】
また、演算部12は、複数の粒子のそれぞれについて、対象時刻における位置(xi,j)が第1値より小さいまたは第2値より大きい場合、直前時刻における運動量(yi,j)を、予め定められた値または予め定められた演算により定まる値に修正する。例えば、演算部12は、複数の粒子のそれぞれについて、対象時刻における位置(xi,j)が0より小さいまたは1より大きい場合、直前時刻における運動量(yi,j)を、予め定められた値または予め定められた演算により定まる値に修正する。予め定められた値は、例えば0である。また、予め定められた値は、0より大きく、1以下の任意の値であってもよい。また、予め定められた演算は、例えば、0以上、1以下の乱数を発生する演算であってもよい。
【0115】
続いて、S15において、演算部12は、有向グラフに含まれる複数のノードのそれぞれについて、出ていく2つ以上の有向エッジに対応する、2以上の粒子の対象時刻における位置(xi,j)を累加算した第1積算値(XR)を算出する。より具体的には、演算部12は、下記の式(42)により、i番目のノードに対応する第1積算値(XR)を算出する。
【0116】
【数11】
【0117】
式(42)は、iを除く全てのjについて、xi,jを加算した値を表す。演算部12は、複数のノードのそれぞれについて第1積算値(XR)を算出することにより、S17での運動量(yi,j)の算出のための演算処理を簡易に実行することができる。
【0118】
続いて、S16において、演算部12は、有向グラフに含まれる複数のノードのそれぞれについて、入ってくる2つ以上の有向エッジに対応する、2以上の粒子の対象時刻における位置(xi,j)を累加算した第2積算値(XC)を算出する。より具体的には、演算部12は、下記の式(43)により、j番目のノードに対応する第2積算値(XC)を算出する。
【0119】
【数12】
【0120】
式(43)は、jを除く全てのiについて、xi,jを加算した値を表す。演算部12は、複数のノードのそれぞれについて第2積算値(XC)を算出することにより、S17での運動量(yi,j)の算出のための演算処理を簡易に実行することができる。
【0121】
続いて、S17において、演算部12は、複数の粒子のそれぞれについて、対象時刻における運動量(yi,j)を算出する。より詳しくは、演算部12は、対象時刻における運動量(yi,j)を、終了ノードの第1積算値(XR)および第2積算値(XC)、開始ノードの第1積算値(XR)および第2積算値(XC)、対応する有向エッジに割り当てられた重み値(wi,j)、対象時刻における位置(xi,j)、並びに、対応する有向エッジとは逆向きの有向エッジに対応する粒子の対象時刻における位置(xj,i)に基づき算出する。例えば、演算部12は、複数の粒子のそれぞれについて、直前時刻における(yi,j)と、直前時刻における運動量の時間微分値に単位時間を乗じた値とを加算することにより、対象時刻における運動量(yi,j)を算出する。
【0122】
より具体的には、演算部12は、下記の式(44)により、対応する粒子の対象時刻における運動量(yi,j)を算出する。
【0123】
【数13】
【0124】
なお、式(44)の右辺のyi,jは、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の、直前時刻における運動量を表す。式(44)の右辺の(yi,j/dt)は、i番目のノードから出てj番目のノードに入る有向エッジに対応する粒子の、直前時刻における運動量の時間微分値を表す。dtは、単位時間を表す。
【0125】
なお、閉路に関する問題の場合、運動量の時間微分値(yi,j/dt)は、例えば、式(6)または式(9)により算出される。異なる2つのノード間を結ぶ経路に関する問題の場合、運動量の時間微分値(yi,j/dt)は、例えば、式(23)、式(24)および式(25)により算出される。または、異なる2つのノード間を結ぶ経路に関する問題の場合、運動量の時間微分値(yi,j/dt)は、例えば、式(28)、式(29)および式(30)により算出される。
【0126】
また、閉路に関する問題の場合、S17において、演算部12は、複数の粒子のそれぞれについて、対象時刻における運動量(yi,j)を、下記の式(45)および式(46)の2段階で算出してもよい。
【0127】
【数14】
【数15】
【0128】
式(45)のhは、下記の式(47)により表される。
【0129】
【数16】
【0130】
なお、この場合、演算部12は、式(45)の演算処理、S13の処理の直後に実行してもよい。
【0131】
続いて、S18において、演算部12は、パラメータを更新する。より具体的には、演算部12は、t、pおよびhi,jを初期化する。
【0132】
例えば、演算部12は、tに、単位時間(dt)を加算する。開始時刻が0で、終了時刻がTであり、Nstep回(Nstepは、2以上の整数)ループを繰り返す場合、dt=T/Nstepとなる。また、この場合、p=p+(1/Nstep)となる。なお、演算部12は、S17においてpを用いない場合には、pを更新しない。また、演算部12は、S17においてhi,jを用いない場合には、hi,jを更新しない。
【0133】
続いて、S19において、演算部12は、tが終了時刻を超えたか否か、すなわち、tがTより大きくなったか否かを判断する。演算部12は、tが終了時刻を超えていない場合、処理をS13に戻して、S13からS18の処理を実行する。演算部12は、tが終了時刻を超えた場合、処理をS20に進める。
【0134】
S20において、演算部12は、終了時刻における複数の粒子のそれぞれの位置(xi,j)を予め設定された閾値により二値化する。例えば、演算部12は、終了時刻における複数の粒子のそれぞれの位置(xi,j)を第1値(0)と第2値(1)との間の中間値である0.5により、二値化する。そして、演算部12は、複数の粒子のそれぞれの位置(xi,j)を二値化した値(0または1)を、0-1最適化問題に含まれる複数のビットのそれぞれの解として出力する。
【0135】
以上のように、探索装置10は、有向グラフの最適経路を探索する最適経路問題の解を高速に出力することができる。例えば、探索装置10は、閉路に関する問題の解、および、異なる2つのノード間を結ぶ経路に関する問題の解を高速に出力することができる。
【0136】
(第2実施形態)
第2実施形態に係る探索装置10は、FPGA、ゲートアレイまたは特定用途向け集積回路等の半導体装置に、回路化して実装される。以下、第2実施形態に係る探索装置10について説明する。
【0137】
なお、第2実施形態に係る探索装置10は、N個のノードを含む有向グラフを探索することにより、為替の裁定取引の機会を検知する裁定取引問題の解を検出する。
【0138】
図7は、第2実施形態に係る探索装置10の回路構成を示す図である。第2実施形態に係る探索装置10は、メモリ21と、制御回路22と、第1回路23と、第2回路24と、二値化回路25と、正規化回路26とを備える。第1回路23は、TE回路31(自己発展回路)と、GC回路32(積算値算出回路)と、CC回路33(コスト算出回路)とを含む。また、第2回路24は、MX回路34(多体相互作用回路)を含む。
【0139】
なお、探索装置10は、正規化回路26を備えない構成であってもよい。また、第1回路23は、CC回路33を含まない構成であってもよい。
【0140】
メモリ21は、複数の位置変数と、複数の運動量変数と、複数の重み値と、複数の選択不可フラグと、複数の第1積算値と、複数の第2積算値と、複数の反転位置変数と、最大絶対値とを記憶する。
【0141】
複数の位置変数は、有向フラグに含まれる複数の有向エッジに対応する。複数の位置変数のそれぞれは、対応する有向エッジに対応付けられた粒子の位置を表す。
【0142】
複数の運動量変数は、複数の有向エッジに対応する。複数の運動量変数のそれぞれは、対応する有向エッジに対応付けられた粒子の運動量を表す。
【0143】
複数の重み値は、複数の有向エッジに対応する。複数の重み値のそれぞれは、対応する有向エッジに割り当てられている。複数の重み値は、第1回路23および第2回路24による演算処理に先だって、外部装置からメモリ21に書き込まれる。
【0144】
複数の選択不可フラグは、複数の有向エッジに対応する。複数の選択不可フラグは、対応する有向エッジが経路として選択可能か選択不可かを示す。複数の選択不可フラグは、例えば0の場合、対応する有向エッジが経路として選択可能であることを示し、1の場合、対応する有向エッジが経路として選択不可であることを示す。有向エッジが経路として選択可能か選択不可かは、有向グラフによって予め定められる。複数の選択不可フラグは、第1回路23および第2回路24による演算処理に先だって、外部装置からメモリ21に書き込まれる。
【0145】
複数の第1積算値は、複数のノードに対応する。複数の第2積算値は、複数のノードに対応する。
【0146】
複数の反転位置変数は、複数の有向エッジに対応する。複数の反転位置変数のそれぞれは、複数の位置変数と同一であるが、開始ノードと終了ノードとの対応関係が反転して格納されている。
【0147】
最大絶対値は、正規化前の複数の重み値の絶対値のうちの、最大値である。
【0148】
制御回路22は、メモリ21、第1回路23、第2回路24、二値化回路25および正規化回路26に接続される。制御回路22は、複数の有向エッジのそれぞれに対応する位置変数および運動量変数を、初期時刻から終了時刻まで単位時間毎に時間積分する演算を制御する。例えば、制御回路22は、単位時間の管理、繰り返し処理の管理およびパラメータの更新等をする。TE回路31およびMX回路34は、制御回路22の制御に応じて、複数の有向エッジのそれぞれについて、位置変数および運動量変数を、単位時間毎に時間積分する演算を実行する。また、制御回路22は、演算処理に先だって、メモリ21に記憶された複数の位置変数および複数の運動量変数を初期化する。
【0149】
TE回路31は、メモリ21に接続される。TE回路31は、単位時間毎にメモリ21にアクセスして、TE処理を実行する。
【0150】
より詳しくは、TE回路31は、単位時間毎に、複数の有向エッジのそれぞれについて、対応する有向エッジの対象時刻における位置変数を、対応する有向エッジの対象時刻より1単位時間前の直前時刻における位置変数および運動量変数に応じて更新する。これにより、TE回路31は、複数の有向エッジのそれぞれについて、単位時間毎に、位置変数を時間積分することができる。
【0151】
また、TE回路31は、複数の有向エッジのそれぞれについて、単位時間毎に、対応する有向エッジの対象時刻における運動量変数を、直前時刻における運動量変数、対応する有向エッジの対象時刻における位置変数および対応する有向エッジに割り当てられた重み値に応じて更新する。これにより、TE回路31は、複数の有向エッジのそれぞれについて、単位時間毎に、運動量変数の時間積分の演算を、途中段階まで実行することができる。
【0152】
さらに、TE回路31は、単位時間毎に、複数の有向エッジのそれぞれについて、対応する有向エッジの対象時刻における位置変数が予め定められた第1値より小さい場合、対象時刻における位置変数を第1値に修正し、予め定められた第2値より大きい場合、対象時刻における位置変数を第2値に修正する。なお、第2値は、第1値より大きい。例えば、TE回路31は、単位時間毎に、複数の有向エッジのそれぞれについて、対応する有向エッジの対象時刻における位置変数が0より小さい場合、対象時刻における位置変数を0に修正し、1より大きい場合、対象時刻における位置変数を1に修正する。
【0153】
さらに、TE回路31は、単位時間毎に、複数の有向エッジのそれぞれについて、対象時刻における位置変数が第1値(例えば0)より小さいまたは第2値(例えば1)より大きい場合、直前時刻における運動量変数を、予め定められた値または予め定められた演算により定まる値に修正する。予め定められた値は、例えば0または0から1までの任意の値である。予め定められた演算により定まる値は、例えば0から1までの範囲の乱数により定まる値であってもよい。
【0154】
さらに、TE回路31は、複数の有向エッジのそれぞれについて、対応する有向エッジの選択不可フラグが選択不可を示す場合、対象時刻における位置変数、および、途中段階まで更新された対象時刻における運動量変数を、予め定められた値(例えば0)に置き換える。
【0155】
GC回路32は、メモリ21に接続される。GC回路32は、単位時間毎にメモリ21にアクセスして、GC処理を実行する。
【0156】
より詳しくは、GC回路32は、単位時間毎に、有向グラフに含まれる複数のノードのそれぞれについて、出ていく2つ以上の有向エッジに対応する、2以上の対象時刻における位置変数を累加算した第1積算値を算出する。さらに、GC回路32は、単位時間毎に、複数のノードのそれぞれについて、入ってくる2つ以上の有向エッジに対応する、2以上の対象時刻における位置変数を累加算した第2積算値を算出する。なお、GC回路32は、メモリ21を介さずに、TE回路31から、対象時刻における位置変数を取得してもよい。
【0157】
CC回路33は、メモリ21に接続される。CC回路33は、単位時間毎にメモリ21にアクセスして、CC処理を実行する。
【0158】
より詳しくは、CC回路33は、単位時間毎に、複数の有向エッジのそれぞれに対応する位置変数を予め設定された閾値により二値化することにより、複数の有向エッジのそれぞれについて、対象時刻の段階において最適経路として選択されたか否かを判定する。続いて、CC回路33は、単位時間毎に、対象時刻の段階において最適経路として選択された2つ以上の有向エッジが、最適経路の制約条件を満たしているか否かを判定する。そして、CC回路33は、制約条件を満たしている場合、選択された2つ以上の有向エッジに割り当てられた重み値を合成した重みの合計値を算出する。例えば、CC回路33は、制約条件を満たしている場合、選択された2つ以上の有向エッジに割り当てられた重み値を加算した加算値を算出する。
【0159】
さらに、CC回路33は、選択された2つ以上の有向エッジに割り当てられた重み値の合計値に基づき、2つ以上の有向エッジに対応する交換をした場合に得られるトータルレート(sol)を算出する。CC回路33は、算出したトータルレート(sol)を外部装置に出力する。
【0160】
MX回路34は、メモリ21に接続される。MX回路34は、単位時間毎にメモリ21にアクセスしてMX処理を実行する。
【0161】
より詳しくは、MX回路34は、複数の有向エッジのそれぞれについて、単位時間毎に、対応する有向エッジの対象時刻における運動量変数を、対応する有向エッジの対象時刻における位置変数、および、対応する有向エッジ以外の有向エッジの対象時刻に位置変数に基づき、さらに更新する。より詳しくは、MX回路34は、単位時間毎に、複数の有向エッジのそれぞれについて、TE回路31により更新された後の対応する有向エッジの対象時刻における運動量変数を、終了ノードの第1積算値および第2積算値、開始ノードの第1積算値および第2積算値、対応する有向エッジの対象時刻における位置変数、および、対応する有向エッジとは逆向きの有向エッジに対応する対象時刻における位置変数に応じて、さらに更新する。これにより、MX回路34は、複数の有向エッジのそれぞれについて、TE回路31によって途中段階まで時間積分された運動量変数を最後の段階まで時間積分することできる。
【0162】
二値化回路25は、メモリ21に接続される。二値化回路25は、終了時刻における複数の有向エッジのそれぞれに対応する位置変数をメモリ21から読み出す。二値化回路25は、終了時刻における複数の有向エッジのそれぞれに対応する位置変数を予め設定された閾値により二値化することにより、0-1最適化問題に含まれる複数のビットのそれぞれの解を算出する。そして、二値化回路25は、0-1最適化問題に含まれる複数のビットのそれぞれの解を出力する。
【0163】
正規化回路26は、メモリ21に接続される。正規化回路26は、外部装置からメモリ21に複数の重み値が書き込まれた場合、第1回路23および第2回路24による演算処理に先だって、複数の重み値のそれぞれに対して正規化処理を実行する。より具体的には、正規化回路26は、複数の重み値のそれぞれを、複数の重み値のうちの最大絶対値に基づき正規化し、正規化した複数の重み値をメモリ21に書き込む。また、正規化回路26は、最大絶対値をメモリ21に書き込む。
【0164】
また、正規化回路26は、最適経路として閉路を探索する場合において、正規化処理に先だって、補正処理を実行する。正規化回路26は、重みの合計値が、選択された経路に含まれる2つ以上の有向エッジに割り当てられた2つ以上の重み値の加算値である場合、補正処理として、複数の有向エッジのそれぞれについて、対応する重み値から、終了ノードに設定された係数を加算し、開始ノードに設定された係数を減算する。なお、複数のノードのそれぞれには、予め係数が設定されている。複数のノードのそれぞれに対応して設定された係数は、補正後の重み値の0からの誤差の総和が最小となるように定められる。
【0165】
図8は、メモリ21の構成を示す図である。メモリ21は、Xメモリ回路41と、Yメモリ回路42と、Wメモリ回路43と、Zメモリ回路44と、XRメモリ回路45と、XCメモリ回路46と、XTメモリ回路47と、最大値メモリ回路48とを含む。Xメモリ回路41、Yメモリ回路42、Wメモリ回路43、Zメモリ回路44、XRメモリ回路45、XCメモリ回路46、XTメモリ回路47および最大値メモリ回路48は、それぞれが読出ポートおよび書込ポートを有し、互いに独立にデータの読み出しおよび書き込みがされる。
【0166】
Xメモリ回路41は、位置行列(Xmem)を記憶する。位置行列は、N×N個の位置変数を格納する。位置行列は、行番号が有向エッジにおける開始ノードのインデックスを表し、列番号が有向エッジにおける終了ノードのインデックスを表す。位置行列は、N×N個の位置変数のそれぞれを、対応する有向エッジの行番号および列番号の要素として格納する。例えば、位置行列は、i番目のノードから出てj番目のノードに入る有向エッジに対応する位置変数を、i行j列の要素として格納する。
【0167】
なお、有向グラフは、自己ループの有向エッジ(i番目のノードから出てi番目のノードに入る有向エッジ)を含まない。従って、位置行列は、行番号と列番号とが同一の対角成分の要素として、経路探索に影響を与えない値である0を格納する。
【0168】
Yメモリ回路42は、運動量行列(Ymem)を記憶する。運動量行列は、N×N個の運動量変数を格納する。運動量行列は、行番号が有向エッジにおける開始ノードのインデックスを表し、列番号が有向エッジにおける終了ノードのインデックスを表す。運動量行列は、N×N個の運動量変数のそれぞれを、対応する有向エッジの行番号および列番号の要素として格納する。なお、運動量行列は、行番号と列番号とが同一の対角成分の要素として、経路探索に影響を与えない値である0を格納する。
【0169】
Wメモリ回路43は、重み値行列(Wmem)を記憶する。重み値行列は、N×N個の重み値を格納する。重み値行列は、行番号が有向エッジにおける開始ノードのインデックスを表し、列番号が有向エッジにおける終了ノードのインデックスを表す。重み値行列は、N×N個の重み値のそれぞれを、対応する有向エッジの行番号および列番号の要素として格納する。なお、重み値行列は、行番号と列番号とが同一の対角成分の要素として、経路探索に影響を与えない値である0を格納する。
【0170】
Zメモリ回路44は、フラグ行列(Zmem)を記憶する。フラグ行列は、N×N個の選択不可フラグを格納する。フラグ行列は、行番号が有向エッジにおける開始ノードのインデックスを表し、列番号が有向エッジにおける終了ノードのインデックスを表す。フラグ行列は、N×N個のフラグのそれぞれを、対応する有向エッジの行番号および列番号の要素として格納する。なお、フラグ行列は、行番号と列番号とが同一の対角成分の要素として、経路として選択不可であることを示す1を格納する。
【0171】
XRメモリ回路45は、第1積算値配列(XRmem)を記憶する。第1積算値配列は、N個の第1積算値を格納する。第1積算値配列は、配列番号が、ノードのインデックスを表す。第1積算値配列は、N個の第1積算値のそれぞれを、対応するノードの配列番号の要素として格納する。
【0172】
XCメモリ回路46は、第2積算値配列(XCmem)を記憶する。第2積算値配列は、N個の第2積算値を格納する。第2積算値配列は、配列番号が、ノードのインデックスを表す。第2積算値配列は、N個の第2積算値のそれぞれを、対応するノードの配列番号の要素として格納する。
【0173】
XTメモリ回路47は、反転位置行列(XTmem)を記憶する。反転位置行列は、反転配置されたN×N個の位置変数を格納する。反転位置行列は、行番号が有向エッジにおける終了ノードのインデックスを表し、列番号が有向エッジにおける開始ノードのインデックスを表す。反転位置行列は、N×N個の位置変数のそれぞれを、対応する有向エッジの行番号および列番号の要素として格納する。例えば、位置行列は、i番目のノードから出てj番目のノードに入る有向エッジに対応する位置変数を、j行i列の要素として格納する。なお、反転位置行列は、行番号と列番号とが同一の対角成分の要素として、経路探索に影響を与えない値である0を格納する。
【0174】
最大値メモリ回路48は、正規化前の複数の重み値の最大絶対値(absmax)を記憶する。
【0175】
図9は、探索装置10の処理の流れを示すフローチャートである。第2実施形態に係る探索装置10は、図9に示す流れで処理を実行する。
【0176】
まず、S31において、正規化回路26は、正規化処理および補正処理を実行する。なお、メモリ21に記憶された複数の重み値に対して既に正規化処理および補正処理が実行されている場合には、正規化回路26は、S31の処理を実行しない。
【0177】
続いて、S32において、制御回路22は、パラメータ(p)を初期化する。pは、初期時刻において0である。さらに、制御回路22は、メモリ21が備えるXメモリ回路41に記憶された複数の位置変数を任意の値に初期化する。また、さらに、制御回路22は、メモリ21が備えるYメモリ回路42に記憶された複数の運動量変数を任意の値に初期化する。
【0178】
続いて、S33において、TE回路31は、TE処理を実行する。続いて、S34において、GC回路32は、GC処理を実行する。続いて、S35において、CC回路33は、CC処理を実行する。TE回路31、GC回路32およびCC回路33は、N×N個の有向エッジ毎に、S33、S34およびS35の処理を繰り返して実行する。S33、S34およびS35のループ処理(第1ループ)は、第1回路23内で実行が完結する。S36において、制御回路22は、S33およびS34の処理がN×N回実行された場合(S36のYes)、処理をS37に進める。なお、制御回路22は、S35の処理が全て終了しなくても、処理をS37に進めてもよい。この場合、S35の処理とS37の処理とは、並行して実行される。
【0179】
S37において、MX回路34は、MX処理を実行する。MX回路34は、N×N個の有向エッジ毎に、S37の処理を繰り返して実行する。S37のループ処理(第2ループ)は、第2回路24内で実行が完結する。S38において、制御回路22は、S37の処理がN×N回実行された場合(S37のYes)、処理をS39に進める。
【0180】
S39において、制御回路22は、パラメータ(p)を更新する。制御回路22、第1回路23および第2回路24は、S33からS39までの処理(第3ループ)を、所定ステップ回数繰り返して実行する。
【0181】
第1回路23は、S33からS39までの処理(第3ループ)を1回実行した場合、位置変数を単位時間分、時間積分することができる。また、第1回路23および第2回路24は、S33からS39までの処理(第3ループ)を1回実行した場合、運動量変数を単位時間分、時間積分することができる。そして、第1回路23は、S33からS39までの処理(第3ループ)を所定ステップ回数実行した場合、位置変数および運動量変数を、初期時刻から終了時刻まで時間積分することができる。
【0182】
S40において、制御回路22は、S33からS39までの処理が予め定められたステップ回数繰り返された場合(S40のYes)、処理をS41に進める。
【0183】
S41において、二値化回路25は、0-1最適化問題に含まれる複数のビットのそれぞれの解を算出する。そして、二値化回路25は、0-1最適化問題に含まれる複数のビットのそれぞれの解を出力する。探索装置10は、S31からS41までの処理を、例えば一定期間毎に繰り返し実行する。
【0184】
図10は、TE回路31に入出力される変数および値を示す図である。TE回路31は、N×N個の有向エッジ毎に、メモリ21から、対応する有向エッジの位置変数(Xi,j)、運動量変数(Yi,j)、重み値(wi,j)および選択不可フラグ(zi,j)を読み出す。そして、TE回路31は、N×N個の有向エッジ毎にTE処理を実行することにより、対応する有向エッジの位置変数(Xi,j)、反転位置変数(XTj,i)および運動量変数(Yi,j)を生成して、メモリ21に書き込む。
【0185】
図11は、GC回路32に入出力される変数を示す図である。TE回路31によりTE処理がされた後において、GC回路32は、N×N個の有向エッジ毎に、メモリ21から、対応する有向エッジの位置変数(Xi,j)を読み出す。なお、GC回路32は、メモリ21を介さずにTE回路31から位置変数(Xi,j)を取得してもよい。
【0186】
GC回路32は、1行分の位置変数に対してTE処理を実行する毎に、対応するノードの第1積算値(XR)を生成して、メモリ21に書き込む。さらに、GC回路32は、1列分の位置変数に対してTE処理を実行する毎に、対応するノードの第2積算値(XC)を生成して、メモリ21に書き込む。
【0187】
図12は、CC回路33に入出力される変数および値を示す図である。TE回路31によりTE処理がされた後において、CC回路33は、N×N個の有向エッジ毎に、メモリ21から、対応する有向エッジの位置変数(Xi,j)および重み値(wi,j)を読み出す。なお、CC回路33は、メモリ21を介さずにTE回路31から位置変数(Xi,j)を取得してもよい。さらに、CC回路33は、メモリ21から最大絶対値(absmax)を読み出す。
【0188】
CC回路33は、N×N個の全ての有向エッジに対してCC処理を実行することにより重み値の合計値を算出する。そして、CC回路33は、選択された2つ以上の有向エッジに割り当てられた重み値の合計値に基づき、2つ以上の有向エッジに対応する交換をした場合に得られるトータルレート(sol)を算出して、外部に出力する。
【0189】
図13は、MX回路34に入出力される変数および値を示す図である。MX回路34は、N×N個の有向エッジ毎に、メモリ21から、対応する有向エッジの位置変数(Xi,j)、運動量変数(Yi,j)、反転位置変数(XTi,j)、開始ノードの第1積算値(XR)および第2積算値(XC)、並びに、終了ノードの第1積算値(XR)および第2積算値(XC)を読み出す。そして、MX回路34は、N×N個の有向エッジ毎にMX処理を実行することにより、対応する有向エッジの運動量変数(Yi,j)を更新して、メモリ21に書き込む。
【0190】
図14は、TE回路31による変数および値の読み出し順を示す図である。
【0191】
TE回路31は、行方向のラスタスキャン順に、Xメモリ回路41に記憶された位置行列(Xmem)から1つずつ位置変数(xin)を読み出す。すなわち、TE回路31は、1行1列の位置変数(X1,1)、1行2列の位置変数(X1,2)、…、N行(N-1)列の位置変数(XN,N-1)、N行N列の位置変数(XN,N)といった順で、1つずつ位置変数(xin)を読み出す。この場合において、TE回路31は、クロックサイクル毎に、位置変数(xin)を読み出す。
【0192】
また、TE回路31は、クロックサイクル毎に、Yメモリ回路42に記憶された運動量行列(Ymem)から、位置変数と同一の行番号および列番号の運動量変数(yin)を、1つずつ読み出す。また、TE回路31は、クロックサイクル毎に、Wメモリ回路43に記憶された重み値行列(Wmem)から、位置変数と同一の行番号および列番号の重み値(win)を1つずつ読み出す。また、TE回路31は、クロックサイクル毎に、Zメモリ回路44に記憶されたフラグ行列(Zmem)から、位置変数と同一の行番号および列番号の選択不可フラグ(zin)を1つずつ読み出す。
【0193】
そして、TE回路31は、パイプライン処理により、同一の行番号および列番号の更新後の位置変数(xout)および更新後の運動量変数(yout)を生成して、Xメモリ回路41およびYメモリ回路42に書き込む。すなわち、TE回路31は、i行j列の位置変数(Xi,j)等を含むデータセットを読み出したタイミングから、一定のパイプラインレイテンシ(λTE)を経過した後、i行j列の更新後の位置変数(Xi,j)および運動量変数(Yi,j)をXメモリ回路41およびYメモリ回路42に書き込む。なお、TE回路31は、更新後の位置変数(Xi,j)を、行と列とを反転させてXTメモリ回路47にも書き込む。
【0194】
図15は、MX回路34による変数および値の読み出し順を示す図である。
【0195】
MX回路34は、行方向のラスタスキャン順に、Xメモリ回路41に記憶された位置行列(Xmem)から1つずつ位置変数(xin)を読み出す。すなわち、MX回路34は、1行1列の位置変数(X1,1)、1行2列の位置変数(X1,2)、…、N行(N-1)列の位置変数(XN,N-1)、N行N列の位置変数(XN,N)といった順で、1つずつ位置変数(xin)を読み出す。この場合において、MX回路34は、クロックサイクル毎に、位置変数(xin)を読み出す。
【0196】
また、MX回路34は、クロックサイクル毎に、Yメモリ回路42に記憶された運動量行列(Ymem)から、位置変数と同一の行番号および列番号の運動量変数(yin)を読み出す。また、MX回路34は、クロックサイクル毎に、XTメモリ回路47に記憶された反転位置行列(XTmem)から、位置変数と同一の行番号および列番号の反転位置変数(xtin)を読み出す。
【0197】
また、MX回路34は、クロックサイクル毎に、XRメモリ回路45に記憶された第1積算値配列(XRmem)から、位置変数の行番号と同一の配列番号の第1積算値(wriin)、および、位置変数の列番号と同一の配列番号の第1積算値(wrjin)を読み出す。また、MX回路34は、クロックサイクル毎に、XCメモリ回路46に記憶された第2積算値配列(XCmem)から、位置変数の行番号と同一の配列番号の第2積算値(wciin)、および、位置変数の列番号と同一の配列番号の第2積算値(wcjin)を、読み出す。
【0198】
そして、MX回路34は、パイプライン処理により、更新後の運動量変数(yout)を生成して、Yメモリ回路42に書き込む。すなわち、MX回路34は、i行j列の位置変数(Xi,j)等を含むデータセットを読み出したタイミングから、一定のパイプラインレイテンシ(λMX)を経過した後、i行j列の更新後の運動量変数(Yi,j)をYメモリ回路42に書き込む。
【0199】
図16は、TE処理、MX処理およびGC処理のタイミングを示す図である。探索装置10は、TE処理、MX処理およびGC処理を、所定ステップ回数繰り返して実行する。
【0200】
TE回路31は、有向エッジ毎に順次にメモリ21から直前時刻における位置変数および運動量変数等を読み出し、有向エッジ毎に順次に対象時刻における位置変数および更新途中の対象時刻における運動量変数を算出してメモリ21に書き込む。従って、TE回路31が先頭の位置変数(1行1列の位置変数(X1,1))を読み出したタイミングから、TE回路31が最後の位置変数(N行N列の位置変数(XN,N))をメモリ21の書き込むまでの時間は、(N×N+λTE)クロックサイクルとなる。このように、TE回路31は、パイプライン処理を実行するので、1回のステップにおいてTE処理を(N×N+λTE)クロックサイクルで実行する。
【0201】
MX回路34は、有向エッジ毎に順次にメモリ21から対象時刻における位置変数および更新途中の対象時刻における運動量変数等を読み出し、有向エッジ毎に順次に更新後の対象時刻における運動量変数を算出してメモリ21に書き込む。従って、MX回路34が先頭の位置変数(1行1列の位置変数(X1,1))を読み出したタイミングから、MX回路34が最後の運動量変数(N行N列の運動量変数(YN,N))をメモリ21の書き込むまでの時間は、(N×N+λMX)クロックサイクルとなる。このように、MX回路34は、パイプライン処理を実行するので、1回のステップにおいてMX処理を(N×N+λMX)クロックサイクルで実行する。
【0202】
GC回路32は、TE回路31またはメモリ21から有向エッジ毎に順次に対象時刻における位置変数を取得し、ノード毎に順次に第1積算値および第2積算値を算出してメモリ21に書き込む。GC回路32も、同様にパイプライン処理を実行する。GC回路32におけるパイプラインレイテンシは、λGCである。従って、GC回路32は、1回のステップにおいてGC処理を(N×N+λGC)クロックサイクルで実行する。
【0203】
ここで、GC回路32は、GC処理を、TE処理と並行して実行することができる。ただし、GC回路32は、TE回路31が先頭の位置変数(1行1列の位置変数(X1,1))を出力した後に、GC処理を開始する。従って、GC回路32は、TE処理が開始されてから、λTEが経過した後に、GC処理を開始する。また、GC回路32は、TE処理が終了してから、λGCが経過した後に、GC処理を終了する。
【0204】
MX回路34は、TE処理およびGC処理が完了した後に、MX処理を実行する。すなわち、MX回路34は、TE回路31がTE処理を実行している期間と重複しないように、MX処理を実行する。換言すると、TE回路31は、MX回路34がMX処理を実行している期間と重複しないように、TE処理を実行する。同様に、MX回路34は、GC回路32がGC処理を実行している期間と重複しないように、MX処理を実行する。換言すると、GC回路32は、MX回路34がMX処理を実行している期間と重複しないように、GC処理を実行する。従って、MX回路34は、GC回路32がGC処理を実行した後、すなわち、TE処理が終了してからλGCが経過した後に、MX処理を開始する。
【0205】
CC回路33も、パイプライン処理を実行する。CC回路33におけるパイプラインレイテンシは、λCCである。従って、CC回路33は、1回のステップにおいてCC処理を(N×N+λCC)クロックサイクルで実行する。
【0206】
CC回路33は、CC処理を、TE処理と並行して実行することができる。また、MX回路34は、CC処理が完了していなくてもMX処理を実行することができる。従って、CC回路33は、少なくともMX処理が完了するまでにCC処理を完了することができれば、MX処理と並行してCC処理を実行してもよい。
【0207】
以上から、探索装置10による1回のステップの処理時間は、{2(N×N)+λTE+λGC+λMX}クロックサイクルとなる。また、探索装置10がNSTEP回のステップを繰り返す場合、探索装置10による全体の処理時間は、NSTEP×{2(N×N)+λTE+λGC+λMX}クロックサイクルとなる。Nが十分大きい場合、探索装置10による全体の処理時間は、NSTEP×2(N×N)とみなすことができる。
【0208】
図17は、TE回路31の構成を示す図である。
【0209】
TE回路31は、クロックサイクル毎に、直前のステップにおいて算出された直前時刻における位置変数(xin)、および、直前時刻における運動量変数(yin)を取得する。また、TE回路31は、クロックサイクル毎に、重み値(win)および選択不可フラグ(zin)を取得する。
【0210】
また、TE回路31は、クロックサイクル毎に、TE処理後の対象時刻における位置変数(xout)を出力する。また、TE回路31は、クロックサイクル毎に、TE処理後の運動量変数(yout)を出力する。
【0211】
TE回路31は、位置更新回路51と、制限回路52と、運動量更新回路53と、マスク回路54とを含む。
【0212】
位置更新回路51は、FY回路57と、第1加算器58とを含む。
【0213】
FY回路57は、クロックサイクル毎に、直前時刻における運動量変数(yin)を取得する。FY回路57は、クロックサイクル毎に、直前時刻における運動量変数(yin)に対して式(61)の演算を実行することにより位置更新量(dx)を算出する。なお、dtは、単位時間を表す定数である。
dx=FY(yin)=yin×dt…(61)
【0214】
第1加算器58は、クロックサイクル毎に、直前時刻における位置変数(xin)、および、FY回路57が出力した位置更新量(dx)を取得する。第1加算器58は、クロックサイクル毎に、式(62)に示すように、直前時刻における位置変数(xin)と位置更新量(dx)とを加算することにより、対象時刻における位置変数(nx1)を出力する。
nx1=xin+dx…(62)
【0215】
位置更新回路51は、クロックサイクル毎に、対象時刻における位置変数(nx1)を出力する。また、位置更新回路51は、クロックサイクル毎に、直前時刻における運動量変数(yin)を、直前時刻における運動量変数(ny1)として出力する。
【0216】
このような位置更新回路51は、複数の有向エッジのそれぞれについて、対応する有向エッジの対象時刻における位置変数を、直前時刻における位置変数および運動量変数に基づき算出することができる。従って、位置更新回路51は、複数の有向エッジのそれぞれについて、位置変数を単位時間分積分することができる。
【0217】
制限回路52は、第1マルチプレクサ60と、第1コンパレータ61と、第2マルチプレクサ62と、第3マルチプレクサ63と、第2コンパレータ64とを含む。
【0218】
第1マルチプレクサ60は、第1コンパレータ61の制御に応じて、+1または0を選択して、対象時刻における位置変数(nx2)として出力する。第1コンパレータ61は、クロックサイクル毎に、位置更新回路51から出力された対象時刻における位置変数(nx1)が、0.5より大きいか否かを判断する。第1コンパレータ61は、nx1が0.5より大きい場合、第1マルチプレクサ60から+1を出力させ、nx1が0.5以下である場合、第1マルチプレクサ60から0を出力させる。
【0219】
第2マルチプレクサ62は、第2コンパレータ64の制御に応じて、位置更新回路51から出力された対象時刻における位置変数(nx1)または第1マルチプレクサ60から出力された対象時刻における位置変数(nx2)を選択して、対象時刻における位置変数(nx3)として出力する。
【0220】
第3マルチプレクサ63は、第2コンパレータ64の制御に応じて、位置更新回路51から出力された直前時刻における運動量変数(ny1)または0を選択して、直前時刻における運動量変数(ny2)として出力する。
【0221】
第2コンパレータ64は、クロックサイクル毎に、位置更新回路51から出力された対象時刻における位置変数(nx1)が1より大きいもしくは0より小さいか、または、位置更新回路51から出力された対象時刻における位置変数(nx1)が0以上1以下であるかを判断する。
【0222】
第2コンパレータ64は、nx1が0以上1以下である場合、第2マルチプレクサ62に位置更新回路51から出力された対象時刻における位置変数(nx1)を選択させ、対象時刻における位置変数(nx3)として出力させる。さらに、第2コンパレータ64は、nx1が0以上1以下である場合、第3マルチプレクサ63に位置更新回路51から出力された直前時刻における運動量変数(ny1)を選択させ、直前時刻における運動量変数(ny2)として出力させる。
【0223】
第2コンパレータ64は、nx1が1より大きいもしくは0より小さい場合、第2マルチプレクサ62に第1マルチプレクサ60から出力された対象時刻における位置変数(nx2)を選択させ、対象時刻における位置変数(nx3)として出力させる。さらに、第2コンパレータ64は、nx1が1より大きいもしくは0より小さい場合、第3マルチプレクサ63に0を選択させ、直前時刻における運動量変数(ny2)として出力させる。
【0224】
このような制限回路52は、単位時間毎に、複数の有向エッジのそれぞれについて、対応する有向エッジの対象時刻における位置変数が0より小さい場合、対象時刻における位置変数を0に修正し、1より大きい場合、対象時刻における位置変数を1に修正することができる。さらに、制限回路52は、複数の有向エッジのそれぞれについて、対象時刻における位置変数が0より小さいまたは1より大きい場合、直前時刻における運動量変数を、0に修正することができる。
【0225】
運動量更新回路53は、FX回路65と、FW回路66と、第2加算器67とを含む。
【0226】
FX回路65は、クロックサイクル毎に、制限回路52から出力された対象時刻における位置変数(nx3)を取得する。FX回路65は、クロックサイクル毎に、対象時刻における位置変数(nx3)に対して式(63)の演算を実行することにより第1運動量更新量(dy1)を算出する。
dy1=FX(nx3)=-dt×(1-p)×(nx3-x)…(63)
【0227】
なお、pは、単位時間毎に単調増加するパラメータであって、初期時刻において0、終了時刻において1となる。xは、初期時刻における位置変数である。
【0228】
FW回路66は、クロックサイクル毎に、重み値(win)を取得する。FW回路66は、クロックサイクル毎に、重み値(win)に対して式(64)の演算を実行することにより第2運動量更新量(dy2)を算出する。
dy2=FW(win)=-dt×M×[p×win-(1-p)×w]…(64)
【0229】
なお、wは、式(65)により表される。
=-(M/M)×x×(2×N-3)…(65)
【0230】
およびMは、予め定められた定数である。Nは、有向グラフのノードの数である。
【0231】
第2加算器67は、クロックサイクル毎に、制限回路52から出力された直前時刻における運動量変数(ny2)、FX回路65が出力した第1運動量更新量(dy1)およびFW回路66が出力した第2運動量更新量(dy2)を取得する。第2加算器67は、クロックサイクル毎に、式(66)に示すように、直前時刻における位置変数(ny2)と、第1運動量更新量(dy1)と第2運動量更新量(dy2)とを加算することにより、対象時刻における運動量変数(ny3)を出力する。
ny3=ny2+dy1+dy2…(66)
【0232】
運動量更新回路53は、クロックサイクル毎に、対象時刻における運動量変数(ny3)を出力する。
【0233】
このような運動量更新回路53は、複数の有向エッジのそれぞれについて、対応する有向エッジの対象時刻における運動量変数を、直前時刻における運動量変数、対応する有向エッジの対象時刻における位置変数および対応する有向エッジに割り当てられた重み値に基づき算出することができる。これにより、運動量更新回路53は、複数の有向エッジのそれぞれについて、運動量変数の単位時間分の積分の演算を途中段階まで実行することができる。
【0234】
マスク回路54は、第4マルチプレクサ68と、第5マルチプレクサ69とを含む。
【0235】
第4マルチプレクサ68は、クロックサイクル毎に、選択不可フラグ(zin)を取得する。第4マルチプレクサ68は、クロックサイクル毎に、選択不可フラグ(zin)が0である場合、制限回路52から出力された対象時刻における位置変数(nx3)を、TE処理後の位置変数(xout)として出力する。また、第4マルチプレクサ68は、クロックサイクル毎に、選択不可フラグ(zin)が1である場合、0を、TE処理後の位置変数(xout)として出力する。
【0236】
第5マルチプレクサ69は、クロックサイクル毎に、選択不可フラグ(zin)を取得する。第5マルチプレクサ69は、クロックサイクル毎に、選択不可フラグ(zin)が0である場合、運動量更新回路53から出力された対象時刻における運動量変数(ny3)を、TE処理後の運動量変数(yout)として出力する。また、第5マルチプレクサ69は、クロックサイクル毎に、選択不可フラグ(zin)が1である場合、0を、TE処理後の運動量変数(yout)として出力する。
【0237】
このようなマスク回路54は、複数の有向エッジのそれぞれについて、対応する有向エッジの選択不可フラグが選択不可を示す場合、対象時刻における位置変数および対象時刻における運動量変数を予め定められた値である0に置き換えることができる。
【0238】
図18は、GC回路32の構成を、XRメモリ回路45およびXCメモリ回路46とともに示す図である。図19は、GC回路32による位置変数の取得順序、および、第1積算値および第2積算値の算出順序を示す図である。
【0239】
GC回路32は、クロックサイクル毎に、対象時刻における位置変数(xin)を取得する。より具体的には、GC回路32は、図19に示されるように、1行1列の位置変数(X1,1)からN行N列の位置変数(XN,N)まで、行方向のラスタスキャン順に、TE処理がされた後の位置変数(xin)を取得する。
【0240】
GC回路32は、行方向累加算回路71(ACC(r))と、N個の第6マルチプレクサ72と、N個の第3コンパレータ73と、N個の列方向累加算回路74(ACC(c))とを含む。
【0241】
行方向累加算回路71は、クロックサイクル毎に、TE処理後の位置変数(xin)を取得する。行方向累加算回路71は、クロックサイクル毎に、取得した位置変数(xin)を累加算する。この場合において、行方向累加算回路71は、図19に示されるように、行毎に、つまり、N個毎に、位置変数を累加算する。
【0242】
行方向累加算回路71は、算出した累加算値を、行毎に(Nクロックサイクル毎に)、第1積算値(xrout)として出力する。これにより、行方向累加算回路71は、N個の第1積算値(xrout)を算出することができる。行方向累加算回路71は、算出したN個の第1積算値(xrout)のそれぞれを、XRメモリ回路45に記憶された第1積算値配列(XRmem)に、対応する配列番号の要素として格納させる。
【0243】
N個の第6マルチプレクサ72は、N個の列に対応付けられている。N個の第6マルチプレクサ72のそれぞれは、クロックサイクル毎に、位置変数(xin)を取得する。N個の第6マルチプレクサ72のそれぞれは、対応する第3コンパレータ73の制御に応じて、取得した位置変数(xin)または0を出力する。
【0244】
N個の第3コンパレータ73は、N個の列に対応付けられている。N個の第3コンパレータ73のそれぞれは、クロックサイクル毎に、取得した位置変数(xin)の列番号が対応する列であるか否かを判断する。N個の第3コンパレータ73のそれぞれは、取得した位置変数(xin)の列番号が対応する列である場合、対応する第6マルチプレクサ72に位置変数(xin)を出力させる。N個の第3コンパレータ73のそれぞれは、取得した位置変数(xin)の列番号が対応する列ではない場合、対応する第6マルチプレクサ72に0を出力させる。
【0245】
N個の列方向累加算回路74は、N個の列に対応付けられている。N個の列方向累加算回路74のそれぞれは、対応する第6マルチプレクサ72から出力された全ての位置変数(N×Nクロックサイクル分の位置変数(xin))を累加算する。N個の第6マルチプレクサ72のそれぞれは、対応する列以外の位置変数を0として出力する。従って、N個の列方向累加算回路74のそれぞれは、図19に示されるように、対応する列に含まれるN個の位置変数(xin)を累加算した累加算値を出力することができる。
【0246】
N個の列方向累加算回路74のそれぞれは、算出した累加算値を、対応する列の第2積算値(xcout)として出力する。N個の列方向累加算回路74のそれぞれは、算出した第2積算値(xcout)を、XCメモリ回路46に記憶された第2積算値配列(XCmem)に、対応する配列番号の要素として格納させる。
【0247】
図20は、MX回路34の構成を示す図である。
【0248】
MX回路34は、クロックサイクル毎に、TE処理後の位置変数(xin)、TE処理後の反転位置変数(xtin)およびTE処理後の運動量変数(yin)を取得する。また、MX回路34は、1クロックサイクル毎に、位置変数(xin)の行番号と同一の配列番号の第1積算値(xriin)、および、位置変数(xin)の列番号と同一の配列番号の第1積算値(xrjin)を取得する。また、MX回路34は、1クロックサイクル毎に、位置変数(xin)の行番号と同一の配列番号の第2積算値(xciin)、および、位置変数(xin)の列番号と同一の配列番号の第2積算値(xcjin)を取得する。
【0249】
そして、MX回路34は、クロックサイクル毎に、MX処理後の対象時刻における運動量変数(yout)を出力する。
【0250】
MX回路34は、FM回路77と、第3加算器78とを含む。
【0251】
FM回路77は、第1乗算器79と、第2乗算器80と、第3乗算器81と、第1減算器82と、第2減算器83と、第3減算器84と、第1内部加算器85と、第2内部加算器86と、第4乗算器87とを含む。
【0252】
第1乗算器79は、第1積算値(xriin)に2を乗算する。第2乗算器80は、第2積算値(xcjin)に2を乗算する。第3乗算器81は、位置変数(xin)に2を乗算する。
【0253】
第1減算器82は、第1乗算器79の出力値(2×(xriin))から、第2積算値(xciin)を減算する。第2減算器83は、第2乗算器80の出力値(2×(xcjin))から、第1積算値(xrjin)を減算する。第3減算器84は、反転位置変数(xtin)から、第3乗算器81の出力値(2×(xin))を減算する。
【0254】
第1内部加算器85は、第1減算器82の出力値と、第2減算器83の出力値とを加算する。第2内部加算器86は、第1内部加算器85の出力値と、第3減算器84の出力値とを加算する。第4乗算器87は、第2内部加算器86の出力値に、dt×Mを乗じる。
【0255】
このようなFM回路77は、クロックサイクル毎に、式(67)の演算を実行することにより、第3運動量更新量(dy3)を算出する。
dy3=dt×M×{2×xriin+2×xcjin-xciin-xrjin+xtin-2×(xin)}…(67)
【0256】
第3加算器78は、クロックサイクル毎に、TE回処理後の運動量変数(yin)およびFM回路77が出力した第3運動量更新量(dy3)を取得する。第3加算器78は、クロックサイクル毎に、式(68)に示すように、TE回処理後の運動量変数(yin)と、第3運動量更新量(dy3)とを加算することにより、対象時刻における運動量変数(yout)を出力する。
out=yin+dy3…(68)
【0257】
このようなMX回路34は、複数の有向エッジのそれぞれについて、TE回路31により更新された後の対応する有向エッジの対象時刻における運動量変数を、終了ノードの第1積算値および第2積算値、開始ノードの第1積算値および第2積算値、対応する有向エッジの対象時刻における位置変数、および、対応する有向エッジとは逆向きの有向エッジに対応する対象時刻における位置変数に応じて、さらに更新することができる。これにより、MX回路34は、複数の有向エッジのそれぞれについて、TE回路31によって途中段階まで時間積分された運動量変数を最後の段階まで、単位時間分の積分をすることできる。
【0258】
図21は、正規化回路26の構成を示す図である。正規化回路26は、外部装置からメモリ21に複数の重み値(win)が書き込まれた場合、メモリ21に書き込まれた複数の重み値(win)を取得する。
【0259】
正規化回路26は、誤差最小化部90と、最大値調整部91とを含む。
【0260】
誤差最小化部90は、i番目のノードから出てj番目のノードに割り当てられた交換レートをri,jとした場合、交換レートがri,j´=(a/a)×ri,jとなるように、複数の重み値のそれぞれを補正する。aは、i番目のノードに設定された係数である。aは、j番目のノードに設定された係数である。
【0261】
裁定取引問題の解を算出する場合、探索装置10は、最適経路として閉路を探索する。従って、閉路に含まれる有向エッジに割り当てられた全ての交換レートを乗算した場合、aがキャンセルされるので、このような補正をしても、最適経路の重みの合計値は、変化しない。
【0262】
また、ri,j´が1に近い場合、探索装置10は、重みの合計値を精度良く算出することができる。従って、aおよびaは、ri,j´が1に近くなるように、予め設定される。本実施形態においては、重み値は、wi,j=-log(ri,j)と表される。従って、本実施形態においては、w´i,j=-log(a/a(ri,j))が0に近くなるように、予め設定される。
【0263】
w´i,jがなるべく0に近くなるaおよびaは、例えば最小二乗法を用いて、w´i,jの二乗和を最小とすることにより算出することができる。すなわち、w´i,jがなるべく0に近くなるaおよびaは、式(71)を最小とすることにより、導くことができる。
【0264】
【数17】
【0265】
式(71)が最小となるαおよびαは、式(72)の連立方程式を解くことにより算出することができる。
【0266】
【数18】
【0267】
誤差最小化部90は、予め算出された複数のノードのそれぞれについて、係数(a)が予め設定されている。係数(a)は、例えば式(72)の連立方程式を解くことにより予め算出されている。
【0268】
最大値調整部91は、誤差最小化部90により補正された複数の重み値を取得する。最大値調整部91は、複数の重み値のそれぞれを、複数の重み値の最大絶対値(absmax)に基づき正規化する。
【0269】
より詳しくは、最大値調整部91は、補正された複数の重み値から、最大絶対値(absmax)を検出する。そして、最大値調整部91は、補正された複数の重み値を、最大絶対値(absmax)により除算する。これにより、最大値調整部91は、複数の重み値を、最大絶対値が1となるように、正規化することができる。
【0270】
正規化回路26は、最大値調整部91により正規化後の複数の重み値(wout)をメモリ21におけるWメモリ回路43に書き込む。また、正規化回路26は、最大値調整部91により検出された最大絶対値(absmax)をメモリ21における最大値メモリ回路48に書き込む。
【0271】
このような正規化回路26は、複数の重み値を正規化することにより、重みの合計値を精度良く算出させることができる。
【0272】
図22は、CC回路33の構成を示す図である。
【0273】
CC回路33は、クロックサイクル毎に、対象時刻における位置変数(xin)を取得する。より具体的には、CC回路33は、行方向のラスタスキャン順に、メモリ21に記憶された位置行列(Xmem)から1つずつ位置変数(xin)を読み出す。なお、CC回路33は、メモリ21を介さずにTE回路31から位置変数(xin)を取得してもよい。
【0274】
CC回路33は、クロックサイクル毎に、位置変数(xin)と同一の行番号および列番号の重み値(win)を取得する。より具体的には、CC回路33は、行方向のラスタスキャン順に、メモリ21に記憶された重み値行列(Wmem)から1つずつ重み値(win)を読み出す。
【0275】
CC回路33は、第7マルチプレクサ101と、第4コンパレータ102と、第8マルチプレクサ103と、第1累加算器104と、第9マルチプレクサ105と、第5コンパレータ106と、N個の第10マルチプレクサ107と、N個の第6コンパレータ108と、N個の第2累加算器109と、N個の第11マルチプレクサ110と、N個の第7コンパレータ111と、N個の第3累加算器112と、第12マルチプレクサ113と、判定回路114と、冪乗回路115と、を含む。
【0276】
第7マルチプレクサ101は、クロックサイクル毎に、第4コンパレータ102の制御に応じて、0または1を出力する。
【0277】
第4コンパレータ102は、クロックサイクル毎に、位置変数(xin)を取得する。第4コンパレータ102は、クロックサイクル毎に、取得した位置変数(xin)が0.5より大きいか否かを判断する。第4コンパレータ102は、位置変数(xin)が0.5より大きい場合、第7マルチプレクサ101から1を出力させ、位置変数(xin)が0.5以下である場合、第7マルチプレクサ101から0を出力させる。すなわち、第4コンパレータ102は、クロックサイクル毎に、第7マルチプレクサ101から、位置変数(xin)を閾値により2値化したビット(b)を出力させる。
【0278】
第8マルチプレクサ103は、クロックサイクル毎に、第7マルチプレクサ101から出力されたビット(b)に応じて、重み値(win)または0を出力する。より具体的には、第8マルチプレクサ103は、クロックサイクル毎に、ビット(b)が1である場合、重み値(win)を出力し、ビット(b)が0である場合、0を出力する。すなわち、第8マルチプレクサ103は、複数の有向エッジのそれぞれについて、最適経路に含まれる場合には、重み値(win)を出力し、最適経路に含まれない場合には、0を出力する。
【0279】
第1累加算器104は、クロックサイクル毎に、第8マルチプレクサ103から出力された重み値を累加算する。より詳しくは、第1累加算器104は、1行1列からN行N列までのN×Nクロックサイクル分、重み値を累加算する。なお、第8マルチプレクサ103は、最適経路に含まれない有向エッジの重み値は0として出力する。従って、第1累加算器104は、最適経路として選択された全ての有向エッジに対応する重み値を累加算することができる。すなわち、第1累加算器104は、最適経路として選択された全ての有向エッジの重みの合計値を生成することができる。第1累加算器104は、1行1列からN行N列までのN×Nクロックサイクルの処理が完了した後、重み値の累加算値を、重みの合計値(cost)として出力する。
【0280】
第9マルチプレクサ105は、クロックサイクル毎に、第7マルチプレクサ101から出力されたビット(b)を取得する。第9マルチプレクサ105は、第5コンパレータ106の制御に応じて、ビット(b)または0を出力する。
【0281】
第5コンパレータ106は、クロックサイクル毎に、位置変数(xin)の行番号および列番号を取得する。第5コンパレータ106は、行番号と列番号とが一致するか否かを判断する。第5コンパレータ106は、クロックサイクル毎に、行番号と列番号とが一致する場合、第9マルチプレクサ105から0を出力させ、行番号と列番号とが一致しない場合、第9マルチプレクサ105からビット(b)を出力させる。すなわち、第5コンパレータ106は、行番号と列番号とが一致する場合には、有向エッジが存在しないので、ビット(b)を0とする。
【0282】
N個の第10マルチプレクサ107は、N個の行に対応付けられている。N個の第10マルチプレクサ107のそれぞれは、クロックサイクル毎に、第9マルチプレクサ105から出力されたビット(b)を取得する。N個の第10マルチプレクサ107のそれぞれは、対応する第6コンパレータ108の制御に応じて、取得したビット(b)または0を出力する。
【0283】
N個の第6コンパレータ108は、N個の行に対応付けられている。N個の第6コンパレータ108のそれぞれは、クロックサイクル毎に、取得したビット(b)の行番号が対応する行であるか否かを判断する。N個の第6コンパレータ108のそれぞれは、取得したビット(b)の行番号が対応する行である場合、対応する第10マルチプレクサ107にビット(b)を出力させる。N個の第6コンパレータ108のそれぞれは、取得したビット(b)の行番号が対応する行ではない場合、対応する第10マルチプレクサ107に0を出力させる。
【0284】
N個の第2累加算器109は、N個の行に対応付けられている。N個の第2累加算器109のそれぞれは、対応する第10マルチプレクサ107から出力された全てのビット(N×Nクロックサイクル分のビット(b))を累加算する。N個の第10マルチプレクサ107のそれぞれは、対応する行以外の位置変数を0として出力する。従って、N個の第2累加算器109のそれぞれは、対応する行に含まれるビット(b)を取得したクロックサイクルにおいて、ビット(b)を累加算する。これにより、N個の第2累加算器109のそれぞれは、対応する行に含まれるN個のビット(b)を累加算した行方向累加算値(xr_b[k])を出力することができる。なお、kは、1からNまでの任意の整数である。
【0285】
N個の第11マルチプレクサ110は、N個の列に対応付けられている。N個の第11マルチプレクサ110のそれぞれは、クロックサイクル毎に、第9マルチプレクサ105から出力されたビット(b)を取得する。N個の第11マルチプレクサ110のそれぞれは、対応する第7コンパレータ111の制御に応じて、取得したビット(b)または0を出力する。
【0286】
N個の第7コンパレータ111は、N個の列に対応付けられている。N個の第7コンパレータ111のそれぞれは、クロックサイクル毎に、取得したビット(b)の列番号が対応する列であるか否かを判断する。N個の第7コンパレータ111のそれぞれは、取得したビット(b)の列番号が対応する列である場合、対応する第11マルチプレクサ110にビット(b)を出力させる。N個の第7コンパレータ111のそれぞれは、取得したビット(b)の列番号が対応する列ではない場合、対応する第11マルチプレクサ110に0を出力させる。
【0287】
N個の第3累加算器112は、N個の列に対応付けられている。N個の第3累加算器112のそれぞれは、対応する第11マルチプレクサ110から出力された全てのビット(N×Nクロックサイクル分のビット(b))を累加算する。N個の第11マルチプレクサ110のそれぞれは、対応する列以外の位置変数を0として出力する。従って、N個の第3累加算器112のそれぞれは、対応する列に含まれるビット(b)を取得したクロックサイクルにおいて、ビット(b)を累加算する。これにより、N個の第3累加算器112のそれぞれは、対応する列に含まれるN個のビット(b)を累加算した列方向累加算値(xc_b[k])を出力することができる。
【0288】
第12マルチプレクサ113は、1行1列からN行N列までのN×Nクロックサイクルの処理が完了した後、判定回路114による制御に応じて、第1累加算器104から出力された重みの合計値(cost)、または、0を出力する。
【0289】
判定回路114は、1行1列からN行N列までのN×Nクロックサイクルの処理が完了した後、N個の行方向累加算値(xr_b[k])およびN個の列方向累加算値(xc_b[k])に基づき、最適経路が閉路であるか否かを判定する。
【0290】
判定回路114は、例えば、式(81)を満たす場合、閉路を形成していないと判定し、式(81)を満たさない場合、閉路を形成すると判定する。
【0291】
【数19】
【0292】
式(81)は、(xr_b[k]>1)または(xc_b[k]>1)または(xr_b[k]!=xc_b[k])の何れかを満たすか否かを判定する判定式である。
【0293】
(xr_b[k]>1)は、N個の行方向累加算値(xr_b[k])のうち少なくとも1つが1より大きい場合(すなわち、2以上である場合)、閉路を形成しないことを意味する。
【0294】
(xc_b[k]>1)は、N個の列方向累加算値(xc_b[k])のうち少なくとも1つが1より大きい場合(すなわち、2以上である場合)、閉路を形成しないことを意味する。
【0295】
(xr_b[k]!=xc_b[k])は、行番号および列番号が同一の行方向累加算値(xr_b[k])と列方向累加算値(xc_b[k])とが、同一でない場合、閉路を形成しないことを意味する。
【0296】
判定回路114は、最適経路が閉路であると判定した場合、第12マルチプレクサ113から重みの合計値(cost)を出力させる。判定回路114は、最適経路が閉路ではないと判定した場合、第12マルチプレクサ113から0を出力させる。
【0297】
冪乗回路115は、1行1列からN行N列までのN×Nクロックサイクルの処理が完了した後、下記の式(82)の演算を実行する。
【0298】
【数20】
【0299】
すなわち、冪乗回路115は、重みの合計値(cost)と最大絶対値(absmax)とを乗じた値に-1を乗じた値に対して、10の指数とする冪乗演算をする。これにより、冪乗回路115は、最適経路に含まれる2つ以上の有向エッジに対応する交換をした場合に得られるトータルレート(sol)を算出することができる。
【0300】
(疑似コード)
図23は、第1のメイン疑似コード1111を示す図である。図24は、第1のメイン疑似コード1111に続く、第2のメイン疑似コード1112を示す図である。探索装置10は、一例として、図23および図24に示す疑似コードを行番号の順に実行する。
【0301】
10行は、pおよびphに0を代入させるコードである。
【0302】
11行は、11行から58行までを、繰り返させるコードである。11行は、最初のループでncycleに1を代入し、ループ毎にncycleに1を加算し、ncycleがNcycle以下であることを条件として繰り返す処理を実行させるコードである。
【0303】
12行、13行は、pにdpを加算し、phにdphを加算する処理を実行させるコード群である。14行は、costに0を代入させるコードである。15行および16行は、配列xr_b[node]および配列xc_b[node]に0を代入させるコード群である。
【0304】
17行は、17行から48行までを、繰り返させるコードである。17行は、最初のループでiに0を代入し、ループ毎にiに1を加算し、iがnodeより小さいことを条件として繰り返す処理を実行させるコードである。
【0305】
18行は、18行から47行までを、繰り返させるコードである。18行は、最初のループでjに0を代入し、ループ毎にjに1を加算し、jがnodeより小さいことを条件として繰り返す処理を実行させるコードである。
【0306】
19行は、xoutおよびyoutを定義させるコードである。
【0307】
21行は、TE関数を呼び出して、実行させるコードである。TE関数は、TE処理を実行する関数である。21行は、TE関数に、X[i][j]、Y[i][j]、w[i][j]、z[i][j]を渡し、TE関数から、xoutおよびyoutを受け取らせるコードである。X[i][j]は、i行j列の位置変数である。Y[i][j]は、i行j列の運動量変数である。w[i][j]は、i行j列の重み値である。z[i][j]は、i行j列の選択不可フラグである。
【0308】
23行、24行および25行は、xoutをX[i][j]に格納させ、xoutをXT[j][i]に格納させ、youtをY[i][j]に格納させるコード群である。XT[j][i]は、j行i列の反転位置変数である。
【0309】
27行および28行は、GC処理を実行させるコード群である。27行は、i=jではないことを条件として、XR[i]にxoutを加算する処理を実行させるコードである。28行は、j=iではないことを条件として、XC[j]にxoutを加算する処理を実行させるコードである。XR[i]は、i番目のノードの第1積算値である。XC[j]は、j番目のノードの第2積算値である。
【0310】
30行から46行は、CC処理を実行させるコード群である。30行および31行は、xoutが0.5より大きい場合には、bにtrueに代入し、0.5より大きくない場合には、bにfalseを代入し、xoutに関わらずi=jの場合には、bにfalseを代入する処理を実行させるコードである。
【0311】
32行から35行は、bがtrueである場合、costにw[i][j]を加算し、xr_b[i]に1を加算し、配列xc_b[j]に1を加算する処理を実行させるコード群である。
【0312】
37行は、constraintにfalseを代入する処理を実行させるコードである。
【0313】
38行は、38行から42行までを、繰り返させるコードである。38行は、最初のループでkに0を代入し、ループ毎にkに1を加算し、kがnodeより小さいことを条件としてループを実行させるコードである。
【0314】
39行は、(xr_b[k]>1)または(xc_b[k]>1)または(xr_b[k]!=xc_b[k])の何れかを満たすか否かを判定させるコードである。40行は、39行のコードを満たす場合、constraintにtrueを代入する処理を実行させるコードである。
【0315】
43行および44行は、constraintがtrueである場合、costに0を代入する処理を実行させるコードである。
【0316】
46行は、costと最大絶対値(absmax)とを乗じた値に-1を乗じた値に対して、10の指数とする冪乗演算をさせるコードである。solは、最適経路に含まれる2つ以上の有向エッジに対応する交換をした場合に得られるトータルレートを表す。
【0317】
49行は、49行から57行までを、繰り返させるコードである。49行は、最初のループでiに0を代入し、ループ毎にiに1を加算し、iがnodeより小さいことを条件としてループを実行させるコードである。
【0318】
50行は、50行から56行までを、繰り返させるコードである。50行は、最初のループでjに0を代入し、ループ毎にjに1を加算し、jがnodeより小さいことを条件としてループを実行させるコードである。
【0319】
51行は、youtを定義させるコードである。
【0320】
53行は、MX関数を呼び出して、実行させるコードである。MX関数は、MX処理のうちのFM回路77に対応する処理を実行する関数である。53行は、MX関数に、XR[i]、XC[j]、XC[i]、XR[j]、XT[i][j]、X[i][j]を渡し、MX関数からyoutを受け取らせるコードである。
【0321】
55行は、Y[i][j]から、youtを減算させるコードである。
【0322】
図25は、TE疑似コード1113を示す図である。探索装置10は、21行においてTE関数が呼び出された場合、図25に示す疑似コードを番号順に実行する。
【0323】
111行は、xin、yin、winおよびzinを受け取り、xoutおよびyoutを出力することを定義させるコードである。なお、xinは、X[i][j]が代入される。yinは、Y[i][j]が代入される。winは、w[i][j]が代入される。zinは、z[i][j]が代入される。
【0324】
112行および113行は、nx1、nx2、nx3、ny1、ny2およびny3を定義させるコード群である。115行は、ny1にyinを代入する処理を実行させるコードである。116行は、xin+dt×yinを算出し、nx1に算出結果を代入する処理を実行させるコードである。
【0325】
118行は、nx1が0.5より大きい場合、nx2に1を代入し、nx1が0.5以下である場合、nx2に0を代入する処理を実行させるコードである。
【0326】
120行から122行は、nx1が1より大きいまたはnx1が0より小さい場合、nx3にnx2を代入し、ny1に0を代入する処理を実行させるコード群である。123行から125行は、nx1が0以上1以下である場合、nx3にnx1を代入し、ny2にny1を代入する処理を実行させるコード群である。
【0327】
129行は、{ny2-dt×(1-p)×(nx3-x0)-dt×Mc×(ph×win+(1-ph)×w0)}を算出し、ny3に算出結果を代入する処理を実行させるコードである。なお、dt、x0、Mcおよびw0は、予め定められた定数である。
【0328】
130行は、zinがtrueである場合、xoutに0を代入し、zinがfalseである場合、xoutにnx3を代入する処理を実行させるコードである。131行は、zinがtrueである場合、youtに0を代入し、zinがfalseである場合、youtにny3を代入する処理を実行させるコードである。
【0329】
図26は、MX疑似コード1114を示す図である。探索装置10は、53行においてMX関数が呼び出された場合、図26に示す疑似コードを番号順に実行する。
【0330】
211行は、XRi、XCj、XCi、XRj、XTij、Xijを受け取り、youtを出力することを定義させるコードである。なお、XRiは、XR[i]が代入される。XCjは、XC[j]が代入される。XCiは、XC[i]が代入される。XRjは、XR[j]が代入される。XTijは、XT[i][j]が代入される。Xijは、X[i][j]が代入される。
【0331】
212行は、dt×Mp×{2×XRi+2×XCj-XCi-XRj+XTij-2×Xij}を算出し、youtに算出結果を代入する処理を実行させるコードである。なお、Mpは、予め定められた定数である。
【0332】
(並列化)
図27は、並列化したTE回路31を示す図である。
【0333】
TE回路31は、複数のサブTE回路210(複数のサブ自己発展回路)を含んでもよい。TE回路31は、例えば2以上、(N×N)以下のサブTE回路210を含んでよい。複数のサブTE回路210は、TE回路31と同一の構成を有し、互いに並行にTE処理を実行する。
【0334】
複数のサブTE回路210のそれぞれは、複数の有向エッジのうちの他のサブTE回路210とは異なる有向エッジについて、メモリ21から直前時刻における位置変数、直前時刻における運動量変数、重み値、および、選択不可フラグを読み出す。そして、複数のサブTE回路210のそれぞれは、複数の有向エッジのうちの他のサブTE回路210とは異なる有向エッジについて、TE処理を実行した後、対象時刻における位置変数および更新途中の対象時刻における運動量変数をメモリ21に書き込む。
【0335】
また、TE回路31が複数のサブTE回路210を含む場合、メモリ21は、複数のサブTE回路210が並行して、位置変数(Xi,j)、運動量変数(Yi,j)、重み値(wi,j)および選択不可フラグ(zi,j)を読み出し可能なように、複数のサブTE回路210に対応する複数のポートを含む。
【0336】
例えば、TE回路31は、N行N列の行列におけるN個の行に対応するN個のサブTE回路210を含む。TE回路31は、N個のサブTE回路210を含むことにより、N×N個の位置変数等の読み出しおよび書き込みに対する処理を容易にすることができる。
【0337】
また、この場合、Xメモリ回路41は、N個の行に対応するN個のサブXメモリ回路220を含む。N個のサブXメモリ回路220のそれぞれは、対応する行のN個の位置変数(Xi,j)を記憶する。
【0338】
同様に、Yメモリ回路42は、N個の行に対応するN個のサブYメモリ回路222を含む。N個のサブYメモリ回路222のそれぞれは、対応する行のN個の運動量変数(Yi,j)を記憶する。
【0339】
同様に、Wメモリ回路43は、N個の行に対応するN個のサブWメモリ回路224を含む。N個のサブWメモリ回路224のそれぞれは、対応する行のN個の重み値(wi,j)を記憶する。
【0340】
同様に、Zメモリ回路44は、N個の行に対応するN個のサブZメモリ回路226を含む。N個のサブZメモリ回路226のそれぞれは、対応する行のN個の選択不可フラグ(zi,j)を記憶する。
【0341】
N個のサブTE回路210のそれぞれは、対応する行の、サブXメモリ回路220、サブYメモリ回路222、サブWメモリ回路224およびサブZメモリ回路226から、位置変数(Xi,j)、運動量変数(Yi,j)、重み値(wi,j)および選択不可フラグ(zi,j)を読み出す。これにより、TE回路31は、N個の行に対して並行にTE処理を実行することができる。
【0342】
図28は、並列化したMX回路34を示す図である。
【0343】
MX回路34は、複数のサブMX回路230(複数のサブ多体相互作用回路)を含んでもよい。複数のサブMX回路230は、MX回路34は、例えば2以上の(N×N)以下のサブMX回路230を含んでよい。複数のサブMX回路230は、MX回路34と同一の構成を有し、互いに並行にMX処理を実行する。
【0344】
複数のサブMX回路230のそれぞれは、複数の有向エッジのうちの他のサブMX回路230とは異なる有向エッジについて、メモリ21から対象時刻における位置変数、反転位置変数および更新途中の対象時刻における運動量変数を読み出す。さらに、複数のサブMX回路230のそれぞれは、複数の有向エッジのうちの他のサブMX回路230とは異なる有向エッジについて、メモリ21から、終了ノードの第1積算値および第2積算値、並びに、開始ノードの第1積算値および第2積算値を読み出す。そして、複数のサブMX回路230のそれぞれは、複数の有向エッジのうちの他のサブMX回路230とは異なる有向エッジについて、MX処理を実行した後、更新後の対象時刻における運動量変数をメモリ21に書き込む。
【0345】
また、MX回路34が複数のサブMX回路230を含む場合、メモリ21は、複数のサブMX回路230が並行して、位置変数(Xi,j)、反転位置変数(XTj,i)、運動量変数(Yi,j)、終了ノードの第1積算値(XR)および第2積算値(XC)、並びに、開始ノードの第1積算値(XR)および第2積算値(XC)、を読み出し可能なように、複数のサブMX回路230に対応する複数のポートを含む。
【0346】
例えば、MX回路34は、N行N列の行列におけるN個の行に対応するN個のサブMX回路230を含む。MX回路34は、N個のサブMX回路230を含むことにより、N×N個の位置変数等の読み出しおよび書き込みに対する処理を容易にすることができる。
【0347】
この場合、Xメモリ回路41は、N個の行に対応するN個のサブXメモリ回路220を含む。Yメモリ回路42は、N個の行に対応するN個のサブYメモリ回路222を含む。
【0348】
また、XRメモリ回路45は、N個の行に対応するN個のサブXRメモリ回路242を含む。N個のサブXRメモリ回路242のそれぞれは、対応する行の第1積算値(XR)を記憶する。
【0349】
また、XCメモリ回路46は、N個の列に対応するN個のサブXCメモリ回路244を含む。N個のサブXCメモリ回路244のそれぞれは、対応する列の第2積算値(XC)を記憶する。
【0350】
XTメモリ回路47は、N個の行に対応するN個のサブXTメモリ回路246を含む。N個のサブXTメモリ回路246のそれぞれは、対応する行のN個の反転位置変数(XTj,i)を記憶する。
【0351】
N個のサブMX回路230のそれぞれは、対応する行のサブXメモリ回路220、サブYメモリ回路222、および、対応する行のサブXTメモリ回路246から、位置変数(Xi,j)、運動量変数(Yi,j)、および、反転位置変数(XTj,i)を読み出す。また、N個のサブMX回路230のそれぞれは、対応する行および列のサブXRメモリ回路242、および、サブXCメモリ回路244から、終了ノードの第1積算値(XR)および第2積算値(XC)、並びに、開始ノードの第1積算値(XR)および第2積算値(XC)、を読み出す。これにより、MX回路34は、N個の行に対して並行にMX処理を実行することができる。
【0352】
図29は、並列化したGC回路32の構成を、XRメモリ回路45およびXCメモリ回路46とともに示す図である。図30は、並列化したGC回路32による位置変数の取得順序、および、第1積算値および第2積算値の算出順序を示す図である。
【0353】
GC回路32は、N個の行に対して並行にTE処理を実行した場合、N個の第1積算値(xrout)およびN個の第2積算値(xcout)を並行して算出することができる。この場合、GC回路32は、位置行列におけるN個の行のそれぞれから、並行して、TE処理がされた後のN個の位置変数(xin)を取得する。
【0354】
並列化したGC回路32は、N個の行方向累加算器262と、総加算器264と、デマルチプレクサ266とを含む。
【0355】
N個の行方向累加算器262は、N個の行に対応付けられている。N個の行方向累加算器262のそれぞれは、対応する行のN個の位置変数(xin)(Nクロックサイクル分の位置変数(xin))を累加算する。従って、N個の行方向累加算器262のそれぞれは、図30に示されるように、対応する行に含まれるN個の位置変数(xin)を累加算した累加算値を出力することができる。
【0356】
N個の行方向累加算器262のそれぞれは、算出した累加算値を、対応する行の第1積算値(xrout)として出力する。N個の行方向累加算器262のそれぞれは、算出した第1積算値(xrout)を、XRメモリ回路45に含まれる対応するサブXRメモリ回路242に書き込む。
【0357】
総加算器264は、クロックサイクル毎に、N個の行に含まれるN個の位置変数(xin)を加算する。すなわち、総加算器264は、クロックサイクル毎に、1個の列に含まれるN個の位置変数(xin)を加算する。これにより、総加算器264は、図30に示されるように、複数のサブXCメモリ回路244のそれぞれに対して、対応する列に含まれるN個の位置変数(xin)を累加算した累加算値を出力することができる。
【0358】
デマルチプレクサ266は、XCメモリ回路46に含まれるN個のサブXCメモリ回路244を、1つずつクロックサイクル毎に選択する。デマルチプレクサ266は、クロックサイクル毎に、総加算器264から出力された加算値を、対応する列の第2積算値(xcout)として出力する。そして、デマルチプレクサ266は、クロックサイクル毎に、選択されたサブXCメモリ回路244に第2積算値(xcout)を書き込む。
【0359】
図31は、並列化前および並列化後のTE処理およびMX処理のタイミングを示す図である。
【0360】
N行毎に並列化してTE処理を実行した場合、TE回路31は、1回のステップの処理を(N+λTE)クロックサイクルで実行する。また、N行毎に並列化してMX処理を実行した場合、MX回路34は、1回のステップの処理を(N+λMX)クロックサイクルで実行する。N行毎に並列化してGC処理を実行した場合、GC回路32は、1回のステップの処理を(N+λGC)クロックサイクルで実行する。
【0361】
ここで、GC回路32は、GC処理を、TE処理と並行して実行することができる。MX回路34は、GC回路32がGC処理を実行した後、すなわち、TE処理が終了してからλGCが経過した後に、MX処理を開始する。
【0362】
以上から、N行毎に並列化した探索装置10による1回のステップの処理時間は、{(2×N)+λTE+λGC+λMX}クロックサイクルとなる。また、探索装置10がNSTEP回のステップを繰り返す場合、探索装置10による全体の処理時間は、NSTEP×{(2×N)+λTE+λGC+λMX}クロックサイクルとなる。
【0363】
なお、探索装置10は、N行毎ではなく、他の並列度で並列化してもよい。例えば、探索装置10は、全体の処理を2分割してもよいし、4分割してもよい。また、探索装置10は、全体の処理を、N×N分割した並列処理をしてもよい。
【0364】
以上のような第2実施形態に係る探索装置10は、有向グラフの最適経路を探索する最適経路問題の解を簡易な構成で高速に出力することができる。
【0365】
(第3実施形態)
つぎに、第3実施形態に係る裁定取引システム300について説明する。
【0366】
図32は、裁定取引システム300の構成を示す図である。
【0367】
裁定取引システム300は、図7から図31を参照して説明した第2実施形態に係る探索装置10を組み込んだ探索システムの一例である。なお、本実施形態において、裁定取引システム300は、為替の取引を行う。しかし、裁定取引システム300は、為替に限らず、どのような対象の裁定取引に適用してもよい。
【0368】
裁定取引システム300は、探索装置10と、受信装置312と、UDP処理部314と、入力管理装置316と、取引装置318と、TCP処理部320と、送信装置322とを備える。
【0369】
探索装置10は、図7から図31を参照して説明した装置である。例えば、探索装置10は、専用回路として、FPGA、ゲートアレイまたは特定用途向け集積回路等に実装した半導体装置である。
【0370】
探索装置10の探索対象となる有向グラフにおける、複数のノードのそれぞれは、裁定取引の取引対象に対応する。本例においては、複数のノードのそれぞれは、通貨に対応する。
【0371】
また、複数の有向エッジのそれぞれは、開始ノードに対応する取引対象から終了ノードに対応する取引対象への交換に対応する。本例においては、複数の有向エッジのそれぞれは、開始ノードに対応する通貨から、終了ノードに対応する通貨への交換に対応する。
【0372】
また、複数の重み値のそれぞれは、割り当てられた有向エッジに対応する交換をした場合の交換レートの対数値を表す。本例においては、開始ノードに対応する通貨(i)から、終了ノードに対応する通貨(j)への交換をした場合の交換レートをri,jとした場合、重み値wi,jは、-log(ri,j)となる。
【0373】
探索装置10は、最適経路として、経路に割り当てられた2つ以上の重み値の累加算値が最小となる閉路を検出する。なお、重み値wi,jが、+log(ri,j)を表す場合には、探索装置10は、最適経路として、経路に割り当てられた2つ以上の重み値の累加算値が最大となる閉路を検出すればよい。
【0374】
探索装置10は、複数の有向エッジのそれぞれに対応する複数のビット(bi,j)を、最適経路の探索結果として出力する。複数のビット(bi,j)は、対応する有向エッジが最適経路に含まれる場合には1、対応する有向エッジが最適経路に含まれない場合には0を表す。
【0375】
さらに、探索装置10は、検出された最適経路に含まれる2つ以上の有向エッジに対応する2以上の交換をした場合のトータルレート(sol)を算出する。トータルレート(sol)はsol=Π(ri,j bi,j)により表される。トータルレート(sol)は、sol=exp{Σ(wi,j×bi,j)}と表すこともできる。
【0376】
また、探索装置10は、一定期間毎に、最適経路を探索して出力する。例えば、探索装置10は、全体の処理時間毎(例えば、NSTEP×{2(N×N)+λTE+λGC+λMX}クロックサイクル)に、最適経路を出力してもよい。また、探索装置10は、イベントパケットの受信をトリガに、最適経路を探索して出力してもよい。
【0377】
受信装置312は、市場サーバからネットワークを介して、イベントパケットを受信する。イベントパケットは、複数の有向エッジのうちの少なくとも1つの有向エッジに割り当てられる重み値を示す情報を含む。例えば、イベントパケットは、何れかの有向エッジに対応する交換レートを含む。
【0378】
本例においては、イベントパケットは、ヘッダ情報と、ペアIDと、売り値(Bid)と、買い値(Ask)とを含む。ペアIDは、通貨(i)と、通貨(j)とのペアを識別する識別情報である。なお、通貨(i)は、有向グラフのi番目のノードに対応する通貨である。また、通貨(j)は、有向グラフのj番目のノードに対応する通貨である。
【0379】
売り値(Bid)は、通貨(i)から通貨(j)への交換レート(ri,j)を表す。買い値(Ask)は、通貨(j)から通貨(i)への交換レート(rj,i)と、rj,i=1/Askの関係にある。売り値(Bid)と買い値(Ask)は、通常一致しない。
【0380】
市場サーバは、イベントパケットを不定期にブロードキャストする。受信装置312は、不定期に送信されるイベントパケットを順次に受信して、UDP処理部314に与える。
【0381】
UDP処理部314は、受信装置312から与えられたイベントパケットに対して、通信プロトコルに従った情報処理をして、イベントパケットに含まれる、有向エッジを特定する情報および重み値を表す情報(例えば交換レート)を抽出する。
【0382】
本例においては、イベントパケットは、UDP(User Datagram Protocol)プロトコルに従ったパケットである。従って、本例においては、UDP処理部314は、UDPプロトコルに従った処理を実行して、ペアID、売り値(Bid)および買い値(Ask)を抽出する。
【0383】
入力管理装置316は、内部に、複数の有向エッジに対応する複数の重み値を記憶する。入力管理装置316は、イベントパケットが受信される毎に、UDP処理部314から、イベントパケットに含まれる少なくとも1つの有向エッジに割り当てられる重み値を示す情報を取得する。入力管理装置316は、取得したイベントパケットに含まれる情報に基づき重み値を生成し、記憶している複数の重み値の何れかを書き換える。
【0384】
本例においては、入力管理装置316は、イベントパケットが受信される毎に、UDP処理部314から、ペアID、売り値(Bid)および買い値(Ask)を取得する。入力管理装置316は、イベントパケットが受信される毎に、売り値(Bid)に対して負の対数演算をすることにより、通貨(i)から通貨(j)への交換を表す有向エッジに対応する重み値(wi,j)を生成し、内部に記憶している対応する重み値を書き換える。また、入力管理装置316は、イベントパケットが受信される毎に、売り値(Ask)に正の対数演算をすることにより、通貨(j)から通貨(i)への交換を表す有向エッジに対応する重み値(wj,i)を生成し、内部に記憶している対応する重み値を書き換える。
【0385】
そして、入力管理装置316は、探索装置10が備えるメモリ21に記憶されている複数の重み値を、一定期間毎に、書き換える。例えば、探索装置10が、所定時間(例えば、NSTEP×{2(N×N)+λTE+λGC+λMX}クロックサイクル)毎に、繰り返して探索処理を実行するとする。この場合、入力管理装置316は、所定時間(例えば、NSTEP×{2(N×N)+λTE+λGC+λMX}クロックサイクル)毎に、メモリ21に記憶されている複数の重み値を、書き換える。なお、入力管理装置316は、複数の重み値(wi,j)うちの何れも変更が無い場合には、書き換え処理をスキップしてもよい。
【0386】
また、入力管理装置316は、探索装置10に記憶されている複数の重み値の全て、一括して書き換える。例えば、探索装置10がN×N個の重み値を記憶している場合、入力管理装置316は、N×N個の重み値の全てを書き換える。例えば、入力管理装置316および探索装置10は、N×N×Wdata本の配線により接続されてもよい。ここで、Wdataは、1つの重み値を表すのに必要なビット数である。そして、入力管理装置316は、探索装置10が記憶されているN×N個の重み値を、1クロックサイクルで一括して書き換えてもよい。これにより、入力管理装置316は、探索装置10に記憶されている複数の重み値を短時間で書き換えることができる。
【0387】
取引装置318は、探索装置10から、一定期間毎に、最適経路の探索結果である複数のビット(bi,j)およびトータルレート(sol)を取得する。取引装置318は、複数のビット(bi,j)およびトータルレート(sol)に基づき、最適経路に含まれる2つ以上の有向エッジに対応する交換を実行するか否かを判断する。例えば、取引装置318は、トータルレート(sol)が所定の閾値より大きい場合に、裁定取引を実行すると判断する。
【0388】
裁定取引を実行すると判断した場合、取引装置318は、最適経路として選択された2つ以上の有向エッジに対応する交換を実行することを指示する注文パケットを生成する。なお、取引装置318は、最適経路として選択された2つ以上の有向エッジに対応する2以上の交換について、何れかの1つの有向エッジについての約定を確認した後、続く有向エッジについての注文パケットを生成してもよい。
【0389】
TCP処理部320は、取引装置318により生成された注文パケットに対して、通信プロトコルに従った情報処理をする。本例において、注文パケットは、TCP(Transmission Control Protocol)プロトコルに従ったパケットである。従って、TCP処理部320は、注文パケットをTCPプロトコルに従ったパケットに含める。
【0390】
送信装置322は、TCP処理部320から出力された注文パケットを、ネットワークを介して、対象物の取引を実行する売買サーバに送信する。
【0391】
図33は、入力管理装置316の構成を示す図である。
【0392】
入力管理装置316は、転送回路332と、ハンドリング回路334と、アドレスデコーダ336とを含む。
【0393】
転送回路332は、有向グラフに含まれる複数の有向エッジのそれぞれに対応する複数のバッファメモリ340を含む。複数のバッファメモリ340のそれぞれは、対応する有向エッジに割り当てられる重み値を記憶する。
【0394】
本例においては、転送回路332は、N×N個のバッファメモリ340を含む。N×N個のバッファメモリ340は、UT部342と、LT部344と、DI部346とに分割される。
【0395】
UT部342は、行列における上三角成分(UT)に属する重み値を記憶する。すなわち、UT部342は、i<jであって、i番目のノードに対応する通貨からj番目のノードに対応する通貨への交換を表す有向エッジに対応する重み値を記憶する。UT部342は、N×(N-1)/2個のバッファメモリ340を含む。
【0396】
LT部344は、行列における下三角成分(LT)に属する重み値を記憶する。すなわち、LT部344は、i<jであって、j番目のノードに対応する通貨からi番目のノードに対応する通貨への交換を表す有向エッジに対応する重み値を記憶する。LT部344は、N×(N-1)/2個のバッファメモリ340を含む。
【0397】
DI部346は、行列における対角成分に属する重み値を記憶する。DI部346は、N個のバッファメモリ340を含む。
【0398】
本例において、N×N個のバッファメモリ340のそれぞれは、多値データを記憶可能なD型フリップフロップである。この場合、バッファメモリ340は、入力端子Dと、エナーブル端子ENと、出力端子Qとを含む。
【0399】
ハンドリング回路334は、イベントパケットが受信される毎に、ペアID、売り値(Bid)および買い値(Ask)を取得する。
【0400】
ハンドリング回路334は、イベントパケットが受信される毎に、売り値(Bid)に対して負の対数演算(-log(Bid))を実行することにより、i番目のノードに対応する通貨(i)からj番目のノードに対応する通貨(j)への交換を表す有向エッジに対応する重み値(wi,j)を算出する。ハンドリング回路334は、負の対数演算(-log(Bid))を実行する専用の回路を含んでもよい。ハンドリング回路334は、算出した重み値(wi,j)を、UT部342に含まれるN×(N-1)/2個のバッファメモリ340の全ての入力端子Dに並列に与える。
【0401】
さらに、ハンドリング回路334は、イベントパケットが受信される毎に、買い値(Ask)に対して正の対数演算(+log(Ask))を実行することにより、j番目のノードに対応する通貨(j)からi番目のノードに対応する通貨(i)への交換を表す有向エッジに対応する重み値(wj,i)を算出する。ハンドリング回路334は、正の対数演算(+log(Bid))を実行する専用の回路を含んでもよい。ハンドリング回路334は、算出した重み値(wj,i)を、LT部344に含まれるN×(N-1)/2個のバッファメモリ340の全ての入力端子Dに並列に与える。
【0402】
ハンドリング回路334は、通貨(i)から通貨(j)への交換に対応する重み値(wi,j)と、通貨(j)から通貨(i)への交換に対応する重み値(wj,i)とを同時に出力する。
【0403】
ハンドリング回路334は、イベントパケットが受信される毎に、ペアIDに基づき通貨ペア(通貨(i)と通貨(j)との組)を特定する。ハンドリング回路334は、特定した通貨ペアを表すアドレスをアドレスデコーダ336に与える。
【0404】
アドレスデコーダ336は、通貨ペアを表すアドレスに基づき、UT部342に含まれるN×(N-1)/2個のバッファメモリ340のうち対応する1つのバッファメモリ340を選択する。また、アドレスデコーダ336は、通貨ペアを表すアドレスに基づき、LT部344に含まれるN×(N-1)/2個のバッファメモリ340のうち対応する1つのバッファメモリ340を選択する。
【0405】
アドレスデコーダ336は、UT部342に含まれる、選択した1つのバッファメモリ340のエナーブル端子EN、および、LT部344に含まれる、選択した1つのバッファメモリ340のエナーブル端子ENに、選択信号(Selectout)を与える。
【0406】
UT部342に含まれるN×(N-1)/2個のバッファメモリ340のそれぞれは、エナーブル端子ENに選択信号(Selectout)が与えられた場合、入力端子Dから与えられた重み値を取り込む。従って、UT部342に含まれる通貨(i)から通貨(j)への交換に対応するバッファメモリ340は、ハンドリング回路334から出力された通貨(i)から通貨(j)への交換に対応する重み値(wi,j)を取り込み、内部に記憶することができる。
【0407】
また、LT部344に含まれるN×(N-1)/2個のバッファメモリ340のそれぞれも、エナーブル端子ENに選択信号(Selectout)が与えられた場合、入力端子Dから与えられた重み値を取り込む。従って、LT部344に含まれる通貨(j)から通貨(i)への交換に対応するバッファメモリ340は、ハンドリング回路334から出力された通貨(j)から通貨(i)への交換に対応する重み値(wj,i)を取り込み、内部に記憶することができる。
【0408】
なお、DI部346に含まれるN個のバッファメモリ340は、システム起動において、制御信号(Cntrol)がエナーブル端子ENに与えられ、重み値の初期値(Clinit)が入力端子Dに与えられる。重み値の初期値(Clinit)は、重み値の合計値に影響を与えない値、例えば0である。
【0409】
そして、転送回路332は、N×N個のバッファメモリ340に記憶されているN×N個の重み値を、一括して、探索装置10が備えるメモリ21に書き込む。例えば、転送回路332は、所定時間(例えば、NSTEP×{2(N×N)+λTE+λGC+λMX}クロックサイクル)毎に、メモリ21に記憶されているN×N個の重み値を、一括して書き換える。
【0410】
このような入力管理装置316は、転送回路332より前のハンドリング回路334において、イベントパケットが受信される毎に、売り値(Bid)および買い値(Ask)に対して対数演算を実行する。転送回路332は、イベントパケットが受信される毎に、2個の重み値が書き換えられる。また、転送回路332は、イベントパケットの受信とは非同期に、N×N個の重み値を一括して探索装置10に出力する。入力管理装置316は、もし、転送回路332より後段において、対数演算を実行する場合、N×Nの対数演算を並列で実行しなければならない。これに対して、本実施形態の入力管理装置316は、転送回路332より前のハンドリング回路334において、対数演算を実行する。これにより、本実施形態の入力管理装置316は、少ない回路構成で、対数演算を実行することができる。
【0411】
また、転送回路332は、例えば、1クロックサイクルで、N×N個の重み値を探索装置10に送信して、探索装置10のメモリ21に記憶されたN×N個の重み値を更新する。従って、転送回路332は、短時間で探索装置10のメモリ21に記憶されたN×N個の重み値を更新することができる。これにより、探索装置10は、為替の変化に対して高速に最適経路を検出することができる。
【0412】
また、転送回路332は、N×N個の重み値に加えて、さらに、N×N個の交換レートも記憶してもよい。この場合、ハンドリング回路334は、イベントパケットに含まれる交換レート(売り値(Bid)および買い値の逆数(1/Ask))も転送回路332に送信して、対応するバッファメモリ340に記憶させる。そして、転送回路332は、N×N個の重み値に加えて、N×N個の交換レートも探索装置10のメモリ21に送信する。これにより、探索装置10は、N×N個の交換レートを用いて、N×N個の重み値の正規化演算を容易に実行することができる。
【0413】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0414】
10 探索装置
12 演算部
14 入力部
16 出力部
18 設定部
21 メモリ
22 制御回路
23 第1回路
24 第2回路
25 二値化回路
26 正規化回路
31 TE回路
32 GC回路
33 CC回路
34 MX回路
41 Xメモリ回路
42 Yメモリ回路
43 Wメモリ回路
44 Zメモリ回路
45 XRメモリ回路
46 XCメモリ回路
47 XTメモリ回路
48 最大値メモリ回路
51 位置更新回路
52 制限回路
53 運動量更新回路
54 マスク回路
57 FY回路
58 第1加算器
60 第1マルチプレクサ
61 第1コンパレータ
62 第2マルチプレクサ
63 第3マルチプレクサ
64 第2コンパレータ
65 FX回路
66 FW回路
67 第2加算器
68 第4マルチプレクサ
69 第5マルチプレクサ
71 行方向累加算回路
72 第6マルチプレクサ
73 第3コンパレータ
74 列方向累加算回路
77 FM回路
78 第3加算器
79 第1乗算器
80 第2乗算器
81 第3乗算器
82 第1減算器
83 第2減算器
84 第3減算器
85 第1内部加算器
86 第2内部加算器
87 第4乗算器
90 誤差最小化部
91 最大値調整部
101 第7マルチプレクサ
102 第4コンパレータ
103 第8マルチプレクサ
104 第1累加算器
105 第9マルチプレクサ
106 第5コンパレータ
107 第10マルチプレクサ
108 第6コンパレータ
109 第2累加算器
110 第11マルチプレクサ
111 第7コンパレータ
112 第3累加算器
113 第12マルチプレクサ
114 判定回路
115 冪乗回路
210 サブTE回路
220 サブXメモリ回路
222 サブYメモリ回路
224 サブWメモリ回路
226 サブZメモリ回路
230 サブMX回路
242 サブXRメモリ回路
244 サブXCメモリ回路
246 サブXTメモリ回路
262 行方向累加算器
264 総加算器266 デマルチプレクサ
300 裁定取引システム
312 受信装置
314 UDP処理部
316 入力管理装置
318 取引装置
320 TCP処理部
322 送信装置
332 転送回路
334 ハンドリング回路
336 アドレスデコーダ
340 バッファメモリ
342 UT部
344 LT部
346 DI部
図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
図30
図31
図32
図33