Einführung in Qiskit#
Bei der Verwendung von Qiskit besteht ein Benutzerworkflow nominell aus den folgenden vier high-level Schritten:
Build: Entwerfen Sie eine Quantenschaltung(en), die das von Ihnen betrachtete Problem darstellt.
** Compile**: Kompiliert Schaltungen für einen bestimmten Quantendienst, z.B. ein Quantensystem oder einen klassischer Simulator.
Run: Führt die kompilierten Schaltkreise auf dem/den angegebenen Quantendienst(en) aus. Diese Dienste können Cloud-basiert oder lokal sein.
Analyze: Berechnet zusammenfassende Statistiken und visualisiert die Ergebnisse der Experimente.
Hier ist ein Beispiel für den gesamten Workflow, wobei jeder Schritt in folgenden Abschnitten ausführlich erläutert wird:
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
# Use Aer's AerSimulator
simulator = AerSimulator()
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)
# Add a H gate on qubit 0
circuit.h(0)
# Add a CX (CNOT) gate on control qubit 0 and target qubit 1
circuit.cx(0, 1)
# Map the quantum measurement to the classical bits
circuit.measure([0, 1], [0, 1])
# Compile the circuit for the support instruction set (basis_gates)
# and topology (coupling_map) of the backend
compiled_circuit = transpile(circuit, simulator)
# Execute the circuit on the aer simulator
job = simulator.run(compiled_circuit, shots=1000)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(compiled_circuit)
print("\nTotal count for 00 and 11 are:", counts)
# Draw the circuit
circuit.draw("mpl")

# Plot a histogram
plot_histogram(counts)

Workflow Schritt für Schritt#
Das obige Programm kann in sechs Schritte untergliedert werden:
Pakete importieren
Variablen initialisieren
Gates hinzufügen
Den Schaltkreis visualisieren
Das Experiment simulieren
Die Ergebnisse visualisieren
Schritt 1 : Pakete importieren#
So werden die Grundbausteine für das Programm importiert:
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
Im Einzelnen sind die Importe
Schritt 2: Variablen initialisieren#
Betrachten Sie die nächste Codezeile
circuit = QuantumCircuit(2, 2)
Hier wird ein Quantenschaltkreis circuit
definiert, bestehend aus zwei Qubits im Basiszustand 0 und zwei auf 0 gesetzten klassischen Bits.
Syntax:
QuantumCircuit(int, int)
Schritt 3 : Gates hinzufügen#
Sie können Gates (Operationen) hinzufügen, um die Register Ihrer Schaltung zu manipulieren.
Betrachten Sie die folgenden drei Zeilen Code:
circuit.h(0)
circuit.cx(0, 1)
circuit.measure([0, 1], [0, 1])
Die Gates werden nacheinander hinzugefügt um den Bell-Zustand zu bilden
Der obige Code verwendet die folgenden Gates:
QuantumCircuit.h(0)
: Ein Hadamard-Gate \(H\) auf Qubit 0, welches das Qubit in einen Zustand der Superposition (superposition state) überführt.QuantumCircuit.cx(0, 1)
: Ein Controlled-Not Operator (\(CNOT\)) mit Kontroll-Qubit 0 und Ziel-Qubit 1. Damit werden diese Qubits in einen quantenmechanisch verschränkten Zustand gebracht.QuantumCircuit.measure([0,1], [0,1])
: Werden die Quanten- und klassischen Register als Ganzes anmeasure
übergeben, wird das Messergebnis des i-ten Qubits im i-ten klassischen Bit gespeichert.
Schritt 4 : Den Schaltkreis visualisieren#
Sie können :meth:` qiskit.circuit.QuantumCircuit.draw ` verwenden, um die von Ihnen entworfenen Schaltung so anzuzeigen, wie sie in vielen Lehrbüchern und Forschungsartikeln dargestellt werden.
circuit.draw("mpl")

In diesem Schaltkreis sind die Qubits so angeordnet, dass sich Qubit 0 oben und Qubit 1 unten befindet. Der Schaltkreis wird von links nach rechts gelesen. Gates welche früher hinzugefügt wurden befinden sich also weiter links.
Das Standard-Backend für QuantumCircuit.draw()
oder qiskit.visualization.circuit_drawer()
ist das Text-Backend. Dies kann man, abhängig von der lokalen Entwicklungsumgebung, nach Belieben konfigurieren. Die Konfigurationsdatei dafür befindet sich normalerweise in ~/.qiskit/settings.config
. Dies ist eine .ini
-Datei.
Zum Beispiel wird eine Datei ` `settings.conf ` ` zum Festlegen einer Matplotlib-Eigenschaft zum Zeichnen verwendet:
[default]
circuit_drawer = mpl
Jedes verfügbare gültige Schaltkreis-Zeichner-Backend kann verwendet werden wie zum Beispiel text, mpl, latex und latex_source.
Schritt 5 : Ein Experiment simulieren#
Qiskit Aer is a high performance simulator framework for quantum circuits. It provides several backends to achieve different simulation goals.
If you have issues installing Aer, you can alternatively use the Basic Aer provider by replacing Aer with BasicAer. Basic Aer is included in Qiskit.
from qiskit import QuantumCircuit, transpile
from qiskit.providers.basicaer import QasmSimulatorPy
...
To simulate this circuit, you will use the AerSimulator
. Each run of this
circuit will yield either the bit string 00 or 11.
simulator = AerSimulator()
compiled_circuit = transpile(circuit, simulator)
job = simulator.run(compiled_circuit, shots=1000)
result = job.result()
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
Wie erwartet, wird die Bit-Zeichenkette 00 in ungefähr 50 Prozent der Fälle ausgegeben. Die Anzahl der Fälle, in denen die Schaltung ausgeführt wird, kann über das Argument shots
der Methode``execute`` festgelegt werden. Die Anzahl der Shots der Simulation wurde auf 1000 eingestellt (die Standardeinstellung ist 1024).
Sobald das result
Objekt verfügbar ist, kann man auf das Ergebnis mit der Methode get_counts(circuit)
zugreifen. Dadurch erhält man die zusammengefassten Ergebnisse des Experiments.
Schritt 6 : Die Ergebnisse visualisieren#
Qiskit stellt viele Visualisierungen zur Verfügung,
inklusive der Funktion plot_histogram
um die Ergebnisse anzuzeigen.
plot_histogram(counts)

Die beobachteten Wahrscheinlichkeiten \(Pr(00)\) and \(Pr(11)\) ergeben sich aus den jeweiligen Auszählungen geteilt durch die Anzahl der Durchläufe.
Bemerkung
Versuchen Sie, das Schlüsselwort shots
in der Methode run()
zu ändern, um zu sehen, wie sich die geschätzten Wahrscheinlichkeiten ändern.
Nächste Schritte#
Jetzt, wo Sie die Grundlagen gelernt haben, betrachten Sie einmal dieses Lernmaterial: