Skip to content

CMA with IPOP / BIPOP restarts

import numpy
from deap_er import Fitness, Toolbox, creator, tools

tools.rng.seed(1234)


def setup():
    creator.create_type("FitnessMin", Fitness, weights=(-1.0,))
    creator.create_type("Individual", list, fitness=creator.FitnessMin)
    dim = 10
    strategy = tools.Strategy(
        centroid=[2.0] * dim,
        sigma=2.0,
        low=-5.0,
        up=5.0,
    )
    restart = tools.RestartStrategy(strategy, mode="bipop", budget=120_000)
    toolbox = Toolbox()
    toolbox.register("evaluate", tools.bm_rastrigin)
    toolbox.register("generate", restart.generate, creator.Individual)
    toolbox.register("update", restart.update)

    stats = tools.Statistics(lambda ind: ind.fitness.values)
    stats.register("avg", numpy.mean)
    stats.register("min", numpy.min)

    return toolbox, restart, stats


def main():
    toolbox, restart, stats = setup()
    hof = tools.HallOfFame(1)
    pop, logbook = tools.ea_generate_update_restarts(
        toolbox,
        restart,
        hof=hof,
        stats=stats,
        verbose=True,
    )
    print(f"\nRestarts: {restart.restart_count}, evals: {restart.evals_used}")
    print(f"Best: {hof[0].fitness.values}")
    return pop, logbook


if __name__ == "__main__":
    main()