[PYTHON] Résolvez le problème du voyageur de commerce avec OR-Tools

Qu'est-ce que c'est

J'ai essayé de résoudre "Résoudre le problème du voyageur de commerce avec Watson" en utilisant OR-Tools.

Qu'est-ce que OR-Tools?

Une bibliothèque gratuite liée à la recherche opérationnelle créée par Google. Avec OR-Tools, Delivery Optimization Problem et Circuit Salesman Problem Peut être résolu.

Référence: https://developers.google.com/optimization/routing

Essayez de résoudre

S'il est laissé tel quel, ce sera un peu gênant, alors j'utiliserai le wrapper de ortoolpy.

import pandas as pd
import matplotlib.pyplot as plt
from scipy.spatial import distance
from more_itertools import pairwise
from ortoolpy import ortools_vrp

url = 'https://raw.githubusercontent.com/makaishi2/sample-data/master/data/att48.csv'
df = pd.read_csv(url)[:30]  #Créez 30 villes selon l'article original
dist = distance.cdist(df.values, df.values).astype(int)
route = ortools_vrp(len(df), dist, limit_time=1)[0]
plt.figure(figsize=(6, 6))
plt.plot(df.x[route], df.y[route], 'bo-');

image.png

Avec un temps de calcul de 1 seconde, le même résultat que l'article d'origine a été obtenu (le temps de calcul de l'article d'origine était de 226 secondes).

Supplément

L'algorithme OR-Tools est une solution approximative. Si vous n'ajoutez pas limit_time = 1, vous obtiendrez une solution en un instant, mais la précision est un peu médiocre. Par conséquent, en réglant le temps de calcul à 1 seconde, la même solution exacte que l'article d'origine est obtenue.

Recommended Posts

Résolvez le problème du voyageur de commerce avec OR-Tools
À propos du problème du voyageur de commerce
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)
À propos du problème du vendeur de patrouille commandé
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (code Python)
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (résultat de l'exécution)
Résolvez le problème du voyageur de commerce asymétrique Python avec la méthode de branche et de liaison
Python: j'ai essayé le problème du voyageur de commerce
Essayez de résoudre le problème du fizzbuzz avec Keras
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
Résolvez un simple problème de voyageur de commerce à l'aide d'une machine Boltzmann avec recuit simulé
Résolvez le problème de Monty Hall
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Résolution du problème du voyageur de commerce avec l'algorithme génétique (GA) et sa bibliothèque (vcopt)
J'ai essayé de résoudre le problème avec Python Vol.1
Problème de méthode de gravure et de voyageur de commerce
Je voulais résoudre le problème ABC164 A ~ D avec Python
Résolution du problème de la valeur initiale des équations différentielles ordinaires avec JModelica
Résolvez le problème du sac à dos Python avec la méthode de branche et liée
Résolvez les problèmes de somme partielle avec une recherche complète en Python
J'ai essayé "Implémentation d'un algorithme génétique (GA) en python pour résoudre le problème du voyageur de commerce (TSP)"
Une histoire dans laquelle l'algorithme est arrivé à une conclusion ridicule en essayant de résoudre correctement le problème du voyageur de commerce
Résolvez le problème de minimisation parabolique avec OpenMDAO
J'ai essayé le problème de campagne de Paiza. (Problème de vendeur circulaire)
Résolvons le portefeuille avec une optimisation continue
Comment résoudre le problème d'emballage du bac
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
Résolvez le problème maximum de sous-tableau en Python
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Essayez de résoudre le problème de l'héritage de classe Python
Résoudre les problèmes de sac à dos à l'aide de pyomo et glpk
Essayez de résoudre le diagramme homme-machine avec Python
Résolution du problème N Queen avec l'optimisation continue / combinée
Résolution du problème N Queen avec l'optimisation des combinaisons
[Chez Coder] Résoudre le problème de la dichotomie
Résolvez le problème du sac à dos Python avec l'algorithme glouton
J'ai essayé de résoudre le problème d'optimisation du placement de la machine virtuelle (version simple) avec blueqat
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Essayez de résoudre le livre des défis de programmation avec python3
J'ai essayé de résoudre Soma Cube avec python
Le 14ème problème de référence d'écriture en temps réel hors ligne avec Python
Résolution du problème de l'iris avec scikit-learn ver1.0 (régression logistique)
Résolvez AtCoder 167 avec python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
Résoudre des maths avec Python
Résoudre des maths avec PuLP
Examiner le double problème
Résolvez POJ 2386 avec python
Résoudre le calcul du masque
Je voulais résoudre le concours de programmation Panasonic 2020 avec Python
Trouver une solution au problème N-Queen avec un algorithme génétique (2)
J'ai essayé de résoudre le problème d'optimisation des combinaisons avec Qiskit
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Résolvez des exercices de modèle d'optimisation mathématique avec les outils OR de Google
Une histoire sur la façon de traiter le problème CORS
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
Le problème devient plus facile à résoudre en fonction de la méthode de formulation