Skip to content
Snippets Groups Projects
Commit 23a40076 authored by Boucaut Marius's avatar Boucaut Marius
Browse files

fbhjdksfhjkdsbfhjeks

parent ff501026
No related branches found
No related tags found
No related merge requests found
ALPHA = 3 #Nombre de redécoupage de la séquence dans la fonction evaluate2
ALPHA = 3 # Nombre de redécoupage de la séquence dans la fonction evaluate2
p = 0.2
Pm = 0.3
size = 128
nb_iter = 300
AGRANDISSEMENT = 5 #C'est le nombre de point qu'on utilise pour recoller
nb_iter = 20
AGRANDISSEMENT = 5 # C'est le nombre de point qu'on utilise pour recoller
Prise_en_compte_angle = 5
nom_selection = "selection_tournoi"
nom_croisement = "croisement_milieu"
List_of_genes = ["AA", "AC", "AG", "AT",
"TA", "CA", "CC", "CG", "GC", "CT"] #les gènes à modifier
"TA", "CA", "CC", "CG", "GC", "CT"] # les gènes à modifier
Symetrique = {"AA": "TT", "AC": "TG", "AG": "TC", "AT": None,
"TA": None, "CA": "GT", "CC": "GG", "CG": None, "GC": None, "CT": "GA"} # les symétriques de ces gènes
pas = 10
......@@ -82,7 +82,7 @@ class RotTable:
zf = traj.getTraj()[n-1][2]
self.dist_carre = (xf-x0)**2 + (yf-y0)**2 + (zf-z0)**2
return math.sqrt(self.dist_carre)
def angle(self, molecule):
traj = Traj3D(False)
traj.compute(molecule+molecule[:AGRANDISSEMENT], self)
......@@ -90,23 +90,26 @@ class RotTable:
Y = traj.getTraj()[1]
Z = traj.getTraj()[-2]
T = traj.getTraj()[-1]
def prod_scalaire(X,Y,Z,T):
s=0
def prod_scalaire(X, Y, Z, T):
s = 0
for i in range(3):
s+= (Y[i]-X[i])*(T[i]-Z[i])
s += (Y[i]-X[i])*(T[i]-Z[i])
return s
def norme(X,Y):
s=0
def norme(X, Y):
s = 0
for i in range(3):
s+= (Y[i]-X[i])**2
s += (Y[i]-X[i])**2
return s
return math.acos(prod_scalaire(X,Y,Z,T)/(norme(X,Y)*norme(Z,T)))
def evaluate(self, molecule): # renvoie la distance au carrée séparant les deux extrémités de la molecule telle que générée par la table self
def prod_scalaire(X,Y,Z,T):
s=0
return math.acos(prod_scalaire(X, Y, Z, T)/(norme(X, Y)*norme(Z, T)))
def evaluate(self, molecule):
"""prend en compte produit scalaire et distance"""
def prod_scalaire(X, Y, Z, T):
s = 0
for i in range(3):
s+= (Y[i]-X[i])*(T[i]-Z[i])
s += (Y[i]-X[i])*(T[i]-Z[i])
return s
traj = Traj3D(False)
traj.compute(molecule+molecule[:AGRANDISSEMENT], self)
......@@ -125,9 +128,9 @@ class RotTable:
Y = traj.getTraj()[1]
Z = traj.getTraj()[-2]
T = traj.getTraj()[-1]
return (res/AGRANDISSEMENT - prod_scalaire(X,Y,Z,T)*Prise_en_compte_angle)
return (res/AGRANDISSEMENT - prod_scalaire(X, Y, Z, T)*Prise_en_compte_angle)
def evaluate2(self, molecule):
def evaluate_en_plusieurs_points(self, molecule):
n = len(molecule)
summ = self.evaluate(molecule)
for k in range(ALPHA):
......@@ -166,7 +169,7 @@ class RotTable:
Entrée :
- self : une RotTable
Sortie :
- nouv_personne : une RotTable avec un gene modifié
- nouv_personne : une RotTable avec un gene modifié aléatoirement uniformément sur l'espace des valeurs admissibles
'''
Pm = 0.3
selected_gene = List_of_genes[rd.randint(0, len(List_of_genes)-1)]
......@@ -189,7 +192,7 @@ class RotTable:
baseDirection-deltaDirection, baseDirection+deltaDirection)
self.setDirection(selected_gene, newDirection)
def mutate_v2(self, molecule):
def mutate_proximite(self, molecule):
Pm = 0.2 # à choisir dans [0,001 ; 0,01]
nb_feature = 3 # 2 suffiraient dans notre cas mais on généralise
parametre_preced = self.getTable()
......@@ -213,7 +216,7 @@ class RotTable:
baseDirection+deltaDirection, parametre_preced[selected_gene][2]+deltaDirection/5))
self.setDirection(selected_gene, newDirection)
def mutate_v3(self, molecule):
def mutate_degressif(self, molecule):
Pm = 0.2 # à choisir dans [0,001 ; 0,01]
score = max(self.evaluate(molecule)/(6000*AGRANDISSEMENT), 1)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment