Quantum Coins – ein Modul über Superposition und Interferenz
Für dieses Modul "Qiskit im Klassenzimmer" müssen die Schüler eine funktionierende Python Umgebung mit den folgenden Paketen installiert haben:
qiskitv2.1.0 oder neuerqiskit-ibm-runtimev0.40.1 oder neuerqiskit-aerv0.17.0 oder neuerqiskit.visualizationnumpypylatexenc
Um die oben genannten Pakete einzurichten und zu installieren, lesen Sie die Anleitung Qiskit installieren. Um Aufträge auf echten Quantencomputern ausführen zu können, müssen die Schüler ein Konto bei IBM Quantum® einrichten, indem sie die Schritte in der Anleitung zur Einrichtung Ihres IBM Cloud Kontos befolgen.
Dieses Modul wurde getestet und verbrauchte 47 Sekunden QPU-Zeit. Dies ist nur eine Schätzung. Ihre tatsächliche Nutzung kann davon abweichen.
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'Schauen Sie sich den Modul-Walkthrough von Dr. Katie McCormick unten an, oder klicken Sie hier, um ihn auf YouTube zu sehen.
Einführung
In diesem Modul erforschen wir eines der Kernprinzipien der Quantentheorie: die Superposition. In unserer Alltagserfahrung haben Objekte immer bestimmte Merkmale. Ihr Standort, ihre Größe, ihre Form, ihre Farbe - alles an ihnen - ist bestimmt und sicher, auch wenn wir als Beobachter sie noch nicht gemessen haben. In der Quantenwelt ist das nicht unbedingt der Fall. Ein Quantenobjekt kann sich in einer so genannten "Superposition" aus mehreren klassisch zulässigen Zuständen befinden. Wenn die Überlagerung gemessen wird, "kollabiert" sie zufällig in einen dieser Zustände.
In gewisser Weise gleicht die Messung eines Überlagerungszustands dem Werfen einer Münze: Man kann im Voraus nicht wissen, auf welcher Seite sie landen wird. Dieser grundlegende Indeterminismus ist ein unbequemer Aspekt der Quantenmechanik, mit dem sogar Einstein seine Schwierigkeiten hatte. Zu dieser Zufälligkeit sagte er den berühmten Satz: „Gott würfelt nicht.“ Aber wie wir noch sehen werden, spielt Gott tatsächlich Würfel – und wirft Münzen.
Wir werden uns einen klassischen Münzwurf als Analogie zur Messung eines Überlagerungszustands vorstellen. Und - indem wir mit einer "Quantenmünze" mit Qiskit und einem Qubit auf einem IBM® Quantenprozessor spielen - werden wir schnell die Grenzen dieser Analogie herausfinden.
Klassische Münze
Lassen Sie uns mit einer klassischen Münze beginnen. Werfen Sie eine Münze, und sie wird entweder Kopf oben oder Kopf unten landen, mit einer Wahrscheinlichkeit von 50 % für beide. Zwar könnte man im Prinzip berechnen, auf welcher Seite die Münze landen wird, wenn man die genauen Ausgangsbedingungen der Münze und die Kraft/das Drehmoment des Wurfs kennt, doch in der Praxis gibt es keine Möglichkeit, von vornherein zu wissen, auf welcher Seite die Münze landen wird. Aus diesem Grund verwenden wir den Münzwurf als kanonisches Beispiel für einen klassischen probabilistischen Zustand, bei dem das Ergebnis im Wesentlichen zufällig ist. Wir können den Zustand der Münze, bevor sie fällt, schreiben, um diese 50/50-Wahrscheinlichkeit widerzuspiegeln:
Hier stehen die beiden Terme für die beiden möglichen Ergebnisse der Umdrehung und ihre Koeffizienten für die Wahrscheinlichkeiten der einzelnen Ergebnisse. Beachten Sie, dass das " " (bekannt als "ket") normalerweise verwendet wird, um einen Quantenzustand darzustellen, aber hier geht es um einen klassischen probabilistischen Zustand. In Lektion 1: Einzelsysteme im Kurs Grundlagen der Quanteninformation erfahren Sie mehr darüber, wie wir klassische und Quanteninformationen darstellen.
Wenn wir 1000 Mal eine Münze werfen und die Anzahl der Köpfe nach oben und unten aufzeichnen würden, ergäbe sich etwa folgendes Bild:
# import necessary packages:
import numpy as np
import matplotlib.pyplot as plt
import random
nflips = 1000
fliplist = [random.randint(0, 1) for f in range(nflips)]
# bar plots using get_gaussian_probs function
plt.hist(fliplist)
plt.show()Output:
Quantenmünze
Mit einem Qubit auf unserem Quantencomputer können wir einen ähnlichen probabilistischen Zustand erzeugen. Wie der Münzwurf kann auch ein Qubit in zwei möglichen Zuständen gemessen werden: und . Wir erzeugen den probabilistischen "Superpositions"-Zustand, indem wir mit dem Zustand beginnen und dann ein so genanntes Hadamard-Gatter auf das Qubit anwenden. Damit befindet sie sich in einer gleichwertigen Überlagerung von und . Beachten Sie, dass dieser Überlagerungszustand zwar auf den ersten Blick wie eine Münze aussieht und sich auch so verhält, aber wir werden bald sehen, dass noch viel mehr dahintersteckt. Dieses Modul soll Ihnen zeigen, dass eine Überlagerung nicht dasselbe ist wie ein klassischer Münzwurf.
Da sich das Qubit also in einer gleichwertigen Überlagerung von 0 und 1 befindet, besteht bei der Messung des Qubits eine 50%ige Chance, dass wir messen, und eine 50%ige Chance, dass wir messen. Wir schreiben diesen Zustand ein wenig anders als den klassischen probabilistischen Fall, aus Gründen, die später klar werden:
In diesem Fall sind die Wahrscheinlichkeiten für die Messung jedes der beiden Zustände nicht mehr gleich den Koeffizienten, wie es im klassischen probabilistischen Zustand der Fall war. Stattdessen ist es das Quadrat der Koeffizienten, das uns die Wahrscheinlichkeiten liefert, und jeder dieser Koeffizienten kann nun komplex sein, das heißt, er kann sowohl reale als auch imaginäre Teile haben.
Trotz dieser Unterschiede ist das Ergebnis der Messung dieses Zustands im Wesentlichen dasselbe wie das Werfen einer Münze.
from qiskit import QuantumCircuit
qcoin = QuantumCircuit(1)
qcoin.h(0)
qcoin.measure_all()
qcoin.draw("mpl")Output:
Die Anwendung des Hadamard-Gatters entspricht also im Grunde genommen dem Werfen einer Münze. Und genau wie wir die Münze 1000 Mal geworfen haben, um die Statistiken darüber zu betrachten, ob die Münze auf Kopf oder Zahl gelandet ist, können wir mit unserer „Quantenmünze“ in Qiskit etwas Ähnliches machen Wir können eine Primitive namens verwenden Sampler, die einen Durchlauf mehrmals wiederholt, um die statistischen Eigenschaften des resultierenden Zustands zu erfassen.
Zunächst laden wir den „ IBM Quantum “ Compute Service und die Primitive, anschließend wählen wir ein Backend aus, auf dem der Schaltkreis ausgeführt werden soll.
Unten finden Sie einen Code, mit dem Sie Ihre Anmeldedaten bei der ersten Verwendung speichern können. Achten Sie darauf, diese Informationen aus dem Notebook zu löschen, nachdem Sie es in Ihrer Umgebung gespeichert haben, damit Ihre Anmeldedaten nicht versehentlich weitergegeben werden, wenn Sie das Notebook freigeben. Weitere Anleitungen finden Sie unter Einrichten Ihres IBM Cloud Kontos und Initialisieren des Dienstes in einer nicht vertrauenswürdigen Umgebung.
# Load IBM Quantum Compute Service
from qiskit_ibm_runtime import QiskitRuntimeService
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform',
# instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# Load saved credentials
service = QiskitRuntimeService()# Load the Runtime primitive and session
from qiskit_ibm_runtime import (
SamplerV2 as Sampler,
EstimatorV2 as Estimator,
)
# Use the least busy backend
backend = service.least_busy()
print(backend.name)Output:
ibm_kingston
Wenn Sie nicht mehr Zeit auf Ihrem Konto zur Verfügung haben, können Sie stattdessen auch einen Simulator verwenden. Dekommentieren Sie einfach den Code und führen Sie die unten stehende Zelle aus, um dies zu tun:
## Use a local simulator
# from qiskit_aer import AerSimulator
## Generate a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)
## Import an estimator, this time from qiskit (we will import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler_sim = BackendSamplerV2(backend = backend_sim)
# from qiskit.primitives import BackendEstimatorV2
# estimator_sim = BackendEstimatorV2(backend = backend_sim)## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin)## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()## Analysis
from qiskit.visualization import plot_histogram
plot_histogram(counts)Output:
Mit 1000 Stichproben der obigen Schaltung haben wir etwas, das im Grunde genommen mit dem klassischen Münzhistogramm identisch ist, bis auf eine gewisse statistische Fluktuation.
Neben der Erfassung der Statistiken der Quantenmünze können wir auch eine weitere Primitive namens verwenden, Estimator um den sogenannten Erwartungswert einer Observable des Zustands zu messen. Um zu veranschaulichen, was dieser Erwartungswert ist, nehmen wir die klassische Münze als Beispiel. Angenommen, du nutzt die Münze zum Zocken: Jedes Mal, wenn du die Münze wirfst und sie mit der „Kopfseite“ nach oben landet, gewinnst du einen Dollar. Aber jedes Mal, wenn sie mit der „Kopfseite nach unten“ landet, verlierst du einen Dollar. Wenn Sie wissen möchten, wie viel Geld Sie voraussichtlich bei jedem Münzwurf erhalten (den Erwartungswert der beobachtbaren Größe „Geld“), dann würden Sie Folgendes berechnen:
Da die Wahrscheinlichkeit, einen Dollar zu gewinnen, gleich groß ist wie die, einen Dollar zu verlieren, beträgt der Erwartungswert 0.
In ähnlicher Weise können wir mit einem Quantenzustand den Erwartungswert der Beobachtungsgröße "Z" berechnen, wobei Z die Pauli-Matrix mit den Werten +1 und -1 ist, die den Zuständen bzw. zugeordnet sind.
from qiskit.quantum_info import Pauli
qcoin = QuantumCircuit(1)
qcoin.h(0)
# for Estimator, we do not apply the measurement to the circuitOutput:
<qiskit.circuit.instructionset.InstructionSet at 0x136df1ba0>
## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
obs = Pauli("Z")
qc_isa = pm.run(qcoin)
obs_isa = obs.apply_layout(layout=qc_isa.layout)## Execute
# On real hardware:
estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()
# On a simulator:
# job = estimator_sim.run([[qc_isa, obs_isa]])
# res=job.result()
print(res[0].data.evs)Output:
-0.014799284701239441
Wie erwartet erhalten wir einen Erwartungswert von 0 (hah). Dies ist ein weiterer Weg, um zu bestätigen, dass die Wahrscheinlichkeit, 0 oder 1 zu messen, tatsächlich gleich groß ist, und scheint sich wie ein Münzwurf zu verhalten.
Zu diesem Zeitpunkt sieht die "Quantenmünze" genauso aus wie die klassische Münze. Aber im nächsten Abschnitt werden wir einige Experimente durchführen, die die grundlegenden Unterschiede zwischen den beiden aufzeigen werden.
Das Quantenphänomen enthüllt: ein Experiment in drei Dimensionen
Lassen Sie uns ein Gedankenexperiment machen: Angenommen, Sie werfen eine Münze in die Luft und lassen sie nicht zu Boden fallen, sondern klatschen, während sie zwischen Ihren Händen hindurchgeht, und klemmen die Münze zwischen Ihre Handflächen. Jetzt ist die Münze nicht mehr Kopf oben oder unten, sondern Kopf links oder rechts.
Überprüfen Sie Ihr Verständnis
Wie hoch ist die Wahrscheinlichkeit für jedes dieser Ergebnisse, Kopf links oder Kopf rechts?
Die Wahrscheinlichkeit ist immer noch 50:50. Es sollte keine Rolle spielen, an welcher Dimension wir das Ergebnis des Münzwurfs messen wollen.
Sie haben hoffentlich geantwortet, dass die Wahrscheinlichkeit, links oder rechts Kopf zu finden, immer noch 50:50 ist. Die Dimension, entlang derer der Münzwurf gemessen wird, sollte keinen Einfluss auf die Wahrscheinlichkeit des Ergebnisses haben.
Doch wie würde es bei unserer Quantenmünze anders aussehen? Schauen wir nach.
Wir können unsere Quantenüberlagerung auf die gleiche Weise wie beim letzten Mal mit einem Hadamard-Tor herstellen. Um "Kopf links oder rechts" auf unserer Quantenmünze zu messen, können wir dasselbe tun wie bei der klassischen Münze: entlang einer anderen Achse messen. Unsere Standardmessungen auf dem Quantencomputer erfolgen entlang der vertikalen Achse, genau wie die übliche "Kopf hoch oder runter"-Messung der klassischen Münze. Wir können unsere Quantenmünze aber auch fragen, ob sie links oder rechts Kopf ist, oder ob sie sich in den Zuständen oder befindet, die entlang der -Achse zeigen. Sampler nur Stichproben in der Messbasis Z, aber wir können Estimator verwenden, um den Erwartungswert von X zu erhalten. Die Werte von X sind +1 und -1 für die Zustände bzw. .
Überprüfen Sie Ihr Verständnis
Wenn sich die Quantenmünze in diesem Fall wie die klassische Münze verhalten würde, hätten wir eine 50:50-Wahrscheinlichkeit, den Zustand und zu messen. Welchen Erwartungswert von X würden wir von Estimator erwarten, wenn dies der Fall wäre?
Wenn wir X auf den Zustand anwenden, erhalten wir den Wert und +1 und auf den Zustand erhalten wir -1, so dass wir bei einer 50-50-Verteilung einen Erwartungswert von 0 erhalten würden.
# Step 1: map problem
qcoin_lr = QuantumCircuit(1)
qcoin_lr.h(0)
obs = Pauli("X")
# Step 2: Transpile the circuit
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_lr)
obs_isa = obs.apply_layout(layout=qc_isa.layout)
# Step 3: Run the circuit on a real quantum computer
estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()
# Run the job on the Aer simulator with noise model from real backend
# job = estimator_sim.run([[qc_isa,obs_isa]])
# res=job.result()
# Step 4: Return the result in classical form, and analyze.
print(res[0].data.evs)Output:
0.9985207100591716
Der Erwartungswert von X für diesen Zustand ist 1. Es besteht also keine 50:50-Wahrscheinlichkeit für die Messung von und .
Überprüfen Sie Ihr Verständnis
Was sagt uns dieser Erwartungswert über den Zustand ? Wie groß ist die Wahrscheinlichkeit, und in dieser X-Basis zu messen?
Da der Erwartungswert gleich dem Wert von X für den Zustand ist, bedeutet dies, dass wir mit 100%iger Wahrscheinlichkeit den Zustand messen, wenn wir entlang von X messen.
Was ist hier eigentlich los? Es scheint, als ob unsere Quantenmünze in einer Dimension zufällige, wahrscheinliche Ergebnisse haben kann, in einer anderen aber vollkommen vorhersehbare Ergebnisse. Das wäre so, als würde man eine Münze werfen und garantieren, dass jedes Mal, wenn man sie auffängt, indem man sie zwischen zwei Hände klemmt, der Kopf nach rechts zeigt.
Die Quantenphase
Der entscheidende Unterschied der Quantenmünze besteht darin, dass sie eine andere Eigenschaft hat als die klassische Münze. Denken Sie daran, dass in einem klassischen probabilistischen Zustand,
jeder Koeffizient ist einfach eine reelle, positive Zahl, die die Wahrscheinlichkeit der Messung eines bestimmten Zustands darstellt. In einem Quantenzustand,
die Koeffizienten sind komplex, sie enthalten also einen realen und einen imaginären Teil. Jeder Koeffizient kann als zweidimensionaler Vektor in der komplexen Ebene ausgedrückt werden, mit dem Betrag und dem Winkel , den er mit der reellen Achse bildet:
Wir nennen die Phase. Die Phase gibt an, wie zwei Terme in einem Quantenzustand interferieren oder wie sie sich wie Wellen addieren oder aufheben. Wenn zwei Wellen in Phase zueinander sind, d. h. ihre Wellenberge und Wellentäler in einer Linie liegen, dann verbinden sie sich zu einer doppelt so hohen Welle. Wir nennen dies konstruktive Interferenz. Wenn sie phasenverschoben sind, d. h., wenn ein Hochpunkt des einen mit einem Tiefpunkt des anderen zusammentrifft und umgekehrt, überlagern sie sich in destruktiver Weise und heben sich gegenseitig vollständig auf.
Wie Wellen können sich auch Quantenzustände konstruktiv oder destruktiv addieren. Es kann schwieriger sein, dies zu erkennen, da es sich oft nicht um eine tatsächliche Welle im physischen Raum handelt. Im Fall unserer Qubits findet die Interferenz im abstrakten Informationsraum der Qubits statt. Da nur die relative Phase zwischen den beiden Wellen für die Interferenz von Bedeutung ist - d. h. die Phasendifferenz der beiden Koeffizienten - wenden wir normalerweise eine globale Phase von auf den gesamten Zustand an, so dass rein real ist und die relative Phase vollständig in erfasst wird.
Um zu sehen, wie die Phase Interferenzen in unserer Quantenmünze verursachen kann, wollen wir versuchen, den Hadamard zweimal statt nur einmal anzuwenden. Klassischerweise würde dies keinen Sinn ergeben - wenn die Anwendung der Hadamard-Methode dem Werfen einer Münze entspricht, dann kann man keine Münze werfen, die bereits geworfen wurde. Aber schauen wir mal, was mit der Quantenmünze passiert:
qcoin_0 = QuantumCircuit(1)
qcoin_0.h(0)
qcoin_0.h(0)
qcoin_0.measure_all()
qcoin_0.draw("mpl")Output:
Bevor wir nun Sampler verwenden, um den resultierenden Zustand zu messen, sollten wir darüber nachdenken, wie dieses Qubit durch jedes Gatter transformiert wird. Sie beginnt, wie üblich, in . Dann transformiert die erste Hadamard-Transformation den Zustand in die Überlagerung, wie wir bereits gesehen haben:
In diesem Fall sind beide Koeffizienten vollständig reell und positiv, was bedeutet, dass die Phase ist.
Die zweite Hadamard-Methode wird dann auf jeden Teil des Überlagerungszustands separat angewendet. Wir wissen bereits, wie die Hadamard-Transformation den Zustand transformiert. Aber was ist mit ?
Auch hier handelt es sich um eine gleichwertige Überlagerung von 0 und 1, ähnlich wie beim Werfen einer Münze, aber der Koeffizient dieses Zustands vor hat eine Phase von , um ihm das negative Vorzeichen zu geben.
Überprüfen Sie Ihr Verständnis
Berechnen Sie den resultierenden Zustand nach Anwendung des zweiten Hadamard. Das heißt, berechnen Sie: . Beachten Sie, dass distributiv ist, so dass wir es auf jeden der Terme einzeln anwenden können.
Nun wollen wir unsere Vorhersage mit Sampler überprüfen.
## Transpile
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_0)
## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analyze
plot_histogram(counts)Output:
Der zweite Hadamard-Wert hat den ersten aufgehoben, und wir sind zum Zustand 0 zurückgekehrt, in dem wir begonnen haben! Dies liegt daran, dass die Hadamard-Transformation sowohl den Zustand als auch den Zustand in ähnliche Zustände, jedoch mit entgegengesetzten Phasen, verwandelt. Nach dem zweiten Hadamard-Terminus sehen wir, dass die Terme von konstruktiv interferieren, aber die Terme von interferieren destruktiv und heben sich gegenseitig auf.
Wir können die Phase mit Hilfe eines "PHASE"-Gatters ändern. Wenden wir nun einen Hadamard an, um die Überlagerung zu erzeugen, wenden wir eine Phasenverschiebung von an und wenden wir dann den zweiten Hadamard an:
qcoin_pi = QuantumCircuit(1)
qcoin_pi.h(0)
qcoin_pi.p(np.pi, 0)
qcoin_pi.h(0)
qcoin_pi.measure_all()
qcoin_pi.draw("mpl")Output:
## Transpile
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_pi)
## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analyze
plot_histogram(counts)Output:
Nun wird gemessen, dass sich das Qubit im Zustand 1 statt 0 befindet.
Schon an diesen wenigen, einfachen Experimenten können Sie erkennen, welch drastischen Unterschied diese Phase in einem Quantenschaltkreis ausmachen kann. Sie kann subtil sein und ist anfangs schwer zu erkennen. In unserem ersten Experiment, bei dem wir einfach unsere Quantenmünze mit einem Hadamard-Gatter geworfen und das Ergebnis des Wurfs gemessen haben, war nichts von der Wirkung der Phase zu erkennen. Erst als wir tiefer gingen, entdeckten wir den Unterschied, den eine Phase ausmachen kann. Es kann dazu führen, dass dasselbe Quantengatter buchstäblich die entgegengesetzte Wirkung auf ein Qubit hat.
Probieren Sie es selbst aus:
Bearbeiten Sie die untenstehende Codezelle, um die Phase so zu ändern, dass der zweite Hadamard einen Überlagerungszustand mit einer Wahrscheinlichkeit von 25 % bzw. 75 % des Auffindens des Zustands in bzw. erzeugt. Überprüfen Sie Ihre Antwort mit Mathematik.
qcoin_phase = QuantumCircuit(1)
qcoin_phase.h(0)
# replace "x" below with a phase from 0 to 2*np.pi (this cell won't run if you leave x)
# qcoin_phase.rz(x, 0)
qcoin_phase.h(0)
qcoin_phase.measure_all()
## Transpile
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_phase)
## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analyze
plot_histogram(counts)Output:
Eine weitere (bessere) Münzanalogie unter Verwendung des „ “-Tors
Inzwischen haben wir gelernt, dass das Werfen einer Münze etwas ganz anderes ist als die Erzeugung eines Überlagerungszustands. Gibt es eine bessere Analogie zu einer Münze, die mehr von den überlagerungsähnlichen Phänomenen erfasst? Ja. Ja, die gibt es.
Wir werden ein weiteres Gedankenexperiment mit einer Münze durchführen. Stellen Sie sich vor, die Münze liegt mit dem Kopf nach oben auf dem Tisch. Um ihn auf den Kopf zu stellen, können wir ihn einfach umdrehen. Dies ist das rechnerische Äquivalent eines "NOT"-Gatters.
Nehmen wir an, wir wollen eine Operation konstruieren, die, wenn sie zweimal angewendet wird, dem NOT-Gatter entspricht. Das heißt, wir wollen eine "Quadratwurzel von NOT", oder . Wir können dies erreichen, indem wir uns überlegen, wie das NOT-Gatter physisch auf der Münze implementiert ist: Es ist einfach eine Drehung um 180 Grad, zum Beispiel um die x-Achse. Wenn wir also die Münze nur um 90 Grad um die x-Achse drehen würden, entspräche dies einem gate.
Stellen Sie sich vor, dass wir nach der Anwendung des Gatters fragen wollen, ob die Münze Kopf oder Zahl ist. Weder das eine noch das andere - er steht auf seiner Kante relativ zur vertikalen Achse. Aber jetzt definieren wir unsere "Messung" der Münze so um, dass wir erstens die Münze entlang der Messachse zusammenklappen (indem wir sie mit der Hand zusammendrücken, so dass sie flach liegt) und zweitens überprüfen, ob sie Kopf oder Zahl ist.
Wenn wir diese "Messung" an der Münze durchführen, die auf dem Rand steht, dann "fällt" die Münze mit gleicher Wahrscheinlichkeit auf Kopf oder Kopf unten. Ähnlich wie beim Münzwurf kann die Richtung, in die die Münze fällt, im Prinzip anhand der Ausgangsbedingungen der Münze und der Art und Weise, wie genau die Kraft unserer Hand auf die Münze einwirkt, um sie "umfallen" zu lassen, vorhergesagt werden. In der Praxis dürfte es jedoch schwierig sein vorherzusagen, auf welcher Seite man landet, so dass es im Wesentlichen zufällig ist.
Wir können diese Münze auf drei verschiedenen Achsen messen: , , und . Wir sehen, dass der Rand der Münze entlang der und zeigt, so dass die Messung in diese Richtungen ein "Zusammenklappen" der Münze erfordert - daher wird entlang dieser Achsen zufällig mit einer Wahrscheinlichkeit von 50:50 Kopf oben und unten gemessen. Entlang der -Achse ist er jedoch bereits flach und sein Kopf zeigt in Richtung -y. Wir können das "Kopf nach vorne" nennen
Während also die x- und z-Messungen zufällige Ergebnisse lieferten, wird die y-Messung immer das gleiche Ergebnis liefern! Wenn Sie sich an das Experiment des "Quanten-Münzwurfs" aus dem vorigen Abschnitt erinnern, erinnert dies an das Verhalten der Quantenmünze. Es wurde gemessen, dass sie mit einer Wahrscheinlichkeit von 50/50 in z-Richtung 0 oder 1 ist, aber immer und nie entlang X. Dies deutet darauf hin, dass sich der Überlagerungszustand eines Qubits vielleicht besser mit einer Münze veranschaulichen lässt, die still auf ihrem Rand liegt, als mit einer Münze, die wild durch die Luft fliegt.
Verwenden wir Qiskit, um zu sehen, ob sich unsere "Quantenmünze" genauso verhält wie unsere klassische Münze, wenn ein Gate angewendet wird. Wir werden auf ein Qubit anwenden, beginnend mit , und dann Estimator verwenden, um den Erwartungswert der drei Observablen X, Y und Z zu überprüfen.
qcoin_sx = QuantumCircuit(1)
qcoin_sx.sx(0)
qcoin_sx.draw("mpl")Output:
obs1 = Pauli("X")
obs2 = Pauli("Y")
obs3 = Pauli("Z")
# Step 2: Transpile the circuit
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_sx)
obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)
obs3_isa = obs3.apply_layout(layout=qc_isa.layout)
# Step 3: Run the circuit on a real quantum computer
estimator = Estimator(mode=backend)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
job = estimator.run(pubs)
res = job.result()
# Run the job on the Aer simulator with noise model from real backend
# pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
# job = estimator_sim.run(pubs)
# res=job.result()
# Step 4: Return the result in classical form, and analyze.
print(res[0].data.evs)Output:
[[-0.01234492]
[-1.00388865]
[ 0.00740695]]
Die Erwartungswerte sind 0, -1 und 0 für X, Y bzw. Z.
Überprüfen Sie Ihr Verständnis
Wie groß ist angesichts der Erwartungswerte die Wahrscheinlichkeit, dass die Quantenmünze bei jeder der drei Messachsen Kopf oben/unten (oder links/rechts oder vorne/hinten) ist?
Die Wahrscheinlichkeit, dass einer der beiden Zustände in X- und Z-Richtung gemessen wird, ist 50/50, und der Zustand wird immer in der Richtung -y in Y-Richtung gemessen.
Dies ist das gleiche Ergebnis wie bei unserem Gedankenexperiment, bei dem wir die klassische Münze um 90 Grad gedreht haben ( ). In der Tat gibt es jetzt eine genaue Analogie zwischen der Münze und dem Qubit-Zustand. Wir können uns den Qubit-Zustand als einen Vektor vorstellen, der in die Richtung von Köpfen auf einer Münze zeigt, normal zur Oberfläche der Münze. Kopf oben oder der Zustand auf einer Quantenmünze entspricht also einem Vektor, der gerade nach oben zeigt; Kopf unten oder ist gerade nach unten gerichtet. Eine beliebige gleichmäßige Überlagerung von und Punkten in horizontaler Richtung. Die Phase des Zustands bestimmt die genaue horizontale Richtung - die Richtung, in die er entlang des Äquators zeigt, ist gleich der Richtung, in die der Koeffizient in der komplexen Ebene zeigt.
Jedes Tor, das wir in diesem Heft gesehen haben, kann als eine Drehung (oder eine Reihe von Drehungen) der Münze/des Vektors dargestellt werden.
-
NICHT: 180 Grad um die x-Achse
-
: 90 Grad um die x-Achse
-
PHASE: Drehung von um die z-Achse
-
Hadamard: Das ist ein bisschen schwieriger. Wir haben es zunächst mit dem Werfen einer Münze verglichen, die sich unkontrolliert in der Luft dreht. Aber das Hadamard-Tor ist eigentlich eine kontrollierte, deterministische Drehung der Münze, wie die anderen Tore. Das Hadamard-Verfahren wird durch eine Drehung um 90 Grad um die y-Achse und anschließend um 180 Grad um die x-Achse durchgeführt.
Es gibt also nichts Zufälliges an einem Quantenüberlagerungszustand oder an einer der Standardoperationen, die wir mit dem Qubit durchführen. Jeder Vorgang ist deterministisch und reversibel. Der Zufall kommt nur dann ins Spiel, wenn wir uns entscheiden, den Quantenzustand zu messen.
Der Qubit-Zustand als Bloch-Vektor
Dieser Vektor, der in Richtung des "Kopfes" der Münze zeigt, wird als "Bloch-Vektor" bezeichnet Formal kann ein beliebiger (isolierter) Qubit-Zustand durch einen Vektor dargestellt werden, der auf der Oberfläche einer Kugel mit dem Radius 1 und den Koordinaten liegt. In Form dieser Koordinaten ausgedrückt, ist der Qubit-Zustand:
Nun wollen wir mit Qiskit überprüfen, wie sich der Bloch-Vektor verändert, wenn wir verschiedene Gatter auf unser Qubit anwenden, ausgehend vom Zustand .
NICHT
from qiskit.visualization import plot_bloch_multivector
qnot = QuantumCircuit(1)
qnot.x(0)
plot_bloch_multivector(qnot)Output:
qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)
plot_bloch_multivector(qsqrtnot)Output:
PHASE ( )
qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)
plot_bloch_multivector(qphase)Output:
Hadamard
qhadamard = QuantumCircuit(1)
qhadamard.h(0)
plot_bloch_multivector(qhadamard)Output:
Fazit – Was ist also ein Überlagerungszustand?
Zu Beginn dieses Moduls haben wir die Zufälligkeit der Messung eines Quantenüberlagerungszustands mit einem Münzwurf verglichen. Wir haben das "Hadamard-Tor", das eine Quantensuperposition erzeugt, mit dem Werfen einer Münze verglichen. Aber durch eine Reihe von Experimenten haben wir gelernt, dass es grundlegende Unterschiede zwischen einem klassischen Münzwurf und einer Quantenüberlagerung gibt.
Wir haben gelernt, dass ein Qubit in einem Überlagerungszustand nichts "Zufälliges" an sich hat. Sie ist wie eine Münze, die im dreidimensionalen Raum stillsteht. Tatsächlich ist eine Münze, die sich in drei Dimensionen frei drehen kann, eine sehr enge Analogie zu einer bestimmten Art der Visualisierung des Quantenzustands eines Qubits, dem so genannten Bloch-Vektor. Quantengatter drehen diesen Münz/Bloch-Vektor deterministisch und reversibel. Erst wenn wir das Qubit messen, kommt der Zufall ins Spiel. Wir verglichen diesen Messvorgang mit dem Zusammendrücken der Münze, damit sie flach in Richtung der Messachse liegt.
Ob sich ein Quantenzustand überhaupt in einer Superposition befindet, liegt im Auge des Betrachters. Wie Sie wahrscheinlich schon erfahren haben, können wir unser Koordinatensystem frei wählen - , und können in drei beliebige orthogonale Richtungen zeigen. Wenn wir also in einem Koordinatensystem eine Überlagerung von 0 und 1 haben, können wir ein neues Koordinatensystem - oder äquivalent dazu eine neue "Messbasis" - definieren, in dem der Zustand rein in die Richtung zeigt und sich somit nicht in einem Überlagerungszustand befindet. Wenn wir also sagen, dass sich ein Qubit in einer Superposition befindet, müssen wir auch die Frage beantworten: "Superposition von was?"
Sie werden dieses Modul vielleicht mit dem Eindruck verlassen, dass wir der Quantenmechanik gerade alle Geheimnisse entlockt haben. Schließlich ist einer der vermeintlich "seltsamsten" Aspekte, der Überlagerungszustand eines Qubits, in Wirklichkeit so einfach wie ein dreidimensionaler Vektor. Aber bedenken Sie, dass die Münze immer noch nur eine Analogie ist, und auch der Bloch-Vektor ist nur ein Visualisierungsinstrument zur Berechnung von Wahrscheinlichkeiten von Messergebnissen. Wir können nicht sagen, was ein Quantenzustand wirklich tut, bevor er gemessen wurde. Denn um das zu überprüfen, ist eine Messung erforderlich!
Dieses Rätsel, was die "wahre" Natur eines Quantenzustands ist und wie das Quantenphänomen der Verschränkung uns helfen kann, dies zu ergründen, werden wir im Modul Bellsche Ungleichung diskutieren.
Fragen
Lehrkräfte können Versionen dieser Hefte mit Antwortschlüsseln und Hinweisen zur Einordnung in gängige Lehrpläne anfordern, indem sie diese kurze Umfrage zur Verwendung der Hefte ausfüllen.
Wichtige Konzepte:
- Während die Messung eines Qubits in einer Superposition probabilistisch ist, wie das Werfen einer Münze, verhält sich der Superpositionszustand selbst anders als eine geworfene Münze.
- Ein Hauptunterschied zwischen einer klassischen Wahrscheinlichkeitsverteilung und einer Überlagerung besteht darin, dass die Überlagerung Phasenkohärenz besitzt, wodurch sie konstruktiv oder destruktiv interferieren kann.
- Der Zustand eines einzelnen, isolierten Qubits kann als Punkt auf der so genannten "Bloch-Kugel" visualisiert werden, wobei die relativen Amplituden der Komponenten und den Polarwinkel und die relativen Phasen zwischen den beiden Komponenten den Azimutalwinkel bestimmen.
- Alle Ein-Qubit-Quantengatter können als Rotationen des Vektors auf dieser Kugel betrachtet werden.
Richtig/Falsch-Fragen:
-
T/F Eine Quantenüberlagerung ist im Grunde dasselbe wie ein probabilistisches Ereignis in der klassischen Physik, wie das Werfen einer Münze.
-
T/F Die Länge des Bloch-Vektors, der den Zustand eines einzelnen isolierten Qubits beschreibt, ist immer 1.
-
T/F Ein-Qubit-Quantengatter ändern die Länge des Bloch-Vektors nicht.
MC-Fragen:
- Wählen Sie den richtigen Bloch-Vektor aus, der den Zustand repräsentiert:
-
Die Bloch-Sphäre beschreibt die Eigenschaften eines Qubits: (bitte alles Zutreffende auswählen)
a. Amplitude
b. verschränkung mit anderen Qubits
c. Phase
d. Farbe
e. wahrscheinlichkeit von Messergebnissen
Diskussionsfragen:
-
Warum kann der Zustand eines Qubits auf der Blochkugel dargestellt werden, die Wahrscheinlichkeitsverteilung eines Münzwurfs aber nicht?
-
Warum ist eine in die Luft geworfene Münze nicht die beste Analogie zu einem Quantenüberlagerungszustand? Welcher Aspekt von Überlagerungen wird in dieser Analogie nicht erfasst?
Herausfordernde Probleme:
- Verwenden Sie Qiskit, um eine Schaltung zu erstellen, die den Zustand in den Zustand