From f6c264544bb422b0accebbc60720622fde9cadd8 Mon Sep 17 00:00:00 2001 From: Kappes Marques Rodrigo <rodrigo.kappes@student-cs.fr> Date: Wed, 29 Jan 2020 13:50:19 +0100 Subject: [PATCH] added another mutation method --- __pycache__/RotTable.cpython-37.pyc | Bin 2582 -> 2578 bytes __pycache__/Traj3D.cpython-37.pyc | Bin 1936 -> 1932 bytes __pycache__/individu.cpython-37.pyc | Bin 2710 -> 4034 bytes individu.py | 54 +++++++++++++++++++++------- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/__pycache__/RotTable.cpython-37.pyc b/__pycache__/RotTable.cpython-37.pyc index 871a676fa8235c0400b419269ae9e4181252734d..d0d2bee9e71c849781de9a96c497f02788ecaaf7 100644 GIT binary patch delta 63 zcmbOxGD(EniI<m)fq{X+(bI4v_jVRlk7TQu(Bjmh;u!D5f`ZiI7?;%I?2`O~m=G`B S)Uuf5#G;)1;?1vFv{?ZzyA&1x delta 67 zcmbOvGEIcriI<m)fq{WxUW~y;?(Hm^KF(G#p~b01#WBT+c_~FPF8Rr&xv6<2#WBvo XF~O!W!68O5!67lOo|~VuXtM$UkO>tF diff --git a/__pycache__/Traj3D.cpython-37.pyc b/__pycache__/Traj3D.cpython-37.pyc index dea944e68cade651c52da0042ac2d62a176dc023..9f5f20ef7c01a060943e03ea5beaee567c92ae7e 100644 GIT binary patch delta 63 zcmbQh-^0)C#LLUYz`(%Z=xMl-yNXfOE!iq2v^ce>IL14%pdht4#wE2lyClCLCd5lO SwJat%u_!0Mc=I~ON2~xIQ4}=* delta 67 zcmeC-pTN)U#LLUYz`(#TFUDXacNL?im$Ow&XmM&$aZGVyUP@7nOMY@`Zfaghag1|t WOt5K8aEMV%a7c`+=jK(6k5~bIKNTtf diff --git a/__pycache__/individu.cpython-37.pyc b/__pycache__/individu.cpython-37.pyc index 96ed7d90f93ff50da4b4f4476bc9f4ce8555ea0f..35557e4070ba1d2d0c008c67f366796605baa71d 100644 GIT binary patch literal 4034 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 I1(;Zv06F-b#Q*>R delta 1843 zcmX>kKTVX+iI<m)fq{YHi?3naCZUOZ5{y9;)on!>8B*AyINTXh*i$%K7*aTznW8u+ z));Uy-eN0C%uC77ow!%N-i(2PA(bJDF@+(DDTOhGsf8hmIfXferG+7iC6zUeF@-gS zt%Wg)EtNHeJ&h@aBZaetF^WBfE0{r(`xb|1UP@+JW=d%?6UcrB1_ovZ1_o9J1_oya z28LoQ1_p*2#u|or28hWej48~`j4lk#jI~TDEDM-wm{R0eQy5yABpDWhlrh&ZEMQs4 zP{R<<n!*swpvmSp`3;lNWNjuHJst)IhF?C;RxzQ)sYS&x#ff<-MKLb<$)&lec_qa$ z&cQLkrZK@GMlr!5F|MAI3z-ZUc_%Mo@=DWWyTw|Pn3R)xizUAxHSZQnR(@vQEtaIB z%)DD1sbz^drHLh}w^)ml^NUh7nQyTar{<&;2{JG++~UZ|%uDsjEG{VmSq>q1!4mQD znR%Hd@$uXsPjY~KK6w|jG9MqZ-~Ua1&8))6Fj;`bpuS>83409_$mg*=wd^&lHB2?^ z;tVNFDU7X5X-tv~wHy#J2?lOtQO+9H6y_Qx5r!IeG#RcM)*5ys{oExiSsYoMH5@gZ z5)7c&>t(9tfr@d}#B#$0d285ecxrglnamk#*$QLA8A`Zn*qT9M&kbP(Gib8<y#&Q# z5hDWw!%I-SYBJtp&M!*Q<S7D+i-5v_Jvl$OptK~lNN}<>t2raz<YHF$`df^dQ6g!X zMa3oYd8Ntm$@%$3DfxMcC8<#|*hJ%@W<&|+Bw}ij#v%yUA(WC?T#}fVoEi@|I7%=8 zE(p^Ki8OHZfnu&ml!1Xk2oz~bph#n6V`5?AV-#SLVB}*2u|ycfn4}m5m_!&wm;{)) zm?k^1Y5F|@C1QpwhAhTfriyDdOfC$u=W3ZNPLwdEFoL6WPc2Icb2CFNYYl4+V>UyP zObJUCa~5k2Ll(mVwuKBe%#sW>ERqZm{^WyfqJo&B&)Jm2*dc0b*=kr)n6sIR*VM42 zuw*k89jal1o557W1~Sctp-=`P%FR%NBp%LC$QRB4&OfYvMN*R!*u|6t7#J8dIUvcJ zvnanL9-JeJ6c`v7ir7Ge+~j5K;cDQ30u!Lny2X)OT9R0jnV)9>3Nlc%Gca;6a!pp| zP-1-v%H)&nxW($F7#YBR%VMl$p1@ea1qzoMre;t${Xq*Eu@V+gLD0-p%a+1e%U&T@ z!|cKkD^|-<!(PLd%~a$Sz)-`U!feh^%U);`&QP(dgeipu9LDQvIZIfxn6ucxp$G~o z4oQX@PDzHEdQdRK1yWeV86+7bzz$jf7lj5soDWeY&XB^|%T&W$12)PAqK9K41BhSC zRl}LWn9WrDsD=|18AU%}>LeLzm}|H|mfJ8CCe$$3gOr0@!i^#k&QK@@jRiJ8NLB(B z6h)wzD3St22UC$MDCE^ZY))|06sdy*6hH(hQf_gAO6j7+y!6x}Igp?Rh|mNPS|Cl_ zMdAz$3^7I83=9lW!g-~+NvTEg`DyX6SSv2l0jX615&9rCyeavmNja${eqg1y*pu^1 z^GZ^SigZCL^gskCqLK5=<ojGwYIdO52e}Fq`$CLtpfte9!pOzQ!N|nO!^p>&z{tla zFnI%?_~c)lJj{NY9Fwo{sni!qf=mSExLZsChDC-T9;mWGG9RAQir5(#7&t-pfC7nw ziG!U(j)xB{s>xLZDucj9&n?!x(%gbdaA@3O$xSTDC}IH_3rdScpdc#()i_{nMFL>M Q5d`n#1^jX>JWMQ10N!w;4FCWD diff --git a/individu.py b/individu.py index 22f1a4d..1d2a706 100644 --- a/individu.py +++ b/individu.py @@ -2,7 +2,7 @@ from RotTable import RotTable from Traj3D import Traj3D import numpy as np from math import sqrt, inf -from random import random +from random import random, choice P1 = 0.015 @@ -50,9 +50,8 @@ class Individu(): def mutation(self, proba = P1): - '''Modifie des rotations dans la table des rotations en préservant les symétries''' table_rotations = self.table.rot_table - for doublet in table_rotations : + for doublet in sorted(table_rotations.keys()) : for coord in range(3): tir = random() if tir < proba : @@ -64,17 +63,18 @@ class Individu(): #sur l'axe z il y a un moins table_rotations[doublet2][coord] = - table_rotations[doublet][coord] - def mutation_with_numbers(self, proba = P1, number_of_mutations = 5): + def mutation_with_numbers(self, proba = P1, number_of_mutations = 1): table_rotations = self.table.rot_table - for i in range(0,number_of_mutations): - tir = random() - if tir < proba : - doubletNumber = randrange(0,8) - counter = 0 - for doublet in table_rotations: - if counter==doubletNumber: - break - counter+=1 + table_rotation_not_seen = [i for i in sorted(table_rotations.keys())] + table_rotation_not_seen = table_rotation_not_seen[:8] + + tir = random() + if tir < proba : + for i in range(0,number_of_mutations): + + doublet = choice(table_rotation_not_seen) + table_rotation_not_seen.remove(doublet) + for coord in range(3): table_rotations[doublet][coord] =np.random.uniform(low = self.table.orta()[doublet][coord] - self.table.orta()[doublet][coord + 3], high = self.table.orta()[doublet][coord] + self.table.orta()[doublet][coord + 3]) doublet2 = self.table.corr()[doublet] @@ -84,6 +84,34 @@ class Individu(): #sur l'axe z il y a un moins table_rotations[doublet2][coord] = - table_rotations[doublet][coord] + + def mutation_close_values(self, proba = P1, number_of_mutations = 1): + table_rotations = self.table.rot_table + table_rotation_not_seen = [i for i in sorted(table_rotations.keys())] + table_rotation_not_seen = table_rotation_not_seen[:8] + + tir = random() + if tir < proba : + for i in range(0,number_of_mutations): + + doublet = choice(table_rotation_not_seen) + table_rotation_not_seen.remove(doublet) + + for coord in range(3): + value = table_rotations[doublet][coord] + np.random.uniform( low = - self.table.orta()[doublet][coord + 3]/10, high = - self.table.orta()[doublet][coord + 3]/10) + if value > self.table.orta()[doublet][coord] + self.table.orta()[doublet][coord + 3]: + value = self.table.orta()[doublet][coord] + self.table.orta()[doublet][coord + 3] + elif value < self.table.orta()[doublet][coord] - self.table.orta()[doublet][coord + 3]: + value = self.table.orta()[doublet][coord] - self.table.orta()[doublet][coord + 3] + table_rotations[doublet][coord] = value + + doublet2 = self.table.corr()[doublet] + if coord == 0 or coord == 1 : + table_rotations[doublet2][coord] = table_rotations[doublet][coord] + else : + #sur l'axe z il y a un moins + table_rotations[doublet2][coord] = - table_rotations[doublet][coord] + # individu1 = Individu(RotTable()) # print(individu1.table.rot_table) # individu1.mutation() -- GitLab