Pymoo - 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), 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.
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 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
Dynamic: Time-varying objectives or constraints
Core Workflow
- Pick problem type — single, multi (2-3 obj), many (4+ obj), or constrained.
- Define or select the problem — built-in via
get_problem(...), or subclass ElementwiseProblem for custom (objectives in out["F"], inequality constraints g(x) <= 0 in out["G"], equality h(x) = 0 in out["H"]).
- Choose the algorithm — NSGA-II for 2-3 objectives, NSGA-III (with reference directions) for 4+, GA/DE/PSO/CMA-ES for single-objective. See the selection tables in
references/quick_reference.md.
- Set termination —
('n_gen', N) or get_termination("f_tol", tol=0.001).
- Run with
minimize(problem, algorithm, termination, seed=1, verbose=True).
- Inspect
result.X / result.F / result.G (or result.CV for constraint violation).
- Decide & visualize — apply MCDM to pick a preferred Pareto solution, plot with
Scatter/PCP/Petal.
Always set seed for reproducibility, normalize objectives when scales differ, and provide reference directions for NSGA-III.
Routing — where to look
| You need… |
Go to |
| Complete copy-paste examples for all 7 workflows (single/multi/many-objective, custom problems, constraint handling, MCDM decision making, visualization) |
references/workflows.md |
| Algorithm-selection tables, benchmark problem list, operator config, troubleshooting, best practices, install |
references/quick_reference.md |
| Deep algorithm reference (parameters, usage, selection) |
references/algorithms.md |
| Benchmark test problems (ZDT, DTLZ, WFG) with characteristics |
references/problems.md |
| Genetic operators (sampling, selection, crossover, mutation) |
references/operators.md |
| All visualization types with examples |
references/visualization.md |
| Constraint handling + multi-criteria decision making |
references/constraints_mcdm.md |
Runnable scripts (scripts/): single_objective_example.py, multi_objective_example.py, many_objective_example.py, custom_problem_example.py, decision_making_example.py. Run with uv run python scripts/<name>.py.
Search references: grep -r "NSGA-II\|NSGA-III\|MOEA/D" references/ · grep -r "Feasibility First\|Penalty\|Repair" references/ · grep -r "Scatter\|PCP\|Petal" references/
Install
uv pip install pymoo
Dependencies: NumPy, SciPy, matplotlib, autograd (optional). Docs: https://pymoo.org/ — this skill targets pymoo 0.6.x.
1---2name: alterlab-pymoo3description: Multi-objective optimization with pymoo — NSGA-II, NSGA-III, MOEA/D, Pareto-front computation, constraint handling, and standard benchmarks (ZDT, DTLZ). Use when solving multi-objective or constrained optimization problems, computing Pareto-optimal trade-offs, or tackling engineering design problems with competing objectives. Part of the AlterLab Academic Skills suite.4license: Apache-2.05---67# Pymoo - Multi-Objective Optimization in Python89## Overview1011Pymoo 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), 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.1213## When to Use This Skill1415This skill should be used when:16- Solving optimization problems with one or multiple objectives17- Finding Pareto-optimal solutions and analyzing trade-offs18- Implementing evolutionary algorithms (GA, DE, PSO, NSGA-II/III)19- Working with constrained optimization problems20- Benchmarking algorithms on standard test problems (ZDT, DTLZ, WFG)21- Customizing genetic operators (crossover, mutation, selection)22- Visualizing high-dimensional optimization results23- Making decisions from multiple competing solutions24- Handling binary, discrete, continuous, or mixed-variable problems2526## Core Concepts2728### The Unified Interface2930Pymoo uses a consistent `minimize()` function for all optimization tasks:3132```python33from pymoo.optimize import minimize3435result = minimize(36 problem, # What to optimize37 algorithm, # How to optimize38 termination, # When to stop39 seed=1,40 verbose=True41)42```4344**Result object contains:**45- `result.X`: Decision variables of optimal solution(s)46- `result.F`: Objective values of optimal solution(s)47- `result.G`: Constraint violations (if constrained)48- `result.algorithm`: Algorithm object with history4950### Problem Types5152**Single-objective:** One objective to minimize/maximize53**Multi-objective:** 2-3 conflicting objectives → Pareto front54**Many-objective:** 4+ objectives → High-dimensional Pareto front55**Constrained:** Objectives + inequality/equality constraints56**Dynamic:** Time-varying objectives or constraints5758## Core Workflow59601. **Pick problem type** — single, multi (2-3 obj), many (4+ obj), or constrained.612. **Define or select the problem** — built-in via `get_problem(...)`, or subclass `ElementwiseProblem` for custom (objectives in `out["F"]`, inequality constraints `g(x) <= 0` in `out["G"]`, equality `h(x) = 0` in `out["H"]`).623. **Choose the algorithm** — NSGA-II for 2-3 objectives, NSGA-III (with reference directions) for 4+, GA/DE/PSO/CMA-ES for single-objective. See the selection tables in `references/quick_reference.md`.634. **Set termination** — `('n_gen', N)` or `get_termination("f_tol", tol=0.001)`.645. **Run** with `minimize(problem, algorithm, termination, seed=1, verbose=True)`.656. **Inspect** `result.X` / `result.F` / `result.G` (or `result.CV` for constraint violation).667. **Decide & visualize** — apply MCDM to pick a preferred Pareto solution, plot with `Scatter`/`PCP`/`Petal`.6768Always set `seed` for reproducibility, normalize objectives when scales differ, and provide reference directions for NSGA-III.6970## Routing — where to look7172| You need… | Go to |73|-----------|-------|74| Complete copy-paste examples for all 7 workflows (single/multi/many-objective, custom problems, constraint handling, MCDM decision making, visualization) | `references/workflows.md` |75| Algorithm-selection tables, benchmark problem list, operator config, troubleshooting, best practices, install | `references/quick_reference.md` |76| Deep algorithm reference (parameters, usage, selection) | `references/algorithms.md` |77| Benchmark test problems (ZDT, DTLZ, WFG) with characteristics | `references/problems.md` |78| Genetic operators (sampling, selection, crossover, mutation) | `references/operators.md` |79| All visualization types with examples | `references/visualization.md` |80| Constraint handling + multi-criteria decision making | `references/constraints_mcdm.md` |8182**Runnable scripts** (`scripts/`): `single_objective_example.py`, `multi_objective_example.py`, `many_objective_example.py`, `custom_problem_example.py`, `decision_making_example.py`. Run with `uv run python scripts/<name>.py`.8384**Search references:** `grep -r "NSGA-II\|NSGA-III\|MOEA/D" references/` · `grep -r "Feasibility First\|Penalty\|Repair" references/` · `grep -r "Scatter\|PCP\|Petal" references/`8586## Install8788```bash89uv pip install pymoo90```9192Dependencies: NumPy, SciPy, matplotlib, autograd (optional). Docs: https://pymoo.org/ — this skill targets pymoo 0.6.x.93