NISQ時代はVQEがくるんじゃない?(ホントにくるのかな・・・?)って事で、簡単な問題をBlueqatで実装してみた。なお今回はプログラム動作確認という意味で、トリビアルな組み合わせ最適化問題を解いてみる。
今回解いた問題
以下のハミルトニアン$H$が最小となる$q(0)$、$q(1)$の組み合わせを解く。
$$
H = 1 - q(0) - q(1)
$$
なお、$q(0)$、$q(1)$は0もしくは1のどちらかの値となる。この問題設定では、$q(0)=q(1)=1$のときハミルトニアン$H=-1$で最小の値をとる。
補足情報
ちなみに、すべての$q(0), q(1)$の組み合わせについてハミルトニアンは以下の値をとる。
- $q(0)=0,q(1)=0 \rightarrow H = 1$
- $q(0)=0,q(1)=1 \rightarrow H = 0$
- $q(0)=1,q(1)=0 \rightarrow H = 0$
- $q(0)=1,q(1)=1 \rightarrow H = -1$
ソースコード
from blueqat.pauli import qubo_bit as q
from blueqat.vqe import Vqe, QaoaAnsatz
#Hamiltonian
h = 1.0 - q(0) - q(1)
ansatz = QaoaAnsatz(h, 10)
runner = Vqe(ansatz)
result = runner.run()
print("mode:")
print(result.most_common())
print("minimum value:")
print(runner.ansatz.get_energy(result.circuit, runner.sampler))
ソースコードの詳細の説明は割愛しますが、結構簡単に書けますね。
実行結果
mode:
(((1, 1), 0.9999999999996781),)
minimum value:
-0.9999999999996781
$(1,1)\rightarrow q(0)=1, q(1)=1$の解の組み合わせ
$0.9999999999996781 \rightarrow (1,1)$の出現確率(実行の都度結果が変わる)
最後に
すごい簡単に実装できました!今後は少し応用を利かせていきたいと思います。