Julia implementations of Natural Evolutionary Strategies and CMA-ES for the Cambrian.jl framework.
EvolutionaryStrategies.jl
can be installed through the Julia package manager:
pkg> add EvolutionaryStrategies
Tests are also provided:
pkg> test EvolutionaryStrategies
EvolutionaryStrategies
implements the Exponential and Separable Natural
Evolutionary Strategies, as described in:
Wierstra, D., Schaul, T., Glasmachers, T., Sun, Y., Peters, J., & Schmidhuber, J. (2014). Natural evolution strategies. The Journal of Machine Learning Research, 15(1), 949-980. pdf
and the Covariance Matrix Adaptation Evolutionary Strategy (CMA-ES), as described in:
Hansen, N., & Ostermeier, A. (2001). Completely derandomized self-adaptation in evolution strategies. Evolutionary computation, 9(2), 159-195. pdf
with additional implementation details based on pycma.
The function to optimize must first be defined:
fitness(i::Individual) = -sum(i.genes .^ 2)
Note that Cambrian by default maximizes objective fitness, which is common
in neuroevolution and genetic programming. Evolutionary Strategies often
minimize objective functions, but for coherence with Cambrian,
EvolutionaryStrategies.jl
maximizes. For objective function definitions, you
must negate fitness if aiming to minimize, as demonstrated above.
Then, create and run the desired ES:
cfg = get_config("cfg/cma-es.yaml")
es = CMAES(cfg, fitness)
run!(es)
Examples can be found in the scripts/
directory.
Other Evolutionary Strategies resources, notably other Julia packages:
Next steps (pull requests are greatly appreciated):
Separable NES- CMA-ES
- Multi-objective
- Constraints/boundaries
- Generalization to other types besides
Float64