Bonjour
je vais détailler ma problème,s'il vous plait aider moi car la fonction croisement_deux ne marche pas
voici mon code:
maintenant,aprés une étape de sélection ,je veux faire le croisement entre deux individus par exemple i1 et i2 dans un autre classe population
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 class individu: def __init__ (self,nombre_genes,random=-1): self.genes = [] self.nombre_genes = nombre_genes if random == -1 : self.get_random () """ random : initialise aleatoirement les genes """ def get_random (self): self.genes=np.zeros(self.nombre_genes) for i in range(4): while True: j=random.randint(0,(self.nombre_genes-1)) if self.genes[j] == 0: break self.genes[j]=1 return self.genes
dans le programme principal,j'écris
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 class population: def __init__(self,nombre_genes,nombre_initial_population=25): self.nombre_genes=nombre_genes self.individus=[] self.nombre_initial_population=nombre_initial_population for v in range(self.nombre_initial_population): self.individus.append(individu(nombre_genes)) def croisement_deux (self , i1 , i2,l): a = l / 2 children=[] father=i1.get_random() mother=i2.get_random() child1=father[:a]+mother[a:] children.append(child1) child2=mother[:a]+father[a:] childrens.append(child2) return children
exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 i1=individu(10) i2=individu(10) p=population(10,25) print p.croisement_deux (i1,i2,10)
i1=[0 .1 .0 .1 .1. /0. 0. 1 .0 .0] et i2=[0 .1 .1 .0 .0/. 0. 0. 1 .1.0]
child1=[0 .1 .0 .1 .1. 0. 0. 1 .1 .0] et child2=[0 .1 .1 .0 .0.0. 0. 1 .0 .0]
Merci d'avance
Partager