Skip to main content
IBM Quantum Platform

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:

  • qiskit v2.1.0 oder neuer
  • qiskit-ibm-runtime v0.40.1 oder neuer
  • qiskit-aer v0.17.0 oder neuer
  • qiskit.visualization
  • numpy
  • pylatexenc

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:

S(coin)=12∣up⟩+12∣down⟩S(coin) = \frac{1}{2}|up\rangle + \frac{1}{2}|down\rangle

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 " ∣⟩|\rangle " (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:

Output of the previous code cell

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: ∣0⟩|0\rangle und ∣1⟩|1\rangle. Wir erzeugen den probabilistischen "Superpositions"-Zustand, indem wir mit dem Zustand ∣0⟩|0\rangle beginnen und dann ein so genanntes Hadamard-Gatter auf das Qubit anwenden. Damit befindet sie sich in einer gleichwertigen Überlagerung von ∣0⟩|0\rangle und ∣1⟩|1\rangle. 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 ∣0⟩|0\rangle messen, und eine 50%ige Chance, dass wir ∣1⟩|1\rangle messen. Wir schreiben diesen Zustand ein wenig anders als den klassischen probabilistischen Fall, aus Gründen, die später klar werden:

∣ψ⟩=12∣0⟩+12∣1⟩|\psi\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle

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:

Output of the previous code cell

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:

Output of the previous code cell

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:

E(money)=12(+1 dollar)+12(−1 dollar)=0 dollarsE(money) = \frac{1}{2} (+ \text{1 dollar}) + \frac{1}{2} (- \text{1 dollar}) = \text{0 dollars}

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 ∣0⟩|0\rangle bzw. ∣1⟩|1\rangle zugeordnet sind.

⟨ψ∣Z∣ψ⟩=12⟨0∣Z∣0⟩+12⟨1∣Z∣1⟩=12(+1)+12(−1)=0\langle \psi|Z|\psi \rangle = \frac{1}{2} \langle 0 | Z | 0 \rangle + \frac{1}{2} \langle 1 | Z | 1 \rangle = \frac{1}{2} (+1) + \frac{1}{2}(-1) = 0
from qiskit.quantum_info import Pauli

qcoin = QuantumCircuit(1)
qcoin.h(0)

# for Estimator, we do not apply the measurement to the circuit

Output:

<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 ∣+⟩|+\rangle oder ∣−⟩|-\rangle befindet, die entlang der xx -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 ∣+⟩|+\rangle bzw. ∣−⟩|-\rangle.

Ü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 ∣+⟩|+\rangle und ∣−⟩|-\rangle zu messen. Welchen Erwartungswert von X würden wir von Estimator erwarten, wenn dies der Fall wäre?

  • Wenn wir X auf den Zustand ∣+⟩|+\rangle anwenden, erhalten wir den Wert und +1 und auf den Zustand ∣−⟩|-\rangle 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 ∣+⟩|+\rangle und ∣−⟩|-\rangle.

Überprüfen Sie Ihr Verständnis

Was sagt uns dieser Erwartungswert über den Zustand ∣ψ⟩|\psi\rangle? Wie groß ist die Wahrscheinlichkeit, ∣+⟩|+\rangle und ∣−⟩|-\rangle in dieser X-Basis zu messen?

  • Da der Erwartungswert gleich dem Wert von X für den Zustand ∣+⟩|+\rangle ist, bedeutet dies, dass wir mit 100%iger Wahrscheinlichkeit den Zustand ∣+⟩|+\rangle 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,

S(coin)=c1∣up⟩+c2∣down⟩S(coin) = c_1|up\rangle + c_2|down\rangle

jeder Koeffizient ist einfach eine reelle, positive Zahl, die die Wahrscheinlichkeit der Messung eines bestimmten Zustands darstellt. In einem Quantenzustand,

∣ψ⟩=c1∣0⟩+c2∣1⟩|\psi\rangle = c_1 |0\rangle + c_2 |1\rangle

die Koeffizienten sind komplex, sie enthalten also einen realen und einen imaginären Teil. Jeder Koeffizient cic_i kann als zweidimensionaler Vektor in der komplexen Ebene ausgedrückt werden, mit dem Betrag ∣ci∣|c_i| und dem Winkel ϕi\phi_i, den er mit der reellen Achse bildet:

ci=∣ci∣eiϕi.c_i = |c_i| e^{i \phi_i}. Ein Kreis in einer komplexen Ebene. Der Quantenzustand wird als Pfeil der Länge 1 dargestellt, der sich drehen kann, um auf einen beliebigen Punkt des Kreises zu zeigen. Die horizontale Komponente des Pfeils ist seine reale Amplitude, die vertikale seine komplexe Amplitude.

Wir nennen ϕi\phi_i 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 Δϕ=ϕ2−ϕ1\Delta \phi = \phi_2 - \phi_1 der beiden Koeffizienten - wenden wir normalerweise eine globale Phase von −ϕ1-\phi_1 auf den gesamten Zustand an, so dass c1c_1 rein real ist und die relative Phase vollständig in c2c_2 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:

Output of the previous code cell

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 ∣0⟩|0\rangle. Dann transformiert die erste Hadamard-Transformation den Zustand in die Überlagerung, wie wir bereits gesehen haben:

H∣0⟩=12∣0⟩+12∣1⟩.H|0\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle.

In diesem Fall sind beide Koeffizienten vollständig reell und positiv, was bedeutet, dass die Phase ϕ=0\phi=0 ist.

Die zweite Hadamard-Methode wird dann auf jeden Teil des Überlagerungszustands separat angewendet. Wir wissen bereits, wie die Hadamard-Transformation den Zustand ∣0⟩|0\rangle transformiert. Aber was ist mit ∣1⟩|1\rangle?

H∣1⟩=12∣0⟩−12∣1⟩H|1\rangle = \frac{1}{\sqrt{2}} |0\rangle - \frac{1}{\sqrt{2}} |1\rangle

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 ∣1⟩|1\rangle hat eine Phase von ϕ=π\phi = \pi, 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: H(12∣0⟩+12∣1⟩)H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle). Beachten Sie, dass HH distributiv ist, so dass wir es auf jeden der Terme einzeln anwenden können.

  • H(12∣0⟩+12∣1⟩)=12H∣0⟩+12H∣1⟩=12[(∣0⟩+∣1⟩)+(∣0⟩−∣1⟩)]=∣0⟩H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle) = \frac{1}{\sqrt{2}} H|0\rangle + \frac{1}{\sqrt{2}} H|1\rangle = \frac{1}{2} [(|0\rangle + |1\rangle) + (|0\rangle - |1\rangle)] = |0\rangle

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:

Output of the previous code cell

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 ∣0⟩|0\rangle als auch den Zustand ∣1⟩|1\rangle in ähnliche Zustände, jedoch mit entgegengesetzten Phasen, verwandelt. Nach dem zweiten Hadamard-Terminus sehen wir, dass die Terme von ∣0⟩|0\rangle konstruktiv interferieren, aber die Terme von ∣1⟩|1\rangle 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 π\pi 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:

Output of the previous code cell
## 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:

Output of the previous code cell

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 ∣0⟩|0\rangle bzw. ∣1⟩|1\rangle 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:

Output of the previous code cell

Eine weitere (bessere) Münzanalogie unter Verwendung des „ NOT\sqrt{\text{NOT}} “-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 NOT\sqrt{\text{NOT}}. 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 NOT\sqrt{\text{NOT}} gate.

Stellen Sie sich vor, dass wir nach der Anwendung des NOT\sqrt{\text{NOT}} 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: xx, yy, und zz. Wir sehen, dass der Rand der Münze entlang der xx und zz 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 yy -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 ∣+⟩|+\rangle und nie ∣−⟩|-\rangle 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 NOT\sqrt{\text{NOT}} Gate angewendet wird. Wir werden NOT\sqrt{\text{NOT}} auf ein Qubit anwenden, beginnend mit ∣0⟩|0\rangle, 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:

Output of the previous code cell
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 ( NOT\sqrt{\text{NOT}} ). 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 ∣0⟩|0\rangle auf einer Quantenmünze entspricht also einem Vektor, der gerade nach oben zeigt; Kopf unten oder ∣1⟩|1\rangle ist gerade nach unten gerichtet. Eine beliebige gleichmäßige Überlagerung von ∣0⟩|0\rangle und ∣1⟩|1\rangle 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 c2c_2 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

  • NOT\sqrt{\text{NOT}} : 90 Grad um die x-Achse

  • PHASE: Drehung von ϕ\phi 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 (r,θ,ϕ)(r, \theta, \phi) liegt. In Form dieser Koordinaten ausgedrückt, ist der Qubit-Zustand:

∣ψ⟩=cos⁡θ2∣0⟩+eiϕsin⁡θ2∣1⟩|\psi\rangle = \cos{\frac{\theta}{2}} |0\rangle + e^{i \phi} \sin{\frac{\theta}{2}} |1\rangle

Ein Diagramm der Bloch-Kugel. Der Quantenzustand ist ein Vektor in drei Dimensionen. Da er in jede beliebige Richtung zeigen kann, lässt sich der Quantenzustand mit den Polarwinkeln theta und phi angeben, um einen Punkt auf einer Kugeloberfläche zu lokalisieren.

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 ∣0⟩|0\rangle.

NICHT

from qiskit.visualization import plot_bloch_multivector

qnot = QuantumCircuit(1)
qnot.x(0)

plot_bloch_multivector(qnot)

Output:

Output of the previous code cell

NOT\sqrt{\text{NOT}}

qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)

plot_bloch_multivector(qsqrtnot)

Output:

Output of the previous code cell

PHASE ( ϕ=π\phi = \pi )

qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)

plot_bloch_multivector(qphase)

Output:

Output of the previous code cell

Hadamard

qhadamard = QuantumCircuit(1)
qhadamard.h(0)

plot_bloch_multivector(qhadamard)

Output:

Output of the previous code cell

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 - xx, yy und zz 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 +z+z 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 ∣0⟩|0\rangle und ∣1⟩|1\rangle den Polarwinkel θ\theta und die relativen Phasen zwischen den beiden Komponenten den Azimutalwinkel ϕ\phi bestimmen.
  • Alle Ein-Qubit-Quantengatter können als Rotationen des Vektors auf dieser Kugel betrachtet werden.

Richtig/Falsch-Fragen:

  1. T/F Eine Quantenüberlagerung ist im Grunde dasselbe wie ein probabilistisches Ereignis in der klassischen Physik, wie das Werfen einer Münze.

  2. T/F Die Länge des Bloch-Vektors, der den Zustand eines einzelnen isolierten Qubits beschreibt, ist immer 1.

  3. T/F Ein-Qubit-Quantengatter ändern die Länge des Bloch-Vektors nicht.

MC-Fragen:

  1. Wählen Sie den richtigen Bloch-Vektor aus, der den Zustand ∣Ψ⟩=13∣0⟩+eiπ/423∣1⟩|\Psi\rangle = \sqrt{\frac{1}{3}}|0\rangle + e^{i \pi / 4} \sqrt{\frac{2}{3}}|1\rangle repräsentiert:
Es werden vier Bloch-Kugeln gezeigt. Bei Option a verläuft der Vektor fast entlang der Linie +x, bei Option b auf halbem Weg zwischen +x und +y und leicht unterhalb der xy-Ebene, bei Option c zwischen +x und -y und leicht oberhalb der xy-Ebene und bei Option d entlang -x.
  1. 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:

  1. Warum kann der Zustand eines Qubits auf der Blochkugel dargestellt werden, die Wahrscheinlichkeitsverteilung eines Münzwurfs aber nicht?

  2. 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:

  1. Verwenden Sie Qiskit, um eine Schaltung zu erstellen, die den Zustand ∣0⟩|0\rangle in den Zustand 32∣0⟩+12ei5π6∣1⟩\frac{\sqrt{3}}{2}|0\rangle + \frac{1}{2}e^{i \frac{5\pi}{6}}|1\rangle
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.