Table of contents
  1. Quantum annealing for you 01
    1. 量子力学の活用と量子アニーリング
    2. 実際にD-Waveを使ってみる
    3. 使うときの工夫

Quantum annealing for you 01

量子力学の活用と量子アニーリング

電子サイズくらい小さなスケールになると、電子がトンネル効果を起こす(CPUなどのように、微小加工された配線上でリーク電流が発見されている)。
重ね合わせ状態から特定の状態を取得するには -> 重ね合わせを引き起こす横磁場を最初に強くする。その状態で探索した後、その横磁場を0にする。
量子トンネル効果を利用して「極小」を抜け出しながら探索できないか?という量子アニーリングの着想を、門脇・西森が提案(T. Kadowaki and H. Nishimori: Phys. Rev. E, 58, 5355, 1998)。純粋な基礎研究から提案され、海外のベンチャー企業D-Wave Systems Inc.が実用化した。2048量子ビットを搭載し、計算時間はおよそ20\(\mu\)s, そして消費電力は20fW(QPU)+20kW(冷凍器)。
D-Waveシステムズには2桁の量子アニーラマシンがあるらしい。
量子アニーリング用の量子ビットは、重ね合わせの状態を作るだけで良いのでそこまで高度な技術はいらない。量子回路用の量子ビットはより高度な超伝導量子ビットが必要なので、量子ビット数はまだ少ない。
15mKまで冷却している。
D-Waveのチップは設計の理由から、2000Qは8x16x16=2048, Advantageは8x16x15x3=5760。
D-Waveはデフォルトで20\(\mu\)sでアニーリング。設定時間を長くすると断熱量子計算としては精度がよくなるが、外からの熱ノイズ(外的環境要因)を受けるので悪くなることもある(良くなることもある)。

実際にD-Waveを使ってみる

sampleset.recordをprintしたときの一番右の0はchain_breakの割合。量子ビットをembedding_compositeで回路に載せるときに2つの量子ビットで1つの変数を担当することがある。その2つに強い相互作用を加えるが、その2つの量子ビットが同じ値になっているとき(変な答えになっているとき)をchain breakと呼ぶ。0でない答えは信用できないかも?
一番答えが変わるのはembedding。
QPUにembeddingしているところで時間がかかる。
普通は問題ごとにembeddingを変えた方が良い。
chain_breakがどの変数で発生しているかはinspectorで見ることができる。
Advantageは15本の相互作用を持っている。そうすると5000量子ビットがあるが、5000変数は計算できない。
EmbeddingCompositeを用いないで手動で埋め込むにはminorminerを用いる。
得られた一番良い解にchain_breakがあるとき、その解よりももっと良い答えが基本的にはあるかも?
アニーリングを繰り返し行って得られた回数が多い解には意味がある。量子アニーリングでは変数をflipしたときにあまり答えが変わらない安定な(ロバストな)解が出やすい。
変数を増やすと計算時間がかかったように見えるのは、embedding(古典で割り当てを計算)とデータ転送時間と実際の量子ビットの割り当てに時間がかかっている。
HybridSolverはQPUとCPUを20:1程度に使うソルバー。この場合はembeddingは必要ない。D-Waveマシン単体だと出ない解を、古典とのハイブリッドにより良い解が出せる。20000x20000まで使える。outputが1行しか出ないのはbest effortだけ選ばれているため。

使うときの工夫

量子アニーリングマシンは量子ビット間の相互作用を表現するための腕が少ない。このため、辞書型を使った方が送信時間も節約できる。
dimodのsamplerとopenjijのSAの違い…dimodのsamplerは非常に良い実装のsamplerに変わった。openjijはさらに工夫してこちらのSAが良い結果を出すようになりつつある。


Copyright © github-nakasho