Einführung in Qiskit¶
Der Workflow bei der Verwendung von Qiskit besteht im Wesentlichen aus 3 Schritten:
Entwurf: Erstellen eines Quantenschaltkreis, welcher das zu betrachtende Problem darstellt.
Ausführung: Experimente auf verschiedenen Backends ausführen (Simulatoren und Quantencomputer).
Analyse: Berechnung zusammenfassender Statistiken und Visualisierung der Ergebnisse von Experimenten.
Hier ein Beispiel des kompletten Workflows, wobei jeder Schritt einzeln im Detail erklärt ist:
import numpy as np
from qiskit import(
QuantumCircuit,
execute,
Aer)
from qiskit.visualization import plot_histogram
# Use Aer's qasm_simulator
simulator = Aer.get_backend('qasm_simulator')
# 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])
# Execute the circuit on the qasm simulator
job = execute(circuit, simulator, shots=1000)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
# Draw the circuit
circuit.draw()
Total count for 00 and 11 are: {'00': 507, '11': 493}
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═ 0 1
# Plot a histogram
plot_histogram(counts)

Workflow Schritt für Schritt¶
Das Programm von oben kann in sechs Schritte aufgeteilt werden:
Pakete importieren
Variablen definieren
Gatter hinzufügen
Schaltkreis visualisieren
Experiment simulieren
Ergebnisse visualisieren
Schritt 1 : Pakete importieren¶
So werden die Grundbausteine für das Programm importiert:
import numpy as np
from qiskit import(
QuantumCircuit,
execute,
Aer)
from qiskit.visualization import plot_histogram
Die Pakete im Detail, sind
QuantumCircuit
: Der Quantenschaltkreis kann als Anweisungen im Quantensystem gesehen werden. Er beinhaltet alle Quantenoperationen.execute
: Führt den Quantenschaltkreis bzw. das Experiment aus.Aer
: Ist für das Simulations-Backend zuständig.plot_histogram
: Erstellt Histogramme.
Schritt 2 : Variablen definieren¶
Betrachtet man die nächste Zeile Code
circuit = QuantumCircuit(2, 2)
Hier wird ein Quantenschaltkreis circuit
definiert, bestehend aus zwei Qubits im Basiszustand „0“, sowie zwei klassischen Bits mit Wert „0“.
Syntax:
QuantumCircuit(int, int)
Schritt 3 : Gatter hinzufügen¶
Gatter (Operationen) werden hinzugefügt, um Quantenregister des Schaltkreises zu manipulieren.
Man betrachte die nächsten drei Zeilen Code:
circuit.h(0)
circuit.cx(0, 1)
circuit.measure([0,1], [0,1])
Die Gatter werden einzeln nacheinander hinzugefügt um den Bell-Zustand zu repräsentieren
Der Code von oben wendet diese Gatter an:
QuantumCircuit.h(0)
: Ein Hadamard-Gatter \(H\) auf Qubit 0, welches das Qubit in Superposition überführt.QuantumCircuit.cx(0, 1)
: Ein Controlled-Not Operator (\(CNOT\)) wirkt auf ein Kontroll-Qubit 0 und ein 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 x-ten Qubits im x-ten klassischen Bit gespeichert.
Schritt 4 : Schaltkreis visualisieren¶
Die Methode qiskit.circuit.QuantumCircuit.draw()
kann benutzt werden, um die unterschiedlichen Typen von entworfenen Quantenschaltkreisen zu visualisieren.
circuit.draw()
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═ 0 1
In diesem Schaltkreis sind die Qubits so sortiert, dass sich Qubit 0 oben und Qubit 1 unten befindet. Der Schaltkreis wird von links nach rechts gelesen. Gatter 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.
Eine settings.conf
, welche den Matplotlib Drawer verwendet, sieht bspw. so aus:
[default]
circuit_drawer = mpl
Hierbei kann man jedes gültige Schaltkreis-Drawer-Backend verwenden, inklusive text, mpl, latex und latex_source.
Schritt 5 : Experiment simulieren¶
Qiskit Aer ist ein hochperformantes Simulations-Framework für Quantenschaltkreise. Es stellt diverse Backends für verschiedene Simulationszwecke zur Verfügung.
Bei Problemen mit der Installation von Aer, kann man alternativ den Basic Aer Provider verwenden, indem man Aer mit BasicAer ersetzt. Basic Aer ist Teil von Qiskit Terra.
import numpy as np
from qiskit import(
QuantumCircuit,
execute,
BasicAer)
...
Um den Schaltkreis zu simulieren, verwendet man den qasm_simulator
. Jeder Durchlauf des Schaltkreises ergibt entweder den Bit-String 00 oder 11.
simulator = Aer.get_backend('qasm_simulator')
job = execute(circuit, simulator, shots=1000)
result = job.result()
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
Total count for 00 and 11 are: {'00': 501, '11': 499}
Wie erwartet, ist bei ca. 50% der Durchläufe 00 das Ergebnis. Wie oft der Schaltkreis durchläuft, wird über das Argument shots
der Methode execute
definiert. Die Anzahl der Durchläufe dieser Simulation wurde auf 1000 gesetzt (der Standard ist 1024).
Sobald das result
Objekt verfügbar ist, kann man auf die Zählung mit der Methode get_counts(circuit)
zugreifen. Dadurch erhält man die zusammengefassten Ergebnisse des Experiments.
Schritt 6 : 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 Zählungen geteilt durch die Anzahl an Durchläufen.
Bemerkung
Man kann probieren, das shots
Argument in der Methode execute
zu ändern, um zu sehen, wie sich die geschätzten Wahrscheinlichkeiten verändern.
Nächste Schritte¶
Das waren die Grundlagen von Qiskit. Weiterführendes Lernmaterial:
` Qiskit-Tutorials <tutorials/circuits/index.rst>` __