The package is a framework/toolbox for the rapid implementation of Evolutionary / Genetic Algorithms for solving complex optimization problems and for the analysis of such algoritms' performances.
Evolutionary Computation is an umbrella term for randomized search heuristics that draw inspiration from natural evolution. There are four historic strands that are nowdays known as Evolutionary Algorithms: Evolutionary Programming, Evolution Strategies, Genetic Algorithms and Genetic Programming. All four flavors emerged in the 1980s mainly in the area of engineering and differ with respect to the considered decision space, operators and algorithmic parameters.
Evolutionary Algorithms maintain a so-called population of (candidate) solutions or individuals that is often initialized with initial solutions sampled randomly from the decision space. Next, in a loop the algorithms basically (i) select some individuals as parents (ii) generate new individuals from the parents by applying bio-inspired random operators like recombination/crossover and/or mutation and (iii) in a second round of selection, choose a subset of parents and/or offspring individuls to “survive” and form the next population. In this last step, “fitter” individuals have a higher probability to survive (analogy to the survival of the fittest principle from Darwin's evolution theory). This process is repeated until some kind of stopping condition is met. Basically, all EAs fit into this general theme. There exists a plethora of variation operators, representations and ideas in this field of research. Despite this rather simple structure, EAs have been successfully applied to countless (very) complex (often multi-objective) optimization problems with major success. One of the benefits of EAs is that they are often easy to implement.
This package offers many building blocks for rapid prototyping of algorithmic ideas: fast C(++)-based implementations of well-known crossover and mutation operators for standard representations (binary, permutation, real-valued), various selection operators (uniform random, \(k\)-tournament, fitness- proportionate etc.) and various utility functions. The user can easily set up custom objective functions, operators, building blocks, and representations sticking to few conventions. The package allows both a black-box approach for standard tasks (plug-and-play style) and a much more flexible approach where the evolutionary cycle is written by hand. The package excells with support for arbitrary complex custom representations, easy parallelization and much more.
The package offers a rich set of functions for the assessment of performance of single algorithms and the comparison of multiple algorithms. Here, the of focus lies on performance measurement of multi-objective randomized search heuristics where the comparison of approximation sets with incomparable solutions is much more challenging than in the single-objective setting.
In this package some functions support parallelization for faster execution via
the package future. A parallel backend (e.g., multicore (on Unix/Linux/MacOS),
multisession etc.) can be selected via plan
.
Parallelization framework: future
3D plots with one of: plot3D, plot3Drgl, scatterplot3d or plotly
Empirical Attainment Functions: eaf
[1] Knowles, J. D., Thiele, L. and Zitzler, E. A tutorial on the performance assessment of stochastive multiobjective optimizers. TIK-Report No. 214, Computer Engineering and Networks Laboratory, ETH Zurich, February 2006 (Revised version. First version, January 2005). doi: 10.3929/ethz-b-000023822
[2] T. Tušar and B. Filipič, Visualization of Pareto Front Approximations in Evolutionary Multiobjective Optimization: A Critical Review and the Prosection Method, in IEEE Transactions on Evolutionary Computation, vol. 19, no. 2, pp. 225-245, April 2015, doi: 10.1109/TEVC.2014.2313407