diff --git a/images/vari_ng.png b/images/vari_ng.png new file mode 100644 index 0000000..1611f4c Binary files /dev/null and b/images/vari_ng.png differ diff --git a/lib/ultra_mastermind_imp.py b/lib/ultra_mastermind_imp.py index 8468a09..379ff29 100644 --- a/lib/ultra_mastermind_imp.py +++ b/lib/ultra_mastermind_imp.py @@ -51,21 +51,24 @@ def new_individual(): # -> set(str) "chromozome": "" } +def get_fitness(population, individual) -> int: + match population["fm"]: + case 1: + return fitness1(individual, population["pm"]) + case 2: + return fitness2(individual, population["pm"], population["alpha"]) + case 3: + return fitness3(individual, population["pm"]) + case _: + return fitness1(individual, population["pm"]) + def select(population) -> None: """ Methode qui sélectionne les meilleurs individus """ fitness_list = [] for individual in population["individuals"]: - match population["fm"]: - case 1: - fitness_list.append(fitness1(individual, population["pm"])) - case 2: - fitness_list.append(fitness2(individual, population["pm"], population["alpha"])) - case 3: - fitness_list.append(fitness3(individual, population["pm"])) - case _: - fitness_list.append(fitness1(individual, population["pm"])) + fitness_list.append(get_fitness(population, individual)) for i in range(int((1 - population["ts"]) * population["n"])): least = min_i(fitness_list) @@ -103,22 +106,20 @@ def mutate_pop(population) -> None: mutate(population["individuals"][to_mutate]) mutated.append(to_mutate) +def get_best(population): + """ + Methode qui renvoie le meilleur individu de la population + """ + fitness_list = [] + for individual in population["individuals"]: + fitness_list.append(get_fitness(population, individual)) + return population["individuals"][max_i(fitness_list)] + def print_best(population) -> None: """ Methode qui affiche le meilleur individu de la population """ - fitness_list = [] - for individual in population["individuals"]: - match population["fm"]: - case 1: - fitness_list.append(fitness1(individual, population["pm"])) - case 2: - fitness_list.append(fitness2(individual, population["pm"], population["alpha"])) - case 3: - fitness_list.append(fitness3(individual, population["pm"])) - case _: - fitness_list.append(fitness1(individual, population["pm"])) - print(population["individuals"][max_i(fitness_list)]["chromozome"]) + print(get_best(population)["chromozome"]) def run(population) -> None: """ diff --git a/main.py b/main.py index 552c25b..f9348a4 100644 --- a/main.py +++ b/main.py @@ -15,9 +15,11 @@ FITNESS_METHOD = 1 # main function def main() -> None: - pop = libobj.Population(pm = PM, ng = NG, n = N, ts = TS, tm = TM, alpha = ALPHA, fm = FITNESS_METHOD) - pop.run() + # object version + # pop = libobj.Population(pm = PM, ng = NG, n = N, ts = TS, tm = TM, alpha = ALPHA, fm = FITNESS_METHOD) + # pop.run() + # imperative version pop = libimp.new_population(PM, NG, N, TS, TM, ALPHA, FITNESS_METHOD) libimp.run(pop) diff --git a/requirements.txt b/requirements.txt index e69de29..42f9564 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1,2 @@ +Levenshtein==0.26.1 +RapidFuzz==3.10.1 diff --git a/tests.py b/tests.py index 4dd09e5..4eec2f5 100644 --- a/tests.py +++ b/tests.py @@ -1,5 +1,32 @@ # fichier de tests du projet +import matplotlib.pyplot as plt + # project libs importations -import lib.ultra_mastermind_obj -import lib.ultra_mastermind_imp +import lib.ultra_mastermind_obj as libobj +import lib.ultra_mastermind_imp as libimp + +# Variation du nombre de générations +PM = "Hello, world!" +# NG = 2000 +N = 400 +TS = 0.5 +TM = 0.25 +ALPHA = 0.5 +FITNESS_METHOD = 1 + +fitness_ng = [] +all_ng = [] + +for i in range(1, 21): + NG = i * 100 + all_ng.append(NG) + pop = libimp.new_population(PM, NG, N, TS, TM, ALPHA, FITNESS_METHOD) + libimp.run(pop) + fitness_ng.append(libimp.get_fitness(pop, libimp.get_best(pop))) + +plt.plot(all_ng, fitness_ng) +plt.title("Fitness du meilleur individu en fonciton du nombre de générations") +plt.xlabel("Nombre de générations") +plt.ylabel("Fitness du meilleur individu") +plt.show()