[PYTHON] Ich habe versucht, TSP mit QAOA zu lösen

Überblick

In diesem Artikel wird die Implementierung bei der Lösung von TSP (Travelling Salesman Problem) mit QAOA (Quantum Approximate Optimization Algorithm) vorgestellt, einem der Quantenalgorithmen. Hier wird die Methode mit Qiskit Aqua angewendet, ohne eine Quantenprogrammierung durchzuführen. Die Sprache ist Python 3.7, und Qiskit von IBM wird verwendet. Bitte fragen Sie nicht nach Details, da es sich um ein Memorandum handelt.

Was ist QAOA?

Es wird als einer der NISQ-Algorithmen angesehen und ist ein Algorithmus zum Finden der Lösung des Kombinationsoptimierungsproblems, ähnlich dem Quantenglühen. Eine ausführliche Erklärung wird hier vermieden.

QISKIT Qiskit ist ein Open Source Framework für Quantencomputer. In diesem Artikel wird Qiskit Aqua verwendet. Dies ist ein Tool, das Benutzer verwenden können, ohne selbst Quantenprogrammierung durchzuführen. Derzeit werden die Bereiche Chemie, KI, Optimierung und Finanzen unterstützt.

TSP Das Problem des Handlungsreisenden ist ein Kombinationsoptimierungsproblem, bei dem das Problem mit den niedrigsten Gesamtreisekosten unter den Reisekreisen ermittelt wird, die alle Städte genau einmal umrunden und zum Ausgangspunkt zurückkehren, wenn eine Reihe von Städten angegeben wird.

Löse TSP mit QAOA

Importieren Sie die Bibliothek

python


from qiskit.aqua.translators.ising import tsp
from qiskit.aqua.input import EnergyInput
from qiskit import BasicAer
from qiskit.aqua.algorithms import QAOA
from qiskit.aqua.components.optimizers import  POWELL
from qiskit.aqua import QuantumInstance
from qiskit.aqua import aqua_globals

Programmkörper

python


#Anzahl der Städte
n = 3
#Koordinaten abrufen(X im Bereich von 0-100,Holen Sie sich y Koordinaten. Das dritte Argument ist die Größe der Matrix)
coord = aqua_globals.random.uniform(0, 100, (n, 2))
#In TSPData konvertieren. Erstellen Sie eine benachbarte Matrix aus den angegebenen Koordinaten
ins = tsp.calc_distance(coord, 'tmp')

qubitOp, offset = tsp.get_tsp_qubitops(ins, penalty=1e5)
algo_input = EnergyInput(qubitOp)

seed = 10240

optimizer = POWELL()
qaoa = QAOA(qubitOp, optimizer, 1)

backend = BasicAer.get_backend('statevector_simulator')
quantum_instance = QuantumInstance(backend, seed_transpiler=seed)

result = qaoa.run(quantum_instance)

Ergebnisse anzeigen

python


x = tsp.sample_most_likely(result['eigvecs'][0])

print('energy:', result['energy'])
print('time:', result['eval_time'])
print('tsp objective:', result['energy'] + offset)

print('solution:', tsp.get_tsp_solution(x))

TSP-Daten bei n = 3

TspData(name='tmp', dim=3, coord=array([[66.73333554, 32.83574073],
       [45.99618836, 47.41884594],
       [45.92600616, 25.75398833]]), w=array([[ 0., 25., 22.],
       [25.,  0., 22.],
       [22., 22.,  0.]]))

Ergebnis

energy: -348052.5262025418
time: 57.140453577041626
tsp objective: 252050.97379745822
solution: [2, 0, 1]

Zusammenfassung

Ein Memorandum zur Verwendung von Qiskit Aqua. Ich fand es erstaunlich, dass QAOA ohne Kenntnisse der Quantenprogrammierung verwendet werden kann. Da es sich jedoch im Simulator befindet, dauert die Berechnung sehr lange. Ich war auch besorgt über das Ergebnis von [0,0,0]. Da ich es zum ersten Mal auf Qiita gepostet habe, ist es möglicherweise schwierig zu lesen. Es tut mir Leid.

Nachtrag: Derzeit arbeite ich hart daran, eine TL-Schaltung zu erstellen

Recommended Posts

Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, Optuna die Nummer lösen zu lassen
Ich wollte ABC172 mit Python lösen
Ich habe versucht zu debuggen.
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, GAN (mnist) mit Keras zu bewegen
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich habe versucht, Linux mit Discord Bot zu betreiben
Ich habe versucht, DP mit Fibonacci-Sequenz zu studieren
Ich habe versucht, Jupyter mit allen Amazon-Lichtern zu starten
Ich habe versucht, Tundele mit Naive Bays zu beurteilen
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich habe versucht, Faster R-CNN mit Pytorch auszuführen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, mit PyCaret zu clustern
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, ObjectId (Primärschlüssel) mit Pymongo zu generieren
Ich möchte SUDOKU lösen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, eine ML-Pipeline mit Cloud Composer zu erstellen
Ich habe versucht, unsere Dunkelheit mit der Chatwork-API aufzudecken
Ich habe versucht, Linux wieder einzuführen
[Einführung in Pytorch] Ich habe versucht, Cifar10 mit VGG16 ♬ zu kategorisieren
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, SparseMatrix zusammenzufassen