diff --git a/__pycache__/RotTable.cpython-37.pyc b/__pycache__/RotTable.cpython-37.pyc index 871a676fa8235c0400b419269ae9e4181252734d..d0d2bee9e71c849781de9a96c497f02788ecaaf7 100644 Binary files a/__pycache__/RotTable.cpython-37.pyc and b/__pycache__/RotTable.cpython-37.pyc differ diff --git a/__pycache__/Traj3D.cpython-37.pyc b/__pycache__/Traj3D.cpython-37.pyc index dea944e68cade651c52da0042ac2d62a176dc023..9f5f20ef7c01a060943e03ea5beaee567c92ae7e 100644 Binary files a/__pycache__/Traj3D.cpython-37.pyc and b/__pycache__/Traj3D.cpython-37.pyc differ diff --git a/__pycache__/individu.cpython-37.pyc b/__pycache__/individu.cpython-37.pyc index 96ed7d90f93ff50da4b4f4476bc9f4ce8555ea0f..35557e4070ba1d2d0c008c67f366796605baa71d 100644 Binary files a/__pycache__/individu.cpython-37.pyc and b/__pycache__/individu.cpython-37.pyc differ diff --git a/individu.py b/individu.py index 22f1a4d5b3d158b7a87944d80ba3fed8f3398eed..1d2a706a5acea6ae88b00cb210c140c981aa38f6 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()