From c9581fda79bf01880720190b7845a3e848e60d90 Mon Sep 17 00:00:00 2001
From: Kappes Marques Rodrigo <rodrigo.kappes@student-cs.fr>
Date: Thu, 30 Jan 2020 09:58:00 +0100
Subject: [PATCH] Cleaned croisement and RotTable

---
 __pycache__/RotTable.cpython-37.pyc   | Bin 2578 -> 2578 bytes
 __pycache__/croisement.cpython-37.pyc | Bin 2680 -> 2064 bytes
 __pycache__/individu.cpython-37.pyc   | Bin 3877 -> 3877 bytes
 __pycache__/population.cpython-37.pyc | Bin 5102 -> 5249 bytes
 croisement.py                         |  43 +++++++++-----------------
 individu.py                           |   1 +
 population.py                         |   3 --
 7 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/__pycache__/RotTable.cpython-37.pyc b/__pycache__/RotTable.cpython-37.pyc
index 97c7b449f729cb4937feb17325b1d5876ee76f4e..a2a8357d3008572384c7dcf2386e0a1d32d1e2de 100644
GIT binary patch
delta 19
acmbOvGD(EXiI<m)fq{Wx-;|A999#e=d;{D7

delta 19
acmbOvGD(EXiI<m)fq{XcVe&>U4lV#D0|T7^

diff --git a/__pycache__/croisement.cpython-37.pyc b/__pycache__/croisement.cpython-37.pyc
index 14137ab2a364a8f37a255767bdb564b07c910feb..d198ea9d256280ccf31cd22357458311486cf9b6 100644
GIT binary patch
delta 926
zcmew%GC@GYiI<m)fq{V`b(T@wcR>b*#~=<2GchnQI503U6q_(i)KC*@VTfW$VM}3e
zVTfW)VGL%_<e2QnC?}o_QU=ljGKiIdfx#K1W!2>OOgh4h%?u0J7BVz5*0Pnb*RVA+
zGBQk7U>2<p31FyUsbS4#DEd{ykj0V3S;H>LP{Raa*??IKxE3;iL~A*qDmdUOI3Oyr
zIBPg08B$nS86+7}SS=Zt8EhD87$IgzGSo0bST<l5+%!&*iux?h8cw(pPKXkS7^-o3
zb3n=oI1geaan6HyHW1`nT<(J?0T~BTfya3@EGcZ}47DtUE|XhW+C^_MxjViD#m3A3
z|NsAg$;iOKpvgU1k=2-oCBLX7@fK@AQD$Dr<T%!ajM9_XQuINQRcrx@Iu<TQE=Cqc
zK1M!94rV?^4n`(s4n`41K1LBn2_^_F#WHy!n=qs7=A~?*O!X`b3=BnVAc7r4aDc4h
zDPjh(K@KS51hGH~qKF&B;$dK5h~f<L4~Y+Pbn<b%#hja&cZ)eUv7(3{BrO0U1VLtS
z7YTvb!XQEfM2Lb2F_3nig8a<9lKAAJ{LJEd!zg5~QIR-EnFNTC1QAjoLK;rUFfcIO
z5(Dc@%}vcKiBCx_t%wJkS8NDMttOa(z#@kc0FZzH1xO+|WEgoEixfbvW`p<_<nvn`
ynRzLhWtl0ZkkF6?IRd1p2;m$s3+yHio80`A(wtN~P+S#*LXm@!hmnVgLk9pVimTxO

delta 1447
zcmbOr@IyqyiI<m)fq{X6uih|jy)XmAV-N?1MHv_v92giFilrDQYN*wxu%)o4aHKG#
zv!!sRaHVjk@TBm9d3-7SDFP{iDMDbLaEeF@Lkd@l0GKD5B9<baB9S5q=1HYUr^uwp
zrbvT%aw+m)m4aX%$P@**DT*mdDat7lDJoz&)fC>8dbJew6b&#JWQ-=<7?5MM;EvHw
zkpLSCu^wcM4%`@!V|3w;VM$>{@{-;hfhd*~{S<>1hA7q)!xW<yhA6fa#$X0b<CmZS
z@tc??QJ>y_=&MG|c}Iuzvu8j+#vwE9|NsB#JLFnl2kuyBpKc5Wk6{c)hxA!9LExkP
z%YFt12B@|#_AgmMJh0-;)-cl)99}YkghAFZF#NE8$qeT;*n<?+gY0B+NCzu$aD*}#
zcpNehfLsA_(;NGjN+5mTG-CP>U3CEI18HM$$UF{G^d=DG*p2p3r`W>er5s-V1IdHk
zRP5vc^@^y&%L)bthL>z0qFw_;ZULDNR%ZO!K0OT#zSzICWME*(Ed2lf|4S7Rs{_OW
zr5;UzTTG6Qx0oEAZ!tN#-(qqMxy9t{c#Fx|`4*G2`z<EtkXuadj<=ZHoo_L@yWe7R
z54pt@;&_WG#Q7Fei2E(3kdS0hsDS)Dv7MK3&g3!{tz^~`wr0j!wh4?CNi}RP3=<e*
zBWl@e*i)FZnTp&37;0E*ShE?5-qbK;v1f7AuuC%3FhN*0VAcZ8g$y9kS`MfR4!8;q
zh>9$Z$p(y~mN4DSaNW#V>~P(jHH=_!PDzFuhzd>{C~I;Zqj)_`H!iy&y0O?@!y(C#
z!otcR$&kWo$-vBD!vJ+B$R`k+*daC{xdq}^kZBMVoFK1&nUiIhq#4a7TQIeY6-hEM
zFcg7f^FJtt7#SECG`S{UVKV084Dt_&4{>zzah)v8ypYj!@>b>)N09PjGf?0&b1`x;
zvM};7a)2=tBL|}hBOjv(qXZL#mSTp`Funv64`Y$}<`|Yxrc6bctwo@;S)>fIm8S@l
zzKcMSTLelnMXDf0Y9K-#M1T_8E#}<Jyj#q<i4{efATccvp$*c_U8DnI>w*Y95TOqu
z3??hEE65vym_{JN7(|$W2vay=HaVVM+RYABuz_S4;2wi`O^%Sa7<m|rtUyj+FH)I&
zfL$UM<j^8>koh3tB7{v~7AWv;aoFVMr<CTT+JVBm7^H!Nk%y6onU4`46k*{|1po+f
BU$OuI

diff --git a/__pycache__/individu.cpython-37.pyc b/__pycache__/individu.cpython-37.pyc
index 3ef8c96f9616f2b5975f79ca003e59c0324ae6ae..49544ba734948726b642b284d58a3f5e1c39df81 100644
GIT binary patch
delta 504
zcmZ1~w^WYLiI<m)fq{X+XO>aie2I;GrA&-`lUtaU3Gy&7FcgEO7}*$w7)6*jTQeVJ
zWV|(*kyVtbsCcpjYqzW@NR0wWJ3AXQ3o{?10J8)m2NMgE0HXlQ<^!zv8M$phN<=_P
zm^QCsU(Cp;KG}~`oY8;sJ07{od$@QePvDf-&}3j>&}1soVqjn>(gqQNAOW5tArM;!
zMCgJDy~)=(6~y&HOal;M2vWsWBmrU@P3Gg0WHg?v!6hqd1`<#Q5hftQ6hxR$-p4B|
zUY=Q!5uaC@o0M8q><x0649I27oBO!jnV>GqnEZ~%zTOg~hY>`8+*TwFV&QNUNQw<a
zfC8e39mKK%5sC~947b?w@{4j4bBYk|<%YT!q{JFT7=s8<Fcl%(Ed+P?E!MKcoYK@H
zkoz^clR<7)1G$-H@+aOZ5e<+XOaX>P79c}xL4?EP20jf=CJs&xbsl~`iOC!JEZAH@
P5*(8o_{1l(@yi1MBhXn3

delta 504
zcmZ1~w^WYLiI<m)fq{YHL$^_!xa3B@QYJ>;$t_IF1i2X)7>dDCjBJcTj3P{%t(lK9
zGDb~iWEEv9E}AUC+AS*#QlkLU&cepT!o<fYz$C%Q!NkHOz$n19`2g#EMs8z}5)qIR
z#?7nP7c(-dP4?pyXLO$Yjz@0t9xk5A6FB8HG#D5dG?|Jt85kIfv_OO)NPwqE2*lO~
z5jr43ck*>k1#vwPQy)YafK+i6Nr2dfllizL8I2}uaLJ0Af&|n+1jzOx6A;U6@;+W!
z@$$@)jQG6L+@#c^Vn>k6WFRi<<8o($x-4??J0AOb3y>a05CL*qku->f!%-k9HV^>{
zh$40n%MwH=GB7aQV#~`f%1z8ELb#V3>Ryl%D-dA>BCJ6K!rek}hu>l?OUx-vEdse;
zlRF&bW{}Sq7$<+?trAfO*})WGSY!^;Zv!IiCpYkEa58dma47Kb@rg~|$Y;Uk0+QgE
M+`uP3nT=l_0O|8s7ytkO

diff --git a/__pycache__/population.cpython-37.pyc b/__pycache__/population.cpython-37.pyc
index 3ff838dd3cc557205dd89fdb4f68cfc48e4fcaaf..c8b9251be885e62a4a09645d6eb683f983ea38da 100644
GIT binary patch
delta 521
zcmaE--l)mz#LLUYz`(%pYKBqVlZm`H>r)sQ7*ZLc7*iOcm{J&{m{XWim|Ga4SW;M0
zSX&sPSW|>k*i$%K7^B!yL{d0YxLO#a*i%GPxKnsq7^65+#8P-u_*xjFI8($^_)`R0
z7^ApS*izV1xl`EESW*O2gjyJ*cv9Gc88jtsaRuZTl;$LsWaj5pH90CI=Oh*v*DK_w
zDU@WSDx~HWr{*T*q=NXFc`2D?nJJ}-ImHTzc`0D|+|-hc{FGva#Ny)o<jlm9)D(sC
z%#sX{T&_-WX>x`_VzEL|YC%zcN@+643b4+U%(S%BqSU++g_6pG)MAj~#i==|U<Jj=
zObiT@V;CPW@=dm7%3<W4yo%{3qtN6f%<s5m85kHogTkpwcQQY>=;RNqY?F7e6f(+9
z)?%H-D7pD4>k>vr-N{+(pBR-k$8zjpWb~LU#dUzuZu4!f1V+Z#$u>O4R3jJ|7>cDp
zrZ93aaxt<ovM~xVaxn=piZQY<iZSvqi7{2lf{fp6!&}A3n7w&B-%Uow37aPh#4|EB
zO#Ubs&&WGDP)LRS7JGbrN`CU>Vj&Mn4v?Wj3=9k$j4Ui1tQ_oIoLn+oQe485FA2>M
lTm+J316#?%$iZ0TGPzpViqU2Ad?E44XN6^0nfdA&qyh6ji{t<R

delta 433
zcmZqFe5cOq#LLUYz`(#TXQENu+ljn4>k}9l7*ZLc7*iOcm{J&1m|7U3m{XWjSXvmO
zSW<*i*izVA7^7HIgi|<DI9nK_*iuANxKg-V7^B!zL{oTDcv~2wI8ww?_)_>=7^65-
zSW{S2xl&luSW*O11X~!RxKmhz88pRjaRuZTl;$LsWaj53Gl3kyz`y{aC%<L9&d5Fa
zC{qqU$X&%OAUQ@6#wy{-7ny`72Q%Mb<e#j=@{UnzvNY>7UTFpfhGLLDHijzw$?JK=
zCR?)#PS)n&ocxY8j!|s0FWVAEUM(a=rjyt6icU7*<e4nbag<Sh^HYvJjJ&Q$3Ur|g
zSSBCmn$2jvIhi|wkvockfuTr}fdOKP?Bv%x^BF@Yck@cJGqEs=G4e2PUd=n1kuhtt
zJ^xKc#{SKcg7J)u^^+@w;u(1+-xN}r%qHw6&JMCgfPsO5gPDVsgPn_$ONL8|OLTIo
o@C?C)AUQU$UwIfgn2MYy^NCn7I!`tb7N49TBE!nWSI-~~0MH3u(EtDd

diff --git a/croisement.py b/croisement.py
index 95119ec..e9942ef 100644
--- a/croisement.py
+++ b/croisement.py
@@ -2,37 +2,22 @@ import numpy
 from RotTable import RotTable
 from individu import Individu
 
-ROT_TABLE = {\
-        "AA": [35.62, 7.2, -154, 0.06, 0.6, 0],\
-        "AC": [34.4, 1.1, 143, 1.3, 5, 0],\
-        "AG": [27.7, 8.4, 2, 1.5, 3, 0],\
-        "AT": [31.5, 2.6, 0, 1.1, 2, 0],\
-        "CA": [34.5, 3.5, -64, 0.9, 34, 0],\
-        "CC": [33.67, 2.1, -57, 0.07, 2.1, 0],\
-        "CG": [29.8, 6.7, 0, 1.1, 1.5, 0],\
-        "CT": [27.7, 8.4, -2, 1.5, 3, 0],\
-        "GA": [36.9, 5.3, 120, 0.9, 6, 0],\
-        "GC": [40, 5, 180, 1.2, 1.275, 0],\
-        "GG": [33.67, 2.1, 57, 0.07, 2.1, 0],\
-        "GT": [34.4, 1.1, -143, 1.3, 5, 0],\
-        "TA": [36, 0.9, 0, 1.1, 2, 0],\
-        "TC": [36.9, 5.3, -120, 0.9, 6, 0],\
-        "TG": [34.5, 3.5, 64, 0.9, 34, 0],\
-        "TT": [35.62, 7.2, -154, 0.06, 0.6, 0]\
-            }
-
-
 def croisement_un_point(parent1, parent2):
     '''Croise les tables de rotation des parents pour former deux enfants en respectant les symétries du problème'''
     ''' Retourne deux enfants'''
+
     enfant1 = Individu(RotTable())
     enfant2 = Individu(RotTable())
     comp = 0
     point_crois= numpy.random.random_integers(0,8)
-    list_dinucleotides = sorted(ROT_TABLE)
+    list_dinucleotides = sorted(RotTable().orta())
+
+    #We look at the list of sorted dinucleotides and create the crossover
     for doublet in list_dinucleotides:
         if doublet == "GA":
             break
+
+        #If it have a value smaller than the generated number it wont do the crossover
         if comp < point_crois:
             enfant1.table.rot_table[doublet] = parent1.table.rot_table[doublet]
             correspondent_doublet1 = enfant1.table.corr()[doublet]
@@ -44,6 +29,7 @@ def croisement_un_point(parent1, parent2):
             enfant2.table.rot_table[correspondent_doublet2] = parent2.table.rot_table[correspondent_doublet2]
             enfant2.table.rot_table[correspondent_doublet2][2] *= -1
         
+        #If it have a value bigger than the generated number it will crossover
         else :
             enfant1.table.rot_table[doublet] = parent2.table.rot_table[doublet]
             correspondent_doublet1 = enfant1.table.corr()[doublet]
@@ -62,13 +48,19 @@ def croisement_un_point(parent1, parent2):
 def croisement_deux_points(parent1, parent2):
     ''' Croise les tables de rotationd des deux parents en croisant à deux points et respectant les symétries du problème'''
     ''' Retourne deux enfants'''
+
     enfant1 = Individu(RotTable())
     enfant2 = Individu(RotTable())
     comp = 0
     point_crois1= numpy.random.random_integers(0,8)
     point_crois2= numpy.random.random_integers(0,8)
     list_dinucleotides = sorted(ROT_TABLE)
+
+    #We look at the list of sorted dinucleotides and create the crossover
     for doublet in list_dinucleotides:
+        
+        #If it have a value smaller than the first generated number it wont do the crossover
+        #unless it have a value bigger than the second generated number
         if comp < min(point_crois1,point_crois2) or comp > max(point_crois1,point_crois2):
             enfant1.table.rot_table[doublet] = parent1.table.rot_table[doublet]
             correspondent_doublet1 = enfant1.table.corr()[doublet]
@@ -80,6 +72,7 @@ def croisement_deux_points(parent1, parent2):
             enfant2.table.rot_table[correspondent_doublet2] = parent2.table.rot_table[correspondent_doublet2]
             enfant2.table.rot_table[correspondent_doublet2][2] *= -1
         
+        #If it have a value is located in between the generated values it will do the crossover
         else :
             enfant1.table.rot_table[doublet] = parent2.table.rot_table[doublet]
             correspondent_doublet1 = enfant1.table.corr()[doublet]
@@ -92,11 +85,3 @@ def croisement_deux_points(parent1, parent2):
             enfant2.table.rot_table[correspondent_doublet2][2] *= -1
         comp += 1
     return enfant1, enfant2
-
-# parent1 = Individu(RotTable())
-# parent2 = Individu(RotTable())
-# print("parent1: ", parent1.table.rot_table)
-# print("parent2: ", parent2.table.rot_table)
-# enfant1, enfant2 = croisement_un_point(parent1, parent2)
-# print("enfant1: ", enfant1.table.rot_table)
-# print("enfant2: ", enfant2.table.rot_table)
\ No newline at end of file
diff --git a/individu.py b/individu.py
index c6b3ba2..abb27b1 100644
--- a/individu.py
+++ b/individu.py
@@ -8,6 +8,7 @@ P1 = 0.015
 
 class Individu():
     ''' Un individu est caractérisé par sa table de rotations (individu.table)'''
+    
     def __init__(self, table):
         self.table = table
         lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]
diff --git a/population.py b/population.py
index c576750..2c89349 100644
--- a/population.py
+++ b/population.py
@@ -95,12 +95,10 @@ class Population:
     
         for _ in range(p-1):
             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_individus[j-1])
         
         self = self.modifier_population(individus_selectionnes)
@@ -164,7 +162,6 @@ class Population:
 def afficher(popu):
     for individu in popu.indiv :
         print("\n individu \n")
-        # print(individu.table.rot_table)
         print ("score", individu.score)
 
 
-- 
GitLab