[PYTHON] Quantencomputer-Implementierung eines 3-Zustands-Quantenlaufs

Quantencomputer-Implementierung eines 3-Zustands-Quantenlaufs

*** 3 Die Implementierung des Zustandsquantenlaufs *** ist zusammengefasst. Bisher haben wir Quantenläufe mit beliebiger Zyklusgröße durch [Quantencomputer-Implementierung 3 von Quantenlauf] implementiert (https://qiita.com/YNUqw/items/9acf4236bb59323150ad). Alle von ihnen waren jedoch Quantenwanderungen mit zwei Zuständen mit nur zwei Zuständen, 0 oder 1. Daher möchte ich einen Quantenspaziergang mit drei Zuständen in Betracht ziehen. Wie in der vorherigen Zeit finden Sie unter Effiziente Quantenschaltungsimplementierung von Quantenläufen Informationen zu Verschiebungsagenten von Quantenläufen im Zyklus.

Über den Quantenlauf von 3 Staaten

Ein Quantenlauf mit drei Zuständen ist ein Quantenlauf mit drei internen Zuständen. Insbesondere wird die als Münzagonist ausgewählte $ 3 \ times 3 $ Grover-Matrix als 3-State-Grover-Walk bezeichnet. Weitere Informationen finden Sie unter Quantum Walk.

Die spezifische Dynamik wird später erklärt, aber das *** Merkmal *** des Grover Walk mit drei Zuständen in einer Dimension ist, dass selbst wenn räumlich einheitliche Münzen platziert werden *** Lokalisierung in der Nähe des Ursprungs ** * Und *** lineare *** Spreads treten gleichzeitig auf. QIITAGrov.png Es ist ein Diagramm der numerischen Simulation zum Zeitpunkt 500 mit der Ursprungsabweichung von 1-dimensionalem Adamal Walk mit 2 Zuständen </ font> und 1-dimensionalem Grover Walk mit 3 Zuständen </ font>. *** Die Lokalisierung in der Nähe des Ursprungs *** ist gut bekannt.

Um es mit einem Quantencomputer zu implementieren, muss es ein endliches System sein, kein unendliches System wie eine Dimension, also werden wir einen Grover Walk mit drei Zuständen im Zyklus implementieren. Gesamtzeitentwicklung

W=\hat{S}\hat{C}

Lassen. Da wir einen Grover Walk mit drei Zuständen in Betracht ziehen, wird die Grover-Matrix $ 3 \ times3 $ zum Schichtagenten $ \ hat {C} $ hinzugefügt.

\hat{C}=I\otimes C\\
\mbox{jedoch}C=\frac{2}{3}\begin{bmatrix}1&1&1\\1&1&1\\1&1&1\end{bmatrix}-I=\frac{1}{3}\begin{bmatrix}-1&2&2\\2&-1&2\\2&2&-1\end{bmatrix}

Wird angenommen. Der Shift-Agonist betrachtet drei Zustände (00,01,10) im Zyklus.

\hat{S}=\sum_{x}(|x-1\rangle\langle x|\otimes|00\rangle \langle 00|+|x\rangle\langle x|\otimes|01\rangle \langle 01|+|x+1\rangle\langle x|\otimes|10\rangle \langle 10|)

Lassen.

  • Wenn der Status 00 ist, Standort-1,
  • Bleiben Sie an Ort und Stelle, wenn der Status 01 ist
  • Position +1, wenn der Status 10 ist Ich mache.

Denken Sie an die Schaltung

Wenn zwei Quantenbits verwendet werden, um Zustand 3 zu implementieren, gibt es vier Zustände, 00,01,10,11. Daher werden das Münzaktionselement und das Verschiebungsaktionselement in die Vier-Zustands-Notation umgewandelt.

Münzaktionselement

\hat{C}=I\otimes C\\
\mbox{jedoch}C=\begin{bmatrix}\frac{-1}{3}&\frac{2}{3}&\frac{2}{3}&0\\\frac{2}{3}&\frac{-1}{3}&\frac{2}{3}&0\\\frac{2}{3}&\frac{2}{3}&\frac{-1}{3}&0\\0&0&0&1\end{bmatrix}

Schichtagonist

\hat{S}=\sum_{x}(|x-1\rangle\langle x|\otimes|00\rangle \langle 00|+|x\rangle\langle x|\otimes|01\rangle \langle 01|+|x+1\rangle\langle x|\otimes|10\rangle \langle 10|+|x\rangle\langle x|\otimes |11\rangle\langle 11|)

Auf diese Weise ist es möglich, einen unabhängigen Zustand 11 zu erzeugen, der nicht mit anderen Zuständen gemischt ist. Wenn daher der Zustand 11 nicht dem Anfangszustand gegeben ist, handelt es sich um eine Implementierung eines Quantenlaufs mit drei Zuständen.

Schaltungserstellung

Grover-Matrix

Erstellen Sie eine $ 3 \ times 3 $ Grover-Matrix innerhalb der $ 4 \ times 4 $ -Matrix. Hier wird nur das Ergebnis der Berechnung der Parameter vorgestellt.

import numpy as np
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute
import math

th1=3*math.pi/2
th2=(math.pi+math.acos(1/3))*2
th3=math.pi/2

q = QuantumRegister(2, 'q')

grqc = QuantumCircuit(q)
grqc.x(q[0])
grqc.x(q[1])
grqc.cu3(th3,0,0,q[0],q[1])
grqc.cu3(th2,0,0,q[1],q[0])
grqc.cu3(th1,0,0,q[0],q[1])
grqc.x(q[0])
grqc.x(q[1])

Wenn Sie ein Tor wie dieses bauen, erhalten Sie $ 3 \ mal 3 $ Grover-Münzen in $ 4 \ mal 4 $. Überprüfen Sie unten.

from qiskit import BasicAer

#Führen Sie mit dem einheitlichen Simulator-Backend aus
backend = BasicAer.get_backend('unitary_simulator')
job = execute(grqc, backend)
result = job.result()

# Show the results
print(result.get_unitary(grqc, decimals=3))

[[-0.333+0.j 0.667+0.j 0.667+0.j 0. +0.j] [ 0.667+0.j -0.333+0.j 0.667+0.j 0. +0.j] [ 0.667+0.j 0.667+0.j -0.333+0.j 0. +0.j] [ 0. +0.j 0. +0.j 0. +0.j 1. +0.j]]

Schaltungsmontage

Betrachten Sie Quantenregister, klassische Register und Quantenschaltungen von ihnen.

  • Position qbits $ \ Rightarrow q [0] q [1] $
  • Geben Sie qbits $ \ Rightarrow qc [0] qc [1] $ an
  • Ersatz-Qbits $ \ Rightarrow qaf [0] $ Betrachten Sie die Schaltung als. Die Grundidee der $ \ pm 1 $ -Operation des Ortes basiert auf Quantum Walk Quantum Computer Implementation 2.
def cccx(circ,c1,c2,c3,tg,re):
    circ.ccx(c1,c2,re)
    circ.ccx(c3,re,tg)
    circ.ccx(c1,c2,re)

Ich möchte das cccnot-Gate verwenden. Wenn ich es vorbereite, mache ich eine Schaltung.

from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute
from qiskit.tools.visualization import plot_histogram
import math

q = QuantumRegister(2, 'q')
qc = QuantumRegister(2, 'qc')
qaf = QuantumRegister(1,'qaf')
c = ClassicalRegister(2, 'c')

gqc = QuantumCircuit(q,qc,qaf,c)

th1=3*math.pi/2
th2=(math.pi+math.acos(1/3))*2
th3=math.pi/2

#Zeit
t=1

#Stellen Sie den Ausgangszustand ein
gqc.x(qc[1])
gqc.barrier()
#Zeitentwicklung
for i in range(t):
    #coin-ope
    gqc.x(qc[0])
    gqc.x(qc[1])
    gqc.cu3(th3,0,0,qc[0],qc[1])
    gqc.cu3(th2,0,0,qc[1],qc[0])
    gqc.cu3(th1,0,0,qc[0],qc[1])
    gqc.x(qc[0])
    gqc.x(qc[1])
    gqc.barrier()
    #shift-ope cycle
    gqc.x(qc[1])
    cccx(gqc,q[1],qc[0],qc[1],q[0],qaf[0])
    gqc.ccx(qc[0],qc[1],q[1])
    gqc.x(qc[1])
    gqc.x(qc[0])
    gqc.x(qc[1])
    gqc.ccx(qc[0],qc[1],q[1])
    cccx(gqc,q[1],qc[0],qc[1],q[0],qaf[0])
    gqc.x(qc[0])
    gqc.x(qc[1])
    gqc.barrier()
    
#Überwachung
gqc.measure(q,c)

gqc.draw()

image.png

Im ersten Teil wird der Ausgangszustand erstellt. Diesmal

\Psi=|00\rangle\otimes|01\rangle

machen. Der zweite Teil ist der Staatsteil *** Münzagonist ***. Der dritte Teil drückt den *** Verschiebungsmittel *** aus, dass "Platz +1 für Zustand 10, Platz -1 für Zustand 00 und Ort sich für Zustand 01 und 11 nicht ändert".

Führen Sie die obigen Schritte im Simulator aus.

provider=IBMQ.get_provider(group='open')
backend_cs=provider.get_backend('ibmq_qasm_simulator')
job_cs = execute(gqc, backend_cs,shots=4096)
result_cs = job_cs.result()
counts_cs = result_cs.get_counts(gqc)
print(counts_cs)
plot_histogram(counts_cs)

image.png

Das Ergebnis dieser Simulation ist

\hat{S}\hat{C}|00\rangle\otimes|01\rangle\\
=\hat{S}\left\{|00\rangle\otimes\frac{2}{3}|00\rangle+|00\rangle\otimes\frac{-1}{3}|01\rangle+|00\rangle\otimes\frac{2}{3}|10\rangle\right\}\\
=\frac{2}{3}|11\rangle\otimes|00\rangle+\frac{-1}{3}|00\rangle\otimes|01\rangle+\frac{2}{3}|01\rangle\otimes|10\rangle

Daher sind die Beobachtungswahrscheinlichkeiten der Orte $ 11 $, $ 00 $ und $ 01 $ $ \ frac {4} {9} $, $ \ frac {1} {9} $ bzw. $ \ frac {4} {9} $. Es sollte so sein, dass Sie sehen können, dass die Simulation erfolgreich war.

Ergänzung

Quantenwanderungen auf beliebigen Graphen können implementiert werden, indem die Anzahl der Zustände erhöht und entsprechende Münz- und Verschiebungselemente erstellt werden. Ein 4-Zustands-Quantenlauf auf dem Torus kann durch einfache Anwendung des 2-Zustands-Quantenlaufs auf dem Zyklus erzeugt werden.

Der zu Beginn in der Nähe des Ursprungs von Grover in einer Dimension eingeführte Stagnationsterm kann durch das Experiment über den Zyklus des Quantencomputers bestätigt werden, wenn er in Zyklus 16 auf etwa Zeit 7 entwickelt wird.

Recommended Posts