Welcome to metaheuristic‑designer¶
Metaheuristic‑designer is a modular, object‑oriented framework for building, testing, and analysing population‑based optimisation algorithms. It is designed to address the challenges identified in Metaheuristics “In the Large” (Swan et al., 2022): the field’s fragmentation, lack of reproducibility, and the need for common protocols that let researchers explore the design space of metaheuristics systematically.
Whether you want a standard genetic algorithm in one line or a custom hybrid strategy assembled from scratch, this library provides the building blocks. Its architecture follows the algorithm template philosophy advocated by that paper and draws on the design principles of Introduction to Evolutionary Computing by Eiben and Smith.
Where to Start¶
The documentation is organised by topics, pick the entry point that matches what you want to do right now:
Quick start – Run a ready‑to‑use algorithm in under a minute on the Quick Start page.
Simple subpackage – Browse the full catalogue of pre‑packaged algorithms and see which encodings each supports.
Algorithm configuration – Learn how to set stopping conditions, reporters, history trackers, and checkpointers in the Algorithm Configuration guide.
All built‑in methods – Detailed tables of operators and selection methods, including all probability distributions.
Custom components – Write your own operators, selection methods, encodings, and more with the Extending the Framework guide.
Plot results – Turn recorded history into convergence, diversity, and parameter evolution plots with the Plotting Tutorial.
Description¶
The library is built with a focus on clean architecture and composability, while remaining practical for research and application. When comparing algorithms, we recommend using the number of objective evaluations rather than wall‑clock time to obtain a fair, implementation‑independent measure.
Structure¶
Conceptual overview¶
Many optimisation algorithms follow the same general pattern:
Initialise a set of tentative solutions.
Repeat until a stopping condition is met:
Select a subset of the current solutions to generate new ones.
Apply perturbation operators to the selected solutions to produce new candidate solutions.
Choose which solutions will form the next iteration’s population.
Return the best solution found during the run.
Key components¶
The library provides an abstract interface for each step of this loop. Every component can be replaced independently, which makes it easy to experiment with different algorithm variants.
ObjectiveFunc— the function to optimise.Initializer— creates the initial set of tentative solutions.Encoding— transforms between the internal numerical representation (genotype) and the representation understood by the objective function.Operator— generates new candidate solutions by modifying existing ones (for example, adding random noise, recombining two solutions, or performing a local search step).ParentSelection/SurvivorSelection— choose which solutions are used to generate new ones and which ones are carried over to the next iteration.SearchStrategy— combines the above components into a single iteration step.Algorithm— runs the loop, tracks progress, manages stopping conditions, reporting, history, and checkpointing.
All of these have ready‑to‑use implementations in their respective
sub‑packages. You can also supply your own components as plain Python
functions via the *FromLambda classes described in the
Custom Components guide.
Indices and tables¶
Contents:
Further reading¶
Swan, J., Adriaensen, S., Brownlee, A. E. I., et al. (2022). Metaheuristics “In the Large”. European Journal of Operational Research, 297(2), 393–406.
Eiben, A. E., & Smith, J. E. (2015). Introduction to Evolutionary Computing. Springer.