(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022165250
(43)【公開日】2022-10-31
(54)【発明の名称】プログラム、データ処理方法及びデータ処理装置
(51)【国際特許分類】
G06F 17/10 20060101AFI20221024BHJP
【FI】
G06F17/10 Z
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021070530
(22)【出願日】2021-04-19
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】特許業務法人扶桑国際特許事務所
(72)【発明者】
【氏名】片山 健太朗
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB91
(57)【要約】
【課題】比較的小容量の記憶部を用いた場合でも大規模な問題を計算可能とする。
【解決手段】処理部12は、n個の要素のうち2つの要素を指定する処理と、記憶部11から、2つの要素のそれぞれについてのn個のコストと、2つの要素の2つの割当先のそれぞれについてのn個の距離とを読み出す処理と、4つの局所場(h
a、h
b、h
c、h
d)を、n個のコストのそれぞれとn個の距離の何れかとの積の総和により計算する処理と、4つの局所場と、2つの要素の間のコストと、2つの割当先の間の距離と、に基づいて、2つの要素の割当先の入れ替えが生じた場合の評価関数の値の変化量(ΔE)を計算する処理と、ΔEと所定値との比較結果に基づいて、入れ替えを実行するか否かを決定する処理とを含む繰り返し処理を、要素対を変えて繰り返すことで、評価関数の値が極小または極大になる割当状態を探索する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
n(nは2以上の整数)個の要素と、前記n個の要素が割り当てられるn個の割当先との組合せの探索をコンピュータに実行させるプログラムであって、
前記n個の要素のうち、第1要素と第2要素を指定する処理と、
前記n個の要素の間のコストと、前記n個の割当先の間の距離と、前記n個の要素の前記n個の割当先への割当状態と、を記憶する記憶部から、前記第1要素と前記第2要素のそれぞれについてのn個のコストと、前記第1要素の第1割当先と前記第2要素の第2割当先のそれぞれについてのn個の距離とを読み出す処理と、
前記割当状態に応じたエネルギーを表すイジング型の評価関数に含まれ、前記割当状態を表すnの2乗個の状態変数のうち、前記第1要素と前記第2要素の割当先の入れ替えにより値が変化する4つの状態変数のそれぞれの値が変化することによる前記評価関数の値の第1変化量を示す4つの局所場を、前記n個のコストのそれぞれと前記n個の距離の何れかとの積の総和により計算する処理と、
前記4つの局所場と、前記n個のコストのうち前記第1要素と前記第2要素の間の第1コストと、前記n個の距離のうち前記第1割当先と前記第2割当先の間の第1距離と、に基づいて、前記入れ替えが生じた場合の前記評価関数の値の第2変化量を計算する処理と、
前記第2変化量と、所定値との比較結果に基づいて、前記入れ替えを実行するか否かを決定する処理と、
を含む繰り返し処理を、前記第1要素または前記第2要素とする要素対を変えて繰り返すことで、前記評価関数の値が極小または極大になる前記割当状態を探索する、
処理をコンピュータに実行させるプログラム。
【請求項2】
前記所定値は、乱数と温度パラメータの値とに基づいて得られるノイズ値である、請求項1に記載のプログラム。
【請求項3】
前記コストはn行n列の第1行列で示され、前記距離はn行n列の第2行列で示され、
前記n個のコストは、前記第1行列のうち、前記第1要素または前記第2要素の識別番号に対応する行または列に属し、
前記n個の距離は、前記第2行列のうち、前記第1割当先または前記第2割当先の識別番号に対応する行または列に属する、
請求項1または2に記載のプログラム。
【請求項4】
前記n個の距離のうち、前記n個のコストのそれぞれに対する乗数を、前記n個の要素が割り当てられている前記n個の割当先の識別情報に基づいて選択する、処理を前記コンピュータに実行させる請求項1乃至3の何れか一項に記載のプログラム。
【請求項5】
前記割当状態は、互いに異なる前記温度パラメータの値が設定される複数のレプリカのそれぞれについて前記記憶部に記憶され、
前記複数のレプリカのそれぞれについて、前記繰り返し処理を、前記要素対を変えて繰り返し、
所定の周期で、前記複数のレプリカの何れか2つの間で前記温度パラメータの値または前記割当状態の交換を行う、
処理を前記コンピュータに実行させる請求項1乃至4の何れか一項に記載のプログラム。
【請求項6】
前記評価関数は、前記n個の要素を前記n個の割当先に割り当てる際に、前記n個の要素の間の物資の輸送量を前記コストとし、前記距離と前記コストとの積の総和を含む関数である、請求項1乃至5の何れか一項に記載のプログラム。
【請求項7】
n(nは2以上の整数)個の要素と、前記n個の要素が割り当てられるn個の割当先との組合せの探索を実行するコンピュータが、
前記n個の要素のうち、第1要素と第2要素を指定する処理と、
前記n個の要素の間のコストと、前記n個の割当先の間の距離と、前記n個の要素の前記n個の割当先への割当状態と、を記憶する記憶部から、前記第1要素と前記第2要素のそれぞれについてのn個のコストと、前記第1要素の第1割当先と前記第2要素の第2割当先のそれぞれについてのn個の距離とを読み出す処理と、
前記割当状態に応じたエネルギーを表すイジング型の評価関数に含まれ、前記割当状態を表すnの2乗個の状態変数のうち、前記第1要素と前記第2要素の割当先の入れ替えにより値が変化する4つの状態変数のそれぞれの値が変化することによる前記評価関数の値の第1変化量を示す4つの局所場を、前記n個のコストのそれぞれと前記n個の距離の何れかとの積の総和により計算する処理と、
前記4つの局所場と、前記n個のコストのうち前記第1要素と前記第2要素の間の第1コストと、前記n個の距離のうち前記第1割当先と前記第2割当先の間の第1距離と、に基づいて、前記入れ替えが生じた場合の前記評価関数の値の第2変化量を計算する処理と、
前記第2変化量と、所定値との比較結果に基づいて、前記入れ替えを実行するか否かを決定する処理と、
を含む繰り返し処理を、前記第1要素または前記第2要素とする要素対を変えて繰り返すことで、前記評価関数の値が極小または極大になる前記割当状態を探索する、
データ処理方法。
【請求項8】
n(nは2以上の整数)個の要素と、前記n個の要素が割り当てられるn個の割当先との組合せの探索を実行するデータ処理装置であって、
前記n個の要素の間のコストと、前記n個の割当先の間の距離と、前記n個の要素の前記n個の割当先への割当状態と、を記憶する記憶部と、
前記n個の要素のうち、第1要素と第2要素を指定する処理と、前記記憶部から、前記第1要素と前記第2要素のそれぞれについてのn個のコストと、前記第1要素の第1割当先と前記第2要素の第2割当先のそれぞれについてのn個の距離とを読み出す処理と、前記割当状態に応じたエネルギーを表すイジング型の評価関数に含まれ、前記割当状態を表すnの2乗個の状態変数のうち、前記第1要素と前記第2要素の割当先の入れ替えにより値が変化する4つの状態変数のそれぞれの値が変化することによる前記評価関数の値の第1変化量を示す4つの局所場を、前記n個のコストのそれぞれと前記n個の距離の何れかとの積の総和により計算する処理と、前記4つの局所場と、前記n個のコストのうち前記第1要素と前記第2要素の間の第1コストと、前記n個の距離のうち前記第1割当先と前記第2割当先の間の第1距離と、に基づいて、前記入れ替えが生じた場合の前記評価関数の値の第2変化量を計算する処理と、前記第2変化量と、所定値との比較結果に基づいて、前記入れ替えを実行するか否かを決定する処理と、を含む繰り返し処理を、前記第1要素または前記第2要素とする要素対を変えて繰り返すことで、前記評価関数の値が極小または極大になる前記割当状態を探索する、処理部と、
を有するデータ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム、データ処理方法及びデータ処理装置に関する。
【背景技術】
【0002】
組合せ最適化問題の1つとして、2次割り当て問題(QAP(Quadratic Assignment Problem))がある。2次割り当て問題は、n個の要素(施設など)をn個の割当先に割り当てる際に、要素間のコスト(たとえば、施設間での物資の輸送量などのフロー量)と、各要素が割り当てられる割当先間の距離との積の総和を最小化するような割り当てを求める問題である。すなわち、2次割り当て問題は、以下の式(1)を満たす割り当てを探索する問題である。
【0003】
【0004】
式(1)において、fi,jは、識別番号=i,jの要素間のコスト、dφ(i),φ(j)は、識別番号=i,jの要素が割り当てられている割当先間の距離、Snはn個の割当先の集合を示す。
【0005】
ところで、ノイマン型コンピュータが不得意とする大規模な離散最適化問題を計算する装置として、イジング型の評価関数(エネルギー関数などとも呼ばれる)を用いたイジング装置(ボルツマンマシンとも呼ばれる)がある(たとえば、特許文献1,2参照)。
【0006】
イジング装置は、組合せ最適化問題を磁性体のスピンの振る舞いを表すイジングモデルに変換する。そして、イジング装置は、疑似焼き鈍し法やレプリカ交換法(パラレルテンパリング法などとも呼ばれる)などのマルコフ連鎖モンテカルロ法により、イジング型の評価関数の値(エネルギーに相当する)が極小になるイジングモデルの状態を探索する。評価関数の極小値のうちの最小値になる状態が最適解となる。なお、イジング装置は、評価関数の符号を変えれば、評価関数の値が極大になる状態を探索することもできる。イジングモデルの状態は、複数の状態変数の値の組合せにより表現できる。各状態変数の値として、0または1を用いることができる。
【0007】
イジング型の評価関数は、たとえば、以下の式(2)で定義される。
【0008】
【0009】
右辺の1項目は、イジングモデルの全状態変数の全組合せについて、漏れと重複なく、2つの状態変数の値(0または1)と重み値(2つの状態変数の間の相互作用の強さを表す)との積を積算したものである。xiは、識別番号がiの状態変数、xjは、識別番号がjの状態変数であり、Wijは、識別番号がiとjの状態変数間の相互作用の大きさを示す重み値である。右辺の2項目は、各識別番号についてのバイアス係数と状態変数との積の総和を求めたものである。biは、識別番号=iについてのバイアス係数を示している。cは定数である。
【0010】
また、xiの値の変化に伴うエネルギーの変化量(ΔEi)は、以下の式(3)で表される。
【0011】
【0012】
式(3)において、xiが1から0に変化するとき、Δxiは-1となり、状態変数xiが0から1に変化するとき、Δxiは1となる。なお、hiは局所場と呼ばれ、Δxiに応じてhiに符号(+1または-1)を乗じたものがΔEiとなる。
【0013】
そして、たとえば、ΔEiが、乱数と温度パラメータの値に基づいて得られるノイズ値(熱ノイズとも呼ばれる)より小さい場合には、xiの値を更新することで状態遷移を発生させ、局所場も更新する、という処理を繰り返す。
【0014】
前述の2次割り当て問題もイジング型の評価関数を用いて計算できる。
2次割り当て問題のイジング型の評価関数は、以下の式で表せる。
【0015】
【0016】
式(4)において、xは状態変数をベクトル化したものであり、n個の要素のn個の割当先への割当状態を表す。xTは、(x1,1,…,x1,n,x2,1,…,x2,n,……,xn,1,…,xn,n)と表せる。xi,j=1は、識別番号=iの要素が、識別番号=jの割当先に割り当てられていることを示し、xi,j=0は、識別番号=iの要素が、識別番号=jの割当先に割り当てられていないことを示す。
【0017】
Wは、重み値の行列であり、前述のコスト(fi,j)と、n個の割当先間の距離の行列Dを用いて、以下の式(5)で表せる。
【0018】
【先行技術文献】
【特許文献】
【0019】
【特許文献1】特開2019-185602号公報
【特許文献2】特開2020-194442号公報
【発明の概要】
【発明が解決しようとする課題】
【0020】
イジング型の評価関数を用いて2次割り当て問題を計算する手法では、エネルギーの変化量の計算や、局所場の更新などの処理が多数回繰り返される。そのため、これらの処理に用いられる重み値や局所場などの情報を記憶する記憶部は高速にアクセスできることが望ましい。しかし、そのような記憶部は容量が比較的小さいものである場合が多く、問題の規模が大きくなると、計算に用いる情報を記憶することができず、大規模な問題を計算できない可能性がある。
【0021】
1つの側面では、本発明は、比較的小容量の記憶部を用いた場合でも大規模な問題を計算できるプログラム、データ処理方法及びデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【0022】
1つの実施態様では、n(nは2以上の整数)個の要素と、前記n個の要素が割り当てられるn個の割当先との組合せの探索をコンピュータに実行させるプログラムであって、前記n個の要素のうち、第1要素と第2要素を指定する処理と、前記n個の要素の間のコストと、前記n個の割当先の間の距離と、前記n個の要素の前記n個の割当先への割当状態と、を記憶する記憶部から、前記第1要素と前記第2要素のそれぞれについてのn個のコストと、前記第1要素の第1割当先と前記第2要素の第2割当先のそれぞれについてのn個の距離とを読み出す処理と、前記割当状態に応じたエネルギーを表すイジング型の評価関数に含まれ、前記割当状態を表すnの2乗個の状態変数のうち、前記第1要素と前記第2要素の割当先の入れ替えにより値が変化する4つの状態変数のそれぞれの値が変化することによる前記評価関数の値の第1変化量を示す4つの局所場を、前記n個のコストのそれぞれと前記n個の距離の何れかとの積の総和により計算する処理と、前記4つの局所場と、前記n個のコストのうち前記第1要素と前記第2要素の間の第1コストと、前記n個の距離のうち前記第1割当先と前記第2割当先の間の第1距離と、に基づいて、前記入れ替えが生じた場合の前記評価関数の値の第2変化量を計算する処理と、前記第2変化量と、所定値との比較結果に基づいて、前記入れ替えを実行するか否かを決定する処理と、を含む繰り返し処理を、前記第1要素または前記第2要素とする要素対を変えて繰り返すことで、前記評価関数の値が極小または極大になる前記割当状態を探索する、処理をコンピュータに実行させるプログラムが提供される。
【0023】
また、1つの実施態様では、データ処理方法が提供される。
また、1つの実施態様では、データ処理装置が提供される。
【発明の効果】
【0024】
1つの側面では、本発明は、比較的小容量の記憶部を用いた場合でも大規模な問題を計算できる。
【図面の簡単な説明】
【0025】
【
図1】第1の実施の形態のデータ処理装置及びデータ処理方法の一例を示す図である。
【
図3】重み値とコストと距離の行列の例を示す図である。
【
図4】3つの施設を3箇所の位置に配置する問題の例を示す図である。
【
図5】第2の実施の形態のデータ処理装置のハードウェア例を示すブロック図である。
【
図6】データ処理装置の機能例を示すブロック図である。
【
図7】第2の実施の形態のデータ処理方法の一例の流れを示すフローチャートである。
【
図8】第3の実施の形態のデータ処理装置の一例を示す図である。
【発明を実施するための形態】
【0026】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
2次割り当て問題は、全ての要素をそれぞれ異なる割当先に割り当てる、という制約をもつ。この制約は、n個の要素のn個の割当先への割当状態に応じたエネルギーを表すイジング型の評価関数に含まれ、割当状態を表すn2個の状態変数を、n行n列の行列状に並べたときに、各行と各列に含まれる状態変数の値の和が1となる制約と考えることができる。
【0027】
このような制約をもつ2次割り当て問題を計算する際に、式(3)のΔEiに基づいて1つずつ状態変数を更新させる方法では、上記の制約を満たさない状態への遷移も発生してしまい、計算時間が長くなってしまう。
【0028】
計算時間を短縮するため、上記の制約を満たす割当状態以外の割当状態への遷移が除外されるようにすればよい。その場合、一度の状態遷移において、4つの状態変数の値を変化させることになる。n2個の状態変数をn行n列に配列したときに各行と各列に含まれる状態変数の値の和が1である制約を満たすように、一度の状態遷移において、4つの状態変数の値を変化させることで、上記制約を満たす割当状態以外への遷移を除外できる。
【0029】
値が0の状態変数であるxbを更新対象候補とした場合、xbと同じ行及び同じ列に含まれる状態変数のうち、値が1の状態変数であるxa,xdが更新対象候補となる。さらに、xaと同じ列、かつ、xdと同じ行である、値が0のxcが更新対象候補となる。
【0030】
これら4つの状態変数の値を変化させた場合に生じるイジングモデルのエネルギー変化量をΔEbとすると、ΔEbは、以下の式(6)のように表せる。haは、xaが変化することによるエネルギーの変化量を表し、hbは、xbが変化することによるエネルギーの変化量を表し、hcは、xcが変化することによるエネルギーの変化量を表し、hdは、xdが変化することによるエネルギーの変化量を表す。
【0031】
【0032】
また、xa,xb,xc,xdが変化することによる局所場の変化量(Δhm(m=1,2,…,n2))は、以下の式(7)のように表せる。
【0033】
【0034】
式(6)、式(7)に示すように、エネルギーの変化量の計算や、局所場の更新には、重み値が用いられる。重み値は、式(5)のように表せることから、n2×n2個の重み値そのものを記憶部に記憶する代わりに、n個の要素の間のコストと、n個の割当先の間の距離を記憶すればよい。識別番号=iの要素と識別番号=jの要素の割当先の入れ替えが生じた場合のエネルギーの変化量は、式(6)を変形した以下の式(8)で表される。
【0035】
【0036】
式(8)において、φ(i)は、識別番号=iの要素の割当先の識別番号、φ(j)は、識別番号=jの要素の割当先の識別番号である。
また、n行n列の局所場(行列H)の変化量(ΔH)は、以下の式(9)で表せる。
【0037】
【0038】
式(9)において、f,jは、n行n列のコスト(行列F)のj列目のすべてのコストを表し、f,iは、行列Fのi列目のすべてのコストを表す。dφ(i),は、n行n列の距離(行列D)のφ(i)行目のすべての距離を表し、dφ(j),は、行列Dのφ(j)行目のすべての距離を表す。
【0039】
式(8)、式(9)を用いてエネルギーの変化量の計算及び局所場の更新を行えば、n2×n2個の重み値そのものを記憶部に記憶しなくて済むが、問題の規模が大きくなると、行列H、行列F及び行列Dのデータ量も大きくなる。そのため、SRAM(Static Random Access Memory)やフリップフロップなどによる記憶部など、高速にアクセス可能ではあるが比較的小容量の記憶部に、行列H、行列F及び行列Dをすべて記憶できない可能性がある。
【0040】
以下に示す第1の実施の形態のデータ処理装置及びデータ処理方法は、比較的小容量の記憶部を用いた場合でも大規模な問題を計算できるようにするものである。
(第1の実施の形態)
図1は、第1の実施の形態のデータ処理装置及びデータ処理方法の一例を示す図である。
【0041】
データ処理装置10は、たとえば、コンピュータであり、記憶部11、処理部12を有する。
記憶部11は、たとえば、DRAM(Dynamic Random Access Memory)などの電子回路である揮発性の記憶装置、または、HDD(Hard Disk Drive)やフラッシュメモリなどの電子回路である不揮発性の記憶装置である。
【0042】
記憶部11は、たとえば、後述の処理を行うためのプログラムを記憶するとともに、コスト情報、距離情報、配置情報を記憶する。
コスト情報は、n(nは2以上の整数)個の要素の間のコストを含み、n行n列の行列Fで示される。
図1にはコスト情報の一例が示されている。行列Fの行番号と列番号は、それぞれ、各要素を識別するための要素識別番号に対応する。たとえば、要素識別番号=1の要素と、要素識別番号=nの要素との間のコスト(1行n列のコスト)は、f
1,nと表記されている。
【0043】
距離情報は、n個の要素が割り当てられるn個の割当先の間の距離を含み、n行n列の行列Dで示される。なお、以下では、割当先を位置と呼ぶことにする。
図1には距離情報の一例が示されている。行列Dの行番号と列番号は、それぞれ、各位置を識別するための位置識別番号に対応する。たとえば、位置識別番号=1の位置と、位置識別番号=nの位置との間の距離(1行n列の距離)は、d
1,nと表記されている。
【0044】
コスト情報と距離情報は、たとえば、データ処理装置10の外部から入力され、記憶部11に記憶される。
配置情報は、n個の要素が割り当てられている(配置されている)位置を示し、n個の要素のn箇所の位置への割当状態を表す。配置情報は、n2個の状態変数によるn行n列の行列Xで示される。配置情報の初期値は、たとえば、データ処理装置10の外部から入力され、記憶部11に記憶される。なお、配置情報の初期値は、各行と各列に含まれる状態変数の値の和が1である制約を満たすように設定される。すなわち、n個の要素のそれぞれを、n箇所の位置の何れか1つに配置させるためである。
【0045】
図1には配置情報の一例が示されている。行列Xの行番号は要素識別番号に対応し、列番号は位置識別番号に対応する。なお、行番号を位置識別番号、列番号を要素識別番号として入れ替えることも可能である。その場合、以下の説明において、行列Xについての行と列は入れ替えて読むものとする。
【0046】
図1の例では、i行、φ(i)列の状態変数であるx
aの値が1である。これは、要素識別番号=iの要素が、位置識別番号=φ(i)の位置に配置されていることを示す。また、
図1の例では、j行、φ(j)列の状態変数であるx
dの値が1である。これは、要素識別番号=jの要素が、位置識別番号=φ(j)の位置に配置されていることを示す。
【0047】
なお、配置情報は、n個の要素が配置されている位置識別番号(
図1の例では列番号)を並べた行ベクトル(1次元配列)で表されていてもよい。
処理部12は、たとえば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのハードウェアであるプロセッサにより実現できる。また、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの電子回路により実現されるようにしてもよい。処理部12は、記憶部11に記憶されたプログラムを実行して、以下に示すような処理をデータ処理装置10に行わせる。なお、処理部12は、複数のプロセッサの集合であってもよい。
【0048】
処理部12は、2つの要素が配置される位置を入れ替える処理を繰り返し、たとえば、式(2)に示した評価関数の値(エネルギー)が極小になる割当状態を探索する。評価関数の極小値のうちの最小値になる割当状態が最適解となる。なお、式(2)に示した評価関数の符号を変えれば、処理部12は、評価関数の値が極大になる割当状態を探索することもできる(この場合、最大値が最適解となる)。
【0049】
図1には、処理部12がプログラムを実行したときの一部の処理(データ処理方法)の流れの例が示されている。
ステップS1:処理部12は、n個の要素のうち、配置される位置の入れ替えを行うか否かを判定する対象である2つの要素(
図1の例では、要素識別番号=i,jの要素)を指定する。
【0050】
ステップS2:処理部12は、指定した2つの要素のそれぞれについてのn個のコストと、2つの要素が配置される2つの位置のそれぞれについてのn個の距離とを記憶部11から読み出す。処理部12は、配置情報を参照して、2つの要素が配置されている位置を検出する。
【0051】
たとえば、
図1の例では、要素識別番号=iの要素は、位置識別番号=φ(i)の位置に配置されており、要素識別番号=jの要素は、位置識別番号φ(j)の位置に配置されている。この場合、要素番号=iの要素については、コスト情報の行列Fのうち、
図1に示すように、要素識別番号=iに対応する行(列でもよい)に属するn個のコストが読み出される。位置識別番号=φ(i)の位置については、距離情報の行列Dのうち、
図1に示すように、位置識別番号=φ(i)に対応する行(列でもよい)に属するn個の距離が読み出される。
【0052】
図示が省略されているが、要素番号=jの要素については、行列Fのうち、要素識別番号=jに対応する行(列でもよい)に属するn個のコストが読み出される。また、位置識別番号=φ(j)の位置については、行列Dのうち、位置識別番号=φ(i)に対応する行(列でもよい)に属するn個の距離が読み出される。
【0053】
上記のように読み出されるコストや距離が属する行(または列)は、2つの要素の入れ替えにより値が変化する状態変数の識別番号を用いて表すこともできる。
たとえば、
図1に示すように、要素識別番号=i,jの要素が配置される位置の入れ替えが行われる場合、x
a、x
b、x
c、x
dの4つの状態変数の値が変化する。x
aはi行、φ(i)列の状態変数であり、x
bはi行、φ(j)列の状態変数であり、x
cはj行、φ(i)列の状態変数であり、x
dはj行、φ(j)列の状態変数である。
【0054】
xa、xb、xc、xdのうちの1つであるxk(k=1,2,…,n2)について読み出されるn個のコスト(fA,)が属する行列Fの行番号Aは、A=(k-1)/n+1(小数点以下は切り捨て)と表すことができる。行番号Aは、行列Xにおいてxkが属する行を表す要素識別番号に対応する。
【0055】
また、xkについて読み出されるn個の距離(dB,)が属する行列Dの行番号Bは、B=(k-1)%n+1と表すことができる。なお、(k-1)%nは、k-1をnで割ったときの余りである。行番号Bは、行列Xにおいてxkが属する列を表す位置識別番号に対応する。
【0056】
ステップS3:処理部12は、式(8)の4つの局所場であるh
a、h
b、h
c、h
dを計算する。h
aは、
図1のx
aの値が変化することによるエネルギーの変化量を示し、h
bは、
図1のx
bの値が変化することによるエネルギーの変化量を示す。また、h
cは、
図1のx
cの値が変化することによるエネルギーの変化量を示し、h
dは、
図1のx
dの値が変化することによるエネルギーの変化量を示す。各局所場は、式(3)の代わりに、読み出したn個のコストと、n個の距離を用いて以下の式(10)により計算できる。
【0057】
【0058】
式(10)において、φ(j)は、行列Xの各行で値が1である状態変数が位置する列番号の配列である。このような式(10)で局所場を計算できる理由を以下に説明する。
図2は、局所場の計算例を示す図である。
【0059】
2次割り当て問題では、式(3)のbiは0である。したがって、xkについての局所場であるhkは、以下の式(11)で表せる。
【0060】
【0061】
つまり、x
kについての局所場h
kは、重み値の行列Wのk行目と、nの2乗個の状態変数による状態ベクトルの積で表せる。状態ベクトルは、
図1に示した配置情報を表す行列Xの各行を1次元に配列したものである。前述のように2次割り当て問題の制約により、行列Xの各行と各列に含まれる状態変数の値の和が1であるため、状態ベクトルにおいても、n個の状態変数ごとに、値が1である状態変数は1つである。
【0062】
図3は、重み値とコストと距離の行列の例を示す図である。
図3には、n=3の場合の重み値の行列Wとコストの行列Fと距離の行列Dが示されている。
h
kを計算するために用いられる重み値は、行列Wのk行目である。そのため、k=4の場合、
図3に示すような4行目の重み値、すなわちW
4=(f
2,1d
1,1 f
2,1d
1,2 f
2,1d
1,3 f
2,2d
1,1 f
2,2d
1,2 f
2,2d
1,3 f
2,3d
1,1 f
2,3d
1,2 f
2,3d
1,3)が用いられる。つまり、W
4は、行列Fの2行目のコストと、行列Dの1行目の距離とから計算できる。したがって、行列Fの行列Dのそれぞれにおいて、1行分のコストまたは距離が、計算に用いられることになる。
【0063】
h4は、状態ベクトルに応じて、たとえば、以下のように表せる。
1つ目の例として、状態ベクトルがxT=(1 0 0 0 1 0 0 0 1)であるとする。この場合、h4は、h4=1・f2,1d1,1+0・f2,1d1,2+0・f2,1d1,3+0・f2,2d1,1+1・f2,2d1,2+0・f2,2d1,3+0・f2,3d1,1+0・f2,3d1,2+1・f2,3d1,3=f2,1d1,1+f2,2d1,2+f2,3d1,3と計算できる。
【0064】
2つ目の例として、状態ベクトルがxT=(0 1 0 0 0 1 1 0 0)であるとする。この場合、h4は、h4=0・f2,1d1,1+1・f2,1d1,2+0・f2,1d1,3+0・f2,2d1,1+0・f2,2d1,2+1・f2,2d1,3+1・f2,3d1,1+0・f2,3d1,2+0・f2,3d1,3=f2,1d1,2+f2,2d1,3+f2,3d1,1と計算できる。
【0065】
ここで、前述のφ(j)は、1つ目の例ではφ(j)=[1,2,3]、2つ目の例のではφ(j)=[2,3,1]であり、j列目のコストに対する乗数である距離の列番号の配列に一致する。すなわち、1つ目の例では、1列目のコストであるf2,1に対する乗数は、1列目のd1,1であり、2列目のコストであるf2,2に対する乗数は、2列目のd1,2であり、3列目のコストであるf2,3に対する乗数は、3列目のd1,3である。2つ目の例では、1列目のコストであるf2,1に対する乗数は、2列目のd1,2であり、2列目のコストであるf2,2に対する乗数は、3列目のd1,3であり、3列目のコストであるf2,3に対する乗数は、1列目のd1,1である。
【0066】
上記のように、φ(j)を用いることで、j列目のコストに対する乗数である距離を選択できる。以上のことから、hkは式(10)により計算できる。
なお、ステップS2,S3の処理では、処理部12は式(10)の、あるjについてfA,jとdB,φ(j)を記憶部11から読み出し、fA,jdB,φ(j)を計算した後、次のjについてfA,jとdB,φ(j)を記憶部11から読み出す、という処理を繰り返してもよい。その場合、処理部12は、n回の繰り返し処理により得られたn個のfA,jdB,φ(j)の総和によりhkを計算する。
【0067】
ステップS4:処理部12は、式(8)により、要素識別番号=i,jの2つの要素dが配置される位置の入れ替えが生じた場合のΔEを計算する。式(8)のha、hb、hc、hdについては、ステップS3の処理で計算された値が用いられる。式(8)のfi,jとdφ(i),φ(j)については、ステップS2の処理で読み出されたn個のコストまたはn個の距離に含まれている。
【0068】
ステップS5:処理部12は、ΔEと、所定値との比較結果に基づいて、要素識別番号=i,jの2つの要素が配置される位置の入れ替えを行うか否かを判定する。所定値は、たとえば、乱数と温度パラメータの値とに基づいて得られるノイズ値である。
【0069】
処理部12は、たとえば、ΔEが、0以上1以下の一様乱数(rand)と温度パラメータ(T)とに基づいて得られるノイズ値の例である、log(rand)×Tよりも小さい場合、入れ替えを行うと判定する。
【0070】
ステップS6:処理部12は、ステップS5の処理で、入れ替えを行うと判定した場合、配置情報を更新することで入れ替えを実行する。
ステップS6の処理後、またはステップS5の処理において入れ替えを行わないと判定した場合、処理部12は、ステップS1の処理に戻り、要素識別番号=i,jを更新し(入れ替え判定を行う要素対を変更し)、ステップS2からの処理を繰り返す。
【0071】
要素識別番号=i,jはランダムに指定されてもよいし、所定のルールにしたがって指定されてもよい。
処理部12は、疑似焼き鈍し法を行う場合、所定の温度パラメータ変更スケジュールにしたがって、前述の温度パラメータ(T)の値を小さくしていく。そして、処理部12は、ステップS1~S6の処理が所定の回数繰り返された場合に得られた配置情報を、2次割り当て問題の計算結果として出力する(たとえば、図示しない表示装置に表示する)。なお、処理部12は、要素が配置される位置が更新されるたびに、式(4)で表される評価関数の値(エネルギー)を更新し、これまでの最小エネルギーとなった場合のエネルギーと配置情報とを保持しておいてもよい。その場合、処理部12は、ステップS1~S6の処理が所定の回数繰り返された後に記憶されている最小エネルギーに対応する配置情報を、計算結果として出力してもよい。
【0072】
処理部12がレプリカ交換法を行う場合、処理部12は、それぞれ異なる温度パラメータの値が設定された複数のレプリカのそれぞれにおいて、
図1に示したステップS1~S6の処理を行う。そして、処理部12は、ステップS1~S6の処理が所定回数繰り返されるごとに、レプリカ交換を行う。たとえば、処理部12は、複数のレプリカのうち2つをランダムに選択して、選択された2つのレプリカの間で、レプリカ間のエネルギー差や温度パラメータの値の差に基づいた所定の交換確率で、温度パラメータの値または配置情報を交換する。処理部12は、たとえば、各レプリカにおいて要素が配置される位置が更新されるたびに、式(4)で表される評価関数の値(エネルギー)を更新し、これまでの最小エネルギーとなった場合のエネルギーと配置情報とを保持する。処理部12は、そして、各レプリカにおいてステップS1~S6の処理が所定の回数繰り返された後に記憶されている最小エネルギーのうち、全レプリカにおいて最小のエネルギーに対応する配置情報を、計算結果として出力する。
【0073】
以上のようなデータ処理装置10及びデータ処理方法によれば、ΔEの計算に用いる局所場は記憶部11に保持されず、配置される位置の入れ替え判定が行われる2つの要素とそれらが配置されている位置に関するコストと距離とから計算される。このため、記憶部11に局所場(重み値も)を保持しなくて済み、記憶部11が小容量メモリでも大規模問題を計算できる。つまり、記憶部11の記憶容量を削減できる。レプリカ交換法が行われる場合には、レプリカごとに異なる局所場が用いられるが、上記のデータ処理装置10及びデータ処理方法によれば、記憶部11に局所場自体を保持しなくてよい。そのため、レプリカ交換法を用いた場合、疑似焼き鈍し法を用いた場合よりも、記憶部11に記憶するデータ量の削減効果がより高い。
【0074】
また、局所場を保持する場合、配置情報が更新されるたびに、式(9)にしたがって、nの2乗個の局所場の更新が行われるが、上記のデータ処理装置10及びデータ処理方法によれば、局所場の更新が不要になる。このため、局所場を保持する場合に比べて、演算量を削減できる。
【0075】
(第2の実施の形態)
以下に示す第2の実施の形態では、n個の要素をn個の割当先に割り当てる2次割り当て問題として、n個の施設をn箇所の位置に配置する問題を例にして説明する。以下では、前述のコストをフロー量という。フロー量は、たとえば、施設間での物資の輸送量などを表す。
【0076】
図4は、3つの施設を3箇所の位置に配置する問題の例を示す図である。
この例の場合、行列Fは3行3列のフロー量からなり、行列Dは3行3列の距離からなる。なお、
図4の例では、f
i,j=f
j,i(i,jは施設識別番号)であり、f
j,iについてもf
i,jと表記されている。また、
図4の例では、d
i,j=d
j,i(i,jは位置識別番号)であり、d
j,iについてもd
i,jと表記されている。
【0077】
図4の例では、位置識別番号=1の位置に施設識別番号=3の施設が配置され、位置識別番号=2の位置に施設識別番号=1の施設が配置され、位置識別番号=3の位置に施設識別番号=2の施設が配置されている。この場合、行番号が施設識別番号、列番号が位置識別番号を表す配置情報(行列X)では、1行2列と、2行3列と、3行1列の状態変数の値が1となり、その他の状態変数の値は0となる。この場合、前述のφ(j)は、φ(j)=[2,3,1]と表せる。
【0078】
このような問題では、2つの施設が配置される位置を入れ替えた場合のエネルギーの変化量(前述の式(8)で表せる)に基づいて、最もエネルギーが小さくなる配置が探索されるが、施設の数や位置の数が多くなるほど、保持すべきデータ量が増大する。
【0079】
図5は、第2の実施の形態のデータ処理装置のハードウェア例を示すブロック図である。
データ処理装置20は、たとえば、コンピュータであり、CPU21、RAM(Random Access Memory)22、HDD23、GPU24、入力インタフェース25、媒体リーダ26及び通信インタフェース27を有する。上記ユニットは、バスに接続されている。
【0080】
CPU21は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU21は、HDD23に記憶されたプログラムやデータの少なくとも一部をRAM22にロードし、プログラムを実行する。なお、CPU21は複数のプロセッサコアを備えてもよく、データ処理装置20は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と呼んでもよい。
【0081】
RAM22は、CPU21が実行するプログラムやCPU21が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、データ処理装置20は、RAM22以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0082】
HDD23は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、及び、データを記憶する不揮発性の記憶装置である。プログラムには、たとえば、2次割り当て問題の解を探索する処理をデータ処理装置20に実行させるプログラムが含まれる。なお、データ処理装置20は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0083】
GPU24は、CPU21からの命令にしたがって、データ処理装置20に接続されたディスプレイ24aに画像を出力する。ディスプレイ24aとしては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
【0084】
入力インタフェース25は、データ処理装置20に接続された入力デバイス25aから入力信号を取得し、CPU21に出力する。入力デバイス25aとしては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、データ処理装置20に、複数の種類の入力デバイスが接続されていてもよい。
【0085】
媒体リーダ26は、記録媒体26aに記録されたプログラムやデータを読み取る読み取り装置である。記録媒体26aとして、たとえば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0086】
媒体リーダ26は、たとえば、記録媒体26aから読み取ったプログラムやデータを、DRAM22やHDD23などの他の記録媒体にコピーする。読み取られたプログラムは、たとえば、CPU21によって実行される。なお、記録媒体26aは、可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体26aやHDD23を、コンピュータ読み取り可能な記録媒体ということがある。
【0087】
通信インタフェース27は、ネットワーク27aに接続され、ネットワーク27aを介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース27は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【0088】
図6は、データ処理装置の機能例を示すブロック図である。
データ処理装置20は、入力部30、制御部31、記憶部32、探索部33、出力部34を有する。
【0089】
入力部30、制御部31、探索部33、出力部34は、たとえば、CPU21が実行するプログラムモジュールを用いて実装できる。記憶部32は、たとえば、RAM22またはHDD23に確保した記憶領域を用いて実装できる。
【0090】
入力部30は、たとえば、2次割り当て問題の問題情報(各施設間のフロー量や各位置間の距離など)や、計算条件(たとえば、レプリカ交換法が行われる場合のレプリカ数や各レプリカに設定する温度パラメータの値など)の入力を受け付ける。これらの情報は、ユーザによる入力デバイス25aの操作により入力されてもよいし、記録媒体26aまたはネットワーク27aを介して入力されてもよい。
【0091】
制御部31は、データ処理装置20の各部を制御して、後述の処理を実行させる。
記憶部32は、問題情報や計算条件、各状態変数の値、エネルギーの計算結果など各種の情報を記憶する。
【0092】
探索部33は、2つの要素が配置される位置を入れ替える処理を繰り返し、たとえば、式(2)に示した評価関数の値(エネルギー)が極小になる配置情報を探索する。
出力部34は、たとえば、探索部33による探索によって得られた配置情報を計算結果として出力する。出力部34は、たとえば、計算結果を、ディスプレイ24aに出力して表示させてもよいし、ネットワーク27aを介して、他の情報処理装置に送信してもよいし、外部の記憶装置に記憶してもよい。
【0093】
次に、データ処理装置20の処理の手順を説明する。なお、以下の例では、レプリカ交換法を適用した場合のデータ処理方法について説明する。
図7は、第2の実施の形態のデータ処理方法の一例の流れを示すフローチャートである。
【0094】
ステップS10:まず、入力部30は、2次割り当て問題の問題情報などの入力を受け付ける。問題情報は、たとえば、ユーザによる入力デバイス25aの操作により入力されてもよいし、記録媒体26aまたはネットワーク27aを介して入力されてもよい。入力された問題情報は記憶部32に記憶される。
【0095】
ステップS11:制御部31は、初期化を行う。たとえば、制御部31は、n行n列の各行と各列に含まれる状態変数の値の和が1である制約を満たすように、状態変数の初期値を設定する。また、制御部31は、状態変数の初期値と、問題情報に基づいて、式(4)、式(5)からエネルギーの初期値を計算する。また、制御部31は、各レプリカに温度パラメータの初期値を設定する。温度パラメータの値は、レプリカごとに異なる値が設定される。
【0096】
また、制御部31は、配置位置を入れ替えるか否かの判定(以下フリップ判定という)を行う2つの施設を指定するための探索位置(rA,rB)を初期化する。たとえば、制御部31は、rA=0、rB=1とする。rA,rBは、施設識別番号(
図4の例では行列Xの行番号)を指定するものであり、たとえば、rA=0は、施設識別番号=1(行番号=1)を示し、rB=1は、施設識別番号=2(行番号=2)を示す。
【0097】
ステップS12:制御部31は、複数のレプリカのうちの1つを選択する。
ステップS13:探索部33は、rA、rBで指定される施設識別番号の施設の配置位置の入れ替えが生じた場合の4つの局所場であるha、hb、hc、hdを、式(10)に基づいて計算する。
【0098】
探索部33は、たとえば、以下のような処理によりha、hb、hc、hdを計算する。以下では、行列Xのi+1行目(i=0,1,…,n-1)において状態変数の値が1になっている列の列番号をstate[i]とする。また、F[y][x]を、行列Fのy+1行目、x+1列目のフロー量、D[y][x]を、行列Dのy+1行目、x+1列目の距離であるとする。なお、x,y=0,1,…,n-1である。ha、hb、hc、hdのそれぞれについて、計算に用いられるn個のフロー量やn個の距離は、記憶部32から読み出される。
【0099】
まず、探索部33は、ha=hb=hc=hd=0、i=0とする。
そして、探索部33は、一時変数fA、fB、dA、dBを用いて、fA=F[rA][i]、fB=f[rB][i]、dA=D[state[i]][state[rA]]、dB=D[state[i]][state[rB]]とする。
【0100】
その後、探索部33は、haにfA×dBを加え、hbにfA×dAを加え、hcにfB×dBを加え、hdにfB×dAを加える。そして、探索部33は、iに1を加えて、iがn-1に達するまで、上記の処理を繰り返す。
【0101】
ステップS14:探索部33は、rA、rBで指定される施設識別番号の施設の配置位置の入れ替えが生じた場合の評価関数の値の変化量(エネルギーの変化量(ΔE))を、式(8)に基づいて、計算する。式(8)のha、hb、hc、hdについては、ステップS13の処理で計算された値が用いられる。式(8)のfi,jについては、F[rA][rB]が用いられ、式(8)のdφ(i),φ(j)については、D[state[rA]][state[rB]]が用いられる。
【0102】
ステップS15:探索部33は、ΔEと、乱数と選択されたレプリカに設定された温度パラメータの値とに基づいて得られるノイズ値との比較結果に基づいて、rA、rBで指定される施設識別番号の施設の配置位置の入れ替えを行うか否かのフリップ判定を行う。
【0103】
探索部33は、たとえば、ΔEが、0以上1以下の一様乱数(rand)と温度パラメータ(T)とに基づいて得られるノイズ値の例である、log(rand)×Tよりも小さい場合、入れ替えを行うと判定する。探索部33は、入れ替えを行うと判定した場合、ステップS16の処理を行い、入れ替えを行わないと判定した場合、ステップS17の処理が行われる。
【0104】
ステップS16:探索部33は、state[rA]とstate[rB]の値を入れ替えることで配置情報を更新する。また、探索部33は、エネルギー(E)を、ΔEを加えることで更新する。
【0105】
ステップS17:制御部31は、全レプリカを選択したか否かを判定する。制御部31は、全レプリカを選択していないと判定した場合、ステップS12の処理に戻り、未選択のレプリカについて、ステップS13~S16の処理を探索部33に行わせる。制御部31は、全レプリカを選択したと判定した場合、ステップS18の処理を行う。
【0106】
ステップS18:制御部31は、探索位置の更新を行う。たとえば、制御部31は、rB=n-1、rA=n-2の場合、rA=0、rB=1に初期化する。制御部31は、rB=n-1であるが、rA=n-2ではない場合、rAを+1し、rB=rA+1とする。また、制御部31は、rB=n-1ではない場合、rBを+1する。
【0107】
ステップS19:制御部31は、フリップ判定回数がレプリカ交換周期であるか否かを判定する。たとえば制御部31は、フリップ判定回数を、レプリカ交換周期を示す値で割ったときの余りが0である場合、フリップ判定回数がレプリカ交換周期であると判定する。
【0108】
制御部31は、フリップ判定回数がレプリカ交換周期であると判定した場合、ステップS20の処理を行い、フリップ判定回数がレプリカ交換周期ではないと判定した場合、ステップS21の処理を行う。
【0109】
ステップS20:制御部31は、レプリカ交換処理を行う。たとえば、制御部31は、複数のレプリカのうち2つをランダムに選択して、選択された2つのレプリカの間で、レプリカ間のエネルギー差や温度パラメータの値の差に基づいた所定の交換確率で、設定される温度パラメータの値を交換する。
【0110】
なお、レプリカ交換処理は、2つのレプリカの間で、温度パラメータの値を交換する代わりに、配置情報を交換してもよい。
ステップS21:制御部31は、フリップ判定回数が所定の終了回数に達したか否かを判定する。制御部31は、フリップ判定回数が所定の終了回数に達したと判定した場合、ステップS22の処理を行い、フリップ判定回数が所定の終了回数に達してないと判定した場合、ステップS12からの処理を繰り返す。
【0111】
ステップS22:出力部34は、計算結果を出力する。出力部34は、たとえば、各レプリカについて記憶されている最小エネルギーのうち、全レプリカにおいて最小のエネルギーに対応する配置情報を計算結果として出力する。出力部34は、たとえば、計算結果を、ディスプレイ24aに出力して表示させてもよいし、ネットワーク27aを介して、他の情報処理装置に送信してもよいし、外部の記憶装置に記憶してもよい。
【0112】
以上のようなデータ処理装置20及びデータ処理方法によれば、ΔEの計算に用いる局所場は記憶部32に保持されず、フリップ判定が行われる2つの施設とそれらの配置位置に関するフロー量と距離とから計算される。このため、記憶部32に局所場(重み値も)を保持しなくて済み、記憶部32が小容量メモリでも大規模問題を計算できる。
【0113】
たとえば、n=1024で、局所場、フロー量、距離のそれぞれが4バイトのデータ量であるとすると、重み値の行列Wのデータ量は、1024×1024×1024×1024×4=4TBである。一方、フロー量の行列Fと、距離の行列Dのデータ量は、合わせて8MBである。このため、重み値の行列Wをそのまま記憶する場合よりも、記憶するデータ量を99.9%削減できる。
【0114】
また、行列Wを記憶せずに、n行n列の局所場の行列Hと行列Fと行列Dを記憶する場合、そのデータ量はレプリカ数が多くなるほど増大する。
たとえば、n=1024、レプリカ数=32で、局所場、フロー量、距離のそれぞれが4バイトのデータ量であるとすると、記憶するデータ量は、行列Hのデータ量+行列Fのデータ量+行列Dのデータ量=34×4MB=136MBである。一方、上記のように、フロー量の行列Fと、距離の行列Dのデータ量は、合わせて8MBである。このため、行列Hを記憶する場合よりも、データ量を94.1%削減できる。
【0115】
また、第2の実施の形態のデータ処理装置20及びデータ処理方法によれば、局所場の行列Hを用いる場合よりも、演算量を削減できる。たとえば、局所場の行列Hを用いる場合、1回のフリップ判定及び配置情報の更新に伴う行列Hの更新のための乗算の回数は、式(8)と式(9)から、n=1024の場合、1024×1024+1=1048577回となる。これに対して、第2の実施の形態のデータ処理装置20及びデータ処理方法では、行列Hの更新は行われないため、1回のフリップ判定のための乗算の回数は、式(8)と式(10)から、n=1024の場合、1024×4+1=4097回となる。つまり、局所場の行列Hを用いる場合よりも、乗算の回数を99.6%削減できる。
【0116】
なお、前述のように、上記の処理内容は、データ処理装置20にプログラムを実行させることで実現できる。
プログラムは、コンピュータ読み取り可能な記録媒体(たとえば、記録媒体26a)に記録しておくことができる。記録媒体として、たとえば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FD及びHDDが含まれる。光ディスクには、CD、CD-R(Recordable)/RW(Rewritable)、DVD及びDVD-R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体から他の記録媒体(たとえば、HDD23)にプログラムをコピーして実行してもよい。
【0117】
(第3の実施の形態)
図8は、第3の実施の形態のデータ処理装置の一例を示す図である。
図8において、
図5に示した要素と同じ要素については同一符号が付されている。
【0118】
第3の実施の形態のデータ処理装置40は、バスに接続されたアクセラレータカード41を有する。
アクセラレータカード41は、2次割り当て問題の解を探索するハードウェアアクセラレータである。アクセラレータカード41は、FPGA41a及びDRAM41bを有する。
【0119】
第3の実施の形態のデータ処理装置40では、FPGA41aが、たとえば、
図6に示した制御部31や探索部33の処理を行う。
また、DRAM41bが
図6に示した記憶部32として機能する。
【0120】
なお、アクセラレータカード41は、複数あってもよい。その場合、たとえば、各レプリカについての処理(たとえば、
図7のステップS13~S16の処理)を並列に行うことができる。
【0121】
上記のような第3の実施の形態のデータ処理装置40においても、第2の実施の形態のデータ処理装置20と同様の効果が得られる。
以上、実施の形態に基づき、本発明のプログラム、データ処理方法及びデータ処理装置の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【0122】
10 データ処理装置
11 記憶部
12 処理部