diff --git a/test.py b/test.py new file mode 100644 index 0000000000000000000000000000000000000000..46e0c0bdc6eb0bf8e5803d0bb83a9a70652fff61 --- /dev/null +++ b/test.py @@ -0,0 +1,113 @@ +import random + +class Population: + def __init__(self,n): + self.indiv=[Individu(rot_table.alea) for k in range (n)] + self.n = n + + def selection_duel_pondere(self,p=(self.n)//2): + n=self.n + newself=[] #méthode des duels pondérée: si x=10 et y=1, y a une chance sur 11 de passer + while len(self)>p: + m=random.randrange(0,len(self)) + t=random.randrange(0,len(self)) + x=self[m] + y=self[t] + p=uniform(0,1) + if p>x.score/(x.score+y.score): + newself.append(y) + else: + newself.append(x) + return(newself) + + def selection_duel(self,p=(self.n)//2): + n=self.n + newself=[] #méthode des duels pondérée: si x=10 et y=1, y a une chance sur 11 de passer + while len(self)>p: + m=random.randrange(0,len(self)) + t=random.randrange(0,len(self)) + x=self[m] + y=self[t] + if x.score<=y.score: + newself.append(x) + else: + newself.append(y) + return(newself) + + def selection_par_rang(self, p): + liste_individus = self.indiv + n = self.n + + def echanger(tableau, i, j): + tableau[i], tableau[j] = tableau[j], tableau[i] + + def partitionner(tableau,debut,fin): + echanger(tableau,debut,randint(debut,fin-1)) + partition=debut + for i in range(debut+1,fin): + if tableau[i] < tableau[debut]: + if tableau[i].score<tableau[debut].score: + partition+=1 + echanger(tableau,i,partition) + echanger(tableau,debut,partition) + return partition + + def tri_rapide_aux(tableau,debut,fin): + if debut < fin-1: + positionPivot=partitionner(tableau,debut,fin) + tri_rapide_aux(tableau,debut,positionPivot) + tri_rapide_aux(tableau,positionPivot+1,fin) + + def tri_rapide(tableau): + tri_rapide_aux(tableau,0,len(tableau)) + + tri_rapide(liste_individus) + individus_selectionnes = [] + + for _ in range(p): + curseur = random()*n*(n+1)/2 + # print("curseur", curseur) + j = 1 + while j*(j+1)/2 < curseur : + j+=1 + #on doit prendre l'individu avec le jème score + # print("individus selectionés", individus_selectionnes) + individus_selectionnes.append(liste[j-1]) + + def modifier_population(self, liste_individus): + self.n = len(liste_individus) + self.indiv = liste_individus + return self + + self = modifier_population(self, individus_selectionnes) + + def reproduction(self,selection=selection_duel,enfant=mixage,p=n//2): + newself=selection(self,p) + while len(newself)<self.n: + m=random.randrange(0,len(newself)) + t=random.randrange(0,len(newself)) + x=newself[m] + y=newself[t] + newself.append(enfant(x,y)) + return(newself) + +print([random.randrange(1,10) for i in range(5)]) + + + + + + + + + + + + + + + + + + +