pymoo: Multi-objective Optimization in Python#
Our framework offers state of the art single- and multi-objective optimization algorithms and many more features related to multi-objective optimization such as visualization and decision making. pymoo is available on PyPi and can be installed by:
pip install -U pymoo
Please note that some modules can be compiled to speed up computations (optional). The command above attempts is made to compile the modules; however, if unsuccessful, the pure python version is installed. More information are available in our Installation Guide.
Features#
Furthermore, our framework offers a variety of different features which cover various facets of multi-objective optimization:
Related: Ask and Tell, Checkpoints
Many-objective: NSGA-III, R-NSGA-III, U-NSGA-III, MOEA/D, AGE-MOEA, AGE-MOEA2, RVEA, SMS-EMOA, C-TAEA, NSDE-R
Dynamic: D-NSGA-II, KGB, PI-NSGA-II
Related: Reference Directions, Constraints, Convergence, Hyperparameters
Examples: Biased Initialization, Traveling Salesman
List Of Algorithms#
Algorithm |
Class |
Convenience |
Objective(s) |
Constraints |
Description |
|---|---|---|---|---|---|
GA |
single |
x |
A modular implementation of a genetic algorithm. It can be easily customized with different evolutionary operators and applies to a broad category of problems. |
||
DE |
single |
x |
Different variants of differential evolution which is a well-known concept for in continuous optimization especially for global optimization. |
||
PSO |
single |
x |
A swarm intelligence algorithm where each particle is guided by its own and the swarm’s best-known positions to explore the search space. |
||
BRKGA |
single |
x |
Mostly used for combinatorial optimization where instead of custom evolutionary operators the complexity is put into an advanced variable encoding. |
||
NelderMead |
single |
x |
A point-by-point based algorithm which keeps track of a simplex with is either extended reflected or shrunk. |
||
PatternSearch |
single |
x |
Iterative approach where the search direction is estimated by forming a specific exploration pattern around the current best solution. |
||
CMAES |
single |
Well-known model-based algorithm sampling from a dynamically updated normal distribution in each iteration. |
|||
ES |
single |
x |
The evolutionary strategy algorithm proposed for real-valued optimization problems. |
||
SRES |
single |
x |
An evolutionary strategy with constrained handling using stochastic ranking. |
||
ISRES |
single |
x |
An improved version of SRES being able to deal dependent variables efficiently. |
||
G3PCX |
single |
A real-coded genetic algorithm using the generalized generation gap (G3) model with the parent-centric recombination (PCX) operator. |
|||
NRBO |
single |
x |
A population-based metaheuristic inspired by Newton-Raphson method with high optimization efficiency. |
||
NSGA2 |
multi |
x |
Well-known multi-objective optimization algorithm based on non-dominated sorting and crowding. |
||
RNSGA2 |
multi |
x |
An extension of NSGA-II where reference/aspiration points can be provided by the user. |
||
PINSGA2 |
multi |
x |
An interactive version of NSGA-II that uses user preference to guide the optimization towards desired solutions. |
||
NSGA3 |
many |
x |
An improvement of NSGA-II developed for multi-objective optimization problems with more than two objectives. |
||
UNSGA3 |
many |
x |
A generalization of NSGA-III to be more efficient for single and bi-objective optimization problems. |
||
RNSGA3 |
many |
x |
Allows defining aspiration points for NSGA-III to incorporate the user’s preference. |
||
MOEAD |
many |
Another well-known multi-objective optimization algorithm based on decomposition. |
|||
AGEMOEA |
many |
Similar to NSGA-II but estimates the shape of the Pareto-front to compute a score replacing the crowding distance. |
|||
AGEMOEA2 |
many |
An improved AGE-MOEA with a more accurate estimation of the Pareto-front geometry used to compute the survival score. |
|||
CTAEA |
many |
x |
An algorithm with a more sophisticated constraint-handling for many-objective optimization algoritms. |
||
SMSEMOA |
many |
x |
An algorithm that uses hypervolume during the environmental survival. |
||
SPEA2 |
multi |
x |
Strength Pareto evolutionary algorithm using a strength-based fitness with a k-th nearest neighbor density estimate and an archive truncation operator for diversity. |
||
OmniOptimizer |
multi |
x |
A generic NSGA-II based algorithm using a dynamic epsilon-dominance and crowding in objective and variable space to find multiple equivalent Pareto-optimal solutions. |
||
RVEA |
many |
A reference direction based algorithm used an angle-penalized metric. |
|||
CMOPSO |
multi |
x |
A competitive mechanism based multi-objective particle swarm optimizer with fast convergence using binary tournament selection on elites. |
||
MOPSO_CD |
multi |
x |
Multi-objective particle swarm optimization with crowding distance mechanism for leader selection and archive management. |
||
DNSGA2 |
multi |
x |
A dynamic version of NSGA-II that detects and reacts to changes of the objectives over time. |
||
KGB |
multi |
x |
A knowledge-guided Bayesian dynamic multi-objective optimizer that reuses past search knowledge when the problem changes. |
||
NSDE |
multi |
x |
NSGA-II combined with differential evolution variation operators instead of simulated binary crossover and polynomial mutation. |
||
GDE3 |
multi |
x |
Generalized Differential Evolution 3 - differential evolution variation with non-dominated sorting survival and a greedy parent-trial comparison. |
||
NSDER |
many |
x |
A reference-direction based differential evolution algorithm extending NSGA-III’s survival to many-objective problems. |
Cite Us#
If you have used our framework for research purposes, you can cite our publication by:
@ARTICLE{pymoo,
author={J. {Blank} and K. {Deb}},
journal={IEEE Access},
title={pymoo: Multi-Objective Optimization in Python},
year={2020},
volume={8},
number={},
pages={89497-89509},
}
News#
June 27, 2026: pymoo version 0.6.2 has been released. This release restores CMA-ES compatibility with NumPy 2.x (via cma>=3.4.0), refreshes the documentation with a complete and consistent algorithm overview, and adds internal code-quality improvements (repo-wide linting, whole-package type-checking, and a behavior-regression test suite). (Release Notes)
November 23, 2025: pymoo version 0.6.1.6 has been released with visualization fixes, SPEA2 improvements, faster bi-objective non-dominated sorting, and updated documentation with a new Sphinx Book Theme.
May 26, 2025: A new pymoo version 0.6.1.5 has been released with further refinements and bug fixes to ensure stability and performance across different environments.
About#
This framework is powered by anyoptimization, a Python research community. It is developed and maintained by Julian Blank who is affiliated to the Computational Optimization and Innovation Laboratory (COIN) supervised by Kalyanmoy Deb at the Michigan State University in East Lansing, Michigan, USA.
We have developed the framework for research purposes and hope to contribute to the research area by delivering tools for solving and analyzing multi-objective problems. Each algorithm is developed as close as possible to the proposed version to the best of our knowledge. NSGA-II and NSGA-III have been developed collaboratively with one of the authors and, therefore, we recommend using them for official benchmarks.
If you intend to use our framework for any profit-making purposes, please contact us. Also, be aware that even state-of-the-art algorithms are just the starting point for many optimization problems. The full potential of genetic algorithms requires customization and the incorporation of domain knowledge. We have experience for more than 20 years in the optimization field and are eager to tackle challenging problems. Let us know if you are interested in working with experienced collaborators in optimization. Please keep in mind that only through such projects can we keep developing and improving our framework and making sure it meets the industry’s current needs.
Moreover, any kind of contribution is more than welcome:
(i) Give us a ⭐ on GitHub. This makes not only our framework but, in general, multi-objective optimization more accessible by being listed with a higher rank regarding specific keywords.
(ii) To offer more and more new algorithms and features, we are more than happy if somebody wants to contribute by developing code. You can see it as a win-win situation because your development will be linked to your publication(s), which can significantly increase your work awareness. Please note that we aim to keep a high level of code quality, and some refactoring might be suggested.
(iii) You like our framework, and you would like to use it for profit-making purposes? We are always searching for industrial collaborations because they help direct research to meet the industry’s needs. Our laboratory solving practical problems have a high priority for every student and can help you benefit from the research experience we have gained over the last years.
If you find a bug or you have any kind of concern regarding the correctness, please use our Issue Tracker Nobody is perfect Moreover, only if we are aware of the issues we can start to investigate them.