[PYTHON] Quantum Computer Implementierung von Quantum Walk 3

Quantencomputer-Implementierung von Quantum Walk 3 ~ Adamal Walk in Zyklus 3 ~

*** Fassen Sie die Implementierung von Adamal Walk im Zyklus $ 3 $ zusammen ***. Quantum Walk Quantum Computer Implementation 2 führte den Fall ein, in dem die Zyklusgröße $ 2 ^ n $ beträgt, führte aber auch den Fall ein, in dem die Zyklusgröße nicht $ 2 ^ n $ beträgt. Machen. Implementieren Sie eine einfache Zyklusgröße von $ 3 $. Die hier vorgestellte Methode ist dieselbe wie Effiziente Quantenschaltungsimplementierung von Quantenwanderungen.

Über Hadamard Walk in Zyklus 3

Eine kurze Erläuterung des Quantenlaufs finden Sie unter Quantum Walk Quantum Computer Implementation 1.

Der Zyklus, um über diese Zeit nachzudenken, ist image.png

Ist. Definieren Sie einen Quantenlauf in diesem Zyklus ($ 00,01,10 $ (0-2 in Dezimalzahl))

Münz- und Schichtagenten

Wie die Gesamtdynamik $ W=\hat{S}\hat{C}\\ $ Es wird vertreten durch. Münzaktionselemente und Verschiebungsaktionselemente werden unten gezeigt.

\hat{C}=(I\otimes H)\\
\mbox{jedoch}I=\sum_{x}|x\rangle\langle x|,\quad
H=\frac{1}{\sqrt{2}}\begin{bmatrix}
1&1\\1&-1
\end{bmatrix}
\hat{S}=\sum_{x}|x-1\rangle\langle x|\otimes|0\rangle\langle 0|+|x+1\rangle\langle x|\otimes|1\rangle\langle 1|

Lassen. $ X \ pm 1 $ wird jedoch als $ mod 3 $ betrachtet.

Unter Berücksichtigung der Tore des "Münzaktivators" und des "Verschiebungsaktivators" kann die zeitliche Entwicklung des Quantenlaufs als Quantenlauf ausgedrückt werden.

Speziell, *** Münzagonist *** $ \ hat {C} = I \ otimes H $ kann ausgedrückt werden, indem $ H $ nur durch die Quantenbits des Zustands geleitet wird. *** Shift Agonist *** $ \ hat {S} $ ist -Wenn der Zustand `0``` ist, ist der Ort` x -1 ・ Wenn der Zustand `` `1 ist, ist der Ort` `` x``` +1 Denken Sie an ein Tor zu tun.

Implementierung in IBM Q.

Für diese Implementierung werden 3 Qubits ($ q [0] q [1] q [2] $) verwendet. Betrachten Sie $ q [0] q [1] $ als das der Stelle entsprechende qbit (00,01,10) und $ q [2] $ als das dem Zustand entsprechende Qubit.

Konstruktion von Schichtagonisten (für Zyklus 3)

Ich würde gerne einen Algorithmus für die +1 Operation und -1 Operation von $ n $ Ziffernbinär betrachten, aber da $ q [0] q [1] $ auch $ 11 $ enthält, ist es notwendig, ihn gut zu eliminieren. .. Fügen Sie daher basierend auf der Verschiebung des Quantenlaufs in Zyklus 4 (Quantencomputer-Implementierung 1 des Quantenlaufs) den Switch-Teil hinzu, der den nicht verwandten Zyklus ausschließt. ..

Um das Obige zusammenzufassen, ist der Shift-Agonist image.png Es wird. Zyklus 4-Schicht-Agonist </ font> + Bei Status 0 wechseln Position 11 und 10 </ font> + Wenn Status 1 Die Schalter für Position 11 und 00 </ font>

Erstellung des Schaltungsteils

Quantenregister, klassisches Register und eingestellte Quantenschaltung qwqc von ihnen

  • Position qbits $ \ Rightarrow q [0] q [1] $
  • Geben Sie qbits $ \ Rightarrow q [2] $ an
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute

from qiskit.tools.visualization import plot_histogram

q = QuantumRegister(3, 'q')
c = ClassicalRegister(2, 'c')

qwqc = QuantumCircuit(q,c)

#Zeit
t=1

#Stellen Sie den Ausgangszustand ein
qwqc.h(q[2])
qwqc.s(q[2])

#Zeitentwicklung
for i in range(t):
    #Münzbetrieb
    qwqc.h(q[2])
    #Verschiebung
    qwqc.x(q[1])
    qwqc.cx(q[2],q[0])
    qwqc.cx(q[1],q[0])
    #-1 Umdrehung fix
    qwqc.x(q[2])
    qwqc.ccx(q[0],q[2],q[1])
    qwqc.x(q[2])
    #+1 Umdrehung fix
    qwqc.ccx(q[1],q[2],q[0])
    qwqc.x(q[0])
    qwqc.ccx(q[0],q[2],q[1])
    qwqc.x(q[0])
    qwqc.ccx(q[1],q[2],q[0])
    
#Überwachung
qwqc.measure(q[0],c[0])
qwqc.measure(q[1],c[1])

qwqc.draw()

image.png

Simulatorergebnis mit t = 1

from qiskit import BasicAer
backend_s=BasicAer.get_backend('qasm_simulator')
job_s = execute(qwqc, backend_s,shots=1024)
result_s = job_s.result()
counts_s = result_s.get_counts(qwqc)
plot_histogram(counts_s)

image.png

Ergebnisse der tatsächlichen Maschine bei t = 1

from qiskit.tools.monitor import job_monitor
provider = IBMQ.get_provider(hub='ibm-q')

backend_r=provider.get_backend('ibmqx2')
job_r = execute(qwqc, backend=backend_r,shots=1024)
job_monitor(job_r)

Job Status: job has successfully run

result_r= job_r.result()
counts_r = result_r.get_counts(qwqc)
plot_histogram(counts_r)

image.png

Zusammenfassung

Auf die gleiche Weise ist es möglich, einen Quantenlauf für jede Zyklusgröße zu implementieren. Verschieben Sie für die Implementierung eines beliebigen Zyklus n für das kleinste $ N $, das $ n \ leq 2 ^ N $ ist, den Zyklus $ 2 ^ N $ [Quantum Walk Quantum Computer Implementation 2](https: // qiita). Ein beliebiger Zyklus kann erstellt werden, indem er mit der Methode com / YNUqw / items / 091f71ef71c75cbbc574) erstellt und durch Betätigen eines Schalters geändert wird.

Recommended Posts