LoginSignup
2

More than 5 years have passed since last update.

sympy でDJアルゴリズム(量子ゲート計算)

Last updated at Posted at 2018-04-10

sympy の基本的な使い方は sympy で量子計算 を参考のこと。

ドイチェ=ジョザアルゴリズムDJ とは量子ゲート Fが constant もしくは balanced であるとわかっている場合、 F がどちらであるかを決定するアルゴリズムである。

入力:3-qubit, 出力:1-qubit の系を考えよう。DJ アルゴリズムを使うと、以下のように isBalanced 関数を定義できる。引数は量子ゲートである。

def isBalanced(circuit):
    start = Qubit('1000')
    DJ = H(0)*H(1)*H(2)*circuit*H(0)*H(1)*H(2)*H(3)
    # calculate probability for |*000>, could be better implemented.
    p1 = qapply(Dagger(Qubit('0000')) * DJ * start)
    p2 = qapply(Dagger(Qubit('1000')) * DJ * start)
    prob = abs(p1)**2 + abs(p2)**2
    #print (prob)
    if prob < 0.001:
        return True
    elif prob > 0.999:
        return False
    else:
        raise Exception('something wrong')

いくつかの balanced, constant なゲートを通してみる。うまく動作しているようだ。

from sympy.physics.quantum.qubit import Qubit, measure_all
from sympy.physics.quantum.gate import I, X, Z, H, CNOT, CGate
from sympy.physics.quantum.dagger import Dagger
from sympy.physics.quantum.qapply import qapply

Toffoli = lambda a,b,c: CGate((a,b),X(c))

def isBalanced(circuit):
    start = Qubit('1000')
    DJ = H(0)*H(1)*H(2)*circuit*H(0)*H(1)*H(2)*H(3)
    # calculate probability for |*000>, could be better implemented.
    p1 = qapply(Dagger(Qubit('0000')) * DJ * start)
    p2 = qapply(Dagger(Qubit('1000')) * DJ * start)
    prob = abs(p1)**2 + abs(p2)**2
    #print (prob)
    if prob < 0.001:
        return True
    elif prob > 0.999:
        return False
    else:
        raise Exception('something wrong')

Fc1 = I
Fc2 = X(3)
Fb1 = Toffoli(0,1,3)*CNOT(2,3)
Fb2 = CNOT(0,3)*CNOT(1,3)*CNOT(2,3)

for f in [Fc1, Fc2]:
  assert(isBalanced(f) is False)
for f in [Fb1, Fb2]:
  assert(isBalanced(f) is True)

# F = CNOT(0,3)*Toffoli(0,1,3)
# isBalanced(F) #throws Exception

参考:https://www.appi.keio.ac.jp/Itoh_group/abe/pdf/qc3.pdf

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2