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.
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.
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]
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