A modern C++ framework for evolutionary computation
Build high-performance evolutionary algorithms in modern C++ without fighting the framework
Ultra is an open-source evolutionary computation library for developers and researchers who need speed, scalability and architectural control. It supports genetic programming, genetic algorithms and differential evolution, with a strong focus on concurrency, type safety and long-term maintainability.
Why Ultra

Most evolutionary frameworks prioritise ease of experimentation at the cost of performance or structure.
Ultra takes a different approach: it is built for production-quality C++, where performance, correctness and composability matter.
With Ultra you can:
- scale experiments efficiently across multiple cores;
- express complex evolutionary systems with strong typing;
- integrate evolutionary computation into larger C++ codebases;
- maintain full control over representation, evaluation and execution.
What Ultra provides
Evolutionary algorithms
Genetic programmingGenetic algorithms
Differential evolution
Heterogeneous and hybrid approaches
Modern C++ design
Written in ISO C++23Strong separation of concerns
Extensive use of generic programming and concepts
Performance and scalability
Built-in support for concurrency and parallel evaluationDesigned to minimise runtime overhead
Deterministic behaviour where required
Flexible representations
Linear representation based on Straight Line Programs (SLP)Strongly typed individuals
Stable abstractions designed for long-term projects
Research and production friendly
Suitable for academic research and experimentationEasy integration with other systems
Designed for both prototyping and production use
Comes with batteries
Highly customisableFast experimentation with detailed run-log
...and much more →
Who Ultra is for

Ultra is aimed at:
- researchers working on evolutionary computation and symbolic regression;
- C++ developers who need fine-grained control over performance;
- engineers integrating evolutionary algorithms into production systems;
- advanced users who want to extend or customise evolutionary operators.
Ultra provides sensible defaults and automatic parameter tuning, while always allowing full access to internal mechanisms when deeper customisation is required.
Get started quickly

- Read the documentation to understand the architecture and design philosophy.
- Follow the tutorials to build your first evolutionary system (classification, symbolic regression, mathematical optimisation, scheduling...).
If you encounter compilation issues, see the build guide.
Developers can explore the general architecture of the library by reading the ULTRA anatomy document.
Ultra is designed to be learned progressively: you can start simple and adopt more advanced components only when needed.
Open source
Ultra is released under the Mozilla Public License 2.0, allowing both open-source and commercial use while protecting contributions.
Contributions, feedback and discussion are welcome.
Sponsors
We extend our gratitude to our sponsors:
who are helping to ensure ongoing development and sustainability of the project.