Cet article présente l'implémentation lors de la résolution de TSP (Travelling Salesman Problem) avec QAOA (Quantum Approximate Optimization Algorithm), qui est l'un des algorithmes quantiques. Ici, la méthode utilisant Qiskit Aqua est adoptée sans effectuer de programmation quantique. Le langage est Python 3.7 et Qiskit fourni par IBM est utilisé. Veuillez ne pas demander de détails car il s'agit d'un mémorandum.
Il est considéré comme l'un des algorithmes NISQ, et est un algorithme pour trouver la solution du problème d'optimisation de combinaison, similaire au recuit quantique. Une explication détaillée est évitée ici.
QISKIT Qiskit est un framework open source pour les ordinateurs quantiques. Dans cet article, Qiskit Aqua est utilisé. Il s'agit d'un outil que les utilisateurs peuvent utiliser sans effectuer eux-mêmes de programmation quantique. Actuellement, les domaines de la chimie, de l'IA, de l'optimisation et de la finance sont pris en charge.
TSP Le problème du voyageur de commerce est un problème d'optimisation de combinaison qui trouve celui avec le coût total de voyage le plus bas parmi les circuits itinérants qui font le tour de toutes les villes exactement une fois et reviennent au point de départ lorsqu'un ensemble de villes est donné.
Importer la bibliothèque
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
Organisme du programme
python
#Nombre de villes
n = 3
#Obtenir les coordonnées(X dans la plage de 0 à 100,Obtenez les coordonnées y. Le troisième argument est la taille de la matrice)
coord = aqua_globals.random.uniform(0, 100, (n, 2))
#Convertissez en TSPData. Créer une matrice adjacente à partir des coordonnées données
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)
Voir les résultats
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))
Données TSP lorsque 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.]]))
résultat
energy: -348052.5262025418
time: 57.140453577041626
tsp objective: 252050.97379745822
solution: [2, 0, 1]
Un mémorandum sur l'utilisation de Qiskit Aqua. J'ai trouvé incroyable que QAOA puisse être utilisé sans aucune connaissance de la programmation quantique. Cependant, comme il se trouve sur le simulateur, le calcul prend beaucoup de temps. De plus, j'étais inquiet du résultat de [0,0,0]. Enfin, depuis que je l'ai posté sur Qiita pour la première fois, il peut être difficile à lire. Je suis désolé.
Post-scriptum: Actuellement, je travaille dur pour créer un circuit de cuillère à café
Recommended Posts