diff --git a/test.py b/test.py
index 46e0c0bdc6eb0bf8e5803d0bb83a9a70652fff61..c1a1a413240574732ee27affacd13bb894d49c11 100644
--- a/test.py
+++ b/test.py
@@ -6,35 +6,48 @@ class Population:
         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))
+        newself=[] 
+        vu={} 
+        m=None
+        t=None                         #méthode des duels pondérée: si x=10 et y=1, y a une chance sur 11 de passer
+        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]
             y=self[t]
+            vu.add(t)
+            vu.add(m)
             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))
+        newself=[]
+        vu={}                           
+        t=None  
+        m=None                       
+        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]
             y=self[t]
+            vu.add(t)
+            vu.add(m)
             if x.score<=y.score:
                 newself.append(x)
             else:
                 newself.append(y)
         return(newself)
 
-    def selection_par_rang(self, p):
+    def selection_par_rang(self, p=(self.n)//2):
         liste_individus = self.indiv
         n = self.n
         
@@ -80,6 +93,19 @@ class Population:
             return self
         
         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):
         newself=selection(self,p)
@@ -91,7 +117,6 @@ class Population:
             newself.append(enfant(x,y))
         return(newself)
 
-print([random.randrange(1,10) for i in range(5)])