Test python fourmi.py
Jerry1803
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
import numpy as np import random import math import functools from ant_colony_commente import AntColony def construit_ville(n, x=1000, y=700): """ Tire aléatoirement *n* villes dans un carré ``x * y``, on choisit ces villes de sorte quelles ne soient pas trop proches. """ #deux villes ne pourront pas être plus proches que mind mind = math.sqrt(x * x + y * y) / (n * 0.75) # liste vide lt = [] while n > 0: #on tire aléatoirement les coordonnées d'une ville xx = x * random.random() yy = y * random.random() #on vérifie qu'elle n'est pas trop proche d'aucune autre ville ajout = True for t in lt: d1 = t[0] - xx d2 = t[1] - yy d = math.sqrt(d1 * d1 + d2 * d2) if d < mind: ajout = False # ville trop proche #si la ville n'est pas trop proche des autres, on l'ajoute à la liste if ajout: lt.append((xx, yy)) n = n - 1 # une ville en moins à choisir return lt def distance_euclidienne_carree(villes): """ Calcule la distance euclidienne entre deux points. """ liste_distances = [] for i in range(len(villes)): liste_distances.append([]) for j in range(i): liste_distances[i].append(liste_distances[j][i]) liste_distances[i].append(np.inf) for j in range(i+1, len(villes)): liste_distances[i].append(math.sqrt( ((villes[i][0]-villes[j][0])**2) + ((villes[i][1]-villes[j][1])**2) )) distances = np.array(liste_distances) return distances villes = construit_ville(100) distances = distance_euclidienne_carree(villes) ant_colony = AntColony(distances, 10, 2, 100, 0.95, alpha=1, beta=1) shortest_path = ant_colony.run() print("shortest_path : {}".format(shortest_path))
A voir également:
- Test python fourmi.py
- Test performance pc - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test steam deck oled - Guide
- Test composant pc - Guide
- Citizen code python avis - Accueil - Outils
5 réponses
J'ai une petite question à la 47ème et 48ème ligne, cette boucle for nous aide à calculer la distance qui sépare 2 villes, ma question est de savoir que l'on prend i+1 du coup parce que on a calculé plus haut pour les villes [i][0] juste avant? Pouvez-vous me confirmer si c'est bien ça ou pas?
Bonjour, je fais référence aux lignes 44 et 45 puisque on demande dans cette boucle for que pour chaque ville i d'ajouter les autres villes j du coup je me disais que à la 47è et 48è (boucle for qui nous aide à calculer la distance séparant 2 villes) on prenait i+1 puisque à la 44è ligne et 45è ligne on a d'abord les villes [i][[0],?
D'accord, mais pourquoi range( i+1,len(villes)) et non pas range(i, len(villes)) à la 47è ligne à ton avis?
Oui une liste de listes, non?
ces listes contiennent en lignes et en colonnes j puis i(i = au nombre de villes) et j variant de 0 ài-1, donc au final on obtient une liste qui contient toutes le numéro de toutes les villes en ligne*colonnes: on va pouvoir donc se déplacer d'une ville à l'autre et enfin regarder plus loin la distance qui sépare une ville à une autre
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
que veux-tu dire par ?