diff --git a/algogenetique.py b/algogenetique.py index 223dc06393b425bf687b58475ef030f46722f1fe..03cb83879dae4b325491dd5c6420a0f1030f470e 100644 --- a/algogenetique.py +++ b/algogenetique.py @@ -8,32 +8,61 @@ import croisement from Traj3D import * from random import random import matplotlib.pyplot as plt +import time +# Debut du decompte du temps +start_time = time.time() -def main(N,tmax,pmutation, proportion,brin="plasmid_8k.fasta"): - '''lineList = [line.rstrip('\n') for line in open(brin)] - brin = ''.join(lineList[1:])''' +def main(N,tmax,pmutation, proportion): + L=[] + lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] + brin = ''.join(lineList[1:]) People=Population(N) + S1=[] + for individu in People.indiv: + individu.evaluate(brin) + S1.append(int(individu.score)) + print(S1) + maximo=int(max(S1)) + print(maximo) for i in range(tmax): print(i) - max=0 - best=None + mini=People.indiv[0].score + best=People.indiv[0] People.reproduction(p = proportion, proba_mutation= pmutation) for individu in People.indiv: - if individu.score>max: + if individu.score<mini: best=individu - max=individu.score - L.append(max) - + mini=individu.score + L.append(mini) + #print(L) + + plt.subplot(221) plt.plot([i for i in range(tmax)], L) + + + plt.subplot(223) + plt.hist(S1, range = (0, maximo+10), bins = 20, color = 'red') + + S2=[individu.score for individu in People.indiv] + print(S2) + print("Score final: ",best.score) + plt.subplot(224) + plt.hist(S2, range = (0,maximo+10), bins = 20, color = 'blue') plt.show() + return(best) -#main(100,100,0.01,50) - +main(15,10,0.005,5) +''' lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) -print(brin) \ No newline at end of file +print(brin) +''' + + +# Affichage du temps d execution +print("Temps d'execution : %s secondes " % (time.time() - start_time)) \ No newline at end of file diff --git a/individu.py b/individu.py index 33b958b4c6cefe6e792e11e54abce70b8d517abf..532a2785042d95966bdb92023c148e377a08a920 100644 --- a/individu.py +++ b/individu.py @@ -12,7 +12,7 @@ class Individu(): lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) self.table = table - self.score = self.evaluate(brin) + self.score = inf def evaluate(self, brin): traj = Traj3D() @@ -39,9 +39,9 @@ class Individu(): list_distance += [distance_first_nuc, distance_last_nuc] - self.score = 1/max(list_distance) + self.score = max(list_distance) - return 1/max(list_distance) + #return max(list_distance) def mutation(self, proba = P1): diff --git a/population.py b/population.py index 424431216c8838e725049c0738c640b05fc479ab..e5d22eeab200e6bb885d8511bf5fdbc3b0d43186 100644 --- a/population.py +++ b/population.py @@ -3,6 +3,7 @@ from random import * from individu import Individu from RotTable import RotTable from croisement import croisement_un_point, croisement_deux_points +import copy class Population: def __init__(self,n): @@ -63,8 +64,8 @@ class Population: p = (self.n)//2 meilleur = self.indiv[0] for individu in self.indiv : - if meilleur.score < individu.score: - print("meilleur, individu: ", meilleur.score, individu.score) + if meilleur.score > individu.score: + #print("meilleur, individu: ", meilleur.score, individu.score) meilleur = individu newself = [meilleur] vu=set() @@ -79,12 +80,10 @@ class Population: x=self.indiv[m] y=self.indiv[t] - if x.score>=y.score: + if x.score<=y.score: newself.append(x) else: newself.append(y) - for i in range(0, len(newself)): - print(newself[i].score) self = self.modifier_population(newself) @@ -161,8 +160,8 @@ class Population: while len(newself)<vieille_taille: m=randrange(0,self.n) t=randrange(0,self.n) - x=newself[m] - y=newself[t] + x=copy.deepcopy(newself[m]) + y=copy.deepcopy(newself[t]) couple_enfant = enfant(x,y) for child in couple_enfant : lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]