Test python fourmi.py

Fermé
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 - 29 nov. 2020 à 11:20
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 - 29 nov. 2020 à 21:53
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:

5 réponses

Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
29 nov. 2020 à 11:23
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?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
29 nov. 2020 à 12:50
bonjour, quand tu écris "plus haut", peux-tu indiquer à quelle ligne de code tu fais référence?
que veux-tu dire par
villes [i][0]
?
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
29 nov. 2020 à 13:06
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],?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
29 nov. 2020 à 13:40
c'est peut-être exact, mais bizarrement expliqué,
parce qu'il n'y a pas de calcul de distance en ligne 45
parce que je ne comprends pas ce que tu appelles "les villes [i][[0]".
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
29 nov. 2020 à 13:47
D'accord, mais pourquoi range( i+1,len(villes)) et non pas range(i, len(villes)) à la 47è ligne à ton avis?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
29 nov. 2020 à 13:58
as-tu compris ce que contenait liste_distances?
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
29 nov. 2020 à 15:02
Oui une liste de listes, non?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
29 nov. 2020 à 15:51
à quoi servent, que contiennent ces listes?
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
29 nov. 2020 à 15:56
ces listes contiennent des listes de listes : on aura un tableau de lsites ou matrice de listes qui contient des listes de [1,1], [1,2], etc...
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
29 nov. 2020 à 16:09
que contiennent ces listes? des oranges, des noms, des dates, ... ?
0
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
29 nov. 2020 à 16:17
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
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
29 nov. 2020 à 16:21
"enfin regarder plus loin la distance" = ?
as-tu visualisé le contenu de liste_distances?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jerry1803 Messages postés 31 Date d'inscription samedi 21 novembre 2020 Statut Membre Dernière intervention 29 novembre 2020
29 nov. 2020 à 15:07
Bah tu n'ai pas obligé de le faire, mais tu ne réponds jamais à mes questions. Même le simple fait de me dire pourquoi on prend i+1 à la place de i ?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
29 nov. 2020 à 15:51
tu ne réponds pas non plus à une partie de mes questions.
la réponse: parce qu'on s'occupe de i en ligne 46.
je n'avais pas répondu parce je pense que la réponse ne t'est pas utile pour le moment.
0