diff --git a/__pycache__/RotTable.cpython-37.pyc b/__pycache__/RotTable.cpython-37.pyc index 5c8368cc7a9d3c5cfa285024e6597788d9b34b53..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 c5fc3b6a0451eccc80a592b48b4d6d430bbd9432..cf10de94215a889844b8498bfa1adceac74c8132 100644 Binary files a/__pycache__/Traj3D.cpython-37.pyc and b/__pycache__/Traj3D.cpython-37.pyc differ diff --git a/__pycache__/croisement.cpython-37.pyc b/__pycache__/croisement.cpython-37.pyc index 32aa8054c9bf4394aa2cc4dd70c8392a65cdfb6c..14137ab2a364a8f37a255767bdb564b07c910feb 100644 Binary files a/__pycache__/croisement.cpython-37.pyc and b/__pycache__/croisement.cpython-37.pyc differ diff --git a/__pycache__/individu.cpython-37.pyc b/__pycache__/individu.cpython-37.pyc index 511c39dc9171fe22debb9b7099e4280bc25823aa..b5e349ab4911f800f7576808eaf3ee7522919618 100644 Binary files a/__pycache__/individu.cpython-37.pyc and b/__pycache__/individu.cpython-37.pyc differ diff --git a/__pycache__/population.cpython-37.pyc b/__pycache__/population.cpython-37.pyc index 037163fdebd2a013e0b24fa10c0ea6f91cff2c10..a2d00a0f413706a094887ce7f0dfe4f1e70ccd5f 100644 Binary files a/__pycache__/population.cpython-37.pyc and b/__pycache__/population.cpython-37.pyc differ diff --git a/algogenetique.py b/algogenetique.py index ad4ca277301d88d9a51f433b100f054a692e382e..29f0985ce8bcda14b45a1f1a1adc40ccffaa3c52 100644 --- a/algogenetique.py +++ b/algogenetique.py @@ -4,79 +4,67 @@ import numpy import RotTable from individu import Individu from population import Population, afficher -from croisement import * +import croisement from Traj3D import * from random import random import matplotlib.pyplot as plt import time -from copy import deepcopy -def main(N,tmax,pmutation, proportion, indice_selection, population_initiale, enfant = croisement_un_point): +# Debut du decompte du temps +start_time = time.time() - + +def main(N,tmax,pmutation, proportion): + + L=[] lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) - People=deepcopy(population_initiale) - # S1=[] + People=Population(N) + S1=[] for individu in People.indiv: individu.evaluate() - # S1.append(int(individu.score)) - # maximum=int(max(S1)) - mini=People.indiv[0].score - for individu in People.indiv: - if individu.score<mini: - mini=individu.score - # L=[mini] + S1.append(int(individu.score)) + maximum=int(max(S1)) for i in range(tmax): - print(i) - People.reproduction(p = proportion, proba_mutation= pmutation, selection = indice_selection, enfant = enfant) mini=People.indiv[0].score best=People.indiv[0] + People.reproduction(p = proportion, proba_mutation= pmutation) for individu in People.indiv: if individu.score<mini: best=individu mini=individu.score - # S2=[individu.score for individu in People.indiv] - # avg = sum(S2)/len(S2) - # L.append(mini) + S2=[individu.score for individu in People.indiv] + avg = sum(S2)/len(S2) + L.append(mini) + print(i,"avg:",avg,"best score:", mini) - # plt.subplot(221) - # liste_selections = ["selection_p_best", "selection_duel_pondere", "selection_duel", "selection_par_rang", "selection_proportionnelle"] - # plt.plot([j for j in range(len(L))], L, label = liste_selections[indice_selection]) + plt.subplot(221) + plt.plot([i for i in range(tmax)], L) - # plt.subplot(223) - # plt.hist(S1, range = (0, maximum+10), bins = 20, color = 'red') + plt.subplot(223) + plt.hist(S1, range = (0, maximum+10), bins = 20, color = 'red') S2=[individu.score for individu in People.indiv] print("Score final: ",best.score) + print("Distance finale: ", best.distance) print("Avg:", sum(S2)/len(S2)) - print("Distance final: ",best.distance) - - # plt.subplot(224) - # plt.hist(S2, range = (0,maximum+10), bins = 20, color = 'blue') - # plt.show() + plt.subplot(224) + plt.hist(S2, range = (0,maximum+10), bins = 20, color = 'blue') + plt.show() return(best,People) lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) -best,People = main(100,10,0.05,10) +best,People = main(60,60,0.05,30) test = Traj3D() test.compute(brin, best.table) test.draw("first_plot") -# [['selection_p_best' '22.637820959091187' '116.30569654472626'] -# ['selection_duel_pondere' '22.636890172958374' '46.6242321955727'] -# ['selection_duel' '22.21168804168701' '234.7640748029787'] -# ['selection_par_rang' '22.180259227752686' '190.0163752068961'] -# ['selection_proportionnelle' '22.329176902770996' '315.7030719673908']] -# [['selection_p_best' '22.775274991989136' '106.89365704155766'] -# ['selection_duel_pondere' '22.716803073883057' '284.11538487097084'] -# ['selection_duel' '23.19036889076233' '155.83887357033393'] -# ['selection_par_rang' '22.752396821975708' '118.6068497149259'] -# ['selection_proportionnelle' '22.71982979774475' '151.80114914793427']] \ No newline at end of file +# Affichage du temps d execution +print("Temps d'execution : %s secondes " % (time.time() - start_time)) diff --git a/first_plot.png b/first_plot.png index 0e536fb530ea40bc82a9395940755ad27a030609..f9294f16e9e6dc29674f763436bc6927a5b6bbb7 100644 Binary files a/first_plot.png and b/first_plot.png differ diff --git a/individu.py b/individu.py index 253b874252ed3088a57d76fc87a96fa992a3f178..00766d2f75786c3f5416aab70898d8307b5ead4d 100644 --- a/individu.py +++ b/individu.py @@ -9,8 +9,6 @@ P1 = 0.015 class Individu(): ''' Un individu est caractérisé par sa table de rotations (individu.table)''' def __init__(self, table): - lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] - brin = ''.join(lineList[1:]) self.table = table lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] self.brin = ''.join(lineList[1:]) @@ -24,7 +22,7 @@ class Individu(): traj = Traj3D() - numb_ajout = 100 + numb_ajout = 10 fisrt_seq = self.brin[0:numb_ajout] last_seq = self.brin[-numb_ajout:] @@ -99,7 +97,7 @@ class Individu(): table_rotation_not_seen.remove(doublet) for coord in range(3): - value = table_rotations[doublet][coord] + np.random.normal(0, self.table.orta()[doublet][coord + 3]/15) + value = table_rotations[doublet][coord] + np.random.normal(0, 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]: