JP7004937B2 - 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム - Google Patents

最適化装置、最適化装置の制御方法および最適化装置の制御プログラム Download PDF

Info

Publication number
JP7004937B2
JP7004937B2 JP2020546656A JP2020546656A JP7004937B2 JP 7004937 B2 JP7004937 B2 JP 7004937B2 JP 2020546656 A JP2020546656 A JP 2020546656A JP 2020546656 A JP2020546656 A JP 2020546656A JP 7004937 B2 JP7004937 B2 JP 7004937B2
Authority
JP
Japan
Prior art keywords
bit
unit
scale
bits
accuracy
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020546656A
Other languages
English (en)
Other versions
JPWO2020054061A1 (ja
Inventor
健 三品
義政 谷
聡 松浦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2020054061A1 publication Critical patent/JPWO2020054061A1/ja
Application granted granted Critical
Publication of JP7004937B2 publication Critical patent/JP7004937B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • G06F30/27Design optimisation, verification or simulation using machine learning, e.g. artificial intelligence, neural networks, support vector machines [SVM] or training a model
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/01Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/01Probabilistic graphical models, e.g. probabilistic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/08Computing arrangements based on specific mathematical models using chaos models or non-linear system models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2119/00Details relating to the type or aim of the analysis or the optimisation
    • G06F2119/06Power analysis or power optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/047Probabilistic or stochastic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Geometry (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Nonlinear Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Computational Linguistics (AREA)
  • Complex Calculations (AREA)

Description

本発明は最適化装置、最適化装置の制御方法および最適化装置の制御プログラムに関する。
ノイマン型コンピュータが不得意とする多変数の最適化問題を解く方法として、イジング型のエネルギー関数を用いた最適化装置(イジングマシンまたはボルツマンマシンと呼ばれる場合もある)がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
最適化装置は、例えば、ニューラルネットワークを用いてモデル化することもできる。その場合、イジングモデルに含まれる複数のスピンに対応した複数のビット(スピンビット)のそれぞれが、他のビットと自身のビットとの相互作用の大きさを示す重み係数(結合係数とも呼ばれる)とに応じて0または1を出力するニューロンとして機能する。最適化装置は、例えば、シミュレーテッド・アニーリングなどの確率的探索法により、上記のようなエネルギー関数(コスト関数、目的関数とも呼ばれる)の値(エネルギーと言う)の最小値が得られる各ビットの値の組合せを、解として求める。
例えば、スピンに対応する単位素子を複数搭載する半導体チップを用いてイジングモデルの基底状態を探索する半導体システムの提案がある。提案の半導体システムでは、大規模な問題に対応可能な半導体チップを実現するに際しては、ある程度の数の単位素子が搭載された半導体チップを複数使用して構築する。
国際公開第2017/037903号
最適化装置では、解くべき問題に応じて、利用されるスピンビット数(問題の規模に相当)や重み係数のビット数(問題における条件表現の精度に相当)が変わり得る。例えば、ある分野の問題では、スピンビット数が比較的多く用いられ、重み係数のビット数が比較的少なくてよいことがある。一方、他の分野の問題では、スピンビット数が比較的少なくてよいが、重み係数のビット数が比較的多く用いられることがある。しかし、各問題に適合したスピンビット数と重み係数のビット数とを備えた最適化装置を、問題毎に個別に製造するのは非効率である。
1つの側面では、本発明は、規模と精度とを可変にできる最適化装置、最適化装置の制御方法および最適化装置の制御プログラムを提供することを目的とする。
1つの態様では、最適化装置が提供される。最適化装置は、記憶部と複数のビット演算回路と選択回路部と設定変更部とを有する。記憶部は、イジングモデルの状態を表すビット列のうちのビット間の相互作用の大きさを示す係数を記憶する。複数のビット演算回路の各々は、ビット列のうちの何れかのビットが反転されると、記憶部から読み出した反転されたビットと自ビットとに対応する係数を用いたイジングモデルのエネルギー変化の計算に応じて、自ビットの反転可否を示す信号を出力する。選択回路部は、複数のビット演算回路のうちビット列の第1のビット数のビット演算回路の各々から出力された反転可否を示す信号に基づいて選択したビット列のうち反転させるビットを示す信号を、第1のビット数のビット演算回路の各々に出力する。設定変更部は、選択回路部に対する第1のビット数の変更、および、第1のビット数のビット演算回路の各々に対する係数の第2のビット数の変更を行う。
また、1つの態様では、最適化装置が提供される。最適化装置は、入力部と変換部と制御部と表示部とを有する。入力部は、解くべき問題と動作条件とを入力する。変換部は、入力した問題をイジングモデルの基底状態の探索問題に変換するとともに、探索問題の規模を示す規模情報と、探索問題の表現の精度を表す精度情報と、探索問題のエネルギーの初期値を表すエネルギー情報と、規模および精度に応じた規模精度モード情報とを生成する。制御部は、規模情報と、精度情報と、エネルギー情報を入力するとともに動作条件と規模精度モード情報とを入力し、基底状態の探索を行う演算を実行して解を出力する。表示部は、制御部による基底状態の探索の結果として得られた解を表示する。
また、1つの態様では、最適化装置の制御方法が提供される。
また、1つの態様では、最適化装置の制御プログラムが提供される。
1つの側面では、規模と精度とを可変にできる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
第1の実施の形態の最適化装置を示す図である。 第2の実施の形態の情報処理システムの例を示す図である。 情報処理装置のハードウェア例を示すブロック図である。 情報処理システムにおけるハードウェアの関係の例を示す図である。 制御部のハードウェア例を示すブロック図である。 組合せ最適化問題の例を示す図である。 最少エネルギーとなるバイナリ値の探索例を示す図である。 最適化装置の回路構成例を示す図である。 ランダムセレクタ部の回路構成例を示す図である。 規模と精度とのトレードオフ関係の例を示す図である。 重み係数の格納例(その1)を示す図である。 重み係数の格納例(その2)を示す図である。 重み係数の格納例(その3)を示す図である。 重み係数の格納例(その4)を示す図である。 初期化処理の例を示すフローチャートである。 演算処理の例を示すフローチャートである。 結合係数の格納例(その5)を示す図である。 第3の実施の形態の最適化装置の例を示す図である。 LFBの回路構成例を示す図である。 規模結合回路の回路構成例を示す図である。 問題毎の規模/精度の必要範囲の例を示す図である。 規模精度の選択可能範囲の例を示す図である。 LFEの使用パターンの例を示す図である。 最適化装置の利用フローの例を示す図である。
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の最適化装置を示す図である。
最適化装置1は、計算対象の問題を変換したイジングモデルに含まれる複数のスピンに対応する複数のビット(スピンビット)のそれぞれの値の組合せ(状態)のうち、エネルギー関数が最小値となるときの各ビットの値(基底状態)を探索する。
イジング型のエネルギー関数E(x)は、例えば、以下の式(1)で定義される。
Figure 0007004937000001
右辺第1項は、イジングモデルに含まれる全ビットから選択可能な2つのビットの全組合せについて、漏れと重複なく、2つのビットの値(0または1)と結合係数との積を積算したものである。イジングモデルに含まれる全ビット数をK個(Kは2以上の整数)とする。また、i,jの各々を、0以上K-1以下の整数とする。xは、i番目のビットの値を表す変数(状態変数とも呼ばれる)である。xは、j番目のビットの値を表す変数である。Wijは、i番目とj番目のビットの相互作用の大きさを示す重み係数である。なお、Wii=0である。また、Wij=Wjiであることが多い(すなわち、重み係数による係数行列は対称行列である場合が多い)。
右辺第2項は、全ビットのそれぞれのバイアス係数とビットの値との積の総和を求めたものである。bは、i番目のビットのバイアス係数を示している。
また、変数xの値が変化して1-xとなると、変数xの増加分は、Δx=(1-x)-x=1-2xと表せる。したがって、スピン反転(値の変化)に伴うエネルギー変化ΔEは、以下の式(2)で表される。
Figure 0007004937000002
はローカルフィールド(局所場)と呼ばれ、式(3)で表される。
Figure 0007004937000003
Δxに応じてローカルフィールドhに符号(+1または-1)を乗じたものがエネルギー変化ΔEとなる。ローカルフィールドhの変化分Δhは式(4)で表される。
Figure 0007004937000004
ある変数xが変化したときのローカルフィールドhを更新する処理は並列に行われる。
最適化装置1は、例えば、1チップの半導体集積回路であり、FPGA(Field Programmable Gate Array)などを用いて実現される。最適化装置1は、ビット演算回路1a1,…,1aK,…,1aN(複数のビット演算回路)、選択回路部2、閾値生成部3、乱数生成部4、設定変更部5および制御部6を有する。ここで、Nは、最適化装置1が備えるビット演算回路の総数である。Nは、K以上の整数である。ビット演算回路1a1,…,1aK,…,1aNの各々には、識別情報(index=0,…,K-1,…,N-1)が対応付けられている。
ビット演算回路1a1,…,1aK,…,1aNは、イジングモデルの状態を表すビット列に含まれる1ビットを提供する単位素子である。当該ビット列は、スピンビット列や状態ベクトルなどと呼ばれてもよい。ビット演算回路1a1,…,1aK,…,1aNの各々は、自ビットと他ビットの間の重み係数を記憶し、重み係数に基づいて他ビットの反転に応じた自ビットの反転可否を判定し、自ビットの反転可否を示す信号を選択回路部2に出力する。
選択回路部2は、スピンビット列のうち、反転させるビット(反転ビット)を選択する。具体的には、選択回路部2は、ビット演算回路1a1,…,1aK,…,1aNのうち、イジングモデルの基底状態の探索に用いられているビット演算回路1a1,…,1aKの各々から出力された反転可否の信号を受け付ける。選択回路部2は、ビット演算回路1a1,…,1aKのうち、反転可の信号を出力したビット演算回路に対応するビットを優先的に1つ選択し、反転ビットとする。例えば、選択回路部2は、乱数生成部4により出力される乱数ビットに基づいて当該反転ビットの選択を行う。選択回路部2は、選択した反転ビットを示す信号を、ビット演算回路1a1,…,1aKに出力する。反転ビットを示す信号は、反転ビットの識別情報(index=j)と、反転可否を示すフラグ(flg=1)と、反転ビットの現在の値q(今回の反転前の値)とを示す信号を含む。ただし、何れのビットも反転されないこともある。何れのビットも反転されない場合、選択回路部2は、flg=0を出力する。
閾値生成部3は、ビット演算回路1a1,…,1aK,…,1aNの各々に対し、ビットの反転可否を判定する際に用いられる閾値を生成する。ビット演算回路1a1,…,1aK,…,1aNの各々に当該閾値を示す信号を出力する。後述するように、閾値生成部3は、閾値の生成に、温度を示すパラメータ(温度パラメータ)Tと乱数とを用いる。閾値生成部3は、当該乱数を発生させる乱数発生器を有する。閾値生成部3は、ビット演算回路1a1,…,1aK,…,1aNの各々に対して個別に乱数発生器を有し、個別に閾値の生成と供給とを行うことが好ましい。ただし、閾値生成部3は、所定数のビット演算回路で乱数発生器を共用してもよい。
乱数生成部4は、乱数ビットを生成し、選択回路部2に出力する。乱数生成部4により生成された乱数ビットは、選択回路部2による反転ビットの選択に用いられる。
設定変更部5は、ビット演算回路1a1,…,1aK,…,1aNのうち、計算対象のイジングモデルの状態を表すビット列(スピンビット列)の第1のビット数(スピンビット数)の変更を行う。また、設定変更部5は、第1のビット数のビット演算回路の各々に対する、重み係数の第2のビット数の変更を行う。
制御部6は、温度パラメータTやビット演算回路1a1,…,1aNの各々の記憶部に対する重み係数の設定を行い、ビット演算回路1a1,…,1aNによる演算の開始や終了を制御する。制御部6は、演算結果の出力を行う。例えば、制御部6は、ビット演算回路1a1,…,1aKを用いた演算が終了すると、ビット演算回路1a1,…,1aKに保持されるスピンビット列を読み出して出力する。
次に、ビット演算回路の回路構成を説明する。ビット演算回路1a1(index=0)を主に説明するが、他のビット演算回路も同様の回路構成で実現される(例えば、X番目(Xは1以上N以下の整数)のビット演算回路に対して、index=X-1とすればよい)。
ビット演算回路1a1は、記憶部11、精度切替回路12、反転判定部13、ビット保持部14、エネルギー変化計算部15および状態遷移判定部16を有する。
記憶部11は、例えば、レジスタやSRAM(Static Random Access Memory)などである。記憶部11は、スピンビット列のうちのビット間の相互作用の大きさを示す係数を記憶する。より具体的には、記憶部11は、自ビット(ここでは、index=0のビット)と他ビットとの間の重み係数を記憶する。ここで、スピンビット数(第1のビット数)Kに対して、重み係数の総数はKである。記憶部11には、index=0のビットに対して、K個の重み係数W00,W01,…,W0,K-1が記憶される。ここで、重み係数は第2のビット数Lで表される。したがって、記憶部11では重み係数を格納するために、K×Lビットが所要される。なお、記憶部11は、ビット演算回路1a1の外部であって、最適化装置1の内部に設けられてもよい(他のビット演算回路の記憶部も同様)。
精度切替回路12は、スピンビット列の何れかのビットが反転されると反転されたビットに対する重み係数を自身の(ビット演算回路1a1の)記憶部11から読み出し、読み出した重み係数をエネルギー変化計算部15に出力する。すなわち、精度切替回路12は、選択回路部2から反転ビットの識別情報を受け付け、記憶部11から反転ビットと自ビットとの組に対応する重み係数を読み出して、エネルギー変化計算部15に出力する。
このとき、精度切替回路12は、設定変更部5により設定された第2のビット数で表される重み係数の読み出しを行う。精度切替回路12は、設定変更部5による第2のビット数の変更に応じて、記憶部11から読み出す係数の第2のビット数を変更する。
例えば、精度切替回路12は、記憶部11から所定ビット数のビット列を読み出すセレクタを有する。セレクタが読み出す所定ビット数が、第2のビット数よりも大きい場合、精度切替回路12は、当該セレクタにより反転ビットに対応する重み係数を含む単位ビット列を読み出し、読み出した単位ビット列から第2のビット数で表される重み係数を抽出する。あるいは、精度切替回路12は、セレクタが読み出す所定ビット数が、第2のビット数よりも小さい場合、当該セレクタにより読み出された複数のビット列を結合することで、第2のビット数で表される重み係数を記憶部11から抽出してもよい。
反転判定部13は、選択回路部2により出力されたindex=jとflgとを示す信号を受け付け、当該信号に基づいて反転ビットとして自ビットが選択されたか否かを判定する。反転ビットとして自ビットが選択された場合(すなわち、index=jが自ビットを示し、flgが反転可を示す場合)、反転判定部13は、ビット保持部14に記憶されたビットを反転させる。すなわち、ビット保持部14に保持されたビットが0の場合、当該ビットを1に変更する。また、ビット保持部14に保持されたビットが1の場合、当該ビットを0に変更する。
ビット保持部14は、1ビットを保持するレジスタである。ビット保持部14は、保持するビットをエネルギー変化計算部15および選択回路部2に出力する。
エネルギー変化計算部15は、記憶部11から読み出した重み係数を用いたイジングモデルのエネルギー変化値ΔEを計算し、状態遷移判定部16に出力する。具体的には、エネルギー変化計算部15は、反転ビットの値(今回の反転前の値)を選択回路部2から受け付け、反転ビットが、1から0、または、0から1のどちらに反転するかに応じて、式(4)により、Δhを計算する。そして、エネルギー変化計算部15は、前回のhにΔhを加算することで、hを更新する。エネルギー変化計算部15は、hを保持するレジスタを有し、当該レジスタにより更新後のhを保持する。
更に、エネルギー変化計算部15は、ビット保持部14より現在の自ビットを受け付け、自ビットが0であれば0から1へ、自ビットが1であれば1から0へ、反転する場合のイジングモデルのエネルギー変化値ΔEを式(2)により計算する。エネルギー変化計算部15は、計算したエネルギー変化値ΔEを、状態遷移判定部16に出力する。
状態遷移判定部16は、エネルギー変化計算部15によるエネルギー変化の計算に応じて、自ビットの反転可否を示す信号flgを選択回路部2に出力する。具体的には、状態遷移判定部16は、エネルギー変化計算部15により計算されたエネルギー変化値ΔEを受け付け、閾値生成部3により生成された閾値との比較に応じて、自ビットの反転可否を判定する比較器である。ここで、状態遷移判定部16による判定について説明する。
シミュレーテッド・アニーリングでは、あるエネルギー変化ΔEを引き起こす状態遷移の許容確率p(ΔE,T)を以下の式(5)のように決めれば、時刻(反復回数)無限大の極限で状態が最適解(基底状態)に到達することが知られている。
Figure 0007004937000005
式(5)においてTは、前述の温度パラメータTである。ここで、関数fとして、式(6)(メトロポリス法)、または、式(7)(ギブス法)が用いられる。
Figure 0007004937000006
Figure 0007004937000007
温度パラメータTは、例えば、式(8)で表される。すなわち、温度パラメータTは、反復回数tに対して対数的に減少する関数で与えられる。例えば、定数cは問題に応じて決定される。
Figure 0007004937000008
ここで、Tは、初期温度値であり問題に応じて十分に大きくとることが望ましい。
式(5)で表される許容確率p(ΔE,T)を用いた場合、ある温度における状態遷移の十分な反復後に定常状態に達したとすると、当該状態はボルツマン分布に従って生成される。すなわち、各状態の占有確率は熱力学における熱平衡状態に対するボルツマン分布に従う。よって、ある温度でボルツマン分布に従った状態を生成し、その後、当該温度よりも低い温度でボルツマン分布に従った状態を生成し、というように徐々に温度を下げていくことで、各温度におけるボルツマン分布に従った状態を追えることになる。そして、温度0としたときに、温度0でのボルツマン分布により最低エネルギーの状態(基底状態)が高確率で実現される。この様子が材料を焼き鈍したときの状態変化とよく似ているため、この方法はシミュレーテッド・アニーリングと呼ばれる。このとき、エネルギーが上がる状態遷移が確率的に起こることは、物理学における熱励起に相当する。
例えば、許容確率p(ΔE,T)でエネルギー変化ΔEを引き起こす状態遷移を許容することを示すフラグ(flg=1)を出力する回路は、f(-ΔE/T)と、区間[0,1)の値をとる一様乱数uとの比較に応じた値を出力する比較器により実現できる。
ただし、次のような変形を行っても同じ機能を実現可能である。2つの数に同じ単調増加関数を作用させても大小関係は変化しない。したがって、比較器の2つの入力に同じ単調増加関数を作用させても比較器の出力は変わらない。例えば、f(-ΔE/T)に作用させる単調増加関数としてf(-ΔE/T)の逆関数f-1(-ΔE/T)、一様乱数uに作用させる単調増加関数としてf-1(-ΔE/T)の-ΔE/Tをuとしたf-1(u)を用いることができる。その場合、上記の比較器と同様の機能を有する回路は、-ΔE/Tがf-1(u)より大きいとき1を出力する回路でよい。更に、温度パラメータTが正であることから、状態遷移判定部16は、-ΔEがT・f-1(u)より大きいとき(あるいは、ΔEが-(T・f-1(u))より小さいとき)、flg=1を出力する回路でよい。
閾値生成部3は、一様乱数uを生成し、上記のf-1(u)の値に変換する変換テーブルを用いて、f-1(u)の値を出力する。メトロポリス法が適用される場合、f-1(u)は、式(9)で与えられる。また、ギブス法が適用される場合、f-1(u)は、式(10)で与えられる。
Figure 0007004937000009
Figure 0007004937000010
変換テーブルは、例えば、閾値生成部3に接続されたRAM(Random Access Memory)、フラッシュメモリなどのメモリ(図示を省略している)に記憶される。閾値生成部3は、温度パラメータTと、f-1(u)との積(T・f-1(u))を閾値として出力する。ここで、T・f-1(u)は、熱励起エネルギーに相当する。
なお、選択回路部2から状態遷移判定部16に対してflgを入力し、当該flgが状態遷移を許容しないことを示すとき(つまり状態遷移が生じないとき)、状態遷移判定部16により-ΔEにオフセット値を加算してから、閾値との比較を行ってもよい。また、状態遷移判定部16は、状態遷移が生じないことが継続する場合に、加算するオフセット値を増加させてもよい。一方、状態遷移判定部16は、flgが、状態遷移を許容することを示すとき(つまり状態遷移が生じるとき)には、オフセット値を0にする。-ΔEへのオフセット値の加算やオフセット値の増加により、状態遷移が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
こうして、温度パラメータTが徐々に小さく設定され、例えば、温度パラメータTの値を所定回数、小さくした場合(または、温度パラメータTが最小値に達した場合)のスピンビット列が、ビット演算回路1a1,…,1aKに保持される。最適化装置1は、温度パラメータTの値を所定回数、小さくした場合(または、温度パラメータTが最小値に達した場合)のスピンビット列を解として出力する。
最適化装置1では、前述の設定変更部5により、イジングモデルのスピンビット数(第1のビット数)と、ビット間の重み係数のビット数(第2のビット数)とを変更可能である。ここで、スピンビット数は、イジングモデルを実現する回路の規模(問題の規模)に相当する。規模が大きいほど、多数の組合せ候補をもつ組合せ最適化問題に最適化装置1を適用できる。また、重み係数のビット数は、ビット間の相互関係の表現の精度(問題における条件表現の精度)に相当する。精度が高いほど、スピン反転時のエネルギー変化ΔEに対する条件を詳細に設定できる。ある問題では、スピンビット数が大きく、重み係数を表すビット数が小さいことがある。あるいは、別の問題では、スピンビット数が小さく、重み係数を表すビット数が大きいこともある。一方、問題に応じて、各問題に適合した最適化装置を個別に製造することは非効率である。
そこで、最適化装置1では、設定変更部5によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とすることで、規模と精度とを可変にできる。その結果、1つの最適化装置1において、問題に合った規模および精度を実現できる。
より具体的には、ビット演算回路1a1,…,1aK,…,1aNの各々は、精度切替回路を有し、当該精度切替回路によって、設定変更部5の設定に応じて、自身の記憶部から読み出す重み係数のビット長を切り替える。また、選択回路部2は、設定変更部5により設定されたスピンビット数に相当する数(例えば、K個)のビット演算回路に対して、反転ビットを示す信号を入力し、当該数(K個)のビット演算回路に対応するビットの中から反転ビットを選択する。これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、1つの最適化装置1によって、問題に応じた規模および精度でイジングモデルを実現できる。
ここで、前述のように、ビット演算回路1a1,…,1aNの各々が備える記憶部は、SRAMなどの比較的小容量の記憶デバイスにより実現される。このため、スピンビット数が増えると、重み係数のビット数によっては、記憶部の容量が不足することも考えられる。一方、最適化装置1によれば、設定変更部5により、記憶部の容量の制限を満たすように、規模および精度を設定することも可能になる。具体的には、設定変更部5は、スピンビット数が増えるほど、重み係数のビット数を減らすように設定することが考えられる。また、設定変更部5は、重み係数のビット数が増えるほど、スピンビット数を減らすように設定することも考えられる。
また、上記の例では、N個のビット演算回路のうちのK個を、イジングモデルに使用するものとした。最適化装置1は、残りのN-K個のビット演算回路を不使用としてもよい。その場合、選択回路部2は、残りのN-K個のビット演算回路により出力されるフラグflgを全て、強制的に0に設定し、残りのN-K個のビット演算回路に対応するビットが反転候補として選択されないようにしてもよい。
あるいは、最適化装置1は、N-K≧Kの場合、残りのN-K個のビット演算回路のうちのK個のビット演算回路により、前述のイジングモデルと同じイジングモデルを実現し、両イジングモデルにより同一問題処理の並列度を高めて計算を高速化してもよい。
更に、最適化装置1は、残りのN-K個のビット演算回路のうちの一部を用いて、他の問題に対応する他のイジングモデルを実現し、前述のイジングモデルで表される問題と並列に、当該他の問題の演算を行ってもよい。
以下では、最適化装置1を用いる情報処理システムを例示し、最適化装置1の機能を更に詳細に説明する。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、情報処理装置20とクライアント30とを有する。情報処理装置20およびクライアント30は、ネットワーク40に接続されている。ネットワーク40は、例えば、LAN(Local Area Network)でもよいし、WAN(Wide Area Network)やインターネットなどでもよい。
情報処理装置20は、組合せ最適化問題をイジングモデルに置き換え、イジングモデルの基底状態の探索により、組合せ最適化問題を高速に解く機能を提供する。
クライアント30は、ユーザにより使用されるクライアントコンピュータであり、ユーザが解くべき問題の、情報処理装置20への入力に用いられる。
図3は、情報処理装置のハードウェア例を示すブロック図である。
情報処理装置20は、CPU(Central Processing Unit)21、DRAM(Dynamic Random Access Memory)22、記憶装置23、NIC(Network Interface Card)24、最適化装置25および媒体リーダ28を有する。
CPU21、DRAM22、記憶装置23、NIC24、最適化装置25および媒体リーダ28は、情報処理装置20のバス29に接続されている。バス29は、例えば、PCIe(Peripheral Component Interconnect Express)バスである。
CPU21は、DRAM22に格納されたプログラムの命令を実行するプロセッサである。CPU21は、記憶装置23に記憶されたプログラムやデータの少なくとも一部をDRAM22にロードし、プログラムを実行する。CPU21は、当該プログラムを実行することで発揮される機能により、最適化装置25に対する設定や動作の制御を行う。
DRAM22は、情報処理装置20の主記憶装置であり、CPU21により実行されるプログラムや最適化装置25に設定されるデータなどを一時的に記憶する。
記憶装置23は、情報処理装置20の補助記憶装置であり、CPU21により実行されるプログラムや最適化装置25に設定されるデータなどを記憶する。記憶装置23は、例えば、SSD(Solid State Drive)やHDD(Hard Disk Drive)などである。
NIC24は、ネットワーク40に接続され、ネットワーク40を介してクライアント30と通信する通信インタフェースである。NIC24は、例えば、ネットワーク40に属するスイッチやルータなどの通信装置とケーブルで接続される。
最適化装置25は、CPU21の制御により、イジングモデルの基底状態を探索する。最適化装置25は、例えば、1チップの半導体集積回路であり、FPGAなどにより実現される。最適化装置25は、第1の実施の形態の最適化装置1の一例である。
媒体リーダ28は、記録媒体41に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体41として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ28は、例えば、記録媒体41から読み取ったプログラムやデータを、DRAM22や記憶装置23などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU21によって実行される。なお、記録媒体41は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体41や記憶装置23を、コンピュータ読み取り可能な記録媒体と言うことがある。
なお、クライアント30はCPU、主記憶装置、補助記憶装置、NIC、マウスやキーボードなどの入力デバイスおよびディスプレイを有する。
図4は、情報処理システムにおけるハードウェアの関係の例を示す図である。
クライアント30は、ユーザプログラム31を実行する。ユーザプログラム31は、情報処理装置20への各種データ(例えば、解くべき問題の内容や最適化装置25の利用スケジュールなどの動作条件)の入力、および、最適化装置25による演算結果の表示などを行う。クライアント30と、NIC24とにより、情報処理装置20への各種データを入力する入力部および基底状態探索の結果として得られた解を、そのまま通知したり、或いは、ユーザに分かり易い結果情報(例えば、結果をグラフとして可視化した表示画面の情報)として表示する表示部が実現される。
CPU21は、ライブラリ21aおよびドライバ21bを実行するプロセッサ(演算部)である。ライブラリ21aのプログラム、および、ドライバ21bのプログラムは、記憶装置23に格納されており、CPU21による実行時にDRAM22にロードされる。
ライブラリ21aは、ユーザプログラム31により入力された各種データを受け付け、ユーザが解くべき問題を、イジングモデルの最低エネルギー状態を探索する問題に変換する。ライブラリ21aは、変換後の問題に関する情報(例えば、スピンビット数、重み係数を表すビット数、重み係数の値、温度パラメータの初期値など)を、ドライバ21bに提供する。また、ライブラリ21aは、最適化装置25による解の探索結果をドライバ21bから取得し、当該探索結果をユーザに分かり易い結果情報に変換して、ユーザプログラム31に提供する。
ドライバ21bは、ライブラリ21aから提供された情報を最適化装置25に供給する。また、ドライバ21bは、イジングモデルによる解の探索結果を最適化装置25から取得し、ライブラリ21aに提供する。
最適化装置25は、ハードウェアとして、制御部25aおよびLFB(Local Field Block)50を有する。
制御部25aは、ドライバ21bから受け付けたLFB50の動作条件を記憶するRAMを有し、当該動作条件に基づいてLFB50による演算を制御する。また、制御部25aは、LFB50が備える各種のレジスタへの初期値の設定、SRAMへの重み係数の格納、および、演算終了後のスピンビット列(探索結果)の読み出しなどを行う。制御部25aは、例えば、FPGAにおける回路などによって実現される。
LFB50は、複数のLFE(Local Field Element)を有する。LFEは、スピンビットに対応する単位素子である。1つのLFEは、1つのスピンビットに対応する。後述するように、最適化装置25は、複数のLFBを有してもよい。
図5は、制御部のハードウェア例を示すブロック図である。
制御部25aは、CPU入出力部25a1、制御レジスタ25a2、LFB送信部25a3およびLFB受信部25a4を有する。
CPU入出力部25a1は、CPU21から受け付けたデータを、制御レジスタ25a2またはLFB50に入力する。例えば、CPU入出力部25a1は、CPU21により入力された規模や精度や各パラメータの初期値や結合定数などの設定データやLFB50の動作条件のデータを、制御レジスタ25a2を介してLFB50に入力することもできるし、LFB50内の各レジスタやRAMに入力することもできる。
制御レジスタ25a2は、CPU入出力部25a1によるLFB50に対する各種の設定データを保持し、LFB送信部25a3に出力する。また、制御レジスタ25a2は、LFB受信部25a4によりLFB50から受信されたデータを保持し、CPU入出力部25a1に出力する。
LFB送信部25a3は、制御レジスタ25a2に保持された設定データを、LFB50に送信する。
LFB受信部25a4は、LFB50からデータ(演算結果などのデータ)を受信し、制御レジスタ25a2に格納する。
図6は、組合せ最適化問題の例を示す図である。
組合せ最適化問題の一例として、巡回セールスマン問題を考える。ここでは、簡単のため、A都市,B都市,C都市,D都市,E都市の5つの都市を、最少コスト(距離や料金など)で回る経路を求めるとする。グラフ201は、都市をノード、都市間の移動をエッジとした1つの経路を示す。この経路は、例えば、行を回る順番、列を都市に対応付けた行列202で表される。行列202は、行の小さい順に、ビット「1」が設定された都市を回ることを示す。更に、行列202は、スピンビット列に相当するバイナリ値203に変換できる。行列202の例では、バイナリ値203は、5×5=25ビットとなる。バイナリ値203(スピンビット列)のビット数は、巡回対象の都市が増すほど増加する。すなわち、組合せ最適化問題の規模が大きくなれば、より多くのスピンビットが所要され、スピンビット列のビット数(規模)が大きくなる。
次に、最少エネルギーとなるバイナリ値の探索例を説明する。
図7は、最少エネルギーとなるバイナリ値の探索例を示す図である。
まず、バイナリ値221のうちの1ビットを反転させる前(スピン反転前)のエネルギーをEinitとする。
最適化装置25は、バイナリ値221の任意の1ビットを反転させたときのエネルギー変化量ΔEを計算する。グラフ211は、横軸をバイナリ値、縦軸をエネルギーとして、エネルギー関数に応じた1ビット反転に対するエネルギー変化を例示している。最適化装置25は、式(2)によりΔEを求める。
最適化装置25は、上記の計算を、バイナリ値221の全ビットに適用し、各々のビットの反転に対して、エネルギー変化量ΔEを計算する。例えば、バイナリ値221のビット数がNのとき、反転パターン222はN個になる。グラフ212は、反転パターン毎のエネルギー変化の様子を例示する。
最適化装置25は、反転パターン毎のΔEに基づいて、反転条件(閾値とΔEとの所定の判定条件)を満たした反転パターン222のうちからランダムで1つを選択する。最適化装置25は、選択された反転パターンに対応するΔEを、スピン反転前のEinitに加減算し、スピン反転後のエネルギー値Eを計算する。最適化装置は、求めたエネルギー値EをEinitとし、スピン反転後のバイナリ値223を用いて、上記の手順を繰り返し行う。
ここで、前述のように、式(2),(3)で用いられるWの1要素は、ビット間の相互作用の大きさを示すスピン反転の重み係数である。重み係数を表すビット数を精度と呼ぶ。精度が高いほど、スピン反転時のエネルギー変化量ΔEに対する条件を詳細に設定できる。例えば、Wの総サイズは、スピンビット列に含まれる2つのビットの全結合に対して「精度×スピンビット数×スピンビット数」である。一例として、スピンビット数が8k(=8192)の場合、Wの総サイズは、「精度×8k×8k」ビットとなる。
次に、図7で例示した探索を行う最適化装置25の回路構成を説明する。
図8は、最適化装置の回路構成例を示す図である。
最適化装置25(あるいは、最適化装置25のLFB50)は、LFE51a1,51a2,…,51an、ランダムセレクタ部52、閾値生成部53、乱数生成部54、モード設定レジスタ55、加算器56およびE格納レジスタ57を有する。
LFE51a1,51a2,…,51anの各々は、スピンビットの1ビットとして用いられる。nは、2以上の整数であり、LFB50が備えるLFEの数を示す。LFE51a1,51a2,…,51anの各々には、LFEの識別情報(index)が対応付けられている。LFE51a1,51a2,…,51anの各々に対して、index=0,1,…,n-1である。LFE51a1,51a2,…,51anは、第1の実施の形態のビット演算回路1a1,…,1aNの一例である。
以下では、LFE51a1の回路構成を説明する。LFE51a2,…,51anも、LFE51a1と同様の回路構成により実現される。LFE51a2,…,51anの回路構成の説明については、以下の説明における各要素の符号の末尾の「a1」の部分を、「a2」,…,「an」の各々に置換して(例えば、「60a1」の符号を「60an」のように置換して)読み替えればよい。また、h,q,ΔE,Wなどの各値の添え字についても、「a2」,…,「an」の各々に対応する添え字に置換して読み替えればよい。
LFE51a1は、SRAM60a1、精度切替回路61a1、Δh生成部62a1、加算器63a1、h格納レジスタ64a1、反転判定部65a1、ビット格納レジスタ66a1、ΔE生成部67a1、判定部68a1を有する。
SRAM60a1は、重み係数Wを格納する。SRAM60a1は、第1の実施の形態の記憶部11に対応する。SRAM60a1には、全スピンビットの重み係数Wのうち、LFE51a1で使用される分だけ格納される。このため、スピンビット数をK(Kは2以上n以下の整数)とすると、SRAM60a1に格納される全重み係数のサイズは、「精度×K」ビットとなる。図8では、一例として、スピンビット数K=nの場合を例示している。この場合、SRAM60a1には、重み係数W00,W01,…,W0,n-1が格納される。
精度切替回路61a1は、反転ビットの識別情報であるindexと反転可を示すフラグFとをランダムセレクタ部52から取得し、反転ビットに対応する重み係数をSRAM60a1から抽出する。精度切替回路61a1は、抽出した重み係数を、Δh生成部62a1に出力する。例えば、精度切替回路61a1は、ランダムセレクタ部52によりSRAM60a1に格納されたindexとフラグFとを、SRAM60a1から取得してもよい。あるいは、精度切替回路61a1は、ランダムセレクタ部52からindexとフラグFとの供給を受ける信号線を有してもよい(図示を省略している)。
ここで、精度切替回路61a1は、モード設定レジスタ55に設定された重み係数のビット数(精度)の設定を受け付け、当該設定に応じて、SRAM60a1から読み出す重み係数のビット数を切り替える。
具体的には、精度切替回路61a1は、SRAM60a1から所定の単位ビット数のビット列(単位ビット列)を読み出すセレクタを有する。精度切替回路61a1は、当該セレクタにより反転ビットに対応する重み係数を含むビット数rの単位ビット列を読み出す。例えば、当該セレクタが読み出す単位ビット数rが、重み係数のビット数zよりも大きい場合、精度切替回路12は、読み出したビット列に対して、反転ビットに対応する重み係数を示すビット部分をLSB(Least Significant Bit)側にシフトさせ、それ以外のビット部分に0を代入することで、重み係数の読み出しを行う。あるいは、単位ビット数rが、モード設定レジスタ55により設定されたビット数zより小さい場合も考えられる。この場合、精度切替回路61a1は、当該セレクタにより読み出された複数の単位ビット列を結合することで、設定されたビット数zでの重み係数を抽出してもよい。
なお、精度切替回路61a1は、LFE51a2が備えるSRAM60a2にも接続される。後述するように、精度切替回路61a1は、SRAM60a2から重み係数を読み出すことも可能である。
Δh生成部62a1は、ランダムセレクタ部52から反転ビットの現在のビット値(今回の反転前のビット値)を受け付け、精度切替回路61a1から取得した重み係数を用いて、式(4)により、ローカルフィールドhの変化量Δhを計算する。Δh生成部62a1は、Δhを加算器63a1に出力する。
加算器63a1は、h格納レジスタ64a1に格納されたローカルフィールドhにΔhを加算し、h格納レジスタ64a1に出力する。
h格納レジスタ64a1は、図示しないクロック信号に同期して、加算器63a1が出力する値(ローカルフィールドh)を取り込む。h格納レジスタ64a1は、例えば、フリップフロップである。なお、h格納レジスタ64a1に格納されるローカルフィールドhの初期値は、バイアス係数bである。当該初期値は、制御部25aにより設定される。
反転判定部65a1は、反転ビットのindex=jと、反転可否を示すフラグFとをランダムセレクタ部52から受け付け、自ビットが反転ビットとして選択されたか否かを判定する。自ビットが反転ビットとして選択された場合、反転判定部65a1は、ビット格納レジスタ66a1に格納されたスピンビットを反転させる。
ビット格納レジスタ66a1は、LFE51a1に対応するスピンビットを保持する。ビット格納レジスタ66a1は、例えば、フリップフロップである。ビット格納レジスタ66a1に格納されたスピンビットは、反転判定部65a1により反転される。ビット格納レジスタ66a1は、ΔE生成部67a1およびランダムセレクタ部52にスピンビットを出力する。
ΔE生成部67a1は、h格納レジスタ64a1のローカルフィールドhおよびビット格納レジスタ66a1のスピンビットに基づいて、自ビットの反転に応じたイジングモデルのエネルギー変化量ΔEを、式(2)により計算する。ΔE生成部67a1は、エネルギー変化量ΔEを、判定部68a1およびランダムセレクタ部52に出力する。
判定部68a1は、ΔE生成部67a1により出力されたエネルギー変化量ΔEと、閾値生成部53により生成された閾値との比較により、自ビットの反転を許容するか否かを示す(自ビットの反転可否を示す)フラグFを、ランダムセレクタ部52に出力する。具体的には、判定部68a1は、ΔEが閾値-(T・f-1(u))より小さいときF=1(反転可)を出力し、ΔEが閾値-(T・f-1(u))以上のときF=0(反転不可)を出力する。ここで、f-1(u)は、適用法則に応じて、式(9),(10)の何れかで与えられる関数である。また、uは、区間[0,1)の一様乱数である。
ランダムセレクタ部52は、LFE51a1,51a2,…,51anの各々から、エネルギー変化量、スピンビットの反転可否を示すフラグおよびスピンビットを受け付け、反転可であるスピンビットのうち反転させるビット(反転ビット)を選択する。
ランダムセレクタ部52は、選択した反転ビットの現在のビット値(ビットq)を、LFE51a1,51a2,…,51anが備えるΔh生成部62a1,62a2,…,62anに供給する。ランダムセレクタ部52は、第1の実施の形態の選択回路部2の一例である。
ランダムセレクタ部52は、反転ビットのindex=jと、反転可否を示すフラグFとを、LFE51a1,51a2,…,51anが備えるSRAM60a1,60a2,…,60anに出力する。なお、ランダムセレクタ部52は、前述のように、反転ビットのindex=jと、反転可否を示すフラグFとを、LFE51a1,51a2,…,51anが備える精度切替回路61a1,61a2,…,61anに出力してもよい。
また、ランダムセレクタ部52は、反転ビットのindex=jと、反転可否を示すフラグFとを、LFE51a1,51a2,…,51anが備える反転判定部65a1,65a2,…,65anに供給する。
更に、ランダムセレクタ部52は、選択した反転ビットに対応するΔEを、加算器56に供給する。
ここで、ランダムセレクタ部52は、あるイジングモデルにおけるスピンビット数(すなわち、使用するLFEの数)の設定を、モード設定レジスタ55から受け付ける。例えば、ランダムセレクタ部52は、indexの小さい方から順に、設定されたスピンビット数に相当する数のLFEを使用して、解の探索が行われるようにする。例えば、ランダムセレクタ部52は、n個のLFEのうち、K個のLFEを用いる場合、LFE51a1,…,LFE51aKのLFEに対応するスピンビット列から反転ビットを選択する。このとき、ランダムセレクタ部52は、例えば、使用しないn-K個のLFE51a(K-1),…,51anの各々から出力されるフラグFを、強制的に0に設定することが考えられる。
閾値生成部53は、LFE51a1,51a2,…,51anが備える判定部68a1,68a2,…,68anに対して、エネルギー変化量ΔEとの比較に用いられる閾値を生成し、供給する。前述のように、閾値生成部53は、温度パラメータTと、区間[0,1)の一様乱数uと、式(9)または式(10)で示されるf-1(u)とを用いて、閾値を生成する。閾値生成部53は、例えば、LFE毎に個別に、乱数発生器を有し、LFE毎の乱数uを用いて閾値を生成する。ただし、幾つかのLFEで乱数発生器が共有されてもよい。温度パラメータTの初期値やシミュレーテッド・アニーリングにおける温度パラメータTの減少サイクルや減少量などは、制御部25aによって制御される。
乱数生成部54は、ランダムセレクタ部52における反転ビットの選択に用いられる乱数ビットを生成し、ランダムセレクタ部52に供給する。
モード設定レジスタ55は、LFE51a1,51a2,…,51anが備える精度切替回路61a1,61a2,61anに対して、重み係数のビット数(すなわち、精度)を示す信号を供給する。また、モード設定レジスタ55は、ランダムセレクタ部52に対して、スピンビット数(すなわち、規模)を示す信号を供給する。モード設定レジスタ55に対するスピンビット数や重み係数のビット数の設定は、制御部25aにより行われる。モード設定レジスタ55は、第1の実施の形態の設定変更部5の一例である。
加算器56は、ランダムセレクタ部52により出力されたエネルギー変化量ΔEを、E格納レジスタ57に格納されたエネルギー値Eに加算し、E格納レジスタ57に出力する。
E格納レジスタ57は、図示しないクロック信号に同期して、加算器56が出力するエネルギー値Eを取り込む。E格納レジスタ57は、例えば、フリップフロップである。なお、エネルギー値Eの初期値は、制御部25aによって式(1)を用いて計算され、E格納レジスタ57に設定される。
例えば、解の探索にK個のLFEが用いられる場合、制御部25aはビット格納レジスタ66a1,…,66aKの各スピンビットを読み出すことで、スピンビット列を得る。
図9は、ランダムセレクタ部の回路構成例を示す図である。
ランダムセレクタ部52は、フラグ制御部52aと複数段にわたってツリー状に接続された複数の選択回路とを有する。
フラグ制御部52aは、モード設定レジスタ55のスピンビット数の設定に応じて、初段の選択回路52a1,52a2,52a3,52a4,…,52aqの各々に入力されるフラグの値を制御する。図9では、選択回路52aqの1つの入力(LFE51anの出力に相当)に対するフラグの値を制御する部分回路52xnが例示されている。部分回路52xnのフラグ設定部52ynは、使用しないLFE51anから出力されるフラグFnを強制的に0に設定するスイッチである。
初段の選択回路52a1,52a2,52a3,52a4,…,52aqの各々には、LFE51a1,51a2,…,51anのそれぞれが出力する変数qとFとΔEの組が2組ずつ入力される。例えば、選択回路52a1には、LFE51a1が出力する変数qとFとΔEによる組と、LFE51a2が出力する変数qとFとΔEによる組とが入力される。また、選択回路52a2には、変数qとFとΔEによる組と変数qとFとΔEによる組が入力され、選択回路52a3には、変数qとFとΔEによる組と変数qとFとΔEによる組が入力される。更に、選択回路52a4には、変数qとFとΔEによる組と変数qとFとΔEによる組が入力され、選択回路52aqには、変数qn-2とFn-2とΔEn-2による組と変数qn-1とFn-1とΔEn-1による組が入力される。
そして、選択回路52a1,…,52aqの各々は、入力された2組の変数qとFとΔEと、乱数生成部54が出力する1ビット乱数に基づいて、一方の組の変数qとFとΔEを選択する。このとき、選択回路52a1,…,52aqの各々は、Fが1である組を優先的に選択し、両方の組が1の場合には1ビット乱数に基づいて何れか一方の組を選択する(他の選択回路も同様)。ここで、乱数生成部54は、1ビット乱数を選択回路毎に個別に生成し、各選択回路に供給する。また、選択回路52a1,…,52aqの各々は、どちらの組の変数qとFとΔEを選択したかを示す1ビットの識別値を生成し、選択した変数qとFとΔEと識別値とを含む信号(状態信号と言う)を出力する。なお、初段の選択回路52a1~52aqの数は、LFE51a1,…,51anの数の1/2、つまり、n/2である。
2段目の選択回路52b1,52b2,…,52brの各々には、選択回路52a1,…,52aqが出力する状態信号が2つずつ入力される。例えば、選択回路52b1には、選択回路52a1,52a2が出力する状態信号が入力され、選択回路52b2には、選択回路52a3,52a4が出力する状態信号が入力される。
そして、選択回路52b1,…,52brの各々は、2つの状態信号と、乱数生成部54が出力する1ビット乱数に基づいて、2つの状態信号の何れか一方を選択する。また、選択回路52b1,…,52brのそれぞれは、選択した状態信号に含まれる識別値について何れの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
3段目以降の選択回路においても同様の処理が行われ、各段の選択回路で1ビットずつ識別値のビット幅が増えていき、最後段の選択回路52pから、ランダムセレクタ部52の出力である状態信号が出力される。ランダムセレクタ部52が出力する状態信号に含まれる識別値が、2進数で表された、反転ビットを示すindexである。
ただし、ランダムセレクタ部52は、各LFEからフラグFとともに当該LFEに対応するindexを受け付け、変数qとFとΔEと同様に、各選択回路によりindexの選択を行うことで、反転ビットに対応するindexを出力してもよい。この場合、各LFEは、index格納用のレジスタを有し、当該レジスタからランダムセレクタ部52へindexを出力する。
このように、ランダムセレクタ部52は、LFE51a1,…,51anのうち、設定されたスピンビット数KのLFE51a1,…,51aK以外の他のLFE51a(K+1),…,51anにより出力された反転可否を示す信号を強制的に反転不可に設定する。ランダムセレクタ部52は、LFE51a1,…,51aKにより出力された反転可否を示す信号およびLFE51a(K+1),…,51anに対して設定した反転不可を示す信号に基づいて、反転ビットを選択する。ランダムセレクタ部52は、反転ビットを示す信号を、LFE51a1,…,51aKに加えてLFE51a(K+1),…,51anにも出力する。
こうして、フラグ制御部52aの制御により、使用されないLFEのフラグFが強制的に0に設定されるので、スピンビット列に使用されないLFEに対応するビットを反転候補から除外できる。
次に、LFE51a1,…,51anの各々のSRAM60a1,60a2,…,60anに対する重み係数の格納例を説明する。まず、SRAM容量に対する規模と精度とのトレードオフ関係について説明する。
図10は、規模と精度とのトレードオフ関係の例を示す図である。
前述したように、組合せ最適化問題の一例として、巡回セールスマン問題が挙げられる。巡回セールスマン問題は、巡回する都市数が多く、巡回条件(移動時間、移動距離、移動費等)が少なければ、低精度の問題となり、巡回条件が多い場合は高精度が必要となる。他にも、比較的低精度となる最適化問題として、エイトクイーン問題や四色問題といった、条件がある程度定まっている問題が挙げられる。一方、ポートフォリオ最適化問題は、金額や期間など条件が多くあるため、高精度が求められる。
LFE毎のSRAMの容量に制限があると、規模と精度とにトレードオフ関係が生ずる。グラフ300は、LFE毎のSRAMにおいて重み係数の格納のための容量の上限が128k(キロ)ビットである場合の規模と精度とのトレードオフ関係を示している。ここで、1k(キロ)=1024とする。グラフ300の横軸は規模(kビット)であり、縦軸は精度(ビット)である。なお、一例として、n=8192であるとする。
この場合、規模1kビットに対して、精度は最大128ビットである。また、規模2kビットに対して、精度は最大64ビットである。規模4kビットに対して、精度は最大32ビットである。規模8kビットに対して、精度は最大16ビットである。
そこで、最適化装置25では、例えば、次の4つのモードを利用可能にする。第1のモードは、規模1kビット/精度128ビットのモードである。第2のモードは、規模2kビット/精度64ビットのモードである。第3のモードは、規模4kビット/精度32ビットのモードである。第4のモードは、規模8kビット/精度16ビットのモードである。次に、これら4種のモードの各々に応じた重み係数の格納例を説明する。重み係数は、制御部25aにより、SRAM60a1,60a2,…,60anの各々に格納される。なお、精度切替回路61a1,61a2,…,61anの各々のセレクタによりSRAM60a1,60a2,…,60anから読み出される単位ビット数は、一例として、128ビットであるとする。
図11は、重み係数の格納例(その1)を示す図である。
前述の第1のモード(規模1kビット/精度128ビット)を用いる場合、重み係数Wは式(11)で表される。
Figure 0007004937000011
データ1d1,1d2,…,1dsは、前述の第1のモード(規模1kビット/精度128ビット)を用いる場合のSRAM60a1,60a2,…,60asに対する重み係数の格納例を示す。ここで、s=1024である。データ1d1,1d2,…,1dsは、各々、SRAM60a1,60a2,…,60asに格納される。このモードでは、LFEは1k個(=1024個)使用される。なお、図中、LFE51a1,…,51asを、各々の識別番号を用いて、LFE0,…,LFE1023のように表記することがある(以降の図も同様)。
データ1d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,1023を示す。データ1d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,1023を示す。データ1dsは、LFE51as(LFE1023)のSRAM60asに格納されるW1023,0~W1023,1023を示す。1つの重み係数Wijのビット数は128ビットである。
図12は、重み係数の格納例(その2)を示す図である。
前述の第2のモード(規模2kビット/精度64ビット)を用いる場合、重み係数Wは式(12)で表される。
Figure 0007004937000012
データ2d1,2d2,…,2dtは、前述の第2のモード(規模2kビット/精度64ビット)を用いる場合のSRAM60a1,60a2,…,60atに対する重み係数の格納例を示す。ここで、t=2048である。データ2d1,2d2,…,2dtは、各々、SRAM60a1,60a2,…,60atに格納される。このモードでは、LFEは2k個(=2048個)使用される。
データ2d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,2047を示す。データ2d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,2047を示す。データ2dtは、LFE51at(LFE2047)のSRAM60atに格納されるW2047,0~W2047,2047を示す。1つの重み係数Wijのビット数は64ビットである。
図13は、重み係数の格納例(その3)を示す図である。
前述の第3のモード(規模4kビット/精度32ビット)を用いる場合、重み係数Wは式(13)で表される。
Figure 0007004937000013
データ3d1,3d2,…,3duは、前述の第3のモード(規模4kビット/精度32ビット)を用いる場合のSRAM60a1,60a2,…,60auに対する重み係数の格納例を示す。ここで、u=4096である。データ3d1,3d2,…,3duは、各々、SRAM60a1,60a2,…,60auに格納される。このモードでは、LFEは4k個(=4096個)使用される。
データ3d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,4095を示す。データ3d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,4095を示す。データ3duは、LFE51au(LFE4095)のSRAM60auに格納されるW4095,0~W4095,4095を示す。1つの重み係数Wijのビット数は32ビットである。
図14は、重み係数の格納例(その4)を示す図である。
前述の第4のモード(規模8kビット/精度16ビット)を用いる場合、重み係数Wは式(14)で表される。
Figure 0007004937000014
データ4d1,4d2,…,4dnは、前述の第4のモード(規模8kビット/精度16ビット)を用いる場合のSRAM60a1,60a2,…,60anに対する重み係数の格納例を示す。ここで、n=8192である。データ4d1,4d2,…,4dnは、各々、SRAM60a1,60a2,…,60anに格納される。このモードでは、LFEは8k個(=8192個)使用される。
データ4d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,8191を示す。データ4d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,8191を示す。データ4dnは、LFE51an(LFE8191)のSRAM60anに格納されるW8191,0~W8191,8191を示す。1つの重み係数Wijのビット数は16ビットである。
次に、最適化装置25の処理手順を説明する。まず、最適化装置25の初期化処理の例を説明する。
図15は、初期化処理の例を示すフローチャートである。
(S10)CPU21は、問題に応じた初期値および動作条件を最適化装置25に入力する。初期値は、例えば、エネルギー値E、ローカルフィールドh、スピンビットq、温度パラメータTの初期値および重み係数Wなどを含む。また、動作条件は、1つの温度パラメータでの状態の更新回数N1、温度パラメータの変更回数N2および温度パラメータの下げ幅などを含む。制御部25aは、入力された初期値および重み係数を、前述の各LFEのレジスタおよびSRAMに設定する。なお、制御部25aは、使用されないLFEがある場合、当該LFEのSRAMに、Wとして、例えば全て0を設定する。スピンビット間の重み係数Wは、問題に応じた精度に対応するビット数で表される。
(S11)CPU21は、問題に応じたスピンビット数(規模)および重み係数のビット数(精度)を、最適化装置25に入力する。制御部25aは、CPU21からスピンビット数および重み係数のビット数を受け付け、モード設定レジスタ55に入力する。モード設定レジスタ55に入力された重み係数のビット数は、各LFEの精度切替回路に入力される。また、モード設定レジスタ55に入力されたスピンビット数は、ランダムセレクタ部52に入力される。
(S12)CPU21は、最適化装置25に演算開始フラグ(例えば、演算開始フラグ=1)を入力する。制御部25aは、演算開始フラグの入力を受け付け、LFB50による演算を開始する。こうして、初期化処理が終了する。
図16は、演算処理の例を示すフローチャートである。
ここで、図16の説明では、index=iに対応するLFEをLFE51ax(1番目のLFEはLFE51a1であり、n番目のLFEは51anである)と表記する。LFE51axに含まれる各部についても、例えば、SRAM60axのように、符号の末尾に「x」を付して表記する。LFE51a1,…,LFE51anの各々による演算は並列に実行される。
(S20)ΔE生成部67axは、h格納レジスタ64axに格納されたローカルフィールドhおよびビット格納レジスタ66axに格納されたビットqに基づいて、当該ビットqを反転させた場合のエネルギー変化量ΔEを生成する。ΔEの生成には、式(2)が用いられる。
(S21)判定部68axは、ΔE生成部67axにより生成されたエネルギー変化量ΔEと、閾値生成部53により生成された閾値(=-(T・f-1(u)))とを比較し、閾値>ΔEであるか否かを判定する。閾値>ΔEの場合、ステップS22に処理が進む。閾値≦ΔEの場合、ステップS23に処理が進む。
(S22)判定部68axは、反転候補信号(F=1)をランダムセレクタ部52に出力する。そして、ステップS24に処理が進む。
(S23)判定部68axは、非反転信号(F=0)をランダムセレクタ部52に出力する。そして、ステップS24に処理が進む。
(S24)ランダムセレクタ部52は、LFE51a1,…,LFE51anの各々から出力された全反転候補(F=1であるLFEに対応するビット)から、反転ビットを1つ選択する。ランダムセレクタ部52は、選択した反転ビットに対応するindex=j、F、qをLFE51a1,…,LFE51anに出力する。また、ランダムセレクタ部52は、選択した反転ビットに対応するΔEを、加算器56に出力する。すると、次のステップS25(エネルギー更新処理),S26(状態更新処理)が並列に開始される。
(S25)加算器56は、反転ビットに対応するエネルギー変化量ΔEを、エネルギー値Eに加算することで、E格納レジスタ57に格納されたエネルギー値Eを更新する。すなわち、E=E+ΔEである。そして、エネルギー更新処理が終了する。
(S26)精度切替回路61axは、反転ビットに対応するindex=jとフラグFとを取得し、当該反転ビットに対応する重み係数を含む単位ビット列をSRAM60axから読み出す。単位ビット列とは、精度切替回路61axのセレクタが、SRAM60axから一度に読み出すビット列の単位である。単位ビット列のビット数(単位ビット数)は、一例では、128ビットである(他の値でもよい)。この場合、ステップS26ではSRAM60axから128ビットの単位ビット列が読み出される。
例えば、精度として、128/a(a=1,2,4,8)ビットが選択されている場合、精度切替回路61axは、SRAM60axの先頭(先頭を0番目とする)の単位ビット列から数えて「Integer(j/a)」番目の単位ビット列を読み出す。ここで、Integer(j/a)は、(j/a)の値から整数部を抽出する関数である。
(S27)精度切替回路61axは、ステップS26で読み出された単位ビット列から、モード設定レジスタ55により設定されたモード選択に応じたビット数の重み係数(反転ビットqに対応する重み係数)Wijを抽出する。例えば、精度切替回路61axは、128ビットの単位ビット列からzビットのビット列を抽出する場合、前述のように反転ビットに対応するzビットのビット範囲をLSB側へシフトし、それ以外の上位ビットに0を設定することで、zビットの重み係数を抽出する。
なお、精度切替回路61axは、ステップS26で読み出した単位ビット列を、先頭から精度に応じたビット長の区画に分けたときに、反転ビットに対応するビット範囲が先頭(0番目)から何番目の区画に対応するかにより当該ビット範囲を特定する。
図12~図14の例によれば、精度64ビットの場合、jが偶数のときに0番目の区画、jが奇数のときに1番目の区画である。また、精度32ビットの場合、mod(j,4)番目=0のときに0番目の区画、mod(j,4)=1のときに1番目の区画、mod(j,4)=2のときに2番目の区画、mod(j,4)=3のときに3番目の区画である。ここで、mod(u,v)は、uをvで除したときの剰余を示す関数である。更に、精度16ビットの場合も同様に、読み出した128ビットの単位ビット列の先頭から「mod(j,8)」番目の区画が、反転ビットに対応するビット範囲となる。なお、精度128ビットの場合、精度切替回路61axは、ステップS26で読み出された128ビットの単位ビット列を、そのまま反転ビットに対応する重み係数とする。
上記の例では、128/a(a=1,2,4,8)ビットの精度に対し、ステップS26で読み出された128ビットの単位ビット列の先頭から「mod(j,a)」番目の区画(1区画のサイズは128/aビット)が、反転ビットに対応する重み係数を示すビット範囲である。
(S28)Δh生成部62axは、反転ビットの反転方向と、精度切替回路61axにより抽出された重み係数Wijとに基づいて、Δhを生成する。Δhの生成には、式(4)が用いられる。また、反転ビットの反転方向は、ランダムセレクタ部52により出力される反転ビットq(今回の反転前のビット)により判別される。
(S29)加算器63axは、Δh生成部62axにより生成されたΔhを、h格納レジスタ64axに格納されたローカルフィールドhに加算することで、h格納レジスタ64axに格納されたローカルフィールドhを更新する。また、反転判定部65axは、ランダムセレクタ部52により出力されたindex=jおよびフラグFに基づいて、自ビットが反転ビットとして選択されたか否かを判定する。反転判定部65axは、自ビットが反転ビットとして選択された場合、ビット格納レジスタ66axに格納されたスピンビットを反転させ、自ビットが反転ビットとして選択されなかった場合、ビット格納レジスタ66axのスピンビットを維持する。ここで、自ビットが反転ビットとして選択された場合とは、ランダムセレクタ部52により出力された信号について、index=j=i、かつ、F=1の場合である。
(S30)制御部25aは、現在の温度パラメータTにおいて、LFE51a1,…,LFE51anに保持される各スピンビットの更新処理回数がN1に達したか(更新処理回数=N1であるか)否かを判定する。更新処理回数がN1に達した場合、ステップS31に処理が進む。更新処理回数がN1に達していない場合、制御部25aは、更新処理回数に1を加算して、ステップS20に処理を進める。
(S31)制御部25aは、温度パラメータTの変更回数がN2に達したか(温度変更回数=N2であるか)否かを判定する。温度変更回数がN2に達した場合、ステップS33に処理が進む。温度変更回数がN2に達していない場合、制御部25aは、温度変更回数に1を加算して、ステップS32に処理を進める。
(S32)制御部25aは、温度パラメータTを変更する。具体的には、制御部25aは、動作条件に応じた下げ幅で、温度パラメータTの値を減少させる(温度を下げることに相当する)。そして、ステップS20に処理が進む。
(S33)制御部25aは、ビット格納レジスタ66axに格納されたスピンビットを読み出し、演算結果として出力する。具体的には、制御部25aは、モード設定レジスタ55により設定されたスピンビット数Kに対応するビット格納レジスタ66a1,…,66aKの各々に格納されたスピンビットを読み出し、CPU21に出力する。すなわち、制御部25aは、読み出したスピンビット列をCPU21に供給する。そして、演算処理が終了する。
なお、ステップS24において、ランダムセレクタ部52は、モード設定レジスタ55の設定に応じて、使用されないLFEにより出力されるFの値を、強制的に0に設定することで、使用されないLFEをビット反転の候補から除外することができる。
最適化装置25によれば、モード設定レジスタ55によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とし、1チップの最適化装置25において、問題に合った規模および精度を実現できる。
より具体的には、精度切替回路61axは、モード設定レジスタ55の設定に応じて、SRAM60axから読み出す重み係数のビット長を切り替える。精度切替回路61axを用いることで、ステップS27で示したように、精度切替回路61axのセレクタがSRAM60axから読み出す単位ビット数を変更せずに、種々の精度を実現できる。例えば、精度切替回路61axのセレクタによるSRAM60axからの単位ビット数分の読み出し用の信号線の作り変えを要さずに、精度を可変にできる。
また、ランダムセレクタ部52は、モード設定レジスタ55により設定されたスピンビット数に相当する数(例えば、K個)のLFEに対して、反転ビットを示す信号を入力し、当該数(K個)のLFEに対応するビットの中から反転ビットを選択する。ランダムセレクタ部52は、使用されないn-K個のLFEにも反転ビットを示す信号を入力するが、当該n-K個のLFEから出力されるフラグFを強制的に0(反転不可)に設定することで、使用されないLFEを反転ビットの選択候補から除外する。
これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、1つの最適化装置25によって、問題に応じた規模および精度でイジングモデルを実現できる。
次に、モード設定の他の例を説明する。例えば、最適化装置25は、次のようにSRAM60a1,…,60anに重み係数を格納することで、前述の4種類のモードに加え、規模4kビット/精度64ビットの第5のモードを提供することもできる。
図17は、結合係数の格納例(その5)を示す図である。
データ5d1,5d2,…,5dnは、前述の第5のモード(規模4kビット/精度64ビット)を用いる場合のSRAM60a1,60a2,…,60anに対する重み係数の格納例を示す。ここで、n=8192である。データ5d1,5d2,…,5dnは、各々、SRAM60a1,60a2,…,60anに格納される。このモードでは、スピンビット列として、LFEは4k個(=4096個)使用され、重み係数の格納のみの用途として、更に4k個(=4096個)のLFEが使用される。
データ5d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,2047を示す。データ5d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW0,2048~W0,4095を示す。データ5dnは、LFE51an(LFE8191)のSRAM60anに格納されるW4095,2048~W4095,4095を示す。1つの重み係数Wijのビット数は64ビットである。
ここで、前述のように、LFE51a1の精度切替回路61a1は、LFE51a2のSRAM60a2からも重み係数を取得することができる。すなわち、精度切替回路61a1は、例えば、隣接するLFE51a2のSRAM60a2からの読み出し経路を利用することで、LFE51a2のSRAM60a2以外の機能を停止させ、SRAM60a2の容量をLFE51a1に貸し出す方法を採れる。例えば、奇数番目(先頭を1番目とする)のLFEにより偶数番目のLFEのSRAMを利用可能にする(あるいは、先頭を0番目とした場合は偶数番目のLFEにより奇数番目のLFEのSRAMを利用可能にするとも言える)。
このように、精度切替回路61a1,…,61anは、重み係数のビット数の変更に応じて、自ビットと他ビットとに関する重み係数のうちの一部を、スピンビットとして使用されない他のLFEが有するSRAMから読み出す。この場合、ランダムセレクタ部52は、例えば、スピンビットとして使用されない他のLFEから出力されるフラグFを強制的に0(反転不可)に設定することで、当該他のLFEに対応するビットを反転ビットの選択候補から除外してもよい。
これにより、規模4kビット/精度64ビットの第5のモードを実現できる。同様に、規模を小さくすることで、更に大きな精度を実現することもできる。このように、最適化装置25によれば、問題に応じて、規模および精度をより柔軟に変更することができる。
[第3の実施の形態]
次に、第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
第3の実施の形態では、第2の実施の形態の機能に加え、LFEを効率的に利用可能にする機能を提供する。
ここで、第3の実施の形態の情報処理システムの装置構成および情報処理装置20のハードウェア構成は、図2,図3と同様であるため、説明を省略する。第3の実施の形態の最適化装置は、第2の実施の形態の最適化装置25と回路構成の一部が異なる。
図18は、第3の実施の形態の最適化装置の例を示す図である。
最適化装置26は、例えば、1チップの半導体集積回路であり、FPGAなどにより実現される。最適化装置26は、第1の実施の形態の最適化装置1の一例である。最適化装置26は、複数のLFBを有する。最適化装置26は、当該複数のLFBを制御する制御部25aを有する(図示を省略している)。
第3の実施の形態では、一例として、1つのLFBに属するLFEの数をm個(mは2以上の整数)とし、最適化装置26は、LFB70a,70b,70c,70d,70e,70f,70g,70hを有するものとする。この場合、最適化装置26は、合計で8m個のLFEを有し、最大規模8mビットを実現可能である。ただし、最適化装置26が備えるLFBの個数は、8個に限らず、他の個数でもよい。
LFB70a,…,70hが備える複数のLFEは、第1の実施の形態のビット演算回路1a1,…,1aNの一例である。LFB70a,…,70hの各々は、所定数(m個)のLFEを要素に含む、LFEの1つのグループであると言える。また、LFB70a,…,70hの各々には、識別番号#0~#7が割り当てられている。
最適化装置26は、更に、規模結合回路91、モード設定レジスタ92、加算器93a,93b,93c,93d,93e,93f,93g,93hおよびE格納レジスタ94a,94b,94c,94d,94e,94f,94g,94hを有する。
ここで、LFB70aは、LFE71a1,…,LFE71am、ランダムセレクタ部72、閾値生成部73、乱数生成部74およびモード設定レジスタ75を有する。LFE71a1,…,LFE71am、ランダムセレクタ部72、閾値生成部73、乱数生成部74およびモード設定レジスタ75は、図8で説明した第2の実施の形態の同名のハードウェアに相当するため、説明を省略する。ただし、ランダムセレクタ部72は、選択した反転ビットに対する状態信号(フラグFx0、スピンビットqx0およびエネルギー変化量ΔEx0)の組を、規模結合回路91に出力する。また、ランダムセレクタ部72は、フラグ制御部52aを有さなくてよい(ただし、有してもよい)。例えば、ランダムセレクタ部72では、各LFEからの状態信号が、フラグ制御部52aを介さずに、ランダムセレクタ部72の初段の各選択回路に2つずつ入力される。なお、LFB70b,…,70hも、LFB70aと同様の回路構成を有する。
規模結合回路91は、LFB70a,…,70hの各々から状態信号を受け付け、状態信号に基づいて反転ビットの選択を行う。規模結合回路91は、反転ビットに関する信号を、LFB70a,…,70hの各LFEに供給する。
具体的には、規模結合回路91は、フラグFy0、ビットqy0および反転ビットを示すindex=y0をLFB70a1のLFE71a1,…,71amに出力する。ここで、以降の図では、ランダムセレクタ部72および規模結合回路91により出力される「index=x0」などの表記を「x0」のように略記することがある。規模結合回路91は、エネルギー変化量ΔEy0を加算器93aに出力する。
また、規模結合回路91は、フラグFy1、ビットqy1および反転ビットを示すindex=y1をLFB70bの各LFEに供給する。エネルギー変化量ΔEy1を加算器93bに出力する。
規模結合回路91は、フラグFy2、ビットqy2および反転ビットを示すindex=y2をLFB70cの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy2を加算器93cに出力する。
規模結合回路91は、フラグFy3、ビットqy3および反転ビットを示すindex=y3をLFB70dの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy3を加算器93dに出力する。
規模結合回路91は、フラグFy4、ビットqy4および反転ビットを示すindex=y4をLFB70eの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy4を加算器93eに出力する。
規模結合回路91は、フラグFy5、ビットqy5および反転ビットを示すindex=y5をLFB70fの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy5を加算器93fに出力する。
規模結合回路91は、フラグFy6、ビットqy6および反転ビットを示すindex=y6をLFB70gの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy6を加算器93gに出力する。
規模結合回路91は、フラグFy7、ビットqy7および反転ビットを示すindex=y7をLFB70hの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy7を加算器93hに出力する。
LFB70a,…,70hの各々が有するランダムセレクタ部(ランダムセレクタ部72を含む)および規模結合回路91は、第1の実施の形態の選択回路部2の一例である。
モード設定レジスタ92は、規模結合回路91に対する動作モードの設定を行う。モード設定レジスタ92は、モード設定レジスタ75によりLFE71a1,…,71amおよびランダムセレクタ部72に設定される動作モードと同じ動作モードを規模結合回路91に設定する。モード設定レジスタ75,92によるモード設定の詳細は後述される。LFB70a,…,70hの各々が有するモード設定レジスタ(モード設定レジスタ75を含む)およびモード設定レジスタ92は、第1の実施の形態の設定変更部5の一例である。
加算器93aは、ΔEy0を、E格納レジスタ94aに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94aは、例えば、クロック信号(図示を省略している)に同期して(他のE格納レジスタも同様)、加算器93aにより計算されたエネルギー値Eを取り込む。
加算器93bは、ΔEy1を、E格納レジスタ94bに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94bは、加算器93bにより計算されたエネルギー値Eを取り込む。
加算器93cは、ΔEy2を、E格納レジスタ94cに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94cは、加算器93cにより計算されたエネルギー値Eを取り込む。
加算器93dは、ΔEy3を、E格納レジスタ94dに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94dは、加算器93dにより計算されたエネルギー値Eを取り込む。
加算器93eは、ΔEy4を、E格納レジスタ94eに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94eは、加算器93eにより計算されたエネルギー値Eを取り込む。
加算器93fは、ΔEy5を、E格納レジスタ94fに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94fは、加算器93fにより計算されたエネルギー値Eを取り込む。
加算器93gは、ΔEy6を、E格納レジスタ94gに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94gは、加算器93gにより計算されたエネルギー値Eを取り込む。
加算器93hは、ΔEy7を、E格納レジスタ94hに格納されているエネルギー値Eに加算することで、当該エネルギー値Eを更新する。E格納レジスタ94hは、加算器93hにより計算されたエネルギー値Eを取り込む。
E格納レジスタ94a,…,94hの各々は、例えば、フリップフロップである。
次に、LFB70aの回路構成例を説明する。LFB70b,…,70hもLFB70aと同様の回路構成である。
図19は、LFBの回路構成例を示す図である。
LFE71a1,71a2,…,71amの各々は、スピンビットの1ビットとして用いられる。mは、2以上の整数であり、LFB70aが備えるLFEの数を示す。図19では、一例として、m=1024としている。ただし、mは他の値でもよい。
LFE71a1,71a2,…,71amの各々には、識別情報(index)が対応付けられている。LFE71a1,71a2,…,71amの各々に対して、index=0,1,…,1023である。
以下では、LFE71a1の回路構成を説明する。LFE71a2,…,71amも、LFE71a1と同様の回路構成により実現される。LFE71a2,…,71amの回路構成の説明については、以下の説明における各要素の符号の末尾の「a1」の部分を、「a2」,…,「am」の各々に置換して(例えば、「80a1」の符号を「80am」のように置換して)読み替えればよい。
LFE71a1は、SRAM80a1、精度切替回路81a1、Δh生成部82a1、加算器83a1、h格納レジスタ84a1、反転判定部85a1、ビット格納レジスタ86a1、ΔE生成部87a1、判定部88a1を有する。
ここで、SRAM80a1、精度切替回路81a1、Δh生成部82a1、加算器83a1、h格納レジスタ84a1、反転判定部85a1、ビット格納レジスタ86a1、ΔE生成部87a1、判定部88a1は、各々、図8で説明した同名のハードウェアと同様の機能を有する。ただし、SRAM80a1(または精度切替回路81a1)および反転判定部85a1には、規模結合回路91により出力されたindex=y0および反転可否を示すフラグFy0が供給される。また、Δh生成部82a1には、規模結合回路91により出力された反転ビットqy0が供給される。
モード設定レジスタ75は、精度切替回路81a1,81a2,…,81amに対する重み係数のビット数(精度)の設定を行う。モード設定レジスタ75は、ランダムセレクタ部72に対して設定を行う信号線を有していない(ただし、当該信号線を有してもよい)。第3の実施の形態では、一例として、第2の実施の形態で示した次の5種類のモードを利用可能である。
第1のモードは、規模1kビット/精度128ビットのモードである。規模1kビット/精度128ビットのモードは、LFBを1個使用する。当該モードは、LFB70a,…,70hの何れか1個だけで実現可能である。
第2のモードは、規模2kビット/精度64ビットのモードである。規模2kビット/精度64ビットのモードは、LFBを2個使用する。例えば、当該モードは、LFB70a,70bの組合せ、LFB70c,70dの組合せ、LFB70e,70fの組合せ、および、LFB70g,70hの組合せのうちの何れか1つの組合せで実現可能である。
第3のモードは、規模4kビット/精度32ビットのモードである。規模4kビット/精度32ビットのモードは、LFBを4個使用する。例えば、当該モードは、LFB70a,70b,70c,70dの組合せ、および、LFB70e,70f,70g,70hの組合せのうちの何れか1つの組合せで実現可能である。
第4のモードは、規模4kビット/精度64ビットのモードである。規模4kビット/精度64ビットのモードは、LFBを8個使用する。当該モードは、LFB70a,…,70hの組合せを用いて実現可能である。ただし、図17で説明したように、1つのLFBにおいて使用されるLFEの数は、LFB1つが備えるLFEの数の半分となる。
第5のモードは、規模8kビット/精度16ビットのモードである。規模8kビット/精度16ビットのモードは、LFBを8個使用する。当該モードは、LFB70a,…,70hの組合せを用いて実現可能である。
また、第3の実施の形態の最適化装置26は、上記の規模1kビット/精度128ビットのモード、規模2kビット/精度64ビットのモード、規模4kビット/精度32ビットのモードを組合せて、同一問題または他の問題の演算を並列に実行可能にする。
そのため、規模結合回路91は、複数のLFB(LFBの組合せ)に対し、モード設定レジスタ92によるスピンビット数の変更に応じて、スピンビット数に相当する数のLFEを含むように、組合せるLFB数(組合せるグループ数)を選択する。規模結合回路91は、例えば次の回路構成を有する。
図20は、規模結合回路の回路構成例を示す図である。
規模結合回路91は、複数段にわたってツリー状に接続された選択回路91a1,91a2,91a3,91a4,91b1,91b2,91c1と、乱数生成部91dと、モード選択回路91e1,91e2,91e3,91e4,91e5,91e6,91e7,91e8を有する。
初段の選択回路91a1,…,91a4の各々には、LFB70a,…,70hのそれぞれが出力する変数qとFとΔEとindex=iの組(状態信号)が2組ずつ入力される。例えば、選択回路91a1には、LFB70a(#0)が出力する(qx0,Fx0,ΔEx0,index=x0)の組と、LFB70b(#1)が出力する(qx1,Fx1,ΔEx1,index=x1)の組が入力される。また、選択回路91a2には、LFB70c(#2)が出力する(qx2,Fx2,ΔEx2,index=x2)の組とLFB70d(#3)が出力する(qx3,Fx3,ΔEx3,index=x3)の組が入力される。選択回路91a3には、LFB70e(#4)が出力する(qx4,Fx4,ΔEx4,index=x4)の組とLFB70f(#5)が出力する(qx5,Fx5,ΔEx5,index=x5)の組が入力される。選択回路91a4には、LFB70g(#6)が出力する(qx6,Fx6,ΔEx6,index=x6)の組とLFB70h(#7)が出力する(qx7,Fx7,ΔEx7,index=x7)の組が入力される。
そして、選択回路91a1,…,91a4の各々は、乱数生成部91dが出力する1ビット乱数に基づいて、2組のうちの一方の組の(x,F,ΔE,index=i)を選択する。このとき、選択回路91a1,…,91a4の各々は、Fが1である組を優先的に選択し、両方の組が1の場合には1ビット乱数に基づいて何れか一方の組を選択する(なお、選択回路91b1,91b2,91c1も同様)。ここで、乱数生成部91dは、1ビット乱数を選択回路毎に個別に生成し、各選択回路に供給する。また、選択回路91a1,…,91a4の各々は、どちらの組を選択したかを示す識別値を、両組に含まれるindexに基づいて生成し、選択した変数qとFとΔEと識別値とを含む状態信号を出力する。なお、選択回路91a1,…,91a4の各々が出力する識別値は、入力されたindexよりも1ビット増える。
2段目の選択回路91b1,91b2の各々には、選択回路91a1,…,91a4が出力する状態信号が2つずつ入力される。例えば、選択回路91b1には、選択回路91a1,91a2が出力する状態信号が入力され、選択回路91b2には、選択回路91a3,91a4が出力する状態信号が入力される。
そして、選択回路91b1,91b2の各々は、2つの状態信号と、乱数生成部91dが出力する1ビット乱数に基づいて、2つの状態信号の何れか一方を選択する。また、選択回路91b1,91b2の各々は、選択した状態信号に含まれる識別値について、何れの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
最終段の選択回路91c1には、選択回路91b1,91b2が出力する状態信号が2つ入力される。選択回路91c1は、2つの状態信号と乱数生成部91dが出力する1ビット乱数に基づいて、2つの状態信号の何れか一方を選択する。また、選択回路91c1は、選択した状態信号に含まれる識別値について、何れの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
前述のように、識別値はindexに相当する。規模結合回路91は、変数qとFとΔEと同様にして、各選択回路により、各ランダムセレクタ部から入力されたindexの選択を行うことで、反転ビットに対応するindexを出力してもよい。この場合、各ランダムセレクタ部は、各LFEから変数qやフラグFと共にindexの供給を受けることになる。制御部25aは、各LFEの所定のindex格納用のレジスタに対してLFBの組合せに応じたindexの設定を行うことが考えられる。
モード選択回路91e1,…,91e8の各々は、規模(すなわち、1kビット、2kビット、4kビットおよび8kビット)に応じた入力端子を有する。図中、モード選択回路91e1,…,91e8の各々に表記された「1」は規模1kビットに対応する入力端子を示す。同「2」は規模2kビットに対応する入力端子を示す。同「4」は規模4kビット(ただし、精度32ビット)に対応する入力端子を示す。同「8」は規模8kビット(または規模4kビット/精度64ビット)に対応する入力端子を示す。
モード選択回路91e1の規模1kビットの入力端子には、LFB70a(#0)が出力する状態信号が入力される。モード選択回路91e2の規模1kビットの入力端子には、LFB70b(#1)が出力する状態信号が入力される。モード選択回路91e3の規模1kビットの入力端子には、LFB70c(#2)が出力する状態信号が入力される。モード選択回路91e4の規模1kビットの入力端子には、LFB70d(#3)が出力する状態信号が入力される。モード選択回路91e5の規模1kビットの入力端子には、LFB70e(#4)が出力する状態信号が入力される。モード選択回路91e6の規模1kビットの入力端子には、LFB70f(#5)が出力する状態信号が入力される。モード選択回路91e7の規模1kビットの入力端子には、LFB70g(#6)が出力する状態信号が入力される。モード選択回路91e8の規模1kビットの入力端子には、LFB70h(#7)が出力する状態信号が入力される。
モード選択回路91e1,91e2の各々の規模2kビットの入力端子には、選択回路91a1が出力する状態信号が入力される。モード選択回路91e3,91e4の各々の規模2kビットの入力端子には、選択回路91a2が出力する状態信号が入力される。モード選択回路91e5,91e6の各々の規模2kビットの入力端子には、選択回路91a3が出力する状態信号が入力される。モード選択回路91e7,91e8の各々の規模2kビットの入力端子には、選択回路91a4が出力する状態信号が入力される。
モード選択回路91e1,91e2,91e3,91e4の各々の規模4kビットの入力端子には、選択回路91b1が出力する状態信号が入力される。モード選択回路91e5,91e6,91e7,91e8の各々の規模4kビットの入力端子には、選択回路91b2が出力する状態信号が入力される。
モード選択回路91e1,…,91e8の各々の規模8kビットの入力端子には、選択回路91c1が出力する状態信号が入力される。
モード選択回路91e1,…,91e8の各々は、モード設定レジスタ92による規模(スピンビット数)の設定を受け付ける。ただし、図20では、モード設定レジスタ92からモード選択回路91e2,…,91e8の各々に対する信号線を「…」の表記により略記している。モード選択回路91e1,…,91e8の各々は、設定された規模に応じた入力端子に入力された状態信号を選択して、(x,F,index=j)をLFB70a,…,70hへ出力し、ΔEを加算器93a,…,93hへ出力する。
例えば、モード選択回路91e1は、(xy0,Fy0,index=y0)をLFB70aへ出力し、ΔEy0を加算器93aへ出力する。加算器93aは、ΔEy0を基にEを更新する。モード選択回路91e2は、(xy1,Fy1,index=y1)をLFB70bへ出力し、ΔEy1を加算器93bへ出力する。加算器93bは、ΔEy1を基にEを更新する。モード選択回路91e3は、(xy2,Fy2,index=y2)をLFB70cへ出力し、ΔEy2を加算器93cへ出力する。加算器93cは、ΔEy2を基にEを更新する。モード選択回路91e4は、(xy3,Fy3,index=y3)をLFB70dへ出力し、ΔEy3を加算器93dへ出力する。加算器93dは、ΔEy3を基にEを更新する。モード選択回路91e5は、(xy4,Fy4,index=y4)をLFB70eへ出力し、ΔEy4を加算器93eへ出力する。加算器93eは、ΔEy4を基にEを更新する。モード選択回路91e6は、(xy5,Fy5,index=y5)をLFB70fへ出力し、ΔEy5を加算器93fへ出力する。加算器93fは、ΔEy5を基にEを更新する。モード選択回路91e7は、(xy6,Fy6,index=y6)をLFB70gへ出力し、ΔEy6を加算器93gへ出力する。加算器93gは、ΔEy6を基にEを更新する。モード選択回路91e8は、(xy7,Fy7,index=y7)をLFB70hへ出力し、ΔEy7を加算器93hへ出力する。加算器93hは、ΔEy7を基にEを更新する。
すなわち、第3の実施の形態の最適化装置26は、あるLFB(グループ)に属する各LFEから出力された反転可否を示す信号に基づいて何れかのビットを選択し、選択したビットを示す信号を規模結合回路91に出力するランダムセレクタ部をLFB毎に有する。規模結合回路91は、スピンビット数の変更に応じて1以上のLFBを組合せ、当該1以上のLFBの各々に対応するランダムセレクタ部により選択されたビットを示す信号に基づいて反転させるビットを選択する。規模結合回路91は、反転させるビットを示す信号を当該1以上のLFBに属する各LFEに出力する。
ここで、モード設定レジスタ92は、モード選択回路91e1,…,91e8に対して、個別に規模の設定を行う。ただし、ある規模のモードにおいて、組合せて利用されるLFBに対応するモード選択回路には、共通の規模が設定される。
例えば、モード設定レジスタ92は、LFBの第1の組合せに対応する第1のスピンビット列のスピンビット数とLFBの第2の組合せに対応する第2のスピンビット列のスピンビット数とを、同じビット数、または、異なるビット数に設定してもよい。また、モード設定レジスタ75を含む各LFBのモード設定レジスタは、LFBの第1の組合せに属するLFEに対する重み係数のビット数とLFBの第2の組合せに属するLFEに対する重み係数のビット数とを、同じビット数、または、異なるビット数に設定してもよい。
例えば、LFB70a,70bを組合せて利用して規模2kビットのモードを利用する場合、モード設定レジスタ92からモード選択回路91e1,91e2へ、規模2kビットのモードを選択する選択信号が供給される。このとき、例えば、最適化装置26は、モード設定レジスタ92の設定により残りの6つのLFBを利用して、LFB70a,70bによる演算と同じ問題、または、別の問題を並列に実行することが可能である。例えば、規模結合回路91は、残りの6つのLFBに対して、6つのLFBの各々で規模1kビットのモードを6つ実現してもよい。また、規模結合回路91は、6つのLFBのうちの2つずつ組合せにより、規模2kビットのモードを3つ実現してもよい。更に、規模結合回路91は、6つのLFBのうち2つのLFBの組合せにより、規模2kビットのモードを実現し、他の4つのLFBの組合せにより、規模4kビットのモードを実現してもよい。
並列に実現するモードの組合せは、上記の組合せに限らず、例えば、規模1kビットのモードが8つの組合せ、規模2kビットのモードが4つの組合せ、規模1kビットのモードが4つと規模2kビットのモードが2つの組合せなど、種々の組合せが考えられる。
このように、規模結合回路91は、モード設定レジスタ92により複数のスピンビット列の各々に対するスピンビット数の設定を受け付け、複数のスピンビット列の各々のスピンビット数に対して、組合せるLFB数(グループ数)を選択し、LFBを組合せる。これにより、1つの最適化装置26上に複数のイジングモデルを実現できる。
なお、組合せて利用されるLFBの組に対応するE格納レジスタの組には、共通のエネルギーが格納される。例えば、LFB70a,70bの組合せで利用する場合、E格納レジスタ94a,94bに格納されるE,Eは同じ値となる。この場合、当該LFB70a,70bの組に対するエネルギー値を読み出すとき、制御部25aは、E格納レジスタ94a,94bの何れか一方(例えば、LFB70aに対応するE格納レジスタ94a)に格納されたエネルギー値を読み出せばよい。制御部25aは、LFBの他の組合せに対しても同様にしてエネルギー値を読み出す。
第3の実施の形態では、制御部25aは、図15のステップS10として並列に演算する各問題に対する初期値や動作条件のCPU21による入力を受け付ける。そして、制御部25aは、ステップS11において、各問題に応じた規模/精度を、1つの問題に対して利用するLFBのグループ毎に、LFBのモード設定レジスタおよびモード設定レジスタ92に設定する。
例えば、制御部25aは、第1の問題について、規模2kビット/精度64ビットをLFB70a,70bのモード設定レジスタに設定すると共に、モード選択回路91e1,91e2に規模2kビットに対する出力を行うようモード設定レジスタ92に設定する。また、制御部25aは、第2の問題について、規模2kビット/精度64ビットをLFB70c,70dのモード設定レジスタに設定すると共に、モード選択回路91e3,91e4に規模2kビットに対する出力を行うようモード設定レジスタ92に設定する。
この場合、最適化装置26では、2つの問題(あるいは、両問題は同一問題でもよい)を並列に演算可能である。具体的には、制御部25aは、各問題に対応するLFBの組合せに対して、図16で示したフローチャートの手順を行うように各LFBを制御する。例えば、制御部25aは、問題毎に、温度パラメータTなどの各種パラメータの初期値、重み係数、ある温度パラメータでのビット更新の回数および温度変更回数などを、個別に受け付けて、該当の問題の演算を行うLFBの組合せに属する各LFBに入力し、LFBの各組合せにより演算を並列実行させる。
制御部25aは、演算終了後、LFB70a,70bの各LFEから第1の問題に対するスピンビット列を読み出して、第1の問題の解とする。また、制御部25aは、演算終了後、LFB70c,70dの各LFEから第2の問題に対するスピンビット列を読み出して、第2の問題の解とする。3以上の問題も同様にして、並列に演算可能である。これにより、複数の問題に対する演算を効率的に実行できる。
また、同一問題をLFBの複数の組により並列に解く場合、制御部25aは、例えば、レプリカ交換法と呼ばれる手法により、演算を高速化することが考えられる。レプリカ交換法では、LFBの各組(各レプリカ)で異なる温度パラメータによるスピンビット列の更新を行い、所定回数の更新後に、所定確率で温度パラメータをLFBの組の間(すなわち、レプリカ間)で交換することで、解の探索を高速化する。
あるいは、解の探索方法として、図16の開始から終了までの手順を繰り返し行い、複数の演算結果の中から、最小となるエネルギーのスピンビット列を解として求める方法も考えられる。この場合、制御部25aは、LFBの複数の組を用いて同一問題を並列に解くことで、上記繰り返し回数を減らし、演算を高速化することができる。
ところで、第2,第3の実施の形態で例示した最適化装置25,26を用いて演算可能な最適化問題には、種々の分野の問題が考えられる。例えば、学問や業種などの分野に応じて、求められる問題の規模や、問題の表現の精度が変わり得る。
図21は、問題毎の規模/精度の必要範囲の例を示す図である。
グラフ400は、横軸を規模比(規模の大きさを示す度合い)、縦軸を精度比(精度の大きさを示す度合い)とし、3種類の分野の問題に対して求められる規模精度の範囲を例示している。規模比は、規模の基準となる規模基準値に対して実際に所要される規模値(スピンビット数)の比である。精度比は、精度の基準となる精度基準値に対して実際に所要される精度値(結合係数のビット数)の比である。
領域401は、電力分野の問題に対して求められる規模比/精度比の範囲を示す。領域402は、金融分野の問題に対して求められる規模比/精度比の範囲を示す。領域403は、生命科学分野の問題に対して求められる規模比/精度比の範囲を示す。
例えば、領域401によれば、電力分野の問題では、比較的高い精度比が求められることが多い。また、領域402によれば、金融分野の問題では、規模比は比較的小さくてよいが、比較的高い精度比が求められることがある。更に、生命科学分野の問題では、精度比は比較的低くてよいが、比較的大きい規模比が求められることがある。ただし、ここで例示した各分野において所要される規模比/精度比は一例であり、今後、各分野で扱われる問題に応じて、所要される規模比/精度比の範囲は変わり得る。
一方、問題毎の規模および精度に合った最適化装置を製造することも考えられるが、効率的ではない。
そこで、第2,第3の実施の形態では、1チップの最適化装置25,26によって、種々の規模/精度のモードを実現可能とすることで、種々の分野の組合せ最適化問題に対応可能になる。
図22は、規模精度の選択可能範囲の例を示す図である。
グラフ500は、最適化装置25,26により実現可能な規模精度の選択可能範囲の例を示す。ここで、LFE毎のSRAMにおいて重み係数の格納のために確保される容量の上限が128kビットであり、最適化装置25,26の各々の全体におけるLFEの数n=8192であるとする。上記で説明したように、最適化装置25,26は、例えば、5種類のモードを実現可能である。ただし、グラフ500のハッチングされた領域で示される範囲内において、他の規模/精度のモードを利用可能としてもよい。LFE毎のSRAMの容量を増やすことで、更に大きな規模/精度のモードも実現可能である。
最適化装置25,26では、規模/精度のモードを可変とした上で、各LFEの種々の使用パターンを実現する。
図23は、LFEの使用パターンの例を示す図である。
図23(A)は、第2,第3の実施の形態で実現可能なn個のLFEの使用パターン例(その1)を示す。例えば、最適化装置26は、n個のLFEのうち、α個のLFEを含むLFE群710(すなわち、LFBの第1の組合せ)を用いて第1のイジングモデルXを実現する。また、最適化装置26は、残りのβ個のLFEを含むLFE群720を不使用とする。最適化装置25も同様に、LFE群710により第1のイジングモデルXを実現し、LFE群720を不使用としてもよい。
図23(B)は、第3の実施の形態で実現可能なn個のLFEの使用パターン例(その2)を示す。例えば、最適化装置26は、n個のLFEのうち、α個のLFEを含むLFE群710(すなわち、LFBの第1の組合せ)を用いて、第1のイジングモデルXを実現する。また、最適化装置26は、残ったLFEのうち、α個のLFEを含むLFE群730(すなわち、LFBの第2の組合せ)を用いて、第1のイジングモデルXを実現する。同一問題に対する演算の並列度を高めることで、解の収束性を早め演算を高速化することができる。
図23(C)は、第3の実施の形態で実現可能なn個のLFEの使用パターン例(その3)を示す。例えば、最適化装置26は、n個のLFEのうち、α個のLFEを含むLFE群710(すなわち、LFBの第1の組合せ)を用いて、第1のイジングモデルXを実現する。また、最適化装置26は、残ったLFEのうち、γ個(γ=αでもよいし、γ≠αでもよい)のLFEを含むLFE群740(すなわち、LFBの第2の組合せ)を用いて、第2のイジングモデルYを実現する。これにより、異なる問題を並列に演算することができる。
次に、ユーザによる最適化装置26の利用フローの例を説明する。以下では、主に最適化装置26を例示するが、最適化装置25の場合も同様の利用フローである。
図24は、最適化装置の利用フローの例を示す図である。
(S101)CPU21は、ユーザが解きたい問題を示すデータ601を、クライアント30からNIC24を介して受け付ける。クライアント30と、NIC24とにより、情報処理装置20への各種データを入力する入力部および基底状態探索の結果として得られた解を、ユーザに把握しやすい結果情報として通知する通知部が実現される。CPU21は、ライブラリ21aの機能により、データ601をイジングモデルの基底状態の探索問題に変換する。その結果、CPU21は、問題の規模(スピンビット数)を示す規模データ611、問題の表現の精度を表す精度データ612、エネルギーの初期値を表すエネルギーデータ613および規模/精度に応じた規模精度モードデータ614を生成する。規模データ611は、スピンビット列を示すバイナリデータでもよい。精度データ612は、該当の精度で表されたスピンビット間の重み係数を含んでもよい。CPU21は、問題から適切な規模精度モードを決定し、規模精度モードデータ614を生成する。
(S102)CPU21は、規模データ611、精度データ612、エネルギーデータ613を、初期値として制御部25aに入力する。
(S103)CPU21は、ユーザ指定動作条件602の入力を受け付ける。ユーザ指定動作条件602は、例えば、ある温度パラメータにおける状態更新の回数、温度パラメータの更新回数、温度パラメータの下げ幅および温度パラメータの初期値などを含む。また、ユーザ指定動作条件602は、組み合せるLFBの数を含んでもよい。CPU21は、当該組み合せるLFBの数を、規模精度モードデータ614に含める。CPU21は、規模精度モードデータ614およびユーザ指定動作条件602を、動作条件として制御部25aに入力する。規模精度モードデータ614は、モード設定レジスタ75を含む各LFEのモード設定レジスタおよびモード設定レジスタ92に設定される。
(S104)CPU21は、ステップS102,S103が完了すると、制御部25aに対して基底状態の探索を行う演算の実行開始を指示する。
(S105)CPU21は、最適化装置26による演算が完了すると、最適化装置26から演算結果615を取得し、ユーザにとって把握し易い結果情報(例えば、結果表示画面の情報)に変換する。CPU21は、変換後の結果情報を、ユーザが解きたい問題の解616として、クライアント30に送信する。
このように、CPU21は、ユーザにより入力された問題に応じてスピンビット数と重み係数のビット数とを決定する。制御部25aは、スピンビット数と重み係数のビット数と重み係数とを示す情報をCPU21から受け付ける。制御部25aは、スピンビット数と重み係数のビット数とをモード設定レジスタ55(あるいは、モード設定レジスタ75,92)に設定する。制御部25aは、スピンビット数に相当する数のLFEの各々のSRAMに格納する。
こうして、ユーザは、自身が解きたい問題に応じた規模/精度により、最適化装置25,26による演算を実行させることが可能になる。例えば、最適化装置26により、同一のユーザによる同一問題、または、異なる問題を並列に演算することも可能である。また、最適化装置26により、異なるユーザによる異なる問題を並列に演算することも可能である。すなわち、解きたい問題に応じた適切な規模/精度で演算可能にすることで、空きLFB(あるいは空きLFE)を用いて、他の問題を並列に演算可能になる。また、複数のユーザで1チップの最適化装置25,26を共用可能になる。更に、複数の問題で1チップの最適化装置25,26を共用可能になる。
また、上記に例示した機能を有する最適化装置(あるいは、最適化システム)も考えられる。当該最適化装置(あるいは、最適化システム)は、入力部と変換部と制御部と表示部とを有する。
入力部は、解くべき問題と動作条件とを入力する。入力部は、例えば、マウスやキーボードなどの入力デバイスでもよいし、NIC(例えば、NIC24)およびクライアント端末(例えば、クライアント30)により実現されてもよい。
変換部は、入力した問題をイジングモデルの基底状態の探索問題に変換するとともに、探索問題の規模を示す規模情報と、探索問題の表現の精度を表す精度情報と、探索問題のエネルギーの初期値を表すエネルギー情報と、規模および精度に応じた規模精度モード情報とを生成する。変換部は、例えば、ライブラリ21aおよびドライバ21bの機能を発揮するCPU(例えば、CPU21)などのプロセッサでもよい。変換部は、FPGAなどの半導体集積回路により実現されてもよい。
制御部は、規模情報と、精度情報と、エネルギー情報(あるいは、規模情報と精度情報とエネルギー情報とに応じたスピンビット列の初期値、結合係数およびエネルギーの初期値)を入力するとともに動作条件と規模精度モード情報とを入力し、基底状態の探索を行う演算を実行して解を出力する。制御部は、例えば、LFB50(あるいはLFB70a,…,70h)に対して、規模情報と、精度情報と、エネルギー情報(あるいは、規模情報と精度情報とエネルギー情報とに応じたスピンビット列の初期値、結合係数およびエネルギーの初期値)を入力するとともに動作条件と規模精度モード情報とを入力し、LFBを用いて基底状態の探索を行う演算を実行して解を出力する制御部25aでもよい。制御部は、例えば制御部25aとLFB50(あるいはLFB70a,…,70h)とを含む半導体チップであって、イジングモデルの基底状態の探索を行う半導体チップでもよい。すなわち、制御部は、規模情報と、精度情報と、エネルギー情報(あるいは、規模情報に応じたビット数のスピンビット列、精度情報に応じたビット数の結合係数およびエネルギー情報に応じたエネルギーの初期値)および、動作条件、並びに、規模精度モード情報に基づいて、イジングモデルの基底状態の探索を行う演算を実行して解を出力する半導体チップでもよい。規模情報は、規模の基準となる規模基準値に対する規模比により表されてもよい。精度情報は、精度の基準となる精度基準値に対する精度比により表されてもよい。
表示部は、制御部による基底状態の探索の結果として得られた解を表示する。表示部は、ディスプレイでもよいし、NICおよびクライアント端末により実現されてもよい。例えば、変換部は、基底状態の探索の結果として得られた解を、可視化した表示情報に変換する。表示部は、当該可視化した表示情報を表示する。
例示した最適化装置により、規模/精度を可変にできる。ユーザは、解きたい問題に応じた規模/精度により、最適化装置による演算を実行させることが可能になる。
なお、第1の実施の形態の最適化装置1の制御は、最適化装置1を制御するコンピュータが備えるプロセッサがプログラムを実行することで実現されてもよい。例えば、プログラムは当該コンピュータが備えるRAMに格納される。第2,第3の実施の形態の最適化装置25,26の制御は、CPU21にプログラムを実行させることで実現されてもよい。プログラムは、コンピュータ読み取り可能な記録媒体41に記録できる。
例えば、プログラムを記録した記録媒体41を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体41に記録されたプログラムまたは他のコンピュータから受信したプログラムを、DRAM22や記憶装置23に格納し(インストールし)、DRAM22や記憶装置23からプログラムを読み込んで実行してもよい。
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
1 最適化装置
1a1,…,1aK,…,1aN ビット演算回路
2 選択回路部
3 閾値生成部
4 乱数生成部
5 設定変更部
6 制御部
11 記憶部
12 精度切替回路
13 反転判定部
14 ビット保持部
15 エネルギー変化計算部
16 状態遷移判定部

Claims (18)

  1. イジングモデルの状態を表すビット列のうちのビット間の相互作用の大きさを示す係数を記憶する記憶部と、
    前記ビット列のうちの何れかのビットが反転されると、前記記憶部から読み出した反転された前記ビットと自ビットとに対応する係数を用いた前記イジングモデルのエネルギー変化の計算に応じて、前記自ビットの反転可否を示す信号を出力する複数のビット演算回路と、
    前記複数のビット演算回路のうち前記ビット列の第1のビット数のビット演算回路の各々から出力された反転可否を示す信号に基づいて選択した前記ビット列のうち反転させるビットを示す信号を、前記第1のビット数のビット演算回路の各々に出力する選択回路部と、
    前記選択回路部に対する前記第1のビット数の変更、および、前記第1のビット数のビット演算回路の各々に対する前記係数の第2のビット数の変更を行う設定変更部と、
    を有する最適化装置。
  2. 前記複数のビット演算回路の各々は、前記設定変更部による前記第2のビット数の変更に応じて、前記記憶部から読み出す係数の第2のビット数を変更する精度切替回路を有する、
    請求項1記載の最適化装置。
  3. 前記記憶部は、前記複数のビット演算回路の各々に設けられており、
    前記精度切替回路は、前記設定変更部による前記第2のビット数の変更に応じて、前記自ビットと他ビットとに関する係数のうちの一部を、前記複数のビット演算回路のうち、前記ビット列に使用されない他のビット演算回路が有する前記記憶部から読み出す、
    請求項2記載の最適化装置。
  4. 前記複数のビット演算回路は、複数のグループに分けられており、
    前記選択回路部は、前記設定変更部による前記第1のビット数の変更に応じて、前記複数のビット演算回路のうち、前記第1のビット数のビット演算回路を含むように、1以上のグループを組合せる規模結合回路を有する、
    請求項1記載の最適化装置。
  5. 前記選択回路部は、1つのグループに属する各ビット演算回路から出力された前記反転可否を示す信号に基づいて選択したビットを示す信号を、前記規模結合回路に出力するセレクタ部を、前記複数のグループの各々に対して有し、
    前記規模結合回路は、前記1以上のグループの各々に対応する前記セレクタ部により選択された前記ビットを示す信号に基づいて選択した反転させる前記ビットを示す信号を、前記1以上のグループに属する各ビット演算回路に出力する、
    請求項4記載の最適化装置。
  6. 前記規模結合回路は、前記設定変更部による複数の前記ビット列の各々に対する前記第1のビット数の設定を受け付け、複数の前記ビット列の各々に対して、前記1以上のグループを組合せる、
    請求項4記載の最適化装置。
  7. グループの複数の組合せのうち、第1の組合せによる前記イジングモデルに対する演算と、第2の組合せによる前記イジングモデルまたは他のイジングモデルに対する演算とを並列に実行させる制御部、
    を更に有する請求項6記載の最適化装置。
  8. 前記設定変更部は、グループの複数の組合せのうち、第1の組合せに対応する第1のビット列の前記第1のビット数と第2の組合せに対応する第2のビット列の前記第1のビット数とを、同じビット数、または、異なるビット数に設定する、
    請求項6記載の最適化装置。
  9. 前記設定変更部は、グループの複数の組合せのうち、第1の組合せに属するビット演算回路に対する前記第2のビット数と第2の組合せに属するビット演算回路に対する前記第2のビット数とを、同じビット数、または、異なるビット数に設定する、
    請求項6記載の最適化装置。
  10. 前記選択回路部は、前記複数のビット演算回路のうち、前記第1のビット数のビット演算回路以外の他のビット演算回路により出力された反転可否を示す信号を、強制的に反転不可に設定し、前記第1のビット数のビット演算回路により出力された反転可否を示す信号および前記他のビット演算回路に対して設定した反転不可を示す信号に基づいて選択した反転させる前記ビットを示す信号を、前記第1のビット数のビット演算回路だけでなく前記他のビット演算回路にも出力する、
    請求項1記載の最適化装置。
  11. 入力された問題に応じて前記第1のビット数と前記第2のビット数とを決定する演算部による、前記第1のビット数と前記第2のビット数とを示す情報の入力を受け付け、前記第1のビット数と前記第2のビット数とを前記設定変更部に入力する制御部、
    を更に有する請求項1記載の最適化装置。
  12. 最適化装置の制御方法において、
    前記最適化装置が有する複数のビット演算回路が、イジングモデルの状態を表すビット列のうちの何れかのビットが反転されると、前記ビット列のうちの自ビットと他ビットとの相互作用の大きさを示す係数を記憶する記憶部から読み出した、反転された前記ビットに対応する係数を用いた前記イジングモデルのエネルギー変化の計算に応じて前記自ビットの反転可否を示す信号を出力し、
    前記最適化装置が有する選択回路部が、前記複数のビット演算回路のうち前記ビット列の第1のビット数のビット演算回路の各々から出力された反転可否を示す信号に基づいて選択した前記ビット列のうち反転させるビットを示す信号を、前記第1のビット数のビット演算回路の各々に出力し、
    前記最適化装置が有する設定変更部が、前記選択回路部に対する前記第1のビット数の変更、および、前記第1のビット数のビット演算回路の各々に対する前記係数の第2のビット数の変更を行う、
    最適化装置の制御方法。
  13. 最適化装置の制御プログラムにおいて、
    前記最適化装置が有する複数のビット演算回路に、イジングモデルの状態を表すビット列のうちの何れかのビットが反転されると、前記ビット列のうちの自ビットと他ビットとの相互作用の大きさを示す係数を記憶する記憶部から読み出した、反転された前記ビットに対応する係数を用いた前記イジングモデルのエネルギー変化の計算に応じて前記自ビットの反転可否を示す信号を出力させ、
    前記最適化装置が有する選択回路部に、前記複数のビット演算回路のうち前記ビット列の第1のビット数のビット演算回路の各々から出力された反転可否を示す信号に基づいて選択した前記ビット列のうち反転させるビットを示す信号を、前記第1のビット数のビット演算回路の各々に出力させ、
    前記最適化装置が有する設定変更部に、前記選択回路部に対する前記第1のビット数の変更、および、前記第1のビット数のビット演算回路の各々に対する前記係数の第2のビット数の変更を行わせる、
    最適化装置の制御プログラム。
  14. 解くべき問題と動作条件とを入力する入力部と、
    入力した前記問題をイジングモデルの基底状態の探索問題に変換するとともに、前記探索問題の規模を示す規模情報と、前記探索問題の表現の精度を表す精度情報と、前記探索問題のエネルギーの初期値を表すエネルギー情報と、規模および精度に応じた規模精度モード情報とを生成する変換部と、
    前記規模情報と、前記精度情報と、前記エネルギー情報を入力するとともに前記動作条件と前記規模精度モード情報とを入力し、基底状態の探索を行う演算を実行して解を出力する制御部と、
    前記制御部による基底状態の探索の結果として得られた解を表示する表示部と、
    を有する最適化装置。
  15. 前記変換部は、前記基底状態の探索の結果として得られた解を、可視化した表示情報に変換し、
    前記表示部は、前記可視化した表示情報を表示する請求項14の最適化装置。
  16. 前記規模情報は、規模の基準となる規模基準値に対する規模比により表され、
    前記精度情報は、精度の基準となる精度基準値に対する精度比により表される、
    請求項14又は15に記載の最適化装置。
  17. 最適化装置の制御方法において、
    前記最適化装置が有する入力部が、解くべき問題と動作条件とを入力し、
    前記最適化装置が有する変換部が、入力した前記問題をイジングモデルの基底状態の探索問題に変換するとともに、前記探索問題の規模を示す規模情報と、前記探索問題の表現の精度を表す精度情報と、前記探索問題のエネルギーの初期値を表すエネルギー情報と、規模および精度に応じた規模精度モード情報とを生成し、
    前記最適化装置が有する制御部が、前記規模情報と、前記精度情報と、前記エネルギー情報を入力するとともに前記動作条件と前記規模精度モード情報とを入力し、基底状態の探索を行う演算を実行して解を出力し、
    前記最適化装置が有する表示部が、前記制御部による基底状態の探索の結果として得られた解を表示する、
    最適化装置の制御方法。
  18. 最適化装置の制御プログラムにおいて、
    前記最適化装置が有する入力部から、解くべき問題と動作条件とを入力させ、
    前記最適化装置が有する変換部に、入力した前記問題をイジングモデルの基底状態の探索問題に変換させるとともに、前記探索問題の規模を示す規模情報と、前記探索問題の表現の精度を表す精度情報と、前記探索問題のエネルギーの初期値を表すエネルギー情報と、規模および精度に応じた規模精度モード情報とを生成させ、
    前記最適化装置が有する制御部に、前記規模情報と、前記精度情報と、前記エネルギー情報を入力するとともに前記動作条件と前記規模精度モード情報とを入力し、基底状態の探索を行う演算を実行して解を出力させ、
    前記最適化装置が有する表示部に、前記制御部による基底状態の探索の結果として得られた解を表示させる、
    最適化装置の制御プログラム。
JP2020546656A 2018-09-14 2018-09-14 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム Active JP7004937B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2018/034233 WO2020054061A1 (ja) 2018-09-14 2018-09-14 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム

Publications (2)

Publication Number Publication Date
JPWO2020054061A1 JPWO2020054061A1 (ja) 2021-05-13
JP7004937B2 true JP7004937B2 (ja) 2022-01-21

Family

ID=69776982

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020546656A Active JP7004937B2 (ja) 2018-09-14 2018-09-14 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム

Country Status (5)

Country Link
US (1) US11886780B2 (ja)
EP (1) EP3852028A4 (ja)
JP (1) JP7004937B2 (ja)
CA (1) CA3109735A1 (ja)
WO (1) WO2020054061A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7410394B2 (ja) 2020-03-26 2024-01-10 富士通株式会社 最適化装置及び最適化方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018041351A (ja) 2016-09-09 2018-03-15 富士通株式会社 情報処理装置、イジング装置及び情報処理装置の制御方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3260357B2 (ja) * 1990-01-24 2002-02-25 株式会社日立製作所 情報処理装置
US9633715B2 (en) * 2013-05-31 2017-04-25 Hitachi, Ltd. Semiconductor device capable of attaining ground state in an ising model
JP5864684B1 (ja) * 2014-08-29 2016-02-17 株式会社日立製作所 半導体装置
JP5865457B1 (ja) * 2014-08-29 2016-02-17 株式会社日立製作所 情報処理システム及び管理装置
WO2017037903A1 (ja) 2015-09-02 2017-03-09 株式会社日立製作所 半導体システムおよび計算方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018041351A (ja) 2016-09-09 2018-03-15 富士通株式会社 情報処理装置、イジング装置及び情報処理装置の制御方法

Also Published As

Publication number Publication date
US20210173978A1 (en) 2021-06-10
EP3852028A1 (en) 2021-07-21
US11886780B2 (en) 2024-01-30
WO2020054061A1 (ja) 2020-03-19
EP3852028A4 (en) 2021-10-06
CA3109735A1 (en) 2020-03-19
JPWO2020054061A1 (ja) 2021-05-13

Similar Documents

Publication Publication Date Title
Da Silva et al. Parallel implementation of reinforcement learning Q-learning technique for FPGA
Dral MLatom: A program package for quantum chemical research assisted by machine learning
JP7063211B2 (ja) 最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置
Engin et al. An efficient genetic algorithm for hybrid flow shop scheduling with multiprocessor task problems
JP7206476B2 (ja) 最適化装置、最適化装置の制御方法及び最適化装置の制御プログラム
JP6874219B2 (ja) 情報処理装置、演算装置、及び情報処理方法
US11244026B2 (en) Optimization problem arithmetic method and optimization problem arithmetic device
CN111077768B (zh) 优化装置及优化装置的控制方法
CN111914378B (zh) 一种单振幅量子计算模拟方法及装置
JP7007520B2 (ja) 情報処理装置、演算装置、及び情報処理方法
JP2019185602A (ja) 最適化装置及び最適化装置の制御方法
JP2020140631A (ja) 最適化装置及び最適化装置の制御方法
JP6925546B1 (ja) 演算システム、情報処理装置、および最適解探索処理方法
CN111078621B (zh) 优化装置及优化装置的控制方法
JP7004937B2 (ja) 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム
JP2020187453A (ja) 最適化装置および最適化装置の制御方法
JP7219402B2 (ja) 最適化装置、最適化装置の制御方法及び最適化装置の制御プログラム
JP7087871B2 (ja) 最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置
Cortés-Antonio et al. Design and implementation of differential evolution algorithm on FPGA for double-precision floating-point representation
JP4612546B2 (ja) 並列計算方法及び装置
JP7155794B2 (ja) 最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置
JP7398401B2 (ja) 最適化方法、情報処理装置及びそれを用いたシステム
Song et al. A differential evolution algorithm with local search for resource investment project scheduling problems
JP7357795B2 (ja) 情報処理方法および情報処理システム
JP2022083776A (ja) 情報処理システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201112

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211130

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211213

R150 Certificate of patent or registration of utility model

Ref document number: 7004937

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150