Skip to content
Snippets Groups Projects
Commit d2211c0e authored by Nadin Thibault's avatar Nadin Thibault
Browse files

big changes

parent 1e4de6fb
No related branches found
No related tags found
No related merge requests found
ALPHA = 3
p = 0.2
Pm = 0.3
size = 32
nb_iter = 30
size = 64
nb_iter = 100
AGRANDISSEMENT = 5
nom_selection = "selection_roulette"
nom_croisement = "croisement_milieu"
nom_selection = "selection_tournoi"
nom_croisement = "croisement_en_un_point"
List_of_genes = ["AA", "AC", "AG", "AT",
<<<<<<< HEAD
"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
=======
"TA", "CA", "CC", "CG", "GC", "CT"]
pas = 10
>>>>>>> 226c2ce36132e35dbdd4a7ab4930dc5268002c36
......@@ -81,8 +81,13 @@ 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 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
for i in range(3):
s+= (Y[i]-X[i])*(T[i]-Z[i])
return s
traj = Traj3D(False)
traj.compute(molecule+molecule[:AGRANDISSEMENT], self)
......@@ -96,7 +101,11 @@ class RotTable:
yf = traj.getTraj()[n-AGRANDISSEMENT+i][1]
zf = traj.getTraj()[n-AGRANDISSEMENT+i][2]
res = res + (xf-x0)**2 + (yf-y0)**2 + (zf-z0)**2
return res
X = traj.getTraj()[0]
Y = traj.getTraj()[1]
Z = traj.getTraj()[-2]
T = traj.getTraj()[-1]
return res + prod_scalaire(X,Y,Z,T)
def evaluate2(self, molecule):
n = len(molecule)
......
......@@ -79,6 +79,7 @@ def selection_roulette(molecule, liste_individus, n=None):
def roulette(molecule, liste_individus):
val_ind = [ind.evaluate(molecule) for ind in liste_individus]
values_alea = [val * random.random() for val in val_ind]
values_alea[0] = 0 #On garde le meilleur surement
liste_individus = [e for _, e in sorted(zip(values_alea, liste_individus))]
return liste_individus[:len(liste_individus)//2]
......
......@@ -102,6 +102,83 @@ def tests_selection():
plt.show()
plt.savefig("selection_methodes.png")
def tests_selection_size():
D_un = []
D_deux = []
D_milieu = []
S = [int(1.5**i+10) for i in range(20)]
rot_table = RotTable()
traj = Traj3D()
traj_final = Traj3D()
# Read file
lineList = [line.rstrip('\n') for line in open(args.filename)]
# Formatting
seq = ''.join(lineList[1:])
for size in S:
popu1 = Population(size)
popu2 = Population(size)
popu2.troupeau = popu1.troupeau.copy()
popu3 = Population(size)
popu3.troupeau = popu2.troupeau.copy()
popu1.make_evolution_iter(seq, 'selection_roulette', nom_croisement, nb_iter)
popu2.make_evolution_iter(seq, 'selection_elitisme', nom_croisement, nb_iter)
popu3.make_evolution_iter(seq, 'selection_tournoi', nom_croisement, nb_iter)
_, value1 = popu1.meilleur_distance(seq)
_, value2 = popu2.meilleur_distance(seq)
_, value3 = popu3.meilleur_distance(seq)
D_un.append(value1)
D_deux.append(value2)
D_milieu.append(value3)
plt.clf()
plt.plot(N, D_un, label='selection_roulette')
plt.plot(N, D_deux, label='selection_elitisme')
plt.plot(N, D_milieu, label='selection_tournoi')
plt.yscale('log')
plt.xlabel("Iteration")
plt.ylabel("Distance")
plt.grid()
plt.legend()
plt.show()
plt.savefig("selection_methodes_size.png")
def tests_croisements_size():
D_un = []
D_deux = []
D_milieu = []
S = [int(1.5**i+10) for i in range(20)]
rot_table = RotTable()
traj = Traj3D()
traj_final = Traj3D()
# Read file
lineList = [line.rstrip('\n') for line in open(args.filename)]
# Formatting
seq = ''.join(lineList[1:])
for size in S:
popu1 = Population(size)
popu2 = Population(size)
popu2.troupeau = popu1.troupeau.copy()
popu3 = Population(size)
popu3.troupeau = popu2.troupeau.copy()
popu1.make_evolution_iter(seq, nom_selection, 'croisement_en_un_point', nb_iter)
popu2.make_evolution_iter(seq, nom_selection, 'croisement_en_deux_points', nb_iter)
popu3.make_evolution_iter(seq, nom_selection, 'croisement_milieu', nb_iter)
_, value1 = popu1.meilleur_distance(seq)
_, value2 = popu2.meilleur_distance(seq)
_, value3 = popu3.meilleur_distance(seq)
D_un.append(value1)
D_deux.append(value2)
D_milieu.append(value3)
plt.clf()
plt.plot(N, D_un, label='selection_roulette')
plt.plot(N, D_deux, label='selection_elitisme')
plt.plot(N, D_milieu, label='selection_tournoi')
plt.yscale('log')
plt.xlabel("Iteration")
plt.ylabel("Distance")
plt.grid()
plt.legend()
plt.show()
plt.savefig("selection_methodes_size.png")
def test_opt():
time0 = time.time()
......@@ -211,7 +288,8 @@ def main():
print("time :", time.time()-time0)
def evolution_fitness():#evolution de la fitness au cours de l'évaluation
D = []
D_dist = []
D_score = []
N = [i for i in range(nb_iter)]
rot_table = RotTable()
traj = Traj3D()
......@@ -224,17 +302,20 @@ def evolution_fitness():#evolution de la fitness au cours de l'évaluation
for i in range(nb_iter):
print(i)
_, value = popu1.meilleur_distance(seq)
D.append(value)
D_dist.append(value)
_, value = popu1.meilleur(seq)
D_score.append(value/1e4)
popu1.iteration(seq, nom_selection, nom_croisement)
plt.clf()
plt.plot(N, D)
plt.plot(N, D_dist, label='Distance')
plt.plot(N, D_score, label='Score')
plt.yscale('log')
plt.xlabel("Iteration")
plt.ylabel("Distance")
plt.ylabel("Distance/Score")
plt.grid()
plt.legend()
plt.show()
plt.savefig("fitness au cours de l'evo.png")
plt.savefig("fitness et distance au cours de l'evo.png")
#plt.close()
def fitness_size():#evolution de la fitness au cours de l'évaluation
......@@ -271,11 +352,14 @@ def fitness_size():#evolution de la fitness au cours de l'évaluation
#plt.close()
if __name__ == "__main__":
evolution_fitness()
main()
'''
fitness_size()
main()
test_opt()
tests_croisements()
tests_selection()
evolution_fitness()
tests_selection_size()
tests_croisements_size()
'''
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