[PYTHON] Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen

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.

Problem zu lösen

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. $ H = 1 - q(0) - q(1) $ Beachten Sie, dass $ q (0) $ und $ q (1) $ entweder 0 oder 1 sind. Wenn in dieser Problemeinstellung $ q (0) = q (1) = 1 $ ist, ist der Hamilton-Wert $ H = -1 $ der Mindestwert.

Zusatzinformationen

Übrigens hat Hamiltonian die folgenden Werte für alle Kombinationen von $ q (0) und q (1) $.

Informationen zur Ausführungsumgebung

Führen Sie mit Google Colabratory aus. Die Version von Qiskit ist "0.14.1".

Quellcode

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!

Impressionen, die ich zu implementieren versuchte

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.

Schließlich

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

Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, das Problem der Optimierung der Platzierung virtueller Maschinen (einfache Version) mit blueqat zu lösen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, die Bayes'sche Optimierung zu durchlaufen. (Mit Beispielen)
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
[Keras] Ich habe versucht, das Problem der Klassifizierung des Donut-Typ-Bereichs durch maschinelles Lernen zu lösen. [Studie]
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, Platypus auszuführen, um ein kleines Optimierungsproblem zu lösen - Teil 2
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, das Schichtplanungsproblem mit verschiedenen Methoden zu lösen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich wollte ABC160 mit Python lösen
Ich habe versucht, Optuna die Nummer lösen zu lassen
Ich habe eine funktionale Sprache mit Python ausprobiert
[AtCoder] Löse ABC1 ~ 100 Ein Problem mit Python
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe eine Web-API erstellt
Ich wollte ABC172 mit Python lösen
Ich habe versucht, "einen genetischen Algorithmus (GA) in Python zu implementieren, um das Problem des Handlungsreisenden (TSP) zu lösen".
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
Ich habe versucht, eine Blockchain zu implementieren, die tatsächlich mit ungefähr 170 Zeilen funktioniert
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Theorie)
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe ein Systemkonfigurationsdiagramm mit Diagrams on Docker geschrieben
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.