Test python fourmi.py
Jerry1803
Messages postés
31
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 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 steam deck oled - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
- Test batterie pc - Guide
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?
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 ?