bonjour
je vais détailler ma problème ,s'il vous plait pouvez vous m'aider car je sais pas pourquoi mon code ne marche pas.
En fait,moi je veux implémenter un algorithme génétique pour faire une optimisation de placement des passerelles dans un réseau maillé.
un individu est représenté par une liste des 10 cases dont 7 cases sont des zéros(les routeurs maillés) et quatre uns (les passerelles) placées aléatoirement.la fonction suivante permet de faire ca se trouve dans le fichier algo_gen.py.
1 2 3 4 5 6
| def get_random (self):
self.genes=np.zeros(self.nombre_genes)
for i in range(4):
j=random.randint(0,(self.nombre_genes-1))
self.genes[j]=1
return self.genes |
je crée un autre fichier topology .py ou se trouve le code pour créer le réseau et aussi une fonction pour calculer la matrice coût suivante:
1 2 3 4 5 6 7
| def get_matrix(self):
path_length=nx.all_pairs_shortest_path_length(self.G)
n = len(self.G.nodes())
distances=np.zeros((n,n))
for u,p in path_length.iteritems():
for v,d in p.iteritems():
distances[int(u)][int(v)] = d |
Donc ,mon objectif maintenant est d'extraire une matrice de distances entre les quatre passerelles et les différents des noeuds donc (4 colonnes de matrice de cout et tous les lignes)mais ces quatre colonnes ne sont pas arbitraires,ils sont seulement les indices qui ont les valeurs des uns dans la liste (c'est à dire qui représente l'individu).voici ce code que je développe pour faire ça et je le mets dans le fichier topology.py
1 2 3 4 5 6 7 8 9
| def get_distance(self,individu):
d=self.get_matrix()
m=np.zeros((10,4))
l=[]
for i in range(len(individu)):
if (individu[i]==1):
l.append(i)
m=d[:,l[0]:l[len(l)-1]+1]
return m |
Maintenant ,je mets dans le programme principale le code suivant:
1 2 3 4 5 6 7 8 9 10
| sink = 0
topo = Topology(options.inputTopo, options.outputTopo, sink)
topo.generateTopNodeDegree(options.n_,options.d_)
topo.draw()
topo.getEdges()
print topo.get_matrix()
a=algo_gen.individu(10)
b=a.get_random()
print b
print topo.get_distance(b) |
mais malheureusement ,je n'obtiens pas la matrice que je veux (autre résultat)
en piéce-jointe,le résultat obtenu
Merci d'avance.
Partager