Quantencomputer programmieren: Nur eine Phase?

Seite 3: Auswertung und Darstellung der Ergebnisse

Inhaltsverzeichnis

Es gibt zwei Möglichkeiten zur Auswertung und Darstellung der Ergebnisse. Kleine Quantenschaltkreise lassen sich über Simulatoren berechnen und die Quantenwelt visuell ausgeben. Dafür ist eine Verbindung mit dem Simulator als Backend nötig:

BasicAer.get_backend('statevector_simulator')

Dann ist der Schaltkreis mit execute() abzuschicken und das Ergebnis mittels Qiskits Visualization Package darzustellen:

visualization.plot_bloch_multivector
# (5) Verbinden mit IBM-Simulatoren und Abschicken des Schaltkreises
backend = qiskit.BasicAer.get_backend('statevector_simulator')
job = qiskit.execute(QFTcircuit, backend).result()

BasicAer erlaubt das Ansteuern von Quantensimulatoren von IBM. Schickt man den Schaltkreis dann als Job beispielsweise an statevector_simulator, hilft dieser, die Quantenzustände auf der Bloch-Sphäre zu visualisieren. Für statevector_simulator sollten keine Messungen im Schaltkreis eingebaut sein, da sie Quantenzustände zerstören. Man erhielte nur die Amplitudenbasis mit |0> oder |1>, die Phase ginge verloren.

Wow – die Bloch-Sphäre ist nun im Qiskit-Format! Verglichen mit dem Uhrenformat in der vorherigen Abbildung zeigt sich, dass die Quantum Fourier Transformation tatsächlich genau den sechsten kombinierten Frequenzzustand von drei Qubits ausgibt (Uhrenbetrachtung = vom Südpol aus betrachtet, damit x beziehungsweise |+⟩ bei 12 Uhr ist). Damit lässt sich auch mit anderen Zahlen in Binärform mit init_state experimentieren.

Bei einem Überlagern des Zustands

in eine gesamte Phase würde diese nur in Richtung -y zeigen. q₁ und q schließen sich destruktiv aus, nur q setzt sich durch. Würde man ihn aber mit

überlagern, ergäbe das eine ausgewogene Überlagerung im 45-Grad-Winkel zwischen -y und x. So funktioniert Vektoraddition beziehungsweise Quanteninterferenz.

Als zweite Möglichkeit lässt sich der Circuit direkt an einen Quantencomputer schicken. Dafür ist es nötig, im Schaltkreis die auskommentierten Messungen zu aktivieren. Sie holen die Phasenwelt zurück in die 0- und 1-Gegenwart – und siehe da, man erhält randomisierte Ergebnisse. Das stimmt (leider) auch so: Die Information in der Phasenbasis fällt beim Messen zusammen und man misst die Qubits mit einer 50:50-Chance an Nordpol oder Südpol, unabhängig davon, wo sie sich am Äquator befanden.

Die nachfolgenden Listings zeigen das Laden des IBM-Q-Accounts mit Auflistung der verfügbaren Quantencomputer. Die Grafik zeigt den Quantenschaltkreis mit Quantengattern. Man sieht, dass Messungen (schwarze Symbole) automatisch so schnell wie möglich eingebaut werden, um Quantenzustände möglichst schnell und stabil abzugreifen, bevor Dekohärenz stattfindet. Das bedeutet, dass es sehr schwierig ist, Zwischenzustände auf der heutigen Hardware länger zu halten, bevor sie in stabilere Grundzustände zerfallen. Speziell ein Quantenzustand in der Phasenebene ist fragil äußeren Einflüssen gegenüber. Es ergibt daher nicht jeder Zustand 0,125, wie es zu erwarten wäre.

from qiskit import IBMQ
provider = IBMQ.enable_account('Token von Q-Account')
provider.backends()

[<IBMQSimulator('ibmq_qasm_simulator') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQBackend('ibmq_lima') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQBackend('ibmq_belem') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQBackend('ibmq_quito') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQSimulator('simulator_statevector') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQSimulator('simulator_mps') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQSimulator('simulator_extended_stabilizer') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQSimulator('simulator_stabilizer') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQBackend('ibmq_manila') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQBackend('ibm_nairobi') from IBMQ(hub='ibm-q', group='open', project='main')>,
 <IBMQBackend('ibm_oslo') from IBMQ(hub='ibm-q', group='open', project='main')>]

Um sich eine genaue Phasenkombination oder einen genauen Winkel ausgeben zu lassen, muss vor der Messung eine inverse Quantum Fourier Transformation stattfinden. Invertierte Quantenoperationen werden mit hochgestelltem † dargestellt.

Das funktioniert durch umgekehrte Anordnung der QFT-Gatter mit jeweils konjugierten Matrizen. Im Fall der Phasengatter genügt für Letzteres das Ändern der Vorzeichen. Sie entsprechen nun Rückwärtsrotationen:

Das Herausholen eines eindeutig messbaren Zustands aus einer Phase ist besonders interessant, wenn die Eigenschaften eines Gatters besser bekannt werden sollen, denn jedes universelle Gatter U besitzt einen Eigenwert, der sich als Phase interpretieren lässt:

Ist der Eigenvektor |Ψ⟩ bekannt, lässt sich mit QFT† der Winkel θ ausfindig machen. Das spielt für Simulationen chemisch-physikalischer Systeme eine Rolle, deren Abläufe denselben Dynamiken folgen und die sich daher für die Erforschung mithilfe von Quantencomputern eignen.

Ein unbekannter Quantenzustand |Ψ⟩ lässt sich mittels Quantum Phase Estimation abtasten. Dabei werden einzelne Phasen in ein Qubit-Register übertragen. Je mehr Qubits verwendet werden, desto genauer die Schätzung von |Ψ⟩.

Kombiniert man Quantum Phase Estimation für eine Funktion mit Quantum Fourier Transformation, erhält man den Shor-Algorithmus. Dieser Algorithmus revolutionierte das Feld, da er Primfaktorenzerlegung in ein phasenverwandtes Problem und damit für Quantencomputer verständlich gemacht hat. Der Shor-Algorithmus erlaubt das Zerlegen selbst großer Zahlen, die momentan die Sicherheit der RSA-Verschlüsselung bedingen.

Gemeinsam können die zwei Subroutinen eine Periodizität in

finden.

Quantum Phase Estimation zerlegt die Funktion für einen Eingabezustand in Phasen von

bis zu

Man erkennt das typische rekursive Muster. Über QFT† wird evaluiert, zu welchen Schritten

gilt. Aus dieser Periodizität r lassen sich die Primfaktoren mit exponentiellem Speedup klassischen Computern gegenüber berechnen. Das Prädikat Speedup oder "Quantenvorteil" erhalten Quantenroutinen, die ein Problem schneller oder präziser als klassische Computer lösen.

Der kleine Shor-Algorithmus (nachgestellt aus Qiskit Textbook, Kapitel "Shor's Algorithm"). Die CU₁-Gatter bilden gemeinsam QPE. QFT † am Ende liest die abgebildeten Phasen aus und findet die abgetastete Periodizität der Funktion.