Standard CMA

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