Der Variational Quantum Eigensolver (VQE)
In dieser Lektion wird der Variationsquanten-Eigensolver vorgestellt, seine Bedeutung als grundlegender Algorithmus im Quantencomputing erläutert und seine Stärken und Schwächen untersucht. VQE allein, ohne ergänzende Methoden, dürfte für moderne Quantenberechnungen im Nutzmaßstab nicht ausreichend sein. Dennoch ist sie als archetypische klassisch-quantische Hybridmethode wichtig und bildet eine wichtige Grundlage, auf der viele fortschrittlichere Algorithmen aufgebaut werden.
Dieses Video gibt einen Überblick über die VQE und die Faktoren, die ihre Effizienz beeinflussen. Der folgende Text enthält weitere Einzelheiten und implementiert VQE mit Qiskit.
1. Was ist VQE?
Der variationale Quanten-Eigenwertlöser ist ein Algorithmus, der klassische und Quantenberechnungen kombiniert, um eine Aufgabe zu lösen. Die Berechnung des VQE umfasst vier Hauptkomponenten:
- Ein Operator : Oft ein Hamiltonian, den wir nennen, der eine Eigenschaft Ihres Systems beschreibt, die Sie optimieren möchten. Man kann auch sagen, dass man den Eigenvektor dieses Operators sucht, der dem kleinsten Eigenwert entspricht. Wir bezeichnen diesen Eigenvektor oft als "Grundzustand".
- Ein "Ansatz" ist ein Quantenschaltkreis, der einen Quantenzustand herstellt, der dem gesuchten Eigenvektor nahe kommt. Eigentlich ist der Ansatz eine Familie von Quantenschaltungen, denn einige der Gatter im Ansatz sind parametrisiert, das heißt, sie werden mit einem Parameter gefüttert, den wir variieren können. Diese Familie von Quantenschaltungen kann eine Familie von Quantenzuständen vorbereiten, die sich dem Grundzustand annähern.
- Ein Schätzer : ein Mittel zur Schätzung des Erwartungswerts des Operators über den aktuellen variationalen Quantenzustand. Manchmal geht es uns eigentlich nur um diesen Erwartungswert, den wir als Kostenfunktion bezeichnen. Manchmal interessiert uns eine komplexere Funktion, die sich dennoch ausgehend von einem oder mehreren Erwartungswerten schreiben lässt.
- Ein klassischer Optimierer : ein Algorithmus, der Parameter variiert, um zu versuchen, die Kostenfunktion zu minimieren.
Schauen wir uns jede dieser Komponenten genauer an.
1.1 Der Operator (Hamilton-Operator)
Im Mittelpunkt eines VQE-Problems steht ein Operator, der ein System von Interesse beschreibt. Wir nehmen hier an, dass der niedrigste Eigenwert und der entsprechende Eigenvektor dieses Operators für einen wissenschaftlichen oder geschäftlichen Zweck nützlich sind. Ein Beispiel wäre ein chemischer Hamiltonian, der ein Molekül beschreibt, so dass der niedrigste Eigenwert des Operators der Grundzustandsenergie des Moleküls entspricht und der entsprechende Eigenzustand die Geometrie oder Elektronenkonfiguration des Moleküls beschreibt. Oder der Betreiber könnte die Kosten eines bestimmten zu optimierenden Prozesses beschreiben, und die Eigenzustände könnten Routen oder Verfahren entsprechen. In einigen Bereichen, wie der Physik, bezieht sich ein "Hamiltonian" fast immer auf einen Operator, der die Energie eines physikalischen Systems beschreibt. In der Quanteninformatik werden jedoch Quantenoperatoren, die ein geschäftliches oder logistisches Problem beschreiben, häufig auch als "Hamiltonian" bezeichnet. Wir werden diese Konvention hier übernehmen.
Ein physikalisches oder Optimierungsproblem auf Qubits abzubilden ist in der Regel eine nicht-triviale Aufgabe, aber diese Details sind nicht der Schwerpunkt dieses Kurses. Eine allgemeine Erörterung der Zuordnung eines Problems zu einem Quantenoperator findet sich in Quantum computing in practice. Eine detailliertere Betrachtung der Abbildung von Chemieproblemen in Quantenoperatoren findet sich in Quantenchemie mit VQE.
Für die Zwecke dieses Kurses gehen wir davon aus, dass die Form des Hamiltonianers bekannt ist. Ein Hamiltonian für ein einfaches Wasserstoffmolekül (unter bestimmten Annahmen für den aktiven Raum und unter Verwendung des Jordan-Wigner-Mappers) lautet zum Beispiel:
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,
],
)Beachten Sie, dass es in der obigen Hamiltonfunktion Terme wie ZZII und YYYY gibt, die nicht miteinander vertauscht werden können. Das heißt, um ZZII auszuwerten, müssten wir (neben anderen Messungen) den Pauli-Z-Operator am Qubit 3 messen. Aber um YYYY zu bewerten, müssen wir den Pauli-Y-Operator auf demselben Qubit, Qubit 3, messen. Es besteht eine Unschärferelation zwischen den Operatoren Y und Z auf demselben Qubit; wir können nicht beide Operatoren gleichzeitig messen. Auf diesen Punkt werden wir im Folgenden und auch im weiteren Verlauf des Kurses zurückkommen.
Der obige Hamiltonoperator ist ein Matrixoperator. Es ist nicht schwer, den Operator zu diagonalisieren, um seinen niedrigsten Energieeigenwert zu finden.
import numpy as np
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues), "hartrees")Output:
The ground state energy is -1.1459778447627311 hartrees
Klassische Brute-Force-Eigensolver sind nicht in der Lage, die Energien oder Geometrien von sehr großen Atomsystemen, wie Medikamenten oder Proteinen, zu beschreiben. VQE ist einer der ersten Versuche, das Quantencomputing für dieses Problem zu nutzen.
Wir werden in dieser Lektion auf Hamiltonianer stoßen, die viel größer sind als die oben genannten. Es wäre jedoch müßig, die Grenzen der Möglichkeiten von VQE auszuloten, bevor wir im weiteren Verlauf dieses Kurses einige der fortgeschritteneren Werkzeuge vorstellen, die VQE ergänzen oder ersetzen können.
1.2 Ansatz
Das Wort "Ansatz" ist das deutsche Wort für "Annäherung". Der korrekte Plural im Deutschen ist "ansätze", obwohl man oft "ansatzes" oder "ansatze" sieht. Im Kontext der VQE ist ein Ansatz der Quantenschaltkreis, den Sie verwenden, um eine Multi-Quadratzustands-Wellenfunktion zu erzeugen, die dem Grundzustand des untersuchten Systems am nächsten kommt und somit den niedrigsten Erwartungswert des Operators erzeugt. Dieser Quantenkreis enthält Variationsparameter (die oft im Vektor der Variablen zusammengefasst sind).
Es wird ein Anfangssatz von Werten der Variationsparameter gewählt. Wir nennen die unitäre Operation des Ansatzes auf den Schaltkreis . Standardmäßig werden alle Qubits in IBM® Quantencomputern mit dem Zustand initialisiert. Wenn die Schaltung in Betrieb ist, ist der Zustand der Qubits
Wenn wir nur die niedrigste Energie bräuchten (in der Sprache der physikalischen Systeme), könnten wir diese schätzen, indem wir die Energie einfach mehrmals messen und die niedrigste nehmen. Normalerweise wollen wir aber auch die Konfiguration, die die niedrigste Energie oder den niedrigsten Eigenwert ergibt. Der nächste Schritt ist also die Schätzung des Erwartungswerts des Hamiltonianers, was durch Quantenmessungen erreicht wird. Dazu gehört eine Menge. Wir können diesen Prozess jedoch qualitativ verstehen, indem wir feststellen, dass die Wahrscheinlichkeit , eine Energie zu messen (wiederum in der Sprache der physikalischen Systeme), mit dem Erwartungswert in Beziehung steht:
Die Wahrscheinlichkeit hängt auch mit der Überlappung zwischen dem Eigenzustand und dem aktuellen Zustand des Systems zusammen:
Durch viele Messungen der Pauli-Operatoren, aus denen unser Hamiltonian besteht, können wir also den Erwartungswert des Hamiltonian im aktuellen Zustand des Systems schätzen. Der nächste Schritt besteht darin, die Parameter zu variieren und zu versuchen, sich dem niedrigsten Energiezustand (Grundzustand) des Systems zu nähern. Wegen der Variationsparameter im Ansatz wird dieser manchmal auch als Variationsform bezeichnet.
Bevor wir zu diesem Variationsverfahren übergehen, sei angemerkt, dass es oft sinnvoll ist, den Zustand mit einer „guten Schätzung“ zu beginnen. Möglicherweise kennen Sie Ihr System gut genug, um eine bessere erste Schätzung abzugeben als . In chemischen Anwendungen ist es beispielsweise üblich, Qubits in den Hartree-Fock-Zustand zu initialisieren. Diese Anfangsannahme, die keine Variationsparameter enthält, wird als Referenzzustand bezeichnet. Bezeichnen wir den Quantenschaltkreis, der zur Erzeugung des Referenzzustands verwendet wird, mit „ “. Wann immer es wichtig ist, den Referenzzustand vom Rest des Ansatzes zu unterscheiden, verwenden Sie: „ “. Äquivalent dazu
1.3 Schätzer
Wir brauchen einen Weg, um den Erwartungswert unseres Hamiltonianers in einem bestimmten Variationszustand zu schätzen. Wenn wir den gesamten Operator direkt messen könnten, wäre dies so einfach wie die Durchführung vieler (sagen wir ) Messungen und die Mittelung der gemessenen Werte:
Hier erinnert das Symbol daran, dass dieser Erwartungswert nur im Grenzwert genau richtig wäre. Bei Tausenden von Messungen an einer Schaltung ist der Stichprobenfehler des Erwartungswerts jedoch recht gering. Es gibt noch andere Überlegungen, wie z. B. Rauschen, die bei sehr präzisen Berechnungen zu einem Problem werden.
Allerdings ist es in der Regel nicht möglich, auf einmal zu messen. kann mehrere nicht kommutierende Pauli-Operatoren X, Y und Z enthalten. Daher muss der Hamiltonoperator in Gruppen von Operatoren unterteilt werden, die gleichzeitig gemessen werden können, und jede dieser Gruppen muss separat geschätzt werden; anschließend werden die Ergebnisse kombiniert, um einen Erwartungswert zu erhalten. Wir werden in der nächsten Lektion noch einmal ausführlicher darauf eingehen, wenn wir die Skalierung klassischer und quantenmechanischer Ansätze behandeln. Diese Komplexität bei der Messung ist ein Grund dafür, dass wir hocheffizienten Code benötigen, um solche Schätzungen durchzuführen. In dieser Lektion und auch danach werden wir zu diesem Zweck den primitiven Schätzer „ IBM Quantum “ verwenden.
1.4 Klassische Optimierer
Ein klassischer Optimierer ist jeder klassische Algorithmus, der darauf ausgelegt ist, Extrema einer Zielfunktion (in der Regel ein Minimum) zu finden. Sie durchforsten den Raum der möglichen Parameter und suchen nach einem Satz, der eine bestimmte Funktion von Interesse minimiert. Sie lassen sich grob in gradientenbasierte Methoden, die Gradienteninformationen nutzen, und gradientenfreie Methoden, die als Black-Box-Optimierer arbeiten, unterteilen. Die Wahl des klassischen Optimierers kann sich erheblich auf die Leistung eines Algorithmus auswirken, insbesondere bei Rauschen in der Quantenhardware. Beliebte Optimierer in diesem Bereich sind Adam, AMSGrad und SPSA, die vielversprechende Ergebnisse in verrauschten Umgebungen gezeigt haben. Zu den eher traditionellen Optimierern gehören COBYLA und SLSQP.
Ein üblicher Arbeitsablauf (demonstriert in Abschnitt 3.3 ) besteht darin, einen dieser Algorithmen als Methode innerhalb eines Minimierers wie der Funktion minimize von scipy zu verwenden. Diese nimmt als Argumente:
- Eine Funktion, die minimiert werden soll. Dies ist häufig der Energieerwartungswert. Diese werden jedoch allgemein als "Kostenfunktionen" bezeichnet.
- Eine Reihe von Parametern, mit denen die Suche beginnen soll. Oft auch oder genannt.
- Argumente, einschließlich der Argumente der Kostenfunktion. Beim Quantencomputing mit Qiskit gehören zu diesen Argumenten der Ansatz, der Hamilton-Operator und die Estimator-Primitive, auf die im nächsten Unterabschnitt näher eingegangen wird.
- Eine "Methode" der Minimierung. Dies bezieht sich auf den spezifischen Algorithmus, der für die Suche im Parameterraum verwendet wird. Hier würde man z.B. COBYLA oder SLSQP angeben.
- Optionen. Die verfügbaren Optionen können je nach Methode unterschiedlich sein. Aber ein Beispiel, das praktisch alle Methoden beinhalten, ist die maximale Anzahl der Iterationen des Optimierers, bevor die Suche beendet wird: 'maxiter'.
In jedem Iterationsschritt wird der Erwartungswert des Hamiltonianers durch viele Messungen geschätzt. Diese geschätzte Energie wird von der Kostenfunktion zurückgegeben, und der Minimierer aktualisiert die ihm vorliegenden Informationen über die Energielandschaft. Was der Optimierer genau tut, um den nächsten Schritt zu wählen, ist von Methode zu Methode unterschiedlich. Einige verwenden Steigungen und wählen die Richtung des steilsten Abstiegs. Andere berücksichtigen das Rauschen und verlangen, dass die Kosten um einen großen Betrag sinken, bevor sie akzeptieren, dass die tatsächliche 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
In diesem Zusammenhang ist das Variationsprinzip sehr wichtig; es besagt, dass keine Variationswellenfunktion einen Energie- (oder Kosten-) Erwartungswert liefern kann, der niedriger ist als derjenige, den die Grundzustandswellenfunktion liefert. Mathematisch gesehen,
Dies ist leicht zu überprüfen, wenn wir beachten, dass die Menge aller Eigenzustände von eine vollständige Basis für den Hilbert-Raum bildet. Mit anderen Worten: Jeder Zustand und insbesondere kann als gewichtete (normalisierte) Summe dieser Eigenzustände von geschrieben werden:
wobei noch zu bestimmende Konstanten sind und . Wir überlassen dies dem Leser als Übung. Aber beachten Sie die Implikation: Der Variationszustand, der den niedrigsten Energieerwartungswert erzeugt , ist die beste Schätzung des wahren Grundzustands.
Überprüfen Sie Ihr Verständnis
Weisen Sie mathematisch nach, dass für jeden Variationszustand gilt: .
Unter Verwendung der gegebenen Expansion des Variationszustandes in Form der Energieeigenzustände,
können wir den Erwartungswert der Variationsenergie schreiben als
Für alle Koeffizienten . Wir können also schreiben
2. Vergleich mit dem klassischen Arbeitsablauf
Nehmen wir an, wir sind an einer Matrix mit N Zeilen und N Spalten interessiert. Angenommen, Ihre Matrix ist so groß, dass eine exakte Diagonalisierung nicht möglich ist. Nehmen wir weiter an, dass Sie genug über Ihr Problem wissen, um einige Vermutungen über die Gesamtstruktur des Zieleigenzustands anstellen zu können, und Sie möchten Zustände untersuchen, die Ihrer anfänglichen Vermutung ähnlich sind, um zu sehen, ob Ihre Kosten/Energie weiter gesenkt werden können. Dies ist ein Variationsansatz und eine Methode, die verwendet wird, wenn eine exakte Diagonalisierung nicht möglich ist.
2.1 Klassischer Arbeitsablauf
Mit einem klassischen Computer würde dies folgendermaßen funktionieren:
- Stellen Sie eine Vermutung an, mit einigen Parametern , die Sie variieren werden: . Obwohl diese erste Schätzung zufällig sein könnte, ist dies nicht ratsam. Wir wollen unser Wissen über das jeweilige Problem nutzen, um unsere Vermutungen so weit wie möglich anzupassen.
- Berechnen Sie den Erwartungswert des Betreibers, wenn sich das System in diesem Zustand befindet:
- Ändern Sie die Variationsparameter und wiederholen Sie: .
- Nutzen Sie die gesammelten Informationen über die Landschaft der möglichen Zustände in Ihrem Variationsunterraum, um immer bessere Vermutungen anzustellen und sich dem Zielzustand zu nähern. Das Variationsprinzip garantiert, dass unser Variationszustand keinen Eigenwert ergeben kann, der niedriger ist als der des Zielgrundzustandes. Je niedriger also der Erwartungswert ist, desto besser ist unsere Annäherung an den Grundzustand:
Betrachten wir nun den Schwierigkeitsgrad der einzelnen Schritte dieses Ansatzes. Das Festlegen oder Aktualisieren von Parametern ist rechnerisch einfach; die Schwierigkeit liegt vielmehr in der Auswahl sinnvoller, physikalisch begründeter Anfangsparameter. Es ist keine triviale Aufgabe, die in früheren Iterationen gesammelten Informationen zu nutzen, um die Parameter so anzupassen, dass man sich dem Grundzustand annähert. Es gibt jedoch klassische Optimierungsalgorithmen, die dies recht effizient bewerkstelligen. Diese klassische Optimierung ist nur deshalb rechenintensiv, weil sie möglicherweise viele Iterationen erfordert; im schlimmsten Fall kann die Anzahl der Iterationen exponentiell mit N skalieren. Der rechenintensivste Einzelschritt ist mit ziemlicher Sicherheit die Berechnung des Erwartungswerts Ihrer Matrix unter Verwendung eines bestimmten Zustands : .
Die Matrix muss auf den -Element-Vektor wirken, was im schlimmsten Fall bedeutet: Multiplikationsoperationen. Dies muss bei jeder Iteration der Parameter geschehen. Bei extrem großen Matrizen ist dies mit einem hohen Rechenaufwand verbunden.
2.2 Quanten-Workflow und pendelnde Pauli-Gruppen
Stellen Sie sich nun vor, dass Sie diesen Teil der Berechnung an einen Quantencomputer übertragen. Anstatt diesen Erwartungswert zu berechnen, schätzen Sie ihn, indem Sie den Zustand auf dem Quantencomputer mit Hilfe Ihres Variationsansatzes vorbereiten und dann Messungen durchführen.
Das klingt einfacher, als es ist. ist im Allgemeinen nicht leicht zu messen. Sie könnte zum Beispiel 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 Qubit-weise 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 , aber wir werden ihn speziell für unsere Variationszustände verwenden.
wobei ein Pauli-String wie IZZX…XIYX ist, oder mehrere solcher Strings, die miteinander pendeln. Eine Beschreibung des Erwartungswerts, die der Realität der Messung auf Quantencomputern besser entspricht, lautet also
Und im Zusammenhang mit unserer Variationswellenfunktion:
Jeder der Terme kann mal gemessen werden, was Messproben mit ergibt und einen Erwartungswert und eine Standardabweichung liefert. Wir können diese Terme summieren und Fehler durch die Summe propagieren, um einen Gesamterwartungswert und eine Standardabweichung zu erhalten.
Dies erfordert weder eine groß angelegte Multiplikation noch einen Prozess, der notwendigerweise wie skaliert. Stattdessen sind mehrere Messungen auf dem Quantencomputer erforderlich. Wenn Sie nicht allzu viele davon benötigen, könnte dieser Ansatz effizient sein. Und das ist der Quantenanteil von VQE.
Aber lassen Sie uns über die Gründe sprechen, warum dies möglicherweise nicht effizient ist. Ein Grund für viele Messungen ist die Verringerung der statistischen Unsicherheit in Ihren Schätzungen für sehr genaue Berechnungen. Ein weiterer Grund ist die Anzahl der Pauli-Strings, die erforderlich sind, um die gesamte Matrix zu erfassen. Da Pauli-Matrizen (plus die Identität: X, Y, Z und I) den Raum aller Operatoren einer bestimmten Dimension abdecken, ist gewährleistet, dass wir die Matrix, die uns interessiert, als gewichtete Summe von Pauli-Operatoren schreiben können, wie wir es zuvor getan haben.
wobei ein Pauli-String ist, der auf alle Qubits einwirkt, die Ihr System wie IZZX…XIYX beschreiben, oder mehrere solcher Strings, die miteinander pendeln. Erinnern Sie sich, dass Qiskit die Little-Endian-Notation verwendet, bei der der Pauli-Operator von rechts auf das Qubit wirkt. Wir können also unseren Operator messen, indem wir eine Reihe von Pauli-Operatoren messen.
Aber wir können nicht alle diese Pauli-Operatoren gleichzeitig messen. Pauli-Operatoren (mit Ausnahme von I) sind nicht kommutativ zueinander, wenn sie mit demselben Qubit verbunden sind. Beispielsweise können wir und ZZXZ gleichzeitig messen IZIZ , da wir für das dritte Qubit I und Z gleichzeitig messen können und für das erste Qubit I und X gleichzeitig kennen. Wir können jedoch nicht und ZZZX gleichzeitig messen ZZZZ , da Z und X nicht kommutieren und beide auf das 0. Qubit wirken. Erfahrene Leser erinnern sich vielleicht daran, dass zwei Gruppen von Pauli-Operatoren als Menge kommutieren können, auch wenn die Messungen der einzelnen Qubits nicht miteinander kommutieren. Der Schätzer geht von Tensorprodukt-Pauli-Messungen (über Basisrotationen) aus, die zu Gruppierungsoperatoren entsprechen, die qubitweise kommutieren. Um also mit „Estimator“ zwei Zeichenfolgen (A und B) von Pauli-Operatoren gleichzeitig zu schätzen, müssen die Pauli-Operatoren jedes Qubits in A und B kommutieren. Das bedeutet, dass wir auch und ZZXX nicht gleichzeitig messen ZZZZ können.
Wir zerlegen also unsere Matrix in eine Summe von Paulis, die auf verschiedene Qubits wirken. Einige Elemente dieser Summe können alle auf einmal gemessen werden; wir nennen dies eine Gruppe pendelnder Paulis. Je nachdem, wie viele nicht-kommutierende Begriffe es gibt, brauchen wir möglicherweise viele solcher Gruppen. Nennen Sie die Anzahl solcher Gruppen von kommutierenden Pauli-Strings . Wenn klein ist, könnte dies gut funktionieren. Wenn Millionen von Gruppen hat, ist dies nicht sinnvoll.
Die zur Schätzung des Erwartungswerts erforderlichen Prozesse sind in der „ IBM Quantum “-Primitive namens „Estimator“ zusammengefasst. Weitere Informationen zu Estimator finden Sie in der API-Referenz in der Dokumentation zu „ IBM Quantum® “. Man kann „Estimator“ zwar einfach direkt verwenden, aber „Estimator“ liefert weit mehr als nur den Eigenwert mit der niedrigsten Energie. Beispielsweise liefert sie auch Informationen zum Ensemble-Standardfehler. Daher taucht im Zusammenhang mit Minimierungsproblemen der Schätzer häufig innerhalb einer Kostenfunktion auf. Weitere Informationen zu den Eingaben und Ausgaben von Estimator finden Sie in dieser Anleitung in der Dokumentation zu „ IBM Quantum “.
Sie erfassen den Erwartungswert (oder die Kostenfunktion) für den Parametersatz , der in Ihrem Zustand verwendet wird, und aktualisieren dann die Parameter. Im Laufe der Zeit können Sie die Erwartungswerte oder die Werte der Kostenfunktion, die Sie geschätzt haben, verwenden, um einen Gradienten Ihrer Kostenfunktion im Unterraum der Zustände zu approximieren, die durch Ihren Ansatz abgetastet werden. Es gibt sowohl gradientenbasierte als auch gradientenfreie klassische Optimierer. Beide leiden unter potenziellen Problemen bei der Trainierbarkeit, wie z. B. mehrere lokale Minima und große Bereiche des Parameterraums mit einer Steigung nahe Null, so genannte unfruchtbare Plateaus.
2.3 Faktoren, die die Rechenkosten bestimmen
VQE wird nicht alle Ihre schwierigsten Probleme der Quantenchemie lösen. Anzahl Aber es geht nicht darum, bei allen Berechnungen besser zu sein. Wir haben das, was die Rechenkosten bestimmt, verschoben.
Wir sind von einem Prozess, dessen Komplexität nur von der Matrixdimension abhängt, zu einem Prozess übergegangen, der von der erforderlichen Genauigkeit und der Anzahl der nichtkommutierenden Pauli-Operatoren abhängt, aus denen die Matrix besteht. Das letzte Bit hat keine Entsprechung im klassischen Rechnen.
Aufgrund dieser Abhängigkeiten kann dieses Verfahren für spärliche Matrizen oder Matrizen mit wenigen nicht-kommutierenden Pauli-Strings nützlich sein. Dies ist zum Beispiel bei Systemen mit wechselwirkenden Spins der Fall. Bei dichten Matrizen ist dies möglicherweise weniger nützlich. Wir wissen zum Beispiel, dass chemische Systeme oft Hamiltonianer haben, die Hunderte, Tausende oder sogar Millionen von Pauli-Strings umfassen. Es wurden interessante Arbeiten durchgeführt, um diese Anzahl von Begriffen zu reduzieren. Chemische Systeme eignen sich jedoch möglicherweise besser für einige der anderen Algorithmen, die wir in diesem Kurs besprechen werden.
Überprüfen Sie Ihr Verständnis
Betrachten wir einen Hamiltonian für vier Qubits, der die folgenden Terme enthält:
IIXX, IIXZ, IIZZ, IZXZ, IXXZ, ZZXZ, XZXZ, ZIXZ, ZZZZ, XXXX
Sie wollen diese Begriffe so in Gruppen einteilen, dass alle Begriffe einer Gruppe gleichzeitig gemessen werden können. Was ist die kleinste Anzahl solcher Gruppen, die Sie bilden können, so dass alle Begriffe berücksichtigt werden?
Das kann in vier Gruppen durchgeführt werden. Beachten Sie, dass solche Lösungen in der Regel nicht eindeutig sind.
IIXX,XXXX,IIZZ,ZZZZIIXZ,IZXZ,ZIXZ,ZZXZIXXZXZXZ
Was macht Ihrer Meinung nach die Quantenchemie mit VQE in der Regel schwierig: die Anzahl der Terme im Hamilton-Operator oder die Suche nach einem guten Ansatz?
Es hat sich herausgestellt, dass es Ansätze gibt, die für chemische Zusammenhänge hoch optimiert sind. Die Anzahl der Terme im Hamiltonian und damit die Anzahl der erforderlichen Messungen verursachen in der Regel mehr Probleme.
3. Beispiel Hamilton-Funktion
Lassen Sie uns diesen Algorithmus anhand einer kleinen Hamilton-Matrix in die Praxis umsetzen, damit wir sehen können, was in jedem Schritt geschieht. Wir werden den Qiskit-Musterrahmen verwenden:
- Schritt 1 : Abbildung des Problems auf Quantenschaltungen und -operatoren - Schritt 2 : Optimieren für die Zielhardware - Schritt 3 : Ausführen auf der Zielhardware - Schritt 4 : Nachbearbeitung der Ergebnisse
3.1 Schritt 1: Das Problem auf Quantenschaltungen und Operatoren abbilden
Wir werden den oben definierten Begriff aus dem Chemiekontext verwenden. Wir beginnen mit einigen allgemeinen Importen.
# General imports
import numpy as np
# SciPy minimizer routine
from scipy.optimize import minimize
# Plotting functions
import matplotlib.pyplot as pltAuch hier gehen wir davon aus, dass der Hamiltonian von Interesse bekannt ist. Wir werden hier einen extrem kleinen Hamiltonian verwenden, da andere in diesem Kurs besprochene Methoden effizienter sind, um größere Probleme zu lösen.
from qiskit.quantum_info import SparsePauliOp
import numpy as np
hamiltonian = SparsePauliOp.from_list(
[("YZ", 0.3980), ("ZI", -0.3980), ("ZZ", -0.0113), ("XX", 0.1810)]
)
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues))Output:
The ground state energy is -0.702930394459531
In Qiskit gibt es viele vorgefertigte Ansätze zur Auswahl. Wir werden efficient_su2 verwenden.
# Pre-defined ansatz circuit and operator class for Hamiltonian
from qiskit.circuit.library import efficient_su2
# Note that it is more common to place initial 'h' gates outside the ansatz.
# Here we specifically wanted this layer structure.
ansatz = efficient_su2(
hamiltonian.num_qubits, su2_gates=["h", "rz", "y"], entanglement="circular", reps=1
)
num_params = ansatz.num_parameters
print("This circuit has ", num_params, "parameters")
ansatz.decompose().draw("mpl", style="iqp")Output:
This circuit has 4 parameters
Unterschiedliche Ansätze haben unterschiedliche Verschränkungsstrukturen und unterschiedliche Rotationstore. Das hier gezeigte Modell verwendet CNOT-Gatter für die Verschränkung und sowohl Y-Gatter als auch parametrisierte RZ-Gatter für Drehungen. Beachten Sie die Größe dieses Parameterraums; das bedeutet, dass wir die Kostenfunktion über 4 Variablen (die Parameter für die RZ-Tore) minimieren müssen. Dies kann aufgestockt werden, aber nicht unbegrenzt. Wenn man ein ähnliches Problem mit 4 Qubits und der Standardeinstellung von 3 Wiederholungen für efficient_su2 durchführt, erhält man 16 Variationsparameter.
3.2 Schritt 2: Für die Zielhardware optimieren
Der Ansatz wurde unter Verwendung bekannter Gatter geschrieben, aber unsere Schaltung muss transponiert werden, um die Basisgatter zu nutzen, die auf jedem Quantencomputer implementiert werden können. Wir wählen das am wenigsten ausgelastete Backend.
# runtime imports
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import EstimatorV2 as Estimator
# To run on hardware, select the backend with the fewest number of jobs in the queue
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend)Output:
<IBMBackend('ibm_torino')>
Wir können nun unsere Schaltung für diese Hardware transpilieren und unseren transpilierten Ansatz visualisieren.
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
ansatz_isa = pm.run(ansatz)
ansatz_isa.draw(output="mpl", idle_wires=False, style="iqp")Output:
Beachten Sie, dass sich die verwendeten Gatter geändert haben und die Qubits in unserer abstrakten Schaltung auf unterschiedlich viele Qubits auf dem Quantencomputer abgebildet wurden. Wir müssen unseren Hamiltonian identisch abbilden, damit unsere Ergebnisse aussagekräftig sind.
hamiltonian_isa = hamiltonian.apply_layout(layout=ansatz_isa.layout)3.3 Schritt 3: Auf der Zielhardware ausführen
3.3.1 Werte melden
Wir definieren hier eine Kostenfunktion, die als Argumente die Strukturen verwendet, die wir in den vorangegangenen Schritten aufgebaut haben: die Parameter, den Ansatz und den Hamilton-Operator. Außerdem wird „Estimator“ verwendet, das wir bisher noch nicht definiert haben. Wir fügen Code ein, um den Verlauf unserer Kostenfunktion zu verfolgen, damit wir das Konvergenzverhalten überprüfen können.
def cost_func(params, ansatz, hamiltonian, estimator):
"""Return estimate of energy from Estimator
Parameters:
params (ndarray): Array of ansatz parameters
ansatz (QuantumCircuit): Parameterized ansatz circuit
hamiltonian (SparsePauliOp): Operator representation of Hamiltonian
estimator (EstimatorV2): Estimator primitive instance
cost_history_dict: Dictionary for storing intermediate results
Returns:
float: Energy estimate
"""
pub = (ansatz, [hamiltonian], [params])
result = estimator.run(pubs=[pub]).result()
energy = result[0].data.evs[0]
cost_history_dict["iters"] += 1
cost_history_dict["prev_vector"] = params
cost_history_dict["cost_history"].append(energy)
print(f"Iters. done: {cost_history_dict['iters']} [Current cost: {energy}]")
return energy
cost_history_dict = {
"prev_vector": None,
"iters": 0,
"cost_history": [],
}Es ist von großem Vorteil, wenn Sie die Anfangsparameterwerte auf der Grundlage der Kenntnis des Problems und der Merkmale des Zielzustands wählen können. Wir gehen nicht von einem solchen Wissen aus und verwenden zufällige Ausgangswerte.
x0 = 2 * np.pi * np.random.random(num_params)# This required 13 min, 20 s QPU time on an Eagle processor, 28 min total time.
with Session(backend=backend) as session:
estimator = Estimator(mode=session)
estimator.options.default_shots = 10000
res = minimize(
cost_func,
x0,
args=(ansatz_isa, hamiltonian_isa, estimator),
method="cobyla",
options={"maxiter": 50},
)Output:
Iters. done: 1 [Current cost: 0.010575798722044727]
Iters. done: 2 [Current cost: 0.004040015974440895]
Iters. done: 3 [Current cost: 0.0020213258785942503]
Iters. done: 4 [Current cost: 0.18723082446726014]
Iters. done: 5 [Current cost: -0.2746792152068885]
Iters. done: 6 [Current cost: -0.3094547651648519]
Iters. done: 7 [Current cost: -0.05281985428356641]
Iters. done: 8 [Current cost: 0.00808560303514377]
Iters. done: 9 [Current cost: -0.0014821685303514388]
Iters. done: 10 [Current cost: -0.004759824281150161]
Iters. done: 11 [Current cost: 0.09942328705995292]
Iters. done: 12 [Current cost: 0.01092366214057508]
Iters. done: 13 [Current cost: 0.05017497496069776]
Iters. done: 14 [Current cost: 0.13028868414310696]
Iters. done: 15 [Current cost: 0.013747803514376994]
Iters. done: 16 [Current cost: 0.2583072432944498]
Iters. done: 17 [Current cost: -0.14422125655131562]
Iters. done: 18 [Current cost: -0.0004950150347678081]
Iters. done: 19 [Current cost: 0.00681082268370607]
Iters. done: 20 [Current cost: -0.0023377795527156544]
Iters. done: 21 [Current cost: 0.6027665591169237]
Iters. done: 22 [Current cost: 0.00596641373801917]
Iters. done: 23 [Current cost: -0.008318769968051117]
Iters. done: 24 [Current cost: -0.00026683306709265246]
Iters. done: 25 [Current cost: -0.007648222843450479]
Iters. done: 26 [Current cost: 0.004121086261980831]
Iters. done: 27 [Current cost: -0.004075019968051117]
Iters. done: 28 [Current cost: -0.004419369009584665]
Iters. done: 29 [Current cost: 0.213185460054037]
Iters. done: 30 [Current cost: -0.06505919572162797]
Iters. done: 31 [Current cost: -0.5334241316590271]
Iters. done: 32 [Current cost: 0.00218370607028754]
Iters. done: 33 [Current cost: 0.09579352143666908]
Iters. done: 34 [Current cost: -0.009274800319488819]
Iters. done: 35 [Current cost: -0.44395141360688106]
Iters. done: 36 [Current cost: 0.011747104632587858]
Iters. done: 37 [Current cost: -0.003344149361022364]
Iters. done: 38 [Current cost: 0.19138183916486304]
Iters. done: 39 [Current cost: 0.013513931813145209]
Wir können uns die Rohdaten ansehen.
resOutput:
message: Return from COBYLA because the trust region radius reaches its lower bound.
success: True
status: 0
fun: -0.5334241316590271
x: [ 1.024e+00 6.459e+00 3.625e+00 4.007e+00]
nfev: 39
maxcv: 0.0
3.4 Schritt 4: Nachbearbeitung der Ergebnisse
Wenn das Verfahren korrekt beendet wird, sollten die Werte in unserem Wörterbuch dem Lösungsvektor bzw. der Gesamtzahl der Funktionsbewertungen entsprechen. Dies ist leicht zu überprüfen:
cost_history_dictOutput:
{'prev_vector': array([1.02397956, 6.45886604, 3.62479262, 4.00744128]),
'iters': 39,
'cost_history': [np.float64(0.010575798722044727),
np.float64(0.004040015974440895),
np.float64(0.0020213258785942503),
np.float64(0.18723082446726014),
np.float64(-0.2746792152068885),
np.float64(-0.3094547651648519),
np.float64(-0.05281985428356641),
np.float64(0.00808560303514377),
np.float64(-0.0014821685303514388),
np.float64(-0.004759824281150161),
np.float64(0.09942328705995292),
np.float64(0.01092366214057508),
np.float64(0.05017497496069776),
np.float64(0.13028868414310696),
np.float64(0.013747803514376994),
np.float64(0.2583072432944498),
np.float64(-0.14422125655131562),
np.float64(-0.0004950150347678081),
np.float64(0.00681082268370607),
np.float64(-0.0023377795527156544),
np.float64(0.6027665591169237),
np.float64(0.00596641373801917),
np.float64(-0.008318769968051117),
np.float64(-0.00026683306709265246),
np.float64(-0.007648222843450479),
np.float64(0.004121086261980831),
np.float64(-0.004075019968051117),
np.float64(-0.004419369009584665),
np.float64(0.213185460054037),
np.float64(-0.06505919572162797),
np.float64(-0.5334241316590271),
np.float64(0.00218370607028754),
np.float64(0.09579352143666908),
np.float64(-0.009274800319488819),
np.float64(-0.44395141360688106),
np.float64(0.011747104632587858),
np.float64(-0.003344149361022364),
np.float64(0.19138183916486304),
np.float64(0.013513931813145209)]}
fig, ax = plt.subplots()
x = np.linspace(0, 10, 50)
# Define the constant function
constant = -0.7029
y_constant = np.full_like(x, constant)
ax.plot(
range(cost_history_dict["iters"]), cost_history_dict["cost_history"], label="VQE"
)
ax.set_xlabel("Iterations")
ax.set_ylabel("Cost")
ax.plot(y_constant, label="Target")
plt.legend()
plt.draw()Output:
IBM Quantum hat weitere Weiterbildungsangebote im Zusammenhang mit VQE. Wenn Sie bereit sind, VQE in die Praxis umzusetzen, sehen Sie sich unseren Lehrgang an: Abschätzung der Grundzustandsenergie der Heisenberg-Kette mit VQE. Weitere Informationen zur Erstellung von Molekül-Hamiltonians finden Sie in dieser Lektion unseres Kurses über Quantenchemie mit VQE. Wenn Sie an einem tieferen Verständnis der Funktionsweise von Variationsalgorithmen wie VQE interessiert sind, empfehlen wir Ihnen den Kurs Variational Algorithm Design.
Überprüfen Sie Ihr Verständnis
In diesem Abschnitt haben wir eine Grundzustandsenergie aus einem Hamiltonian berechnet. Wenn wir dies beispielsweise auf die Bestimmung der Geometrie eines Moleküls anwenden wollten, wie würden wir dies erweitern?
Wir müssten Variablen für die Abstände zwischen den Atomen und die Winkel zwischen den Bindungen einführen. Diese müssten wir variieren. Für jede dieser Variationen würden wir einen neuen Hamiltonian erstellen (da die Operatoren, die die Energie beschreiben, sicherlich von der Geometrie abhängen). Für jeden solchen Hamiltonian, der erzeugt und auf Qubits abgebildet wird, müssten wir eine Optimierung wie die oben beschriebene durchführen. Von all den vielen konvergierenden Optimierungsproblemen wäre die Geometrie, die die geringste Energie erzeugt, diejenige, die von der Natur angenommen wird. Dies ist ein wenig komplizierter als das, was oben gezeigt wurde. Eine solche Berechnung wird hier für das einfachste Molekül, , durchgeführt.
4. Die Beziehung zwischen VQE und anderen Methoden
In diesem Abschnitt werden wir die Vor- und Nachteile des ursprünglichen VQE-Ansatzes erläutern und seine Beziehungen zu anderen, neueren Algorithmen aufzeigen.
4.1 Die Stärken und Schwächen von VQE
Auf einige Stärken wurde bereits hingewiesen. Diese sind:
- Eignung für moderne Hardware: Einige Quantenalgorithmen erfordern sehr viel niedrigere Fehlerraten und nähern sich der Fehlertoleranz in großem Maßstab. Bei VQE ist das nicht der Fall; es kann auf aktuellen Quantencomputern implementiert werden.
- Flache Schaltungen: Bei der VQE werden häufig relativ flache Quantenschaltungen verwendet. Dadurch ist VQE weniger anfällig für akkumulierte Gatterfehler und eignet sich für viele Fehlerbegrenzungstechniken. Natürlich sind die Schaltkreise nicht immer flach; dies hängt von dem verwendeten Ansatz ab.
- Vielseitigkeit: VQE kann (im Prinzip) auf jedes Problem angewendet werden, das sich als Eigenwert-/Eigenvektorproblem darstellen lässt. Es gibt viele Vorbehalte, die VQE bei manchen Problemen unpraktisch oder nachteilig machen. Einige von ihnen werden im Folgenden kurz vorgestellt.
Einige Schwächen der VQE und Probleme, bei denen sie nicht praktikabel ist, wurden ebenfalls bereits beschrieben. Diese umfassen:
- Heuristischer Charakter: Die VQE garantiert keine Konvergenz zur korrekten Grundzustandsenergie, da ihre Leistung von der Wahl des Ansatzes und der Optimierungsmethoden abhängt [1-2]. Wenn ein schlechter Ansatz gewählt wird, der nicht die erforderliche Verschränkung für den gewünschten Grundzustand aufweist, kann kein klassischer Optimierer diesen Grundzustand erreichen.
- Potenziell zahlreiche Parameter: Ein sehr aussagekräftiger Ansatz kann so viele Parameter haben, dass die Minimierungsiterationen sehr zeitaufwändig sind.
- Hoher Rechenaufwand: Bei VQE wird ein Schätzer verwendet, um den Erwartungswert jedes Terms im Hamilton-Operator zu schätzen. Die meisten relevanten Hamilton-Funktionen enthalten Terme, die nicht gleichzeitig geschätzt werden können. Dies kann dazu führen, dass VQE bei großen Systemen mit komplexen Hamilton-Operatoren ressourcenintensiv ist [1].
- Auswirkungen von Rauschen: Wenn der klassische Optimierer nach einem Minimum sucht, können verrauschte Berechnungen ihn verwirren und ihn vom wahren Minimum ablenken oder seine Konvergenz verzögern. Eine mögliche Lösung hierfür ist die Nutzung modernster Techniken zur Fehlerminderung und Fehlerunterdrückung [2-3] von IBM.
- Unfruchtbare Plateaus: Diese Regionen mit verschwindenden Gradienten [2-3] gibt es auch ohne Rauschen, aber Rauschen macht sie problematischer, da die Änderung der Erwartungswerte aufgrund von Rauschen größer sein kann als die Änderung durch die Aktualisierung der Parameter in diesen unfruchtbaren Regionen.
4.2 Beziehung zu anderen Ansätzen
Adapt-VQE
Der ADAPT-VQE-Algorithmus (Adaptive Derivative-Assembled Pseudo-Trotter Variational Quantum Eigensolver) ist eine Weiterentwicklung des ursprünglichen VQE-Algorithmus, der die Effizienz, Genauigkeit und Skalierbarkeit für Quantensimulationen, insbesondere in der Quantenchemie, verbessern soll.
Der in dieser Lektion beschriebene ursprüngliche VQE-Algorithmus verwendet einen vordefinierten, festen Ansatz, um den Grundzustand des Systems anzunähern. In unserem Fall haben wir efficient_su2 verwendet, mit einer einzigen Wiederholung, unter Verwendung von Y- und RZ-Rotationsgattern. Obwohl sich die Parameter in den RZ-Gattern geändert haben, haben sich die Struktur dieses Ansatzes und die verwendeten Gatter nicht verändert.
ADAPT-VQE behebt die Einschränkungen von VQE durch eine adaptive Ansatzkonstruktion. Anstatt mit einem festen Ansatz zu beginnen, baut ADAPT-VQE den Ansatz dynamisch und iterativ auf. Bei jedem Schritt wird der Operator aus einem vordefinierten Pool (z. B. fermionische Anregungsoperatoren) ausgewählt, der den größten Gradienten in Bezug auf die Energie aufweist. Dadurch wird sichergestellt, dass nur die wichtigsten Operatoren hinzugefügt werden, was zu einem kompakten und effizienten Ansatz führt [4-6]. Dieser Ansatz kann mehrere positive Auswirkungen haben:
- Reduzierte Schaltungstiefe : Durch die schrittweise Erweiterung des Ansatzes und die Konzentration auf die notwendigen Operatoren minimiert ADAPT-VQE die Anzahl der Gatteroperationen im Vergleich zu traditionellen VQE-Ansätzen [5,7].
- Verbesserte Genauigkeit : Durch die adaptive Natur kann ADAPT-VQE bei jedem Schritt mehr Korrelationsenergie zurückgewinnen, was es besonders effektiv für stark korrelierte Systeme macht, bei denen herkömmliche VQE Schwierigkeiten hat [8,9].
- Skalierbarkeit und Robustheit gegen Rauschen : Der kompakte Ansatz reduziert die Anhäufung von Gatterfehlern, verringert den Rechenaufwand und begrenzt die Anzahl der Variationsparameter, die minimiert werden müssen.
ADAPT-VQE ist noch nicht perfekt. In einigen Fällen kann es in lokalen Minima gefangen oder verlangsamt werden, und es kann unter einer Überparametrisierung leiden. Sie kann auch ziemlich ressourcenintensiv sein, da sie die Berechnung von Gradienten und die Optimierung von Parametern mit vielen Gatterstrukturen erfordert.
Quantenphasenabschätzung (QPE)
QPE hat einen ähnlichen Zweck wie VQE, unterscheidet sich aber stark in der Umsetzung. QPE erfordert fehlertolerante Quantencomputer, da sie im Allgemeinen tiefe Quantenschaltungen und ein hohes Maß an Kohärenz erfordern. Sobald QPE implementiert werden kann, wäre es präziser als VQE. Eine Möglichkeit, den Unterschied zu beschreiben, ist die Genauigkeit in Abhängigkeit von der Schaltungstiefe. QPE erreicht die Präzision bei einer Skalierung der Schaltungstiefe wie [10]. VQE erfordert Stichproben, um die gleiche Präzision zu erreichen [10,11].
Krylov, SQD, QSCI und andere in diesem Kurs
VQE hat zur Entwicklung von Quantenalgorithmen beigetragen, die immer noch von klassischen Computern abhängen, nicht nur für den Betrieb des Quantencomputers, sondern für wesentliche Teile des Algorithmus. Mehrere solcher Algorithmen stehen im Mittelpunkt des weiteren Verlaufs dieses Kurses. Im Folgenden werden einige von ihnen kurz erläutert, um sie mit VQE zu vergleichen und gegenüberzustellen. Sie werden in den folgenden Lektionen noch ausführlicher erläutert.
Krylov-Quantendiagonalisierung (KQD)
Krylov-Unterraum-Methoden sind Verfahren zur Projektion einer Matrix auf einen Unterraum, um ihre Dimension zu verringern und sie handhabbarer zu machen, wobei die wichtigsten Merkmale erhalten bleiben. Ein Trick bei dieser Methode besteht darin, einen Unterraum zu generieren, der diese Merkmale beibehält; es stellt sich heraus, dass die Generierung dieses Unterraums eng mit einer gut etablierten Methode auf Quantencomputern namens Trotterisierung verwandt ist.
Es gibt einige Varianten von Quanten-Krylov-Methoden, aber im Allgemeinen ist der Ansatz der gleiche:
- Verwendung des Quantencomputers zur Erzeugung eines Unterraums (des Krylov-Unterraums) durch Trotterisierung
- Projizieren der interessierenden Matrix auf diesen Krylov-Unterraum
- Diagonalisieren Sie den neuen projizierten Hamiltonian mit einem klassischen Computer
Abtastbasierte Quantendiagonalisierung (SQD)
Die auf Stichproben basierende Quantendiagonalisierung (SQD) ist mit der Krylov-Methode insofern verwandt, als sie ebenfalls versucht, die Dimension einer zu diagonalisierenden Matrix zu reduzieren und dabei die wichtigsten Merkmale zu erhalten. SQD tut dies auf folgende Weise:
- Beginnen Sie mit einer ersten Vermutung für Ihren Grundzustand und bereiten Sie das System in diesem Grundzustand vor.
- Verwenden Sie Sampler, um die Bitstrings, aus denen dieser Zustand besteht, abzutasten.
- Verwenden Sie die Sammlung der Berechnungsbasiszustände aus dem Sampler als Unterraum, auf den Sie die Matrix von Interesse projizieren.
- Diagonalisieren Sie die kleinere, projizierte Matrix mit einem klassischen Computer.
Dies ist insofern mit VQE verwandt, als es für wesentliche Komponenten des Algorithmus sowohl klassische als auch Quanteninformatik einsetzt. Beide haben auch die Anforderung, dass wir eine gute Anfangsschätzung oder einen Ansatz vorbereiten. Die Verteilung der Arbeit zwischen den klassischen und den Quantencomputern bei SQD ähnelt jedoch eher der des Krylov-Verfahrens.
Die Krylov-Methode und SQD wurden vor kurzem in der Sampling-basierten Krylov-Quanten-Diagonalisierungsmethode (SKQD) kombiniert [12].
Quantenunterraum-Konfigurationsinteraktion
Quantum Selected Configuration Interaction (QSCI) [13] ist ein Algorithmus, der einen angenäherten Grundzustand eines Hamiltonianers erzeugt, indem er eine Versuchswellenfunktion abtastet, um die signifikanten Berechnungsbasiszustände zu identifizieren und einen Unterraum für eine klassische Diagonalisierung zu erzeugen. Sowohl SQD als auch QSCI verwenden einen Quantencomputer, um einen reduzierten Unterraum zu konstruieren. Eine weitere Stärke von QSCI liegt in der Vorbereitung von Zuständen, insbesondere im Zusammenhang mit chemischen Problemen. Es nutzt verschiedene Strategien, wie z.B. die Verwendung von zeitlich veränderten Zuständen [14] und eine Reihe von durch die Chemie inspirierten Ansätzen. Durch die Konzentration auf eine effiziente Zustandsvorbereitung senkt QSCI die Kosten für die Quantenberechnung chemischer Hamiltonianer bei gleichzeitiger Beibehaltung hoher Genauigkeit und Nutzung der Rauschrobustheit von Quantenzustandsabtastverfahren [15]. QSCI bietet auch eine adaptive Konstruktionstechnik, die mehr Ansätze für ein besseres Ergebnis liefert.
Der Standard-Workflow von QSCI für chemische Probleme sieht wie folgt aus:
- Erstellen Sie den molekularen Hamiltonian mit der Software Ihrer Wahl (z. B. SciPy ).
- Bereiten Sie einen QSCI-Algorithmus vor, indem Sie einen geeigneten Anfangszustand und einen von der Chemie inspirierten Ansatz mit einem vorgewählten Satz von Parametern auswählen.
- Nehmen Sie signifikante Basiszustände und diagonalisieren Sie den Hamiltonian mit einem klassischen Computer, um die Grundzustandsenergie zu erhalten.
- Häufig werden die Konfigurationswiederherstellung [16] und die Symmetrie-Nachselektion [15] als Nachbearbeitungstechniken eingesetzt.
- Optional verfügt der Workflow des adaptiven QSCI über eine zusätzliche Optimierungsschleife von step2 bis step3, indem weitere Ansätze mit zufälligen Anfangszuständen verwendet werden.
Überprüfen Sie Ihr Verständnis
Was hat VQE mit all den anderen oben aufgeführten Methoden gemeinsam (mit Ausnahme von QPE, das nicht sehr ausführlich beschrieben wird)?
Alle beinhalten eine Art Versuchszustand oder Wellenfunktion. Alle funktionieren am besten, wenn die anfängliche Vermutung für diesen Versuchszustand ausgezeichnet ist.
Eine andere richtige Antwort ist, dass sie alle am einfachsten zu implementieren sind, wenn der Hamiltonian einfach zu messen ist (in relativ wenige Gruppen von kommutierenden Pauli-Operatoren sortiert werden kann).
Was hat die VQE mit keiner der anderen oben genannten Methoden gemeinsam?
Klassische Optimierer. Keiner der anderen verwendet klassische Optimierungsalgorithmen zur Auswahl der Variationsparameter.
Referenzen
[2] https://en.wikipedia.org/wiki/Variational_quantum_eigensolver
[3] https://journals.aps.org/prapplied/abstract/10.1103/PhysRevApplied.19.024047
[4] https://arxiv.org/abs/2111.05176
[6] https://inquanto.quantinuum.com/tutorials/InQ_tut_fe4n2_2.html
[7] https://www.nature.com/articles/s41467-019-10988-2
[8] https://arxiv.org/abs/2210.15438
[9] https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.6.013254
[10] https://arxiv.org/html/2403.09624v1
[11] https://www.nature.com/articles/s42005-023-01312-y
[13] https://arxiv.org/abs/1802.00171
[14] https://arxiv.org/abs/2103.08505
[15] https://arxiv.org/html/2501.09702v1
[16] https://quri-sdk.qunasys.com/docs/examples/quri-algo-vm/qsci/
[17] https://arxiv.org/abs/2412.13839