• Docs >
  • Einführung in Qiskit
Shortcuts

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': 508, '11': 492}
     ┌───┐     ┌─┐   
q_0: ┤ H ├──■──┤M├───
     └───┘┌─┴─┐└╥┘┌─┐
q_1: ─────┤ X ├─╫─┤M├
          └───┘ ║ └╥┘
c: 2/═══════════╩══╩═
                0  1 
# Plot a histogram
plot_histogram(counts)
_images/getting_started_1_0.png

Workflow Schritt für Schritt

Das Programm von oben kann in sechs Schritte aufgeteilt werden:

  1. Pakete importieren

  2. Variablen definieren

  3. Gatter hinzufügen

  4. Schaltkreis visualisieren

  5. Experiment simulieren

  6. 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

\[|\psi\rangle = \left(|00\rangle+|11\rangle\right)/\sqrt{2}.\]

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): A controlled-Not operation (\(CNOT\)) on control qubit 0 and target qubit 1, putting the qubits in an entangled state.

  • QuantumCircuit.measure([0,1], [0,1]): Werden die Quanten- und klassischen Register als Ganzes an measure übergeben, wird das Messergebnis des x-ten Qubits im x-ten klassischen Bit gespeichert.

Schritt 4 : Schaltkreis visualisieren

You can use qiskit.circuit.QuantumCircuit.draw() to view the circuit that you have designed in the various forms used in many textbooks and research articles.

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': 489, '11': 511}

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)
_images/getting_started_4_0.png

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:

Zu sehen ist lang: German
Sprachen
English
Japanese
German
Korean