IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Résoudre le problème de matrice [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2019
    Messages : 28
    Points : 13
    Points
    13
    Par défaut Résoudre le problème de matrice
    Bonjour,

    Le code suivant fonctionne correctement avec la matrice en commentaire "distances", cependant, je veux utiliser la matrice du graphe généré G

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
     
    import networkx as nx
    import random as rn
    import numpy as np
    from numpy.random import choice as np_choice
    from collections import OrderedDict
     
    class AntColony(object):
     
        def __init__(self, distances, n_ants, n_best, n_iterations, decay, alpha=1, beta=1):
            self.distances  = distances
            self.pheromone = np.ones(self.distances.shape) / len(distances)
            self.all_inds = range(len(distances))
            self.n_ants = n_ants
            self.n_best = n_best
            self.n_iterations = n_iterations
            self.decay = decay
            self.alpha = alpha
            self.beta = beta
     
     
        def run(self):
            shortest_path = None
            all_time_shortest_path = ("placeholder", np.inf)
     
            for i in range(self.n_iterations):
                all_paths = self.gen_all_paths()
                self.spread_pheronome(all_paths, self.n_best, shortest_path=shortest_path)
                shortest_path = min(all_paths, key=lambda x: x[1])
                if shortest_path[1] < all_time_shortest_path[1]:
                    all_time_shortest_path = shortest_path            
                self.pheromone * self.decay    
            return all_time_shortest_path
     
     
        def gen_all_paths(self):
            all_paths = []
            for i in range(self.n_ants):
                path = self.gen_path(0)
                all_paths.append((path, self.gen_path_dist(path)))  # (path - distance)
            return all_paths
     
        def gen_path(self, start):
            path = []
            visited = set()
            visited.add(start)
            prev = start
            for i in range(len(self.distances) - 1):
                move = self.pick_move(self.pheromone[prev], self.distances[prev], visited)
                path.append((prev, move))
                prev = move
                visited.add(move)
            path.append((prev, start)) # going back to where we started    
            return path
     
        def pick_move(self, pheromone, dist, visited):
            pheromone = np.copy(pheromone)
            pheromone[list(visited)] = 0
     
            row = pheromone ** self.alpha * (( 1.0 / dist) ** self.beta)
            norm_row = row / row.sum()
     
            move = np_choice(self.all_inds, 1, p=norm_row)[0]
            return move    
     
        def gen_path_dist(self, path):
            total_dist = 0
            for ele in path:
                total_dist += self.distances[ele]
            return total_dist  
     
        def spread_pheronome(self, all_paths, n_best, shortest_path):
            sorted_paths = sorted(all_paths, key=lambda x: x[1])
            for path, dist in sorted_paths[:n_best]:
                for move in path:
                    self.pheromone[move] += 1.0 / self.distances[move]
     
     
     
     
    G= nx.dorogovtsev_goltsev_mendes_graph(n=2)
    m = nx.to_numpy_array(G)
    #print(m)
     
    for r in range(len(m)):
        for c in range(len(m[r])):
            if m[r][c] == 0: m[r][c] = float('inf')
     
    distances = repr(m)
     
    """
    distances = np.array([[np.inf, 1, 1, 1, 1, np.inf],
                          [1, np.inf, 1, 1, np.inf, 1],
                          [1, 1, np.inf, np.inf, 1, 1],
                          [1, 1, np.inf, np.inf, np.inf, np.inf],
                          [1, np.inf, 1, np.inf, np.inf, np.inf],
                          [np.inf, 1, 1, np.inf, np.inf, np.inf]])
    """           
     
     
    print(distances)
     
    ant_colony = AntColony(distances, 1, 1, 100, 0.95, alpha=1, beta=1)
    shortest_path = ant_colony.run()
    print ("shortest_path: {}".format(shortest_path))
    Comment je pourrai résoudre ce probleme ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par lee.mao Voir le message
    Comment je pourrai résoudre ce probleme ?
    Tu aurais pu le résoudre en faisant preuve d'initiative en rajoutant un print(distances, type(distances)). Mais bon, je vais t'éviter ce travail en te demandant juste de m'expliquer ton but en écrivant cette instruction...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2019
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Tu aurais pu le résoudre en faisant preuve d'initiative en rajoutant un print(distances, type(distances)). Mais bon, je vais t'éviter ce travail en te demandant juste de m'expliquer ton but en écrivant cette instruction...
    le but d'ajouter l'instruction est juste pour avoir une matrice similaire à ça:
    distances = np.array([[np.inf, 1, 1, 1, 1, np.inf],
    [1, np.inf, 1, 1, np.inf, 1],
    [1, 1, np.inf, np.inf, 1, 1],
    [1, 1, np.inf, np.inf, np.inf, np.inf],
    [1, np.inf, 1, np.inf, np.inf, np.inf],
    [np.inf, 1, 1, np.inf, np.inf, np.inf]])
    pour que le programme s'execute, mais il y avait une erreur

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lee.mao Voir le message
    le but d'ajouter l'instruction est juste pour avoir une matrice similaire à ça
    Ben oui mais repr() ne retourne pas une matrice, il retourne une string. Donc tu ne peux pas l'utiliser pour avoir une matrice. Et comme ta matrice est déjà dans "m", je ne pige pas pourquoi tu veux obtenir une seconde matrice identique.

    Citation Envoyé par lee.mao Voir le message
    mais il y avait une erreur
    Ben oui, normal
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2019
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben oui mais repr() ne retourne pas une matrice, il retourne une string. Donc tu ne peux pas l'utiliser pour avoir une matrice. Et comme ta matrice est déjà dans "m", je ne pige pas pourquoi tu veux obtenir une seconde matrice identique.


    Ben oui, normal
    Oui, vous avez raison

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/08/2007, 12h33
  2. Réponses: 3
    Dernier message: 19/05/2006, 15h54
  3. [UML]résoudre un problème de classe
    Par maraly dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 26/04/2006, 11h24
  4. [Mail] Le php pourrait il résoudre mon problème???
    Par mayoouketchup dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2005, 13h10
  5. Comment utiliser Developpez.com pour résoudre votre problème
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 08/01/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo