Salut! En tant que fournisseur TSP (tripolyphosphate), on me demande souvent comment implémenter des algorithmes TSP à Python. C'est un sujet assez cool, et je suis impatient de partager mes connaissances avec vous.
Quel est le TSP?
Tout d'abord, couvrons rapidement ce qu'est le problème des vendeurs itinérants (TSP). Imaginez que vous êtes un vendeur qui a besoin de visiter un tas de villes. Vous voulez trouver l'itinéraire le plus court possible qui visite chaque ville une fois une fois, puis revient à la ville de départ. Cela peut sembler simple, mais au fur et à mesure que le nombre de villes augmente, trouver la solution optimale devient une véritable tête - gratteur. C'est là que les algorithmes TSP entrent en jeu.
Pourquoi Python?
Python est un langage génial pour implémenter les algorithmes TSP. Il est super facile à apprendre, a une tonne de bibliothèques disponibles et peut gérer des calculs complexes sans trop de tracas. Que vous soyez un débutant ou un codeur expérimenté, Python rend relativement simple de vous salir les mains avec des algorithmes TSP.
Mise en œuvre de l'approche naïve
Le moyen le plus simple de résoudre le TSP est l'approche naïve. Dans cette méthode, nous générons toutes les permutations possibles des villes et calculons la distance totale pour chaque permutation. Ensuite, nous choisissons juste celui avec la distance la plus courte.
Voici un simple extrait de code Python pour illustrer l'approche naïve:
Importer iTertools Def Distance (City1, City2): # Ici, vous calculez la distance réelle entre deux villes # pour simplifier, supposons que nous avons un simple retour à distance euclidienne ((ville1 [0] - City2 [0]) ** 2+ (City1 [1] - City2 [1]) ** 2) ** 0.5 def tsp_naive (Cities): All_perMutations = list (itertools.permutations (villes)) min_diste = float ('inf') best_route = Aucun pour la route dans all_permutations: total_distance = 0 pour i dans la gamme (Len (itinéraire) - 1): total_diste + = distance (itiné < min_distance: min_distance = total_distance best_route = route return min_distance, best_route # Example usage cities = [(0, 0), (1, 5), (2, 3)] min_dist, best_route = tsp_naive(cities) print(f"The minimum distance is {min_dist} and the best route is {best_route}")
Le problème avec l'approche naïve est qu'il a une complexité temporelle de O (n!), Où n est le nombre de villes. Cela signifie que lorsque le nombre de villes augmente, l'algorithme devient extrêmement lent.


Utilisation de l'algorithme voisin le plus proche
L'algorithme voisin le plus proche est un algorithme gourmand qui fournit une solution rapide mais pas toujours optimale. Il commence dans une ville aléatoire, puis visite à plusieurs reprises la ville non visitée la plus proche jusqu'à ce que toutes les villes aient été visitées. Enfin, il revient dans la ville de départ.
DEF TSP_NEAREST_NEIGHBOR (Cities): Current_City = Cities [0] Unvisite Route.APPEND (villes [0]) # Retour à la ville de départ Total_Distance = 0 pour I In Range (Len (route) - 1): Total_Distance + = Distance (route [i], route [i + 1]) Retour Total_Distance, Route # Exemple USAGE Cities = [(0, 0), (1, 5), (2, 3)] Min_dist, Best_Route = Tsp_Neresh print (f "La distance minimale est {min_dist} et le meilleur itinéraire est {best_route}")
L'algorithme voisin le plus proche a une complexité temporelle de O (n ^ 2), ce qui est bien meilleur que l'approche naïve pour un plus grand nombre de villes. Cependant, il ne donne pas toujours la solution optimale.
L'approche de programmation dynamique
La programmation dynamique peut être utilisée pour résoudre le TSP plus efficacement pour des tailles de problèmes plus petites. L'idée de base est de décomposer le problème en sous-problèmes plus petits et de stocker les solutions à ces sous-problèmes pour éviter les calculs redondants.
from functools import lru_cache @lru_cache(maxsize=None) def tsp_dp(mask, pos, dist_matrix): num_cities = len(dist_matrix) if mask == (1 << num_cities) - 1: return dist_matrix[pos][0] ans = float('inf') for next_city in range(num_cities): if (mask & (1 << next_city)) == 0: new_mask = masque | (1 << next_city) new_cost = dist_matrix [pos] [next_city] + tsp_dp (new_mask, next_city, dist_matrix) ans = min (ans, new_cost) return ans # Example Cities = [(0, 0), (1, 5), (2, 3)] Dist_matrix = [[Distance (City1, City2) pour les city City1 dans les villes] min_dist = tsp_dp (1, 0, tuple (carte (tuple, dist_matrix))) imprimer (f "La distance minimale est {min_dist}")
L'approche de programmation dynamique a une complexité temporelle d'O (n ^ 2 * 2 ^ n), qui est meilleure que l'approche naïve mais ne convient toujours pas à un très grand nombre de villes.
Nos produits TSP
En tant que fournisseur TSP, nous proposons une gamme de produits de haute qualité. Par exemple, nous avonsTripolyphosphate de sodium à 95% STPP Grade alimentaire comme agent de rétention d'eau. Ce produit est largement utilisé dans l'industrie alimentaire comme agent de rétention d'eau, aidant à garder les aliments frais et humides.
Nous avons aussiMonopotassium phosphate alimentaire ingrédient mkp phosphate mono potassium. C'est un ingrédient alimentaire important qui peut être utilisé dans diverses applications alimentaires.
Et notreDisodium phosphate (DSP) de qualité alimentaire NA2HPO4 DSPest un vendeur de haut niveau, connu pour sa haute qualité et son efficacité dans la transformation des aliments.
Emballage
La mise en œuvre d'algorithmes TSP dans Python peut être une expérience amusante et enrichissante. Que vous utilisiez l'approche naïve, l'algorithme du voisin le plus proche ou la programmation dynamique, chaque méthode a ses propres avantages et inconvénients. À mesure que le nombre de villes augmente, vous devrez choisir l'algorithme qui convient le mieux à vos besoins en termes de complexité temporelle et d'optimalité de solution.
Si vous êtes intéressé par nos produits TSP ou si vous avez des questions sur les algorithmes TSP, n'hésitez pas à tendre la main. Nous sommes toujours heureux de vous aider avec vos besoins connexes et de discuter des opportunités commerciales potentielles.
Références
- Cormen, Th, Leison, CE, Rivest, RL et Stein, C. (2009). Introduction aux algorithmes. Avec presse.
- Skiena, SS (2020). Le manuel de conception de l'algorithme. Springer.
