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
| import numpy as np
import random
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 = [0,] * self.nombre_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
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:]
children.append(child2)
return children
i1=individu(10)
p=population(10,25)
print p.croisement_deux (i1,i2,10) |