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