Saataa andagii !
This commit is contained in:
parent
da4d3dca5f
commit
4f43c149ee
5 changed files with 57 additions and 25 deletions
BIN
images/vari_ng.png
Normal file
BIN
images/vari_ng.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
|
@ -51,21 +51,24 @@ def new_individual(): # -> set(str)
|
||||||
"chromozome": ""
|
"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:
|
def select(population) -> None:
|
||||||
"""
|
"""
|
||||||
Methode qui sélectionne les meilleurs individus
|
Methode qui sélectionne les meilleurs individus
|
||||||
"""
|
"""
|
||||||
fitness_list = []
|
fitness_list = []
|
||||||
for individual in population["individuals"]:
|
for individual in population["individuals"]:
|
||||||
match population["fm"]:
|
fitness_list.append(get_fitness(population, individual))
|
||||||
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"]))
|
|
||||||
|
|
||||||
for i in range(int((1 - population["ts"]) * population["n"])):
|
for i in range(int((1 - population["ts"]) * population["n"])):
|
||||||
least = min_i(fitness_list)
|
least = min_i(fitness_list)
|
||||||
|
@ -103,22 +106,20 @@ def mutate_pop(population) -> None:
|
||||||
mutate(population["individuals"][to_mutate])
|
mutate(population["individuals"][to_mutate])
|
||||||
mutated.append(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:
|
def print_best(population) -> None:
|
||||||
"""
|
"""
|
||||||
Methode qui affiche le meilleur individu de la population
|
Methode qui affiche le meilleur individu de la population
|
||||||
"""
|
"""
|
||||||
fitness_list = []
|
print(get_best(population)["chromozome"])
|
||||||
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"])
|
|
||||||
|
|
||||||
def run(population) -> None:
|
def run(population) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
6
main.py
6
main.py
|
@ -15,9 +15,11 @@ FITNESS_METHOD = 1
|
||||||
|
|
||||||
# main function
|
# main function
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
pop = libobj.Population(pm = PM, ng = NG, n = N, ts = TS, tm = TM, alpha = ALPHA, fm = FITNESS_METHOD)
|
# object version
|
||||||
pop.run()
|
# 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)
|
pop = libimp.new_population(PM, NG, N, TS, TM, ALPHA, FITNESS_METHOD)
|
||||||
libimp.run(pop)
|
libimp.run(pop)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Levenshtein==0.26.1
|
||||||
|
RapidFuzz==3.10.1
|
31
tests.py
31
tests.py
|
@ -1,5 +1,32 @@
|
||||||
# fichier de tests du projet
|
# fichier de tests du projet
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
# project libs importations
|
# project libs importations
|
||||||
import lib.ultra_mastermind_obj
|
import lib.ultra_mastermind_obj as libobj
|
||||||
import lib.ultra_mastermind_imp
|
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()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue