こんにちは、2022/11/18からamazon braket経由でのD-Waveが利用できなくなります。そのための3つの移行方法を模索します。
1,D-Waveと契約する
2,疑似量子へ移行する
3,量子ゲートへ移行する
となります。
まず1ですが、これはD-Waveに問い合わせるしかありません。Amazonのmarket place経由でも結局D-Waveと契約することになるようですので。
2ですが、こちらは富士通さんのデジタルアニーラやNECさんのベクトルアニーリングが使えるかと思います。
https://jpn.nec.com/nec-vector-annealing-service/index.htm
このあたりも契約は必須のようです。
3ですが、弊社としてはD-Waveさんとの契約をしたい、富士通さんやNECさんとの契約をしたいというお客様に現在提供できるメニューがありません。弊社として対応が可能なのは、引き続き好きな時に利用したい、blueqatのクレジットを使ってなんとなくやりたいときは量子ゲートへの移行をお勧めします。ただ、注意点がいくつかあります。
1,大きな問題は実機では解けない
2,実用性がない
3,ちょっと難しい
などの課題はあります。まず、大きな問題ですが現在はIonQでも11量子ビット、Rigettiは80量子ビットですが接続の問題があります。結構課題が多く、大きな問題は解けません。
上記の課題もあり実用的ではなくまだ研究段階という感じです。実際に実用的に課題解決をしたい場合には、D-Waveと契約もしくは富士通さん・NECさんと契約をお勧めします。
あとは量子回路と呼ばれるものを使う必要があるので、定式化をするだけだった量子アニーリングと比べるとちょっとハードルは高いです。学習コストがかかります。
量子回路を使った時の組合せ最適化問題はいくつか利用方法がありますが一番簡単なのはQAOAをつかうことです。
QAOAはQUBOを作って計算します。
from blueqat.utils import qaoa
from blueqat.pauli import qubo_bit as q
hamiltonian = q(0)-q(1)
step = 1
result = qaoa(hamiltonian, step)
result.circuit.run(shots=100)
=> Counter({'01': 99, '11': 1})
上記はhamiltonianに式の形でQUBOを書いて計算します。StepはQAOAを計算するデジタルステップです。小さい問題ですと最初は1とか2で大丈夫です。そして、qaoa関数を使うと自動的に量子ゲート回路に変換をしてくれます。そして、その回路を100回実行しています。
回路を見てみると、
result.circuit
=> Circuit(2).h[:].rz(1.5687447587977312)[0].rz(-1.5687447587977312)[1].rx(1.6954270251364245)[:]
となりました。よくわからない計算がされていますね。QUBOmatrixからの変換もできます。
from blueqat.pauli import from_qubo
qubo_matrix = [[0,1],[1,0]]
gate_qubo = from_qubo(qubo_matrix)
print(gate_qubo)
result = qaoa(gate_qubo, step)
result.circuit.run(shots=100)
=> Counter({'00': 38, '01': 36, '10': 26})
QUBO行列は量子アニーリングやD-Waveでもよく出てきます。その行列を量子ゲートで読めるように自動変換してくれました。計算も無事できています。このように量子ゲートへの移行も可能ですが、かなり問題は小さい限られた量子ビットとなっています。
blueqatでは、今後数百量子ビットの量子ゲート計算ができるように新システムやライブラリを充実させていますので、少しお待ちください。以上です。