1from deap_er import creator
2from deap_er import tools
3from deap_er import base
4import numpy
5
6
7numpy.random.seed(1234) # disables randomization
8
9
10def setup():
11 creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
12 creator.create("Individual", list, fitness=creator.FitnessMin)
13 strategy = tools.Strategy(
14 centroid=[5.0] * 30,
15 sigma=5.0,
16 offsprings=600,
17 survivors=30
18 )
19 toolbox = base.Toolbox()
20 toolbox.register("evaluate", tools.bm_rastrigin)
21 toolbox.register("generate", strategy.generate, creator.Individual)
22 toolbox.register("update", strategy.update)
23
24 stats = tools.Statistics(lambda ind: ind.fitness.values)
25 stats.register("avg", numpy.mean)
26 stats.register("std", numpy.std)
27 stats.register("min", numpy.min)
28 stats.register("max", numpy.max)
29
30 return toolbox, stats
31
32
33def print_results(best_ind):
34 if not best_ind.fitness.values < (20,):
35 raise RuntimeError('Evolution failed to converge.')
36 print(f'\nEvolution converged correctly.')
37
38
39def main():
40 toolbox, stats = setup()
41 hof = tools.HallOfFame(1)
42 args = dict(
43 toolbox=toolbox,
44 generations=250,
45 hof=hof,
46 stats=stats,
47 verbose=True # prints stats
48 )
49 tools.ea_generate_update(**args)
50 print_results(hof[0])
51
52
53if __name__ == "__main__":
54 main()