Ich habe zuvor ein Kombinationsoptimierungsproblem mit blueqat implementiert (siehe Artikel von blueqat hier), aber dieses Mal möchte ich es mit Qiskit implementieren. Da dieser Artikel die Implementierungsmethode bestätigen soll, möchte ich mich mit dem einfachen Problem der Kombinationsoptimierung selbst befassen.
Das zu lösende Problem ist das gleiche wie zuvor. Finden Sie die Kombination von $ q (0) $ und $ q (1) $, die den folgenden Hamilton-Wert $ H $ minimiert.
Übrigens hat Hamiltonian die folgenden Werte für alle Kombinationen von $ q (0) und q (1) $.
Führen Sie mit Google Colabratory aus. Die Version von Qiskit ist "0.14.1".
Installieren Sie Qiskit
pip install qiskit
Importieren der erforderlichen Pakete für Qiskit
from qiskit import BasicAer
from qiskit.aqua.algorithms import QAOA
from qiskit.optimization.algorithms import MinimumEigenOptimizer
from qiskit.optimization import QuadraticProgram
Definition der Variablen, Hamiltonian
qubo = QuadraticProgram()
#Definition der binären Variablen
qubo.binary_var('q0')
qubo.binary_var('q1')
#Hamiltonsche Definition
qubo.minimize(linear=[-1,-1],constant=1.0)
print(qubo.export_as_lp_string())
Das Definitionsergebnis der Variablen Hamiltonian lautet wie folgt.
\ This file has been generated by DOcplex
\ ENCODING=ISO-8859-1
\Problem name: CPLEX
Minimize
obj: - q0 - q1 + 1
Subject To
Bounds
0 <= q0 <= 1
0 <= q1 <= 1
Binaries
q0 q1
End
Lösen Sie den in QAOA definierten Hamilton-Operator.
#Initialisierung von MinimumEigensolver
qaoa_mes = QAOA(quantum_instance=BasicAer.get_backend('statevector_simulator'))
#Optimierer erstellen
qaoa = MinimumEigenOptimizer(qaoa_mes)
#QAOA-Berechnung/Ergebnisausgabe
qaoa_result = qaoa.solve(qubo)
print("QAOA result:")
print(qaoa_result)
Das Ausführungsergebnis ist wie folgt.
QAOA result:
x=[1.0,1.0], fval=-1.0
Ich konnte erfolgreich eine Lösung finden!
Der Eindruck, den ich zu implementieren versuchte, ist "schwer zu schreiben ...". Besonders seltsam ist der Hamilton-Definitionsteil. Ich dachte, dass die binären Variablen q0 und q1 wie das Symbol von Sympy behandelt werden könnten, aber das scheint nicht der Fall zu sein.
Bitte lassen Sie mich wissen, ob es eine bessere Möglichkeit gibt, es in Qiskit zu implementieren. Ich persönlich finde es nicht sehr klug.
Recommended Posts