Covariance Matrix Adaptation Evolution Strategy¶
The Covariance Matrix Adaptation Evolution Strategy (CMA-ES) [Hansen2001]
implemented in the cma
module makes use of the generate-update
paradigm where a population is generated from a strategy and the strategy is
updated from the population. It is then straight forward to use it for
continuous problem optimization.
As usual the first thing to do is to create the types and as usual we’ll need
a minimizing fitness and an individual that is a list
. A toolbox is
then created with the desired evaluation function.
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)
toolbox = base.Toolbox()
toolbox.register("evaluate", benchmarks.rastrigin)
Then, it does not get any harder. Once a Strategy
is
instantiated, its generate()
and
update()
methods are registered in the toolbox for
uses in the eaGenerateUpdate()
algorithm. The
generate()
method is set to produce the created
Individual
class. The random number generator from numpy is seeded
because the cma
module draws all its number from it.
def main():
numpy.random.seed(128)
strategy = cma.Strategy(centroid=[5.0]*N, sigma=5.0, lambda_=20*N)
toolbox.register("generate", strategy.generate, creator.Individual)
toolbox.register("update", strategy.update)
hof = tools.HallOfFame(1)
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)
# The CMA-ES algorithm converge with good probability with those settings
[Hansen2001] | Hansen and Ostermeier, 2001. Completely Derandomized Self-Adaptation in Evolution Strategies. Evolutionary Computation |