Nobisuke
Dekisugi
RAG
Privacy policy
2021/01/24 05:39
量子コンピュータで素因数分解します。ただ、今回使うのは量子アニーリングのイジング型のマシンで、みなさんが思っているゲートのshorを使った解法とは違うものになります。
今回イジングマシンで素因数分解をする時には多体問題への対応が必要となります。ブール代数やグレブナー基底が出てきます。
今回は例題はなんでもいいですが、例題なのであまり大きすぎない適度な数字で。 ちなみに1Qbitという会社では200099までD-Waveに実装できているようですが今回はお手柔らかに、、、
15 = 3*5
くらいでやり方を見ていきます。
まずは量子ビットを用意します。表現したいのは5と3です。 求めたい素因数分解の解を下記の通りおいてみて、pとqを求めます。
15 = p*q
答えを知ってしまっているので、それぞれの数字を2進数で表現できるように変形します。 また、素因数分解ですので基本的に偶数がでませんので、最初の1は必ず使います。 そうすることによって3量子ビットを使って解くことができます。
量子アニーリング、イジングモデルの場合には問題を最小値問題に落とし込みます。 今回素因数分解を最小値問題に落とし込むには、左辺から右辺を引いて二乗します。 解くべき数式のハミルトニアンは下記のようになります。
これを最小の0にできたとき、素因数分解が完了します。基本的にはどんな素因数分解も上記のように解くことができます。
先ほどの式を展開してみます。まずは、pとqに先ほどの量子ビット表記した形を代入して、
こちらを展開します。展開した式は面倒ですが、、、
ここで、バイナリ値なのでよりもう少し整理できます。
これをまとめて、綺麗な形にできます。
今回三体問題はなので、新しい量子ビットを使って、
と表現します。その時に、が満たすべき条件を綺麗な式で表します。ペナルティ項を導入すると、元のハミルトニアンは、
となりました。
見やすくするために縦横4量子ビットずつのQUBOmatrixに配置して見ます。
通常はソフトウェアが自動変換してくれます。
このままではD-Waveのパラメータ設定のレンジをはみ出るので、全体を数分の一します。
これをかけていきますが、これは4量子ビットの完全結合ですので、D-Waveのキメラグラフに実装するには分解する必要があります。4量子ビットの完全結合は6量子ビットあれば表現できます。
今回は下記のようにエクセルでガンマの値や全体の倍率を決めてみました(D-Waveにかけるときに-1から1の間にパラメータが落ち着かないといけないので)。
これを入れてみると、できました!
複数の解が出てきましたが、一番エネルギーの低いのが基底状態のようです。確認してみます。
かつ、となり、余剰量子ビットとboolean reductionを用いた次元の削減も成功しています。ということで、無事解けました。ただ、これまでの問題の中で一番苦労しました。。。
D-Waveで暗号を解くのはとても大変な苦労です。。。
QAOAは量子ゲートマシンで量子断熱計算を使って組合せ最適化問題を解くようなアルゴリズムです。イジングハミルトニアンもしくはQUBOをつくって計算します。以前作った式を使って、
イジングモデルは量子ゲートモデルでは、パウリZオペレーターでハミルトニアンを書きますが、今回はイジングではなく01バイナリ値のQUBOで問題を書いてますので、自動変換が必要です。blueqatからpauli演算子に直してくれるツールを使います。
Copy from blueqat.pauli import qubo_bit as q from blueqat.pauli import * 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)
これで準備が整いました。
次にVQEを実行します。こちらもBlueqatに入ってます。
Copy from blueqat import vqe step = 2 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step)).run() print(result.most_common(5))
(((1, 0, 1), 0.5016550552468441), ((0, 1, 1), 0.17148299431308803), ((0, 0, 1), 0.08740672548230058), ((1, 1, 1), 0.08029439531924541), ((0, 1, 0), 0.07843866417857855))
(((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が出てきました。これは5x3に対応していますので合っています。これによって15=5x3ができました。以上です。
量子アニーリングと量子ゲートのおける組合せ最適化の暗号解読は同じ方法が取れますが、多体相互作用が活用できる分量子ゲートの方がやりやすいですが、実機となると結合数の問題もあり今後どうなるかわかりません。
© 2024, blueqat Inc. All rights reserved