@yuichirominato 2019.02.15更新 115views

【素因数分解】QAOAで素因数分解


はじめに

以前乗算回路を使った素因数分解をNISQで行うという記事を書きました。QAOAの使い方を学ぶために最小値問題を使った素因数分解を見直します。

参考記事

D-Wave

NISQ

早速解いてみる

QAOAは量子ゲートマシンで量子断熱計算を使って組合せ最適化問題を解くようなアルゴリズムです。イジングハミルトニアンもしくはQUBOをつくって計算します。以前作った式を使って、

$$H = 128q_0q_1q_2 + 16q_0q_1 – 56q_0q_2 – 52q_0 – 48q_1q_2 – 96q_1 – 52q_2 + 196$$

詳しい内容は以前のD-Waveで素因数分解の記事をご覧ください。上にリンクがあります。

QAOAをQUBOを使ってハミルトニアンを作成

イジングモデルは量子ゲートモデルでは、パウリZオペレーターでハミルトニアンを書きますが、今回はイジングではなく01バイナリ値のQUBOで問題を書いてますので、自動変換が必要です。blueqatからpauli演算子に直してくれるツールを使います。

from blueqat.pauli import qubo_bit as q
hamiltonian = 128*q(0)*q(1)*q(2)+16*q(0)*q(1)-56*q(0)*q(2)-52*q(0)+48*q(1)*Z(2)-96*q(1)-52*q(2)

これで準備が整いました。

QAOA+VQEを実行

次にVQEを実行します。こちらもBlueqatに入ってます。

from blueqat import vqe

step = 2
result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step)).run()
print(result.most_common(5))

(((0, 1, 1), 0.41587841359182315), ((1, 1, 1), 0.22999518869583413), ((1, 1, 0), 0.09621729455616015), ((0, 0, 1), 0.09274077321094935), ((1, 0, 1), 0.08165837751142796))

一番最初に011が出てきました。これは5*3に対応していますので合っています。これによって15=5*3ができました。以上です。

Recommended


Wikiへ移動