mu_lambda_es (faber_tweann v2.4.0)

View Source

Self-adaptive (mu, lambda) Evolution Strategy over a real-valued vector.

The first optimizer of Programme 2 (Search Strategies). Unlike the DXNN path's truncation-selection GA + memetic tuner, this is a canonical ES: each individual is a parameter vector plus its own mutation step size sigma, sigma self-adapts log-normally, and selection is COMMA (the mu best of the lambda offspring become the next parents; parents do not survive). This is the method family that solves the pole-balancing benchmarks the GA stalled on (insight 024; Igel 2003, Gomez CoSyNE 2008).

The fitness function is pluggable: evolve/3 takes fun(([float()]) -> float()), higher is better. That lets the ES be validated on a benchmark function (mu_lambda_es_tests) independently of network evaluation; wiring it to a fixed-topology network's weight vector is EXP-025.

Reference: Beyer and Schwefel 2002, "Evolution strategies - a comprehensive introduction"; Rechenberg / Schwefel.

Summary

Functions

Run a self-adaptive (mu, lambda)-ES.

Types

fitness_fun/0

-type fitness_fun() :: fun((vector()) -> float()).

vector/0

-type vector() :: [float()].

Functions

evolve(FitnessFun, Dim, Opts)

-spec evolve(fitness_fun(), pos_integer(), map()) -> map().

Run a self-adaptive (mu, lambda)-ES.

Opts: mu parents (default 10) lambda offspring per generation, >= mu (default 70; ~7*mu is usual) max_generations cap (default 500) fitness_goal stop when best fitness >= this (default infinity) init_sigma initial step size (default 1.0)

Returns a map: best (vector), fitness, generations, evaluations, reason (solved | max_generations).