Standard CMA
import numpy
from deap_er import Fitness, Toolbox, creator, tools
tools.rng.seed(1234) # disables randomization
def setup():
creator.create_type("FitnessMin", Fitness, weights=(-1.0,))
creator.create_type("Individual", list, fitness=creator.FitnessMin)
strategy = tools.Strategy(centroid=[5.0] * 30, sigma=5.0, offsprings=600, survivors=30)
toolbox = Toolbox()
toolbox.register("evaluate", tools.bm_rastrigin)
toolbox.register("generate", strategy.generate, creator.Individual)
toolbox.register("update", strategy.update)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", numpy.mean)
stats.register("std", numpy.std)
stats.register("min", numpy.min)
stats.register("max", numpy.max)
return toolbox, stats
def print_results(best_ind):
if best_ind.fitness.values >= (20,):
raise RuntimeError("Evolution failed to converge.")
print("\nEvolution converged correctly.")
def main():
toolbox, stats = setup()
hof = tools.HallOfFame(1)
args = {
"toolbox": toolbox,
"generations": 250,
"hof": hof,
"stats": stats,
"verbose": True, # prints stats
}
tools.ea_generate_update(**args)
print_results(hof[0])
if __name__ == "__main__":
main()