Zum Hauptinhalt springen

Referenzzustände

In dieser Lektion lernen wir, wie wir unser System mit einem Referenzzustand initialisieren können, um die Konvergenz unseres variationalen Algorithmus zu beschleunigen. Zunächst lernen wir, wie man einen Referenzzustand manuell konstruiert, und erkunden dann verschiedene Standardoptionen, die in einem variationalen Algorithmus verwendet werden können.

Diagramm der Optionen für Referenzzustände, darunter Standard, anwendungsspezifisch und Quanten-Referenzzustände.

Standardzustand

Ein Referenzzustand bezeichnet den initialen, festen Ausgangspunkt für unser Problem. Um einen Referenzzustand vorzubereiten, müssen wir am Anfang unseres Quantencircuits den geeigneten, nicht-parametrisierten unitären Operator URU_R anwenden, sodass ρ=UR0|\rho\rangle = U_R |0\rangle gilt. Wenn du eine fundierte Schätzung oder einen Datenpunkt aus einer bereits bekannten optimalen Lösung hast, wird der variationale Algorithmus wahrscheinlich schneller konvergieren, wenn du diesen als Ausgangspunkt verwendest.

Der einfachstmögliche Referenzzustand ist der Standardzustand, bei dem wir den Anfangszustand eines nn-Qubit-Quantencircuits verwenden: 0n|0\rangle^{\otimes n}. Für den Standardzustand gilt URIU_R \equiv I. Aufgrund seiner Einfachheit ist der Standardzustand ein gültiger Referenzzustand, der in vielen Szenarien eingesetzt wird.

Klassischer Referenzzustand

Angenommen, du hast ein Drei-Qubit-System und möchtest im Zustand 001|001\rangle statt im Standardzustand 000|000\rangle starten. Dies ist ein Beispiel für einen rein klassischen Referenzzustand. Um ihn zu konstruieren, musst du lediglich ein X-Gate auf Qubit 00 anwenden (gemäß Qiskits Qubit-Reihenfolge), da 001=X0000|001\rangle = X_0 |000\rangle.

In diesem Fall ist unser unitärer Operator URX0U_R \equiv X_0, was zum Referenzzustand ρ001|\rho\rangle \equiv |001\rangle führt.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

Output of the previous code cell

Quanten-Referenzzustand

Angenommen, du möchtest mit einem komplexeren Zustand beginnen, der Superposition und/oder Verschränkung beinhaltet, wie etwa 12(100+111)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

Um diesen Zustand aus 000|000\rangle zu erhalten, kann man einen Hadamard-Gate auf Qubit 00 (H0H_0), ein CNOT (CX)-Gate mit Qubit 00 als Kontroll-Qubit und Qubit 11 als Ziel-Qubit (CNOT01CNOT_{01}) sowie schließlich ein XX-Gate auf Qubit 22 (X2X_2) anwenden.

In diesem Szenario ist unser unitärer Operator URX2CNOT01H0000U_{R} \equiv X_2CNOT_{01}H_0|000\rangle, und unser Referenzzustand ist ρ12(100+111)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

Output of the previous code cell

Referenzzustände mit Template-Circuits konstruieren

Wir können auch verschiedene Template-Circuits verwenden, wie etwa TwoLocal, das eine einfache Darstellung mehrerer abstimmbarer Parameter und Verschränkungen ermöglicht. Diese Template-Circuits werden wir in der nächsten Lektion ausführlicher behandeln, aber wir können sie für unsere Referenzzustände verwenden, sofern wir die Parameter binden:

from qiskit.circuit.library import TwoLocal
from math import pi

reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]

reference_circuit = reference_circuit.assign_parameters(theta_list)

reference_circuit.decompose().draw("mpl")

Output of the previous code cell

Anwendungsspezifische Referenzzustände

Quantenmaschinelles Lernen

Im Kontext eines variationalen Quanten-Klassifikators (VQC) werden die Trainingsdaten mit einem parametrisierten Circuit, der als Feature Map bezeichnet wird, in einen Quantenzustand kodiert. Dabei repräsentiert jeder Parameterwert einen Datenpunkt aus dem Trainingsdatensatz. Die zz_feature_map ist ein Typ von parametrisierten Circuits, der genutzt werden kann, um unsere Datenpunkte (xx) an diese Feature Map zu übergeben.

from qiskit.circuit.library import zz_feature_map

data = [0.1, 0.2]

zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")

Output of the previous code cell

Zusammenfassung

In dieser Lektion hast du gelernt, wie du dein System mithilfe folgender Methoden initialisieren kannst:

  • Standardreferenzzustand
  • Klassische Referenzzustände
  • Quanten-Referenzzustände
  • Anwendungsspezifische Referenzzustände

Unser variationaler Arbeitsablauf auf hoher Ebene sieht wie folgt aus:

Ein Circuit-Diagramm eines unitären Operators, der einen Referenzzustand vorbereitet.

Während Referenzzustände feste Ausgangspunkte sind, können wir eine Variationsform verwenden, um einen Ansatz zu definieren, der eine Sammlung parametrisierter Zustände darstellt, die unser variationaler Algorithmus erkunden kann.