Wie in den Kommentaren angefordert, ist hier ein Beispiel. Der Hauptteil befasst sich mit der Minimierung von f(x) für ein bestimmtes Problem. Unten folgt eine kurze Diskussion der Einschränkungen, dann eine kurze Diskussion des allgemeinen Falls.
Lösen wir seitdem das Problem des gewichteten maximalen Schnitts
- Ist ein relativ einfaches Beispiel
- Ist klassisch schwer
- Ist ein relativ häufiges Beispiel in der Literatur (z. B. https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.067903 )
- Hat eine klare Verbindung zu einem physischen Hamiltonianer (Ising Spin-Brille)
Um das Problem zu verstehen, beginnen wir mit einem ungerichteten Graphen von n Eckpunkten {V} , wobei jeder Eckpunkt vi∈V das Gewicht wi≥0 und jede Kante, die vi und vj verbindet, ein Gewicht wij≥0 . Wir schneiden dann die Grafik in zwei Teile. Der Schnitt muss nicht gerade sein, darf sich aber nicht selbst schneiden und darf keine Kante zweimal schneiden. Dann berechnen wir eine " Auszahlung " Pfür unseren Schnitt. Die Auszahlung ist die Summe der Gewichte der Kanten, die wir durchschneiden, plus der Summe der Gewichte der Eckpunkte auf einer Seite des Schnitts. 11
Quelle
In diesem Bild wäre die Auszahlung 1+4+3+3+2=13 für die Kanten plus 5 + 6 + 1 = 12 für die Eckpunkte → P.= 25 (vorausgesetzt, die Zahl in jedem Eckpunkt ist sein Gewicht). Das Optimierungsproblem besteht darin, P. für einen gegebenen Graphen zu maximieren . 22
Um dies mathematisch zu schreiben, können wir in Bitfolgen denken. Wir definieren einen Schnitt durch ein String s ∈ { 0 , 1 }n wobei sich= 0 → vich ist nicht in der Summe gezählt und si=1→vi wird in der Summe gezählt. Um die Mathematik ein wenig sauberer zu machen, wenn der Graph nicht vollständig verbunden ist, machen Sie den Graph vollständig verbunden und setzen Sie wij=0 für alle nicht verbundenen Paare vi,vj .
Wenn wir beispielsweise das obige Bild noch einmal betrachten, interpretieren wir die Zahlen innerhalb der Scheitelpunkte als Scheitelpunktindex anstelle des oben angenommenen Gewichts. Dann entspricht der gezeichnete Schnitt s=100011 . s1=s5=s6=1→v1,v5,v6 sind auf der "guten" Seite des Schnitts und werden gezählt, während s2=s3=s4=0 auf der "schlechten" Seite sind. Seite des Schnitts und werden nicht gezählt.
Dies ermöglicht es uns dann, P ( s ) = ∑ i s i w i + ∑ i , j s i ( 1 - s j ) w i j zu schreibenP(s)=∑isiwi+∑i,jsi(1−sj)wij
Der erste Term zählt nur die Gewichte aller Eckpunkte auf der "guten" Seite des Schnitts. Der zweite Term zählt das Gewicht einer Kante, wenn sich die Eckpunkte, die sie verbindet, auf gegenüberliegenden Seiten des Schnitts befinden. Beachten Sie, dass dies nicht doppelt zählt, da es nur die Kante zählt, wenn si=1,sj=0 und nicht, wenn si=0,sj=1 .
Unser Optimierungsproblem besteht nun darin, die Zeichenfolge s , die P(s) maximiert . Die Idee hier ist, P(s) als ein Maß für die Energie eines Systems und s als den Zustand des Systems zu betrachten. Dies bedeutet, dass wir P(s) mit unserem Hamilton-Operator in Beziehung setzen können . Es gibt hier eine leichte Subtilität, dass wir versuchen, P(s) zu maximieren, aber wir sprechen normalerweise darüber, den Grundzustand eines Hamiltonianers zu finden. Dies ist kein Problem, aber ich wollte darauf hinweisen - wir können stattdessen den angeregten Zustand mit der höchsten Energie (Anti-Boden-Zustand, wenn Sie so wollen) betrachten oder −P(s) als unsere Energiefunktion arbeiten dann wie gewohnt mit dem Grundzustand. Lassen Sie uns mit dem höchsten angeregten Zustand arbeiten undP maximieren.
Wir möchten einen Hamilton-Operator so erstellen, dass sein höchster Energiezustand |s0⟩ , so daß P(s0) , maximal ist. Im Wesentlichen wollen wir drehen P(s) , eine Energiefunktion, in H , einen Energiebetreiber. Wir tun dies, indem wir feststellen, dass für | s ⟩ & egr ; { | 0 ⟩ , | 1 ⟩ } wir haben I - ZH^|s⟩∈{|0⟩,|1⟩}I−Z2|s⟩=s|s⟩→ define s^i=I−Zi2
Wobei Zi das Pauli Z , das auf Qubit i wirkt . Jetzt bekommen wir unsere Hamilton - durch Ersetzen s mit s (und 1 mit I ) in Ps^IP
H=∑is^iwi+∑i,js^i(I−s^j)wi,j=∑iI−Zi2wi+∑i,jI−Zi2(I−I−Zj2)wi,j
Dies kann durch Erweitern und Anzeigen von ∑ i , j ( Z i - Z j ) = 0 → bereinigt werden∑i,j(Zi−Zj)=0→
H.= ∑ichwich2( Ich- Z.ich) + ∑i,jwij4(I−ZiZj)=∑iwi2(I−Zi)+∑i<jwij2(I−ZiZj)
Wir können dies noch weiter bereinigen, indem wir mit 2 multiplizieren und eine konstante Energieverschiebung entfernen (die I Terme löschen ). Neuer Hamilton-Operator mit denselben Eigenzuständen mit skalierten und verschobenen Eigenwerten (die maximale Energie wird von diesen Transformationen eindeutig nicht beeinflusst)
H=−∑iwiZi−∑i<jwijZiZj
Wenn Sie ein Physiker der kondensierten Materie sind, werden Sie diesen Hamiltonianer wahrscheinlich als Ising-Spinglas erkennen. Nicht wirklich relevant für das Problem, aber ich finde es cool.
Jetzt haben wir also einen Hamilton-Operator, dessen (Anti-) Grundzustand die Bitfolge s0 codiert, die P(s) maximiert und das Problem löst.
Das Letzte, was wir brauchen, ist ein anfänglicher Hamilton- H0 , den wir langsam (adiabatisch) in unseren endgültigen Hamilton- H umwandeln, damit wir den vollständigen Hamilton- HT(t)=(1−f(t))H0+f(t)H:f(0)=0,f(tf)=1
Als Ausgangspunkt wird f(t)∝t der Einfachheit halber häufig verwendet. Das Minimum tf wird durch die gewünschte Genauigkeit und die Spektrallücke 3 bestimmt . Die spektrale Lücke ist die minimale Energiedifferenz über alle t zwischen dem (Anti) Grundzustand und dem nächsten Energiezustand. Die Analyse der Lücke ist höchst nicht trivial (siehe https://arxiv.org/abs/quant-ph/0509162 ) und bestimmt die Komplexität / Effizienz des Algorithmus. Es ist nicht garantiert, dass ein Algorithmus mit einer Lücke von 0 überhaupt funktioniert.3t
Wir wollen also ein H0 so dass
- Wir können seinen (Anti) Grundzustand leicht finden und vorbereiten
- Die spektrale Lücke von H ist in der Größe des Problems nicht exponentiell klein
Für dieses Problem ist ein guter anfänglicher Hamilton-Operator H0=∑iXi weil sein höchster Energiezustand leicht zu finden ist, es ist |+⟩⊗n . Es ist einfach vorzubereiten, wenden Sie einfach H⊗n auf |0⟩⊗n . Ich habe keine Zeit, mich mit der Analyse der spektralen Lücke zu befassen, aber dieser Hamilton-Operator ist in dieser Hinsicht wahrscheinlich nicht ideal (siehe https://arxiv.org/abs/1701.05584 ).
H0f(t)=t/tf
H(t)=(1−f(t))∑iXi−f(t)[∑iwiZi+∑i<jwijZiZj]
|ψ0⟩=H⊗n|0⟩⊗ntftfs=s0P(s)
1
2=−
3H
Einschränkungen
5∑isi−5=0Hc=−α(∑is^i−5I)2α
5kO(N2k) kkthOrdnungspolynom. Dies scheint ein schrecklicher Weg zu sein - aber ich kann mir keinen besseren Weg vorstellen. Dies kommt von Troyer im Jahr 2017, so dass es relativ unwahrscheinlich, aber durchaus möglich ist, dass derzeit ein besserer Weg bekannt ist.
Der allgemeine Fall
f(x)f(x)f(x)f^(x)f^(x)|x⟩=f(x)|x⟩H=∑xf^(x)|x⟩⟨x|
f^(x)f(x)