Skip to content
Snippets Groups Projects
Commit 293c6eb1 authored by O'Sullivan Solal's avatar O'Sullivan Solal
Browse files

test new version

parent 2aefd980
Branches
No related tags found
No related merge requests found
...@@ -6,35 +6,48 @@ class Population: ...@@ -6,35 +6,48 @@ class Population:
self.n = n self.n = n
def selection_duel_pondere(self,p=(self.n)//2): def selection_duel_pondere(self,p=(self.n)//2):
n=self.n newself=[]
newself=[] #méthode des duels pondérée: si x=10 et y=1, y a une chance sur 11 de passer vu={}
while len(self)>p: m=None
m=random.randrange(0,len(self)) t=None #méthode des duels pondérée: si x=10 et y=1, y a une chance sur 11 de passer
t=random.randrange(0,len(self)) while len(newself)<p:
while m in vu:
m=random.randrange(0,len(self))
while t in vu:
t=random.randrange(0,len(self))
x=self[m] x=self[m]
y=self[t] y=self[t]
vu.add(t)
vu.add(m)
p=uniform(0,1) p=uniform(0,1)
if p>x.score/(x.score+y.score): if p>x.score/(x.score+y.score):
newself.append(y) newself.append(y)
else: else:
newself.append(x) newself.append(x)
return(newself) return(newself)
def selection_duel(self,p=(self.n)//2): def selection_duel(self,p=(self.n)//2):
n=self.n newself=[]
newself=[] #méthode des duels pondérée: si x=10 et y=1, y a une chance sur 11 de passer vu={}
while len(self)>p: t=None
m=random.randrange(0,len(self)) m=None
t=random.randrange(0,len(self)) while len(newself)<p:
while m in vu:
m=random.randrange(0,len(self))
while t in vu:
t=random.randrange(0,len(self))
x=self[m] x=self[m]
y=self[t] y=self[t]
vu.add(t)
vu.add(m)
if x.score<=y.score: if x.score<=y.score:
newself.append(x) newself.append(x)
else: else:
newself.append(y) newself.append(y)
return(newself) return(newself)
def selection_par_rang(self, p): def selection_par_rang(self, p=(self.n)//2):
liste_individus = self.indiv liste_individus = self.indiv
n = self.n n = self.n
...@@ -80,6 +93,19 @@ class Population: ...@@ -80,6 +93,19 @@ class Population:
return self return self
self = modifier_population(self, individus_selectionnes) self = modifier_population(self, individus_selectionnes)
def selection_proportionelle(self,p=(self.n)//2):
newself=[]
somme=0
for indiv in self:
somme=somme+indiv.score
while len(newself)<p:
m=m=random.randrange(0,len(self))
x=self[m]
p=uniform(0,1)
if p<=x.score/somme:
newself.append(x)
return(newself)
def reproduction(self,selection=selection_duel,enfant=mixage,p=n//2): def reproduction(self,selection=selection_duel,enfant=mixage,p=n//2):
newself=selection(self,p) newself=selection(self,p)
...@@ -91,7 +117,6 @@ class Population: ...@@ -91,7 +117,6 @@ class Population:
newself.append(enfant(x,y)) newself.append(enfant(x,y))
return(newself) return(newself)
print([random.randrange(1,10) for i in range(5)])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment