Etape de croisement dans un algorithme génetique
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:
Code:
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 |
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:
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 |
dans le programme principal,j'écris
Code:
1 2 3 4
| i1=individu(10)
i2=individu(10)
p=population(10,25)
print p.croisement_deux (i1,i2,10) |
exemple
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