Saataa andagii !

This commit is contained in:
Lukian 2024-11-25 09:32:41 +01:00
parent da4d3dca5f
commit 4f43c149ee
5 changed files with 57 additions and 25 deletions

BIN
images/vari_ng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -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:
"""

View file

@ -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)

View file

@ -0,0 +1,2 @@
Levenshtein==0.26.1
RapidFuzz==3.10.1

View file

@ -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()