4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

一方向量子計算のシミュレーション(2)

Last updated at Posted at 2019-04-27

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

前回に続き、一方向量子計算のシミュレーションです。前回は1量子ビット回路の構成をしてみたので、今回は2量子ビット回路をやってみます。前回同様、参考文献は以下です。

CNOTゲート

上記、電子情報通信学会知識ベースの方に、CNOTゲートの例がでているので、これを試してみます。量子ビットをたくさん(15量子ビットも!)使うので、手順を言葉で言うのではなく、いきなり図示します。

cnot.png
ここで、XはX方向の測定、YはY方向の測定を表します。測定を繰り返して、最終的に6番目と14番目の量子ビットが計算結果の状態となります。

シミュレーション

qlazyでシミュレーションしてみます。上の図を素直に書くと、以下のようになります。比較検証のため、従来の量子ゲートでの計算も下の方でやっています。結果をわかりやすくするため、最初に0番目の量子ビットにアダマールをかけ、それにCNOTする形にしています。最終的に、量子もつれのベル状態となれば、今回のシミュレーションは成功です。

import random
from qlazypy import QState

def main():

    print("== CNOT gate ==")

    print("** one-way quantum computing")

    # graph state
    qs_oneway = QState(15)
    qs_oneway.h(0)
    qs_oneway.h(1).h(2).h(3).h(4).h(5).h(6).h(7)
    qs_oneway.h(9).h(10).h(11).h(12).h(13).h(14)
    qs_oneway.cz(0,1).cz(1,2).cz(2,3).cz(3,4).cz(4,5).cz(5,6)
    qs_oneway.cz(3,7).cz(7,11)
    qs_oneway.cz(8,9).cz(9,10).cz(10,11).cz(11,12).cz(12,13).cz(13,14)

    # measurement
    qs_oneway.mx(id=[0], shots=1)
    qs_oneway.my(id=[1], shots=1)
    qs_oneway.my(id=[2], shots=1)
    qs_oneway.my(id=[3], shots=1)
    qs_oneway.my(id=[4], shots=1)
    qs_oneway.my(id=[5], shots=1)
    qs_oneway.my(id=[7], shots=1)
    qs_oneway.mx(id=[8], shots=1)
    qs_oneway.mx(id=[9], shots=1)
    qs_oneway.mx(id=[10], shots=1)
    qs_oneway.my(id=[11], shots=1)
    qs_oneway.mx(id=[12], shots=1)
    qs_oneway.mx(id=[13], shots=1)

    qs_oneway.show(id=[6,14])

    print("** conventianal quantum gate")

    qs_gate = QState(2)
    qs_gate.h(0)
    qs_gate.cx(0,1)
    qs_gate.show()

    del qs_oneway
    del qs_gate
    
if __name__ == '__main__':
    main()

結果は、以下の通りです。ちゃんと正しくもつれていることがわかります。途中の測定結果によっては、パウリゲートが一番前にかかる場合もあります。何度か実行してみればわかりますが、$\ket{00},\ket{11}$ではなく、$\ket{01},\ket{10}$のベル状態になることもあります。

== CNOT gate ==
** one-way quantum computing
c[00] = +0.7071-0.0000*i : 0.5000 |++++++
c[01] = -0.0000+0.0000*i : 0.0000 |
c[10] = -0.0000-0.0000*i : 0.0000 |
c[11] = +0.7071-0.0000*i : 0.5000 |++++++
** conventianal quantum gate
c[00] = +0.7071+0.0000*i : 0.5000 |++++++
c[01] = +0.0000+0.0000*i : 0.0000 |
c[10] = +0.0000+0.0000*i : 0.0000 |
c[11] = +0.7071+0.0000*i : 0.5000 |++++++

まとめ

たかが、2量子ビットの計算をやるだけで、15量子ビット必要になりました。このように、量子ビットをすごく浪費してしまうというのは、一方向量子計算のデメリットのように感じてしまいますが、おそらくそれ以上の面白いメリットがあるのだと思います(勉強進めればわかるはず!?)。

実際、「観測に基づく量子計算」には、「物性物理」「量子光学、光物質系」「誤り耐性量子計算」「古典統計物理学」「暗号(セキュアなクラウド量子計算)」「計算量理論」の分野で、「ここ十数年の間」「さまざまな新しい結果を可能にしてきた」ということで、理論研究に関して重要な貢献をしているようです。

また、電子情報通信学会知識ベースの方には、ハードウェアの実用化の状況も触れられています。「線形光学系」や「光学格子に補足された中性冷却原子による実装」なども研究され、「10万個程度の原子からなる3次元クラスタ状態」が生成できた、という研究例もあると記載されています(これは2010年時点までの情報です。いまはもっといろんな研究事例があるのだと想像します)。

というわけで、現在主流の超電導量子ビット以外の方式の可能性も、横目でちゃんと見ておきたいと思います。

補足(2021.9.5)

qlazy最新版でのソースコードはここに置いてあります。

以上

4
3
0

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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?