common.title
Cloud support

Nobisuke

Dekisugi

RAG


autoQAOA
RAG for dev
Fortune telling app
Annealing
DEEPSCORE
Translation

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

<量子位相推定へ至る道?>位相差検出アルゴリズム

量子熊

2021/02/16 12:01

#blueqat

2

位相差検出アルゴリズム

こんにちは。

今回の記事から、量子位相推定アルゴリズムの理解およびblueqatでの実装を目標として

いくつか記事を書いてみたいと思います。

今回は位相差検出アルゴリズム(勝手に名付けました)をやってみます。

下準備

from blueqat import Circuit import math import numpy as np

状態ベクトルを見やすく加工してprintする関数

def print_Zbasis_expression(statevector): nqubit = int(math.log2(np.size(statevector))) for i in range(2**nqubit): print('+({:.2f})*|{number:0{width}b}>'.format(statevector[i],number=i,width=nqubit),end='')

本題

以下のような入力量子状態を考えます。

ψ=12(0+ei01)=12(0+1)|\psi\rangle = \frac{1}{\sqrt{2}}(|0\rangle+e^{i0}|1\rangle) = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle)

0|0\rangle1|1\rangleが同位相(位相差0)で重ね合わされています。

blueqatで生成してみます。

State_out = Circuit(1).h[0].run()
print_Zbasis_expression(State_out)
+(0.71+0.00j)*|0>+(0.71+0.00j)*|1>

+(0.71+0.00j)|0>+(0.71+0.00j)|1>

確かに生成できています。

この状態に、アダマールゲートHHを掛けると、以下のようになります。

Hψ=H(12(0+ei01))=0H|\psi\rangle = H(\frac{1}{\sqrt{2}}(|0\rangle+e^{i0}|1\rangle)) = |0\rangle

blueqatでは、

print_Zbasis_expression(Circuit(1).h[0].h[0].run())
+(1.00+0.00j)*|0>+(0.00+0.00j)*|1>

+(1.00+0.00j)|0>+(0.00+0.00j)|1>

もう一つ、異なる入力量子状態を考えてみます。

ψ=12(0+eiπ1)=12(01)|\psi\rangle = \frac{1}{\sqrt{2}}(|0\rangle+e^{i\pi}|1\rangle) = \frac{1}{\sqrt{2}}(|0\rangle-|1\rangle)

0|0\rangle1|1\rangleが逆位相(位相差π\pi)で重ね合わされています。

この状態に、アダマールゲートHHを掛けると、以下のようになります。

Hψ=H(12(0+eiπ1))=1H|\psi\rangle = H(\frac{1}{\sqrt{2}}(|0\rangle+e^{i\pi}|1\rangle)) = |1\rangle

blueqatでも同様の結果を確かめておきます。 入力量子状態は、

print_Zbasis_expression(Circuit(1).x[0].h[0].run())
+(0.71+0.00j)*|0>+(-0.71+0.00j)*|1>

+(0.71+0.00j)|0>+(-0.71+0.00j)|1>

アダマールゲートを作用させると、1|1\rangleになります。

print_Zbasis_expression(Circuit(1).x[0].h[0].h[0].run())
+(0.00+0.00j)*|0>+(1.00+0.00j)*|1>

+(0.00+0.00j)|0>+(1.00+0.00j)|1>

以上の結果を整理すると

    • 位相差が00であれば、アダマールゲートにより0|0\rangleが検出され、
    • 位相差がπ\piであれば、アダマールゲートにより1|1\rangleが検出される。

となります。

位相の2進小数表示

量子コンピュータ、量子状態といえども、0011かの2進数で数値を表現することに変わりはありません。

位相θ\thetaを2進数で表示することを考えます。特に量子アルゴリズムでは、θ\theta2π2\piで規格化した規格化位相

2進小数で表現することが多いです。

例えば、2進小数1桁表示のときは

    • θ=0\theta=0のとき、θ2π=0\frac{\theta}{2\pi}=0 であるから、θbinary=0.0\theta_{binary} = 0.0と書きます。

    • θ=π\theta=\piのとき、θ2π=12\frac{\theta}{2\pi}=\frac{1}{2} であるから、θbinary=0.1\theta_{binary} = 0.1と書きます。

2進小数2桁表示のときは

    • θ=0\theta=0のとき、θ2π=0\frac{\theta}{2\pi}=0 であるから、θbinary=0.00\theta_{binary} = 0.00

    • θ=π2\theta=\frac{\pi}{2}のとき、θ2π=14\frac{\theta}{2\pi}=\frac{1}{4} であるから、θbinary=0.01\theta_{binary} = 0.01

    • θ=π\theta=\piのとき、θ2π=12\frac{\theta}{2\pi}=\frac{1}{2} であるから、θbinary=0.10\theta_{binary} = 0.10

    • θ=3π2\theta=\frac{3\pi}{2}のとき、θ2π=34\frac{\theta}{2\pi}=\frac{3}{4} であるから、θbinary=0.11\theta_{binary} = 0.11

つまりところ、規格化位相θ2π\frac{\theta}{2\pi}an2n\sum a_{n}2^{-n}と展開した時、2進小数表示は0.a1a2....0.a_{1} a_{2}....のようになります。

位相差検出アルゴリズム(2進小数表示版)

この記法を用いて、先程の位相差検出アルゴリズムを書くと、

Hψ=H(12(0+ei0.j1))=jH|\psi\rangle = H(\frac{1}{\sqrt{2}}(|0\rangle+e^{i*0.j}|1\rangle)) = |j\rangle

このようになります。

(j=0j=0 or 11 であることに注意すると、難しくないです。)

位相差を2進小数表示でみている人にとっては、

HHゲートとは、位相差の1桁目を読み出して1量子ビットの状態に書き写す操作である。

と考えることが出来ます。

2進小数表示の桁数が2桁に増えた場合はどうなるでしょうか?

直感的には、書き出し先の量子ビットを2ビットに増やせばよさそうです。

そして、第一量子ビットには1桁目、第二量子ビットには2桁目を書き込めば良いのでしょう。

あるいは、1桁目読み出し→桁シフト→1桁目読み出し でも良さそうですね。これなら量子ビットは1つで良さそうです。

でも桁シフトした結果、溢れた桁はどこへいくのでしょう?? そもそもどうやって桁シフトを実現するのでしょう?

この話は、次の記事に回したいと思います。

© 2024, blueqat Inc. All rights reserved