references/problems.md

Pymoo Test Problems Reference

Comprehensive reference for benchmark optimization problems in pymoo.

Single-Objective Test Problems

Ackley Function

Characteristics: - Highly multimodal - Many local optima - Tests algorithm's ability to escape local minima - Continuous variables

Griewank Function

Characteristics: - Multimodal with regularly distributed local minima - Product term introduces interdependencies between variables - Global minimum at origin

Rastrigin Function

Characteristics: - Highly multimodal with regularly spaced local minima - Challenging for gradient-based methods - Tests global search capability

Rosenbrock Function

Characteristics: - Unimodal but narrow valley to global optimum - Tests algorithm's convergence in difficult landscape - Classic benchmark for continuous optimization

Zakharov Function

Characteristics: - Unimodal - Single global minimum - Tests basic convergence capability

Multi-Objective Test Problems (2-3 objectives)

ZDT Test Suite

Purpose: Standard benchmark for bi-objective optimization Construction: f₂(x) = g(x) · h(f₁(x), g(x)) where g(x) = 1 at Pareto-optimal solutions

ZDT1

  • Variables: 30 continuous
  • Bounds: [0, 1]
  • Pareto front: Convex
  • Purpose: Basic convergence and diversity test

ZDT2

  • Variables: 30 continuous
  • Bounds: [0, 1]
  • Pareto front: Non-convex (concave)
  • Purpose: Tests handling of non-convex fronts

ZDT3

  • Variables: 30 continuous
  • Bounds: [0, 1]
  • Pareto front: Disconnected (5 separate regions)
  • Purpose: Tests diversity maintenance across discontinuous front

ZDT4

  • Variables: 10 continuous (x₁ ∈ [0,1], x₂₋₁₀ ∈ [-10,10])
  • Pareto front: Convex
  • Difficulty: 21⁹ local Pareto fronts
  • Purpose: Tests global search with many local optima

ZDT5

  • Variables: 11 discrete (bitstring)
  • Encoding: x₁ uses 30 bits, x₂₋₁₁ use 5 bits each
  • Pareto front: Convex
  • Purpose: Tests discrete optimization and deceptive landscapes

ZDT6

  • Variables: 10 continuous
  • Bounds: [0, 1]
  • Pareto front: Non-convex with non-uniform density
  • Purpose: Tests handling of biased solution distributions

Usage:

from pymoo.problems.multi import ZDT1, ZDT2, ZDT3, ZDT4, ZDT5, ZDT6
problem = ZDT1()  # or ZDT2(), ZDT3(), etc.

BNH (Binh and Korn)

Characteristics: - 2 objectives - 2 variables - Constrained problem - Tests constraint handling in multi-objective context

OSY (Osyczka and Kundu)

Characteristics: - 6 objectives - 6 variables - Multiple constraints - Real-world inspired

TNK (Tanaka)

Characteristics: - 2 objectives - 2 variables - Disconnected feasible region - Tests handling of disjoint search spaces

Truss2D

Characteristics: - Structural engineering problem - Bi-objective (weight vs displacement) - Practical application test

Welded Beam

Characteristics: - Engineering design problem - Multiple constraints - Practical optimization scenario

Omni-test

Characteristics: - Configurable test problem - Various difficulty levels - Systematic testing

SYM-PART

Characteristics: - Symmetric problem structure - Tests specific algorithmic behaviors

Many-Objective Test Problems (4+ objectives)

DTLZ Test Suite

Purpose: Scalable many-objective benchmarks Objectives: Configurable (typically 3-15) Variables: Scalable

DTLZ1

  • Pareto front: Linear (hyperplane)
  • Difficulty: 11^k local Pareto fronts
  • Purpose: Tests convergence with many local optima

DTLZ2

  • Pareto front: Spherical (concave)
  • Difficulty: Straightforward convergence
  • Purpose: Basic many-objective diversity test

DTLZ3

  • Pareto front: Spherical
  • Difficulty: 3^k local Pareto fronts
  • Purpose: Combines DTLZ1's multimodality with DTLZ2's geometry

DTLZ4

  • Pareto front: Spherical with biased density
  • Difficulty: Non-uniform solution distribution
  • Purpose: Tests diversity maintenance with bias

DTLZ5

  • Pareto front: Degenerate (curve in M-dimensional space)
  • Purpose: Tests handling of degenerate fronts

DTLZ6

  • Pareto front: Degenerate curve
  • Difficulty: Harder convergence than DTLZ5
  • Purpose: Challenging degenerate front

DTLZ7

  • Pareto front: Disconnected regions
  • Difficulty: 2^(M-1) disconnected regions
  • Purpose: Tests diversity across disconnected fronts

Usage:

from pymoo.problems.many import DTLZ1, DTLZ2
problem = DTLZ1(n_var=7, n_obj=3)  # 7 variables, 3 objectives

WFG Test Suite

Purpose: Walking Fish Group scalable benchmarks Features: More complex than DTLZ, various front shapes and difficulties

Variants: WFG1-WFG9 with different characteristics - Non-separable - Deceptive - Multimodal - Biased - Scaled fronts

Constrained Multi-Objective Problems

MW Test Suite

Purpose: Multi-objective problems with various constraint types Features: Different constraint difficulty levels

DAS-CMOP

Purpose: Difficulty-adjustable and scalable constrained multi-objective problems Features: Tunable constraint difficulty

MODAct

Purpose: Multi-objective optimization with active constraints Features: Realistic constraint scenarios

Dynamic Multi-Objective Problems

DF Test Suite

Purpose: CEC2018 Competition dynamic multi-objective benchmarks Features: - Time-varying objectives - Changing Pareto fronts - Tests algorithm adaptability

Variants: DF1-DF14 with different dynamics

Custom Problem Definition

Define custom problems by extending base classes:

from pymoo.core.problem import ElementwiseProblem
import numpy as np

class MyProblem(ElementwiseProblem):
    def __init__(self):
        super().__init__(
            n_var=2,           # number of variables
            n_obj=2,           # number of objectives
            n_ieq_constr=0,    # inequality constraints
            n_eq_constr=0,     # equality constraints
            xl=np.array([0, 0]),   # lower bounds
            xu=np.array([1, 1])    # upper bounds
        )

    def _evaluate(self, x, out, *args, **kwargs):
        # Define objectives
        f1 = x[0]**2 + x[1]**2
        f2 = (x[0]-1)**2 + x[1]**2

        out["F"] = [f1, f2]

        # Optional: constraints
        # out["G"] = constraint_values  # <= 0
        # out["H"] = equality_constraints  # == 0

Problem Selection Guidelines

For algorithm development: - Simple convergence: DTLZ2, ZDT1 - Multimodal: ZDT4, DTLZ1, DTLZ3 - Non-convex: ZDT2 - Disconnected: ZDT3, DTLZ7

For comprehensive testing: - ZDT suite for bi-objective - DTLZ suite for many-objective - WFG for complex landscapes - MW/DAS-CMOP for constraints

For real-world validation: - Engineering problems (Truss2D, Welded Beam) - Match problem characteristics to application domain

Variable types: - Continuous: Most problems - Discrete: ZDT5 - Mixed: Define custom problem

← Back to pymoo