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