
Pymoo
FreeA Python framework for multi-objective optimization.
Free · Opens the source repo
What Pymoo does
Pymoo is a robust and versatile Python framework designed specifically for tackling optimization problems, particularly those with multiple objectives. It leverages advanced algorithms such as NSGA-II, NSGA-III, and MOEA/D to efficiently find optimal solutions that balance conflicting objectives. Users can easily define their optimization problems, whether they are single-objective or multi-objective, and utilize a consistent interface for problem-solving. The framework is built to support various types of optimization scenarios, including constrained problems and mixed-variable types, making it suitable for a wide range of engineering design and optimization tasks.
One of the key strengths of Pymoo is its ability to generate Pareto fronts, which are essential for visualizing trade-offs between competing objectives. The framework includes a variety of benchmark problems, such as ZDT and DTLZ, allowing users to test and validate their algorithms against established standards. Additionally, Pymoo offers customizable genetic operators, enabling users to tailor the optimization process to their specific needs. The comprehensive documentation and quick start workflows included in the package make it straightforward for both beginners and experienced practitioners to get started with multi-objective optimization.
Whether you are an engineer looking to optimize design parameters or a researcher studying evolutionary algorithms, Pymoo provides the tools necessary to approach complex optimization challenges. Its ability to handle high-dimensional problems and visualize results effectively sets it apart as a valuable resource for anyone involved in optimization tasks.
When to use it
Use Pymoo when you need to solve optimization problems with multiple conflicting objectives or when you want to analyze trade-offs among different solutions.
When not to use it
This skill may not be suitable for simple single-objective problems where lightweight solutions are preferable, or if you require a specific optimization algorithm not supported by Pymoo.
What you can build with it
Engineering Design Optimization
Use Pymoo to optimize design parameters in engineering projects, balancing multiple performance criteria.
Research in Evolutionary Algorithms
Leverage Pymoo for academic research focused on the development and testing of new evolutionary algorithms.
Decision Making with Competing Solutions
Utilize Pymoo to analyze and select optimal solutions from a set of competing alternatives based on Pareto efficiency.
How to install Pymoo
View source1. Install with the skills CLI
npx skills add k-dense-ai/scientific-agent-skills/pymoo --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by k-dense-aiPymoo - Multi-Objective Optimization in Python
Overview
Pymoo is a comprehensive Python framework for optimization with emphasis on multi-objective problems. Solve single and multi-objective optimization using state-of-the-art algorithms (NSGA-II/III, MOEA/D, SPEA2), benchmark problems (ZDT, DTLZ), customizable genetic operators, and multi-criteria decision making methods. Excels at finding trade-off solutions (Pareto fronts) for problems with conflicting objectives. Current stable release: pymoo 0.6.1.6 (November 2025).
Installation
uv pip install pymoo
For reproducible environments, pin a version: uv pip install "pymoo==0.6.1.6".
Dependencies: NumPy (2.x compatible since 0.6.1.3), SciPy, matplotlib (visualization). Autograd is optional for gradient-based features (since 0.6.1.3).
Documentation: https://pymoo.org/ — LLM-friendly index: https://pymoo.org/llms.txt
When to Use This Skill
This skill should be used when:
- Solving optimization problems with one or multiple objectives
- Finding Pareto-optimal solutions and analyzing trade-offs
- Implementing evolutionary algorithms (GA, DE, PSO, NSGA-II/III)
- Working with constrained optimization problems
- Benchmarking algorithms on standard test problems (ZDT, DTLZ, WFG)
- Customizing genetic operators (crossover, mutation, selection)
- Visualizing high-dimensional optimization results
- Making decisions from multiple competing solutions
- Handling binary, discrete, continuous, or mixed-variable problems
Core Concepts
The Unified Interface
Pymoo uses a consistent minimize() function for all optimization tasks:
from pymoo.optimize import minimize
result = minimize(
problem, # What to optimize
algorithm, # How to optimize
termination, # When to stop
seed=1,
verbose=True
)
Result object contains:
result.X: Decision variables of optimal solution(s)result.F: Objective values of optimal solution(s)result.G: Constraint violations (if constrained)result.algorithm: Algorithm object with history
Problem Definition Styles
Pymoo supports three problem definition styles:
Problem: Vectorized —_evaluatereceives a batch of solutions (matrix)ElementwiseProblem: One solution per call — recommended for custom problems and parallel evaluationFunctionalProblem: Define objectives and constraints as separate functions without subclassing
Problem Types
Single-objective: One objective to minimize/maximize Multi-objective: 2-3 conflicting objectives → Pareto front Many-objective: 4+ objectives → High-dimensional Pareto front Constrained: Objectives + inequality/equality constraints Mixed-variable: Continuous, integer, binary, and categorical variables in one problem Dynamic: Time-varying objectives or constraints
Quick Start Workflows
Nine runnable workflows are in references/quick_start_workflows.md:
| # | Workflow | Use when |
|---|---|---|
| 1 | Single-objective optimization | one objective, GA or DE |
| 2 | Multi-objective (2-3 objectives) | NSGA-II and a Pareto front |
| 3 | Many-objective (4+ objectives) | NSGA-III or reference-direction methods |
| 4 | Custom problem definition | subclassing Problem / ElementwiseProblem |
| 5 | Constraint handling | inequality and equality constraints |
| 6 | Decision making from a Pareto front | scalarization and MCDM selection |
| 7 | Visualization | scatter, PCP, radviz, and heatmap views |
| 8 | Parallel evaluation | threads, processes, or Dask for expensive objectives |
| 9 | Mixed-variable optimization | integer, binary, and categorical variables |
Algorithm Selection Guide
Single-Objective Problems
| Algorithm | Best For | Key Features |
|---|---|---|
| GA | General-purpose | Flexible, customizable operators |
| DE | Continuous optimization | Good global search |
| PSO | Smooth landscapes | Fast convergence |
| CMA-ES | Difficult/noisy problems | Self-adapting |
Multi-Objective Problems (2-3 objectives)
| Algorithm | Best For | Key Features |
|---|---|---|
| NSGA-II | Standard benchmark | Fast, reliable, well-tested |
| SPEA2 | Archive-based MOO | Strength-based fitness, external archive |
| R-NSGA-II | Preference regions | Reference point guidance |
| MOEA/D | Decomposable problems | Scalarization approach |
Many-Objective Problems (4+ objectives)
| Algorithm | Best For | Key Features |
|---|---|---|
| NSGA-III | 4-15 objectives | Reference direction-based |
| RVEA | Adaptive search | Reference vector evolution |
| AGE-MOEA | Complex landscapes | Adaptive geometry |
Constrained Problems
| Approach | Algorithm | When to Use |
|---|---|---|
| Feasibility-first | Any algorithm | Large feasible region |
| Specialized | SRES, ISRES | Heavy constraints |
| Penalty | GA + penalty | Algorithm compatibility |
See: references/algorithms.md for comprehensive algorithm reference
Benchmark Problems
Quick problem access:
from pymoo.problems import get_problem
# Single-objective
problem = get_problem("rastrigin", n_var=10)
problem = get_problem("rosenbrock", n_var=10)
# Multi-objective
problem = get_problem("zdt1") # Convex front
problem = get_problem("zdt2") # Non-convex front
problem = get_problem("zdt3") # Disconnected front
# Many-objective
problem = get_problem("dtlz2", n_obj=5, n_var=12)
problem = get_problem("dtlz7", n_obj=4)
See: references/problems.md for complete test problem reference
Genetic Operator Customization
Standard operator configuration:
from pymoo.algorithms.soo.nonconvex.ga import GA
from pymoo.operators.crossover.sbx import SBX
from pymoo.operators.mutation.pm import PM
algorithm = GA(
pop_size=100,
crossover=SBX(prob=0.9, eta=15),
mutation=PM(eta=20),
eliminate_duplicates=True
)
Operator selection by variable type:
Continuous variables:
- Crossover: SBX (Simulated Binary Crossover)
- Mutation: PM (Polynomial Mutation)
Binary variables:
- Crossover: TwoPointCrossover, UniformCrossover
- Mutation: BitflipMutation
Permutations (TSP, scheduling):
- Crossover: OrderCrossover (OX)
- Mutation: InversionMutation
See: references/operators.md for comprehensive operator reference
Performance and Troubleshooting
Common issues and solutions:
Problem: Algorithm not converging
- Increase population size
- Increase number of generations
- Check if problem is multimodal (try different algorithms)
- Verify constraints are correctly formulated
Problem: Poor Pareto front distribution
- For NSGA-III: Adjust reference directions
- Increase population size
- Check for duplicate elimination
- Verify problem scaling
Problem: Few feasible solutions
- Use constraint-as-objective approach
- Apply repair operators
- Try SRES/ISRES for constrained problems
- Check constraint formulation (should be g <= 0)
Problem: High computational cost
- Reduce population size
- Decrease number of generations
- Use simpler operators
- Enable parallel evaluation via
elementwise_runner(see Workflow 8)
Best practices:
- Normalize objectives when scales differ significantly
- Set random seed for reproducibility
- Save history to analyze convergence:
save_history=True - Visualize results to understand solution quality
- Compare with true Pareto front when available
- Use appropriate termination criteria (generations, evaluations, tolerance)
- Tune operator parameters for problem characteristics
Resources
This skill includes comprehensive reference documentation and executable examples:
references/
Detailed documentation for in-depth understanding:
- algorithms.md: Complete algorithm reference with parameters, usage, and selection guidelines
- problems.md: Benchmark test problems (ZDT, DTLZ, WFG) with characteristics
- operators.md: Genetic operators (sampling, selection, crossover, mutation) with configuration
- visualization.md: All visualization types with examples and selection guide
- constraints_mcdm.md: Constraint handling techniques and multi-criteria decision making methods
- parallelization.md: Parallel evaluation with StarmapParallelization and JoblibParallelization
Search patterns for references:
- Algorithm details:
grep -r "NSGA-II\|NSGA-III\|MOEA/D" references/ - Constraint methods:
grep -r "Feasibility First\|Penalty\|Repair" references/ - Visualization types:
grep -r "Scatter\|PCP\|Petal" references/
scripts/
Executable examples demonstrating common workflows:
- single_objective_example.py: Basic single-objective optimization with GA
- multi_objective_example.py: Multi-objective optimization with NSGA-II, visualization
- many_objective_example.py: Many-objective optimization with NSGA-III, reference directions
- custom_problem_example.py: Defining custom problems (constrained and unconstrained)
- decision_making_example.py: Multi-criteria decision making with different preferences
Run examples:
python3 scripts/single_objective_example.py
python3 scripts/multi_objective_example.py
python3 scripts/many_objective_example.py
python3 scripts/custom_problem_example.py
python3 scripts/decision_making_example.py
Additional Notes
Common patterns:
- Use
ElementwiseProblemfor custom problems (orFunctionalProblemfor function-based definitions) - Use
varsdict with typed variables for mixed-variable problems - Constraints formulated as
g(x) <= 0andh(x) = 0 - Reference directions required for NSGA-III
- Normalize objectives before MCDM
- Use appropriate termination:
('n_gen', N)orget_termination("f_tol", tol=0.001)
Frequently asked questions about Pymoo
Similar skills
Spring Boot Testing
Master testing techniques for Spring Boot 4 applications.
GitHub Issues
Manage GitHub issues efficiently with MCP tools.
Geofeed Tuner
Optimize your IP geolocation feeds in CSV format.
Batch Files
Master Windows batch scripting for automation and task management.
Adobe Illustrator Scripting
Automate your Illustrator workflows with ExtendScript.
Plugin Structure
Create and organize Claude Code plugins effectively.
