Der Variational Quantum Eigensolver (VQE)
Diese Lektion stellt den Variational Quantum Eigensolver vor, erläutert seine Bedeutung als grundlegenden Algorithmus im Quantencomputing und untersucht seine Stärken und Schwächen. VQE allein, ohne ergänzende Methoden, wird für moderne Quantenberechnungen auf Utility-Skala wahrscheinlich nicht ausreichen. Er ist dennoch wichtig als archetypische klassisch-quantenmechanische Hybridmethode und bildet ein wesentliches Fundament, auf dem viele fortgeschrittenere Algorithmen aufbauen.
Dieses Video gibt einen Überblick über VQE und die Faktoren, die seine Effizienz beeinflussen. Der folgende Text ergänzt dies um weitere Details und implementiert VQE mit Qiskit.
1. Was ist VQE?
Der Variational Quantum Eigensolver ist ein Algorithmus, der klassisches und quantenmechanisches Computing gemeinsam einsetzt, um eine Aufgabe zu lösen. Eine VQE-Berechnung besteht aus 4 Hauptkomponenten:
- Ein Operator: Oft ein Hamiltonoperator, den wir nennen, der eine Eigenschaft des Systems beschreibt, die du optimieren möchtest. Anders ausgedrückt: Du suchst den Eigenvektor dieses Operators, der dem minimalen Eigenwert entspricht. Diesen Eigenvektor nennen wir oft den „Grundzustand".
- Ein „Ansatz" (ein deutsches Wort): Ein Quanten-Circuit, der einen Quantenzustand vorbereitet, der den gesuchten Eigenvektor annähert. Genau genommen ist ein Ansatz eine Familie von Quanten-Circuits, weil einige der Gates im Ansatz parametrisiert sind – ihnen wird also ein Parameter übergeben, den wir variieren können. Diese Familie von Circuits kann eine Familie von Quantenzuständen erzeugen, die den Grundzustand approximieren.
- Ein Estimator: Ein Mittel zur Schätzung des Erwartungswerts des Operators über den aktuellen variationellen Quantenzustand. Manchmal ist dieser Erwartungswert – die sogenannte Kostenfunktion – unser eigentliches Ziel. Manchmal interessiert uns eine komplexere Funktion, die sich dennoch aus einem oder mehreren Erwartungswerten zusammensetzt.
- Ein klassischer Optimierer: Ein Algorithmus, der Parameter variiert, um die Kostenfunktion zu minimieren.
Schauen wir uns jede dieser Komponenten genauer an.
1.1 Der Operator (Hamiltonoperator)
Im Mittelpunkt eines VQE-Problems steht ein Operator, der ein System von Interesse beschreibt. Wir nehmen hier an, dass der kleinste Eigenwert und der zugehörige Eigenvektor dieses Operators für einen wissenschaftlichen oder praktischen Zweck nützlich sind. Beispiele hierfür sind ein chemischer Hamiltonoperator, der ein Molekül beschreibt, bei dem der kleinste Eigenwert der Grundzustandsenergie des Moleküls entspricht und der zugehörige Eigenzustand die Geometrie oder Elektronenkonfiguration des Moleküls beschreibt. Oder der Operator beschreibt die Kosten eines zu optimierenden Prozesses, und die Eigenzustände entsprechen Routen oder Vorgehensweisen. In manchen Fachgebieten wie der Physik bezeichnet ein „Hamiltonoperator" fast immer einen Operator, der die Energie eines physikalischen Systems beschreibt. Im Quantencomputing ist es jedoch üblich, quantenmechanische Operatoren, die ein betriebswirtschaftliches oder logistisches Problem beschreiben, ebenfalls als „Hamiltonoperator" zu bezeichnen. Diese Konvention übernehmen wir hier.

Die Abbildung eines physikalischen oder Optimierungsproblems auf Qubits ist typischerweise keine triviale Aufgabe, aber diese Details stehen nicht im Mittelpunkt dieses Kurses. Eine allgemeine Diskussion der Abbildung eines Problems auf einen Quantenoperator findet sich in Quantum computing in practice. Ein detaillierterer Blick auf die Abbildung chemischer Probleme auf Quantenoperatoren bietet Quantum Chemistry with VQE.
Für die Zwecke dieses Kurses nehmen wir an, dass die Form des Hamiltonoperators bekannt ist. Ein Hamiltonoperator für ein einfaches Wasserstoffmolekül (unter bestimmten Aktivraum-Annahmen und mit dem Jordan-Wigner-Mapper) lautet beispielsweise:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime scipy
from qiskit.quantum_info import SparsePauliOp
hamiltonian = SparsePauliOp(
[
"IIII",
"IIIZ",
"IZII",
"IIZI",
"ZIII",
"IZIZ",
"IIZZ",
"ZIIZ",
"IZZI",
"ZZII",
"ZIZI",
"YYYY",
"XXYY",
"YYXX",
"XXXX",
],
coeffs=[
-0.09820182 + 0.0j,
-0.1740751 + 0.0j,
-0.1740751 + 0.0j,
0.2242933 + 0.0j,
0.2242933 + 0.0j,
0.16891402 + 0.0j,
0.1210099 + 0.0j,
0.16631441 + 0.0j,
0.16631441 + 0.0j,
0.1210099 + 0.0j,
0.17504456 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
],
)
Beachte, dass der obige Hamiltonoperator Terme wie ZZII und YYYY enthält, die nicht miteinander kommutieren. Um ZZII auszuwerten, müsste man unter anderem den Pauli-Z-Operator auf Qubit 3 messen. Um jedoch YYYY auszuwerten, muss man den Pauli-Y-Operator auf demselben Qubit 3 messen. Zwischen dem Y- und dem Z-Operator auf demselben Qubit besteht eine Unschärferelation; beide Operatoren lassen sich nicht gleichzeitig messen. Auf diesen Punkt werden wir weiter unten und im weiteren Verlauf des Kurses noch zurückkommen.
Der obige Hamiltonoperator ist eine -Matrixoperator. Die Diagonalisierung des Operators zur Bestimmung seines kleinsten Energieeigenwerts ist nicht schwierig.
import numpy as np
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues), "hartrees")
The ground state energy is -1.1459778447627311 hartrees
Klassische Brute-Force-Eigenlöser können nicht skalieren, um die Energien oder Geometrien sehr großer Atomsysteme wie Medikamente oder Proteine zu beschreiben. VQE ist einer der frühen Versuche, Quantencomputing für dieses Problem nutzbar zu machen.
In dieser Lektion werden wir auf deutlich größere Hamiltonoperatoren stoßen als den obigen. Es wäre jedoch verfrüht, die Grenzen von VQE auszuloten, bevor wir später in diesem Kurs einige der fortgeschritteneren Werkzeuge vorstellen, die VQE ergänzen oder ersetzen können.
1.2 Ansatz
Das Wort „Ansatz" ist deutsch. Der korrekte Plural im Deutschen lautet „Ansätze", obwohl man häufig auch „ansatzes" oder „ansatze" findet. Im Kontext von VQE ist ein Ansatz der Quanten-Circuit, mit dem du eine Mehr-Qubit-Wellenfunktion erzeugst, die den Grundzustand des untersuchten Systems möglichst gut annähert und damit den kleinsten Erwartungswert deines Operators liefert. Dieser Circuit enthält variationelle Parameter (oft im Parametervektor zusammengefasst).

Es wird ein Anfangssatz von Werten der variationellen Parameter gewählt. Die unitäre Operation des Ansatzes auf dem Circuit nennen wir . Standardmäßig werden alle Qubits in IBM®-Quantencomputern im Zustand initialisiert. Wenn der Circuit ausgeführt wird, ist der Zustand der Qubits:
Wenn wir nur die niedrigste Energie benötigten (in der Sprache physikalischer Systeme), könnten wir diese schätzen, indem wir die Energie viele Male messen und den kleinsten Wert nehmen. Wir wollen aber typischerweise auch die Konfiguration kennen, die diese niedrigste Energie oder diesen kleinsten Eigenwert liefert. Der nächste Schritt ist daher die Schätzung des Erwartungswerts des Hamiltonoperators durch Quantenmessungen. Darin steckt einiges. Qualitativ lässt sich dieser Prozess damit verstehen, dass die Wahrscheinlichkeit , eine Energie zu messen (wieder in der Sprache physikalischer Systeme), mit dem Erwartungswert durch folgende Beziehung verknüpft ist:
Die Wahrscheinlichkeit ist außerdem mit der Überlappung zwischen dem Eigenzustand und dem aktuellen Systemzustand verknüpft:
Durch viele Messungen der Pauli-Operatoren, aus denen unser Hamiltonoperator besteht, können wir den Erwartungswert des Hamiltonoperators im aktuellen Systemzustand schätzen. Der nächste Schritt besteht darin, die Parameter zu variieren und sich dem Grundzustand des Systems mit der niedrigsten Energie noch weiter anzunähern. Wegen der variationellen Parameter im Ansatz wird er manchmal auch als Variationsform bezeichnet.
Bevor wir uns diesem Variationsprozess zuwenden, ist es oft nützlich, von einem „guten Ausgangszustand" zu starten. Wenn du genug über dein System weißt, kannst du eine bessere Anfangsschätzung als machen. Zum Beispiel ist es in chemischen Anwendungen üblich, Qubits im Hartree-Fock-Zustand zu initialisieren. Dieser Ausgangszustand ohne variationelle Parameter heißt Referenzzustand. Den Circuit zur Erzeugung des Referenzzustands nennen wir . Wann immer es wichtig ist, den Referenzzustand vom restlichen Ansatz zu unterscheiden, verwende: Äquivalent gilt:
1.3 Estimator
Wir brauchen eine Möglichkeit, den Erwartungswert unseres Hamiltonoperators in einem bestimmten variationellen Zustand zu schätzen. Könnten wir den gesamten Operator direkt messen, wäre dies so einfach wie viele (sagen wir ) Messungen durchzuführen und die gemessenen Werte zu mitteln:
Das -Symbol erinnert uns daran, dass dieser Erwartungswert nur im Grenzfall exakt wäre. Mit tausenden von Messungen an einem Circuit ist der Stichprobenfehler des Erwartungswerts jedoch recht gering. Für sehr präzise Berechnungen spielen andere Faktoren wie Rauschen eine Rolle.
Es ist jedoch im Allgemeinen nicht möglich, auf einmal zu messen. kann mehrere nicht-kommutierende Pauli-X-, Y- und Z-Operatoren enthalten. Daher muss der Hamiltonoperator in Gruppen von Operatoren aufgeteilt werden, die gleichzeitig gemessen werden können, und jede solche Gruppe muss separat geschätzt werden; anschließend werden die Ergebnisse kombiniert, um einen Erwartungswert zu erhalten. Wir werden dies in der nächsten Lektion, wenn wir die Skalierung klassischer und quantenmechanischer Ansätze besprechen, ausführlicher behandeln. Diese Komplexität bei der Messung ist ein Grund, warum wir hocheffizienten Code für diese Art von Schätzung benötigen. In dieser und den folgenden Lektionen verwenden wir dafür das Qiskit-Runtime-Primitiv Estimator.
1.4 Klassische Optimierer
Ein klassischer Optimierer ist ein klassischer Algorithmus, der darauf ausgelegt ist, Extremwerte einer Zielfunktion zu finden (typischerweise ein Minimum). Er durchsucht den Raum möglicher Parameter nach einem Satz, der eine interessierende Funktion minimiert. Grob lassen sich solche Algorithmen in gradientenbasierte Methoden, die Gradienteninformationen nutzen, und gradientenfreie Methoden einteilen, die als Black-Box-Optimierer arbeiten. Die Wahl des klassischen Optimierers kann die Leistung eines Algorithmus erheblich beeinflussen, insbesondere in Gegenwart von Rauschen in Quantenhardware. Zu den gängigen Optimierern in diesem Bereich gehören Adam, AMSGrad und SPSA, die in verrauschten Umgebungen vielversprechende Ergebnisse gezeigt haben. Zu den traditionelleren Optimierern zählen COBYLA und SLSQP.
Ein typischer Workflow (wie in Abschnitt 3.3 gezeigt) besteht darin, einen dieser Algorithmen als Methode innerhalb eines Minimierers wie SciPys minimize-Funktion zu verwenden. Diese nimmt als Argumente entgegen:
- Eine zu minimierende Funktion. Oft ist das der Erwartungswert der Energie. Im Allgemeinen werden diese als „Kostenfunktionen" bezeichnet.
- Einen Satz von Startparametern für die Suche. Häufig als oder bezeichnet.
- Argumente, einschließlich der Argumente der Kostenfunktion. Im Quantencomputing mit Qiskit umfassen diese den Ansatz, den Hamiltonoperator und den Estimator, der im nächsten Unterabschnitt näher beschrieben wird.
- Eine Minimierungsmethode (
method). Dies ist der spezifische Algorithmus, der den Parameterraum durchsucht. Hier würde man zum Beispiel COBYLA oder SLSQP angeben. - Optionen (
options). Die verfügbaren Optionen können je nach Methode unterschiedlich sein. Ein Beispiel, das praktisch alle Methoden beinhalten, ist die maximale Anzahl von Iterationen des Optimierers vor dem Abbruch:maxiter.

Bei jedem iterativen Schritt wird der Erwartungswert des Hamiltonoperators durch viele Messungen geschätzt. Dieser geschätzte Energiewert wird von der Kostenfunktion zurückgegeben, und der Minimierer aktualisiert seine Information über die Energielandschaft. Wie genau der Optimierer den nächsten Schritt wählt, hängt von der Methode ab. Manche nutzen Gradienten und wählen die Richtung des steilsten Abstiegs. Andere berücksichtigen Rauschen und verlangen, dass die Kosten um eine große Marge sinken, bevor sie akzeptieren, dass die wahre Energie in dieser Richtung abnimmt.
# Example syntax for minimization
# from scipy.optimize import minimize
# res = minimize(cost_func, x0, args=(ansatz, hamiltonian, estimator), method="cobyla", options={'maxiter': 200})
1.5 Das Variationsprinzip
Das Variationsprinzip ist in diesem Kontext von zentraler Bedeutung: Es besagt, dass keine variationelle Wellenfunktion einen Energie- (oder Kosten-)Erwartungswert liefern kann, der kleiner ist als der der Grundzustandswellenfunktion. Mathematisch ausgedrückt:
Dies lässt sich leicht nachweisen, wenn man beachtet, dass die Menge aller Eigenzustände von eine vollständige Basis für den Hilbertraum bilden. Mit anderen Worten: Jeder Zustand, insbesondere , lässt sich als gewichtete (normierte) Summe dieser Eigenzustände von schreiben:
wobei zu bestimmende Konstanten sind und gilt. Wir überlassen dies als Übungsaufgabe. Beachte jedoch die Konsequenz: Der variationelle Zustand, der den kleinsten Erwartungswert der Energie liefert, ist die beste Näherung des wahren Grundzustands.
Verständnisfragen
Lies die folgende Frage, überlege dir deine Antwort und klicke dann auf das Dreieck, um die Lösung anzuzeigen.
Zeige mathematisch, dass für jeden variationellen Zustand gilt.
Antwort:
Mit der gegebenen Entwicklung des variationellen Zustands in Energie-Eigenzustände,
können wir den variationellen Energieerwartungswert schreiben als
Für alle Koeffizienten gilt . Damit ergibt sich:
2. Vergleich mit dem klassischen Workflow
Angenommen, du interessierst dich für eine Matrix mit N Zeilen und N Spalten. Stell dir vor, deine Matrix ist so groß, dass eine exakte Diagonalisierung keine Option ist. Angenommen, du weißt genug über dein Problem, um einige Vermutungen über die allgemeine Struktur des Ziel-Eigenzustands anzustellen, und du möchtest Zustände ähnlich deiner Anfangsschätzung untersuchen, um zu sehen, ob deine Kosten/Energie weiter gesenkt werden können. Dies ist ein variationeller Ansatz und eine Methode, die eingesetzt wird, wenn eine exakte Diagonalisierung keine Option ist.
2.1 Klassischer Workflow
Mit einem klassischen Computer würde dies folgendermaßen funktionieren:
- Mache einen Schätzzustand mit einigen Parametern , die du variieren wirst: . Obwohl diese Anfangsschätzung zufällig sein könnte, ist das nicht ratsam. Wir wollen das Wissen über das vorliegende Problem nutzen, um unsere Schätzung so weit wie möglich anzupassen.
- Berechne den Erwartungswert des Operators, wenn sich das System in diesem Zustand befindet:
- Ändere die variationellen Parameter und wiederhole: .
- Nutze die gesammelten Informationen über die Landschaft möglicher Zustände in deinem variationellen Teilraum, um immer bessere Schätzungen zu machen und dich dem Zielzustand anzunähern. Das Variationsprinzip garantiert, dass unser variationeller Zustand keinen Eigenwert liefern kann, der kleiner ist als der des angestrebten Grundzustands. Je kleiner also der Erwartungswert, desto besser unsere Näherung des Grundzustands:
Betrachten wir die Schwierigkeit jedes Schritts in diesem Ansatz. Das Setzen oder Aktualisieren von Parametern ist rechnerisch einfach; die Schwierigkeit liegt darin, nützliche, physikalisch motivierte Anfangsparameter zu wählen. Die gesammelten Informationen aus früheren Iterationen zu nutzen, um Parameter so zu aktualisieren, dass man sich dem Grundzustand nähert, ist nicht trivial. Es gibt jedoch klassische Optimierungsalgorithmen, die dies recht effizient tun. Diese klassische Optimierung ist nur deshalb aufwändig, weil sie viele Iterationen erfordern kann; im schlimmsten Fall kann die Anzahl der Iterationen exponentiell mit N skalieren. Der rechenintensivste einzelne Schritt ist mit großer Wahrscheinlichkeit die Berechnung des Erwartungswerts deiner Matrix mit einem gegebenen Zustand :
Die -Matrix muss auf den -elementigen Vektor wirken, was im schlimmsten Fall Multiplikationsoperationen entspricht. Dies muss bei jeder Parameteriteration durchgeführt werden. Für extrem große Matrizen ist dies mit hohen Rechenkosten verbunden.
2.2 Quantenworkflow und kommutierende Pauli-Gruppen
Stell dir nun vor, du überträgst diesen Teil der Berechnung an einen Quantencomputer. Anstatt diesen Erwartungswert zu berechnen, schätzt du ihn, indem du den Zustand auf dem Quantencomputer mit deinem variationellen Ansatz vorbereitest und dann Messungen durchführst.
Das klingt einfacher, als es ist. ist im Allgemeinen nicht leicht zu messen. Er könnte beispielsweise aus vielen nicht-kommutierenden Pauli-X-, Y- und Z-Operatoren bestehen. Aber kann als Linearkombination von Termen geschrieben werden, von denen jeder leicht messbar ist (zum Beispiel Pauli-Operatoren oder Gruppen von qubitweise kommutierenden Pauli-Operatoren). Der Erwartungswert von über einen Zustand ist die gewichtete Summe der Erwartungswerte der konstituierenden Terme . Dieser Ausdruck gilt für jeden Zustand , wir werden ihn aber speziell mit unseren variationellen Zuständen verwenden.
wobei ein Pauli-String wie IZZX…XIYX ist, oder mehrere solcher Strings, die miteinander kommutieren. Eine Beschreibung des Erwartungswerts, die der Realität von Messungen auf Quantencomputern näher kommt, lautet daher:
Und im Kontext unserer variationellen Wellenfunktion:
Jeder der Terme kann Mal gemessen werden und liefert Messstichproben mit sowie einen Erwartungswert und eine Standardabweichung . Diese Terme können summiert und die Fehler durch die Summe propagiert werden, um einen Gesamterwartungswert und eine Gesamtstandardabweichung zu erhalten.