Optimizer Catalog

Every named optimizer selectable through iwopy is listed below, including SciPy methods and PyGMO’s NLopt subsolvers. Default selection and SciPy’s callable extension point are also shown. Arbitrary user-written callable implementations are not a finite registry. Sampling, crossover, mutation, and termination operators are configuration, not additional optimizers.

Each setup link shows a complete, tested Python script with an explicit solver = create_optimizer(...) call using family, optimizer, and flat class/native keyword parameters. See iwopy.core for selection rules. Execution is inside if __name__ == "__main__":; importing a script does not run it. The shared synthetic problem definitions appear below. From the repository root, install the optional backends and run any case by its setup name, for example:

uv sync --extra opt
uv run python examples/optimizers/scipy_de.py
uv run python examples/optimizers/optuna_tpe.py

The examples use synthetic quadratic objectives and small demonstration budgets; they are configuration examples, not performance comparisons or convergence guarantees. Single-objective examples minimize; Pareto examples use two objectives. Only pymoo_mixed_variable_ga requires the example’s integer/float problem.

Important parameter values each have an inline explanation. Comments beside the short run limits and small populations suggest production starting values, not universally optimal settings. Adapt them to dimension, evaluation cost, constraint difficulty, and noise. Scale variables and objectives before choosing tolerances, and keep tolerances above numerical noise. The explicit Hessians in the dogleg and trust-exact examples belong to the benchmark objective and must be replaced for a different problem. iwopy identifies the GG/SLSQP source; native elsewhere describes an external backend’s own behavior or results.

Available Optimizers

Groups classify objective count, nonlinear-constraint support, and search strategy. Constraint-capable solvers also work without those constraints; variable boxes alone remain in the unconstrained groups. Global means exploratory search, not a global-optimum guarantee. Single-run covariance and hill-climbing methods are grouped as local adaptation; restarts can broaden them. Default and wrapper methods follow their supported or demonstrated workflow. Pareto rows distinguish the demonstrated unconstrained/constrained flow; NSGA2 and NSGA3 therefore have a setup for each.

Single-Objective, Unconstrained, Local

Local single-objective search without nonlinear constraints

Interface / Selector

Capabilities

Characterization

When to Use

Minimal Python Setup

SciPy / Nelder-Mead

Single; bounds; derivative-free

Local simplex search

Small nonsmooth problems without derivatives

scipy_nelder_mead

SciPy / Powell

Single; bounds; derivative-free

Local direction-set search

Derivative-free local refinement with box bounds

scipy_powell

SciPy / CG

Single; unconstrained; gradients

Nonlinear conjugate gradients

Large smooth problems where memory matters

scipy_cg

SciPy / BFGS

Single; unconstrained; gradients

Local quasi-Newton search

Smooth small-to-medium problems

scipy_bfgs

SciPy / Newton-CG

Single; unconstrained; curvature

Local Newton-CG; example supplies a Hessian

Smooth problems with cheap curvature products

scipy_newton_cg

SciPy / L-BFGS-B

Single; bounds; gradients

Limited-memory local quasi-Newton search

Large smooth box-bounded problems

scipy_l_bfgs_b

SciPy / TNC

Single; bounds; gradients

Local truncated Newton

Smooth box bounds with truncated-Newton steps

scipy_tnc

SciPy / dogleg

Single; unconstrained; Hessian

Local dogleg trust region

Small problems with a positive-definite Hessian

scipy_dogleg

SciPy / trust-ncg

Single; unconstrained; curvature

Local Newton-CG trust region

Curvature products without storing a dense Hessian

scipy_trust_ncg

SciPy / trust-exact

Single; unconstrained; Hessian

Nearly exact local trust-region solve

Small-to-medium problems with affordable Hessians

scipy_trust_exact

SciPy / trust-krylov

Single; unconstrained; curvature

Local Krylov trust region

Large smooth problems with curvature products

scipy_trust_krylov

SciPy / callable method

Single; custom

User method; example delegates to BFGS

Integrate your own minimize-compatible method

scipy_callable

PyGMO / cmaes

Single; bounds; derivative-free

Continuous covariance adaptation

Correlated continuous variables in a PyGMO workflow

pygmo_cmaes

PyGMO / xnes

Single; bounds; derivative-free

Exponential natural evolution strategies

Compare distribution-based continuous search

pygmo_xnes

PyGMO / sea

Single; bounds; derivative-free

Simple evolutionary search

A minimal evolutionary comparison baseline

pygmo_sea

PyGMO / compass_search

Single; bounds; derivative-free

Local coordinate pattern search

Cheap derivative-free local refinement

pygmo_compass_search

NLopt / bobyqa

Single; bounds; derivative-free

Local quadratic approximation

Smooth box-bounded black boxes

nlopt_bobyqa

NLopt / newuoa

Single; unconstrained; derivative-free

Local quadratic approximation

Smooth unconstrained black boxes

nlopt_newuoa

NLopt / newuoa_bound

Single; bounds; derivative-free

Bound-constrained NEWUOA

Local quadratic models with box bounds

nlopt_newuoa_bound

NLopt / praxis

Single; bounds; derivative-free

Local principal-axis search

Derivative-free search with changing search directions

nlopt_praxis

NLopt / neldermead

Single; bounds; derivative-free

Local simplex search

Small nonsmooth local-search problems

nlopt_neldermead

NLopt / sbplx

Single; bounds; derivative-free

Local subspace simplex search

Simplex search on larger or nonsmooth problems

nlopt_sbplx

NLopt / lbfgs

Single; bounds; gradients

Local limited-memory BFGS

Smooth problems where low memory is useful

nlopt_lbfgs

NLopt / tnewton_precond_restart

Single; bounds; gradients

Preconditioned restarted truncated Newton

Large smooth problems with gradient evaluations

nlopt_tnewton_precond_restart

NLopt / tnewton_precond

Single; bounds; gradients

Preconditioned truncated Newton

Gradient-based local search with preconditioning

nlopt_tnewton_precond

NLopt / tnewton_restart

Single; bounds; gradients

Restarted truncated Newton

Gradient-based local search with restarts

nlopt_tnewton_restart

NLopt / tnewton

Single; bounds; gradients

Local truncated Newton

Smooth local search using gradients

nlopt_tnewton

NLopt / var2

Single; bounds; gradients

Rank-two limited-memory variable metric

Compare smooth variable-metric local search

nlopt_var2

NLopt / var1

Single; bounds; gradients

Rank-one limited-memory variable metric

Compare a lighter variable-metric update

nlopt_var1

Single-Objective, Unconstrained, Global

Exploratory single-objective search without nonlinear constraints

Interface / Selector

Capabilities

Characterization

When to Use

Minimal Python Setup

PyGMO / sga

Single; bounds; derivative-free

Population genetic search

A simple box-bounded genetic baseline

pygmo_sga

PyGMO / pso

Single; bounds; derivative-free

Population particle swarm

Continuous swarm search with box bounds

pygmo_pso

PyGMO / bee_colony

Single; bounds; derivative-free

Artificial bee-colony search

An alternative continuous population heuristic

pygmo_bee_colony

PyGMO / de

Single; bounds; derivative-free

Population differential evolution

A box-bounded global-search baseline

pygmo_de

PyGMO / de1220

Single; bounds; derivative-free

Self-adaptive DE strategy variants

Compare DE strategies without fixing one variant

pygmo_de1220

PyGMO / sade

Single; bounds; derivative-free

Self-adaptive differential evolution

Reduce manual DE parameter tuning

pygmo_sade

PyGMO / gwo

Single; bounds; derivative-free

Grey-wolf population search

Compare another box-bounded population heuristic

pygmo_gwo

PyGMO / pso_gen

Single; bounds; derivative-free

Generational particle swarm

Generational swarm search in a PyGMO workflow

pygmo_pso_gen

Single-Objective, Constrained, Local

Local single-objective search supporting nonlinear constraints

Interface / Selector

Capabilities

Characterization

When to Use

Minimal Python Setup

iwopy / GG

Single; constraints; gradients

Local greedy-gradient search with batched trial steps

Cheap gradients and constrained local refinement

iwopy_gg

iwopy / SLSQP

Single; constraints; gradients

Scaled local SLSQP with population Jacobians

Smooth constrained problems needing local refinement

iwopy_slsqp

SciPy / default

Single; method-dependent

Local method chosen from bounds and constraints

A first local solver for smooth problems

scipy_default

SciPy / COBYLA

Single; inequalities; derivative-free

Local linear approximation

Nonlinear inequalities without derivatives

scipy_cobyla

SciPy / COBYQA

Single; constraints; derivative-free

Local quadratic approximation; SciPy >=1.14

Smooth constrained problems without gradients

scipy_cobyqa

SciPy / SLSQP

Single; constraints; gradients

Local sequential quadratic programming

Smooth equalities and inequalities

scipy_slsqp

SciPy / trust-constr

Single; constraints; gradients

Constrained local trust-region search

Smooth constrained problems needing trust-region control

scipy_trust_constr

pycma / CMA-ES

Single; constraints; derivative-free

Continuous population covariance adaptation

Correlated continuous variables and nonlinear black boxes

cma_cmaes

pymoo / CMAES

Single; one-sided constraints; derivative-free

Continuous covariance adaptation

CMA-ES within an existing pymoo workflow

pymoo_cmaes

PyGMO / nlopt

Single; solver-dependent

Optional native local-solver wrapper

Choose a specific NLopt local method below

pygmo_nlopt

PyGMO / ipopt

Single; constraints; gradients

Optional native interior-point local solver

Smooth constrained problems in an IPOPT-enabled build

pygmo_ipopt

NLopt / cobyla

Single; constraints; derivative-free

Local constrained linear approximation

Constrained black boxes without derivatives

nlopt_cobyla

NLopt / mma

Single; inequalities; gradients

Local method of moving asymptotes

Smooth nonlinear inequality constraints

nlopt_mma

NLopt / ccsaq

Single; inequalities; gradients

Local conservative separable approximation

Smooth inequality-constrained local refinement

nlopt_ccsaq

NLopt / slsqp

Single; constraints; gradients

Local sequential quadratic programming

Smooth equality and inequality constraints

nlopt_slsqp

NLopt / auglag

Single; constraints; gradients in setup

Augmented Lagrangian with local L-BFGS

General constraints with a chosen smooth local solver

nlopt_auglag

NLopt / auglag_eq

Single; constraints; gradients in setup

Equality augmented Lagrangian with local L-BFGS

Equalities when the local solver handles remaining restrictions

nlopt_auglag_eq

Nevergrad / CMA

Single; mixed; constraints; derivative-free

Population covariance adaptation

Correlated black-box variables

nevergrad_cma

Nevergrad / OnePlusOne

Single; mixed; constraints; derivative-free

One-plus-one evolutionary search

Small budgets or cheap incremental search

nevergrad_one_plus_one

Nevergrad / TBPSA

Single; mixed; constraints; derivative-free

Test-based population-size adaptation

Noisy objectives with sufficient evaluations

nevergrad_tbpsa

Single-Objective, Constrained, Global

Exploratory single-objective search supporting nonlinear constraints

Interface / Selector

Capabilities

Characterization

When to Use

Minimal Python Setup

SciPy / differential_evolution

Single; mixed; constraints; derivative-free

Vectorized global population search

Bounded multimodal search without derivatives

scipy_de

pymoo / GA

Single; one-sided constraints; derivative-free

Population genetic search

A general evolutionary baseline

pymoo_ga

pymoo / DE

Single; one-sided constraints; derivative-free

Population differential evolution

Continuous multimodal black-box search

pymoo_de

pymoo / PSO

Single; one-sided constraints; derivative-free

Population particle swarm

Continuous swarm search as a comparison baseline

pymoo_pso

pymoo / MixedVariableGA

Single; mixed; one-sided constraints; derivative-free

Mixed integer/float genetic search

Genetic search with both integer and floating variables

pymoo_mixed_variable_ga

PyGMO / ihs

Single; constraints; derivative-free

Improved harmony search

Constrained heuristic search without derivatives

pygmo_ihs

Nevergrad / NGOpt

Single; mixed; constraints; derivative-free

Adaptive optimizer portfolio

A black-box starting point when strategy is uncertain

nevergrad_ngopt

Nevergrad / DE

Single; mixed; constraints; derivative-free

Population differential evolution

Multimodal bounded black-box search

nevergrad_de

Nevergrad / TwoPointsDE

Single; mixed; constraints; derivative-free

Two-point DE crossover

Compare a different DE crossover strategy

nevergrad_two_points_de

Nevergrad / PSO

Single; mixed; constraints; derivative-free

Population particle swarm

A swarm baseline for bounded black boxes

nevergrad_pso

Nevergrad / RandomSearch

Single; mixed; constraints; derivative-free

Independent random search

A reproducible baseline before adaptive search

nevergrad_random_search

Optuna / TPESampler

Single; mixed; constraints; derivative-free

Parzen estimation with pending-trial handling

Costly bounded integer/float tuning

optuna_tpe

Optuna / RandomSampler

Single; mixed; constraints; derivative-free

Random sampling without a constraint model

Baselines or very small evaluation budgets

optuna_random

DEAP / eaSimple

Single; mixed; constraints; derivative-free

Tournament-based generational replacement

Straightforward generational genetic search

deap_simple

DEAP / eaMuPlusLambda

Single; mixed; constraints; derivative-free

Tournament selection from parents and offspring

Genetic search that retains parent candidates

deap_mu_plus_lambda

DEAP / eaMuCommaLambda

Single; mixed; constraints; derivative-free

Offspring-only tournament replacement

Exploratory genetic search replacing all parents

deap_mu_comma_lambda

Multi-Objective, Unconstrained, Global

Exploratory multi-objective search without nonlinear constraints

Interface / Selector

Capabilities

Characterization

When to Use

Minimal Python Setup

pymoo / NSGA2

Multi; bounds; derivative-free

Unconstrained Pareto search with crowding

Two or three competing objectives without extra restrictions

pymoo_nsga2

pymoo / NSGA3

Multi; bounds; derivative-free

Unconstrained reference-direction Pareto search

Many competing objectives without extra restrictions

pymoo_nsga3

PyGMO / nsga2

Multi (native); bounds; derivative-free

Native Pareto nondominated sorting

Two or three objectives when native PyGMO results suffice

pygmo_nsga2

PyGMO / moead

Multi (native); bounds; derivative-free

Native Pareto decomposition search

Trade-offs organized by scalar subproblems

pygmo_moead

PyGMO / moead_gen

Multi (native); bounds; derivative-free

Generational native Pareto decomposition

A generational variant of decomposition search

pygmo_moead_gen

PyGMO / nspso

Multi (native); bounds; derivative-free

Native Pareto particle swarm

Compare swarm-based trade-off search

pygmo_nspso

Multi-Objective, Constrained, Global

Exploratory multi-objective search supporting nonlinear constraints

Interface / Selector

Capabilities

Characterization

When to Use

Minimal Python Setup

pymoo / NSGA2 (constrained flow)

Multi; one-sided constraints; derivative-free

Feasible Pareto search with crowding

Competing objectives with additional restrictions

pymoo_nsga2_constrained

pymoo / NSGA3 (constrained flow)

Multi; one-sided constraints; derivative-free

Feasible reference-direction Pareto search

Many objectives with additional restrictions

pymoo_nsga3_constrained

Single and Multi classify the objective/result workflow; mixed means both integer and floating variables. Bounds are variable boxes; constraints are additional nonlinear restrictions, with supported forms/tolerances in the API. One-sided constraints identifies pymoo’s translation limit. Multi (native) returns a PyGMO population, not iwopy Pareto results. Other labels do not claim every upstream capability. Curvature methods also need gradients.

Recommendations are starting points, not performance rankings. Compare suitable solvers on your problem and budget; short setup runs do not guarantee convergence. See Shared Parameters for the parameter explanation table and Termination for limit support, counting units, and convergence.

Multi-Objective Flows

The four pymoo Pareto setups return iwopy MultiObjOptResults and select a compromise from the approximate front using explicit objective weights:

find_pareto_objmix([0.5, 0.5]) returns the index minimizing that weighted sum within the returned front. Weights assume comparable objective scales and express preferences; they do not prove a global optimum or recover every trade-off. The PyGMO flows below instead return native populations, as explained next.

Availability And Batching

PyGMO’s ipopt and nlopt require builds with those optional native features. Its four multi-objective cases initialize the iwopy wrapper and evolve the native population directly. The existing iwopy PyGMO result finalization uses champion_x and cannot finalize a Pareto population; these examples therefore return a native PyGMO population, not MultiObjOptResults. Use pymoo NSGA2/NSGA3 for a complete iwopy Pareto-result workflow.

Vectorized Interfaces

All interfaces use the same iwopy problem model, but their batching mechanisms differ. Vectorized evaluation does not imply threads or parallel execution.

SciPy differential evolution, Nevergrad, Optuna, and DEAP expose vectorize=True on the optimizer constructor. Set vectorize=False to evaluate candidates individually in batch order without changing native search, batch sizes, budgets, callbacks, or selection. Their single-objective floating, integer, and mixed problems need finite, strictly ordered bounds; exact equality constraints need positive tolerance. Detailed contracts live in the linked API.

SciPy Minimization

Optimizer_scipy performs scalar objective search. Its default vectorize=True batches iwopy Jacobian evaluation; vectorize=False uses individual Jacobian evaluation. Unconstrained methods ignore forwarded bounds. Curvature-based catalog cases supply the quadratic Hessian; iwopy does not manufacture a general Hessian.

See the Optimizer_scipy API for constructor parameters and methods.

SciPy Differential Evolution

Optimizer_scipy_de always uses vectorized=True, workers=1, deferred updating, and polish=False in SciPy. The iwopy vectorize flag controls population versus individual problem evaluation independently of that native batch mode. Cached rows share objective/constraint calls. Success requires native convergence and finalized feasibility; scipy_results is the native result.

See the Optimizer_scipy_de API for constructor parameters and methods.

pycma

Optimizer_cma evaluates each asked generation as an iwopy population by default, or ordered individuals when vectorize=False. It supports continuous single-objective search, finite bounds, and native augmented-Lagrangian constraints using each constraint’s tolerance. It has no threaded-evaluation switch. The cma extra requires pycma >=4.4.0.

See the Optimizer_cma API for constructor parameters and methods.

pymoo

Optimizer_pymoo uses vectorize=True for population evaluation; false selects elementwise evaluation. Algorithm choice determines single-/multi-objective and mixed-variable support. iwopy translates one-sided constraints; NSGA2/NSGA3 return iwopy Pareto results. Install the pymoo extra.

See the Optimizer_pymoo API for constructor parameters and methods.

PyGMO

Optimizer_pygmo exposes batch fitness with vectorize=True. Use an algorithm with batch-fitness support; enabling the flag alone does not make every algorithm vectorized. The catalog uses the default scalar fitness path. Multi-objective catalog flows return native populations. Install pygmo. Select NLopt leaf solvers with family="nlopt"; they use the same PyGMO adapter without caller-supplied nested driver settings.

See the Optimizer_pygmo API for constructor parameters and methods.

Nevergrad

Optimizer_nevergrad asks a batch, evaluates it according to vectorize, and tells results and constraint violations in ask order. Its eight exposed selectors permit batched asks; num_workers does not create an executor. Install nevergrad: Nevergrad >=1.0.12 and NumPy <2.4 are required for the upstream metamodel’s scalar-array conversion.

See the Optimizer_nevergrad API for constructor parameters and methods.

Optuna

Optimizer_optuna asks ordered trial batches and evaluates them according to vectorize in a fresh in-memory study. TPE handles pending trials and constraint residuals; random sampling retains feasible selection without learning constraints. Failed evaluation marks the outstanding batch failed. Install optuna; Optuna >=5.0.0 is required for Trial.set_constraint.

See the Optimizer_optuna API for constructor parameters and methods.

DEAP

Optimizer_deap evaluates repaired offspring batches according to vectorize using one of three native variation/replacement schemes. Fitness ranks constraint violation before objective loss; every offspring counts toward the budget. Run serially because native operators temporarily use Python’s global random generator. Install deap; DEAP >=1.4.4 is required.

See the Optimizer_deap API for constructor parameters and methods.

For Nevergrad, Optuna, and DEAP, success means finalized feasibility rather than convergence; selection prefers the best evaluated feasible candidate. Partial final batches count toward budgets in both evaluation modes.

Shared Problem Definitions

The scripts instantiate QuadraticProblem, ParetoProblem, or MixedProblem directly. There are no optimizer setup helpers or parameter builders. These synthetic cases are part of the installed package:

from iwopy.benchmarks import ParetoProblem

problem = ParetoProblem(constrained=True)

Construction initializes the problem silently; importing the module creates no problem instances. See the quadratic benchmark API for all three definitions, bounds, objective formulas, and lifecycle.

Minimal Setups

iwopy GG

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    variable_ranges = problem.max_values_float() - problem.min_values_float()
    solver = create_optimizer(
        family="iwopy",  # Optimizer family
        optimizer="GG",  # Algorithm to use
        problem=problem,
        step_max=0.1 * variable_ranges,  # Initial steps: 10% of variable ranges
        step_min=1e-6 * variable_ranges,  # Minimum steps in variable units
        f_tol=1e-8,  # Objective improvement stopping tolerance
        max_iterations=100,  # Demo iterations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

iwopy SLSQP

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="iwopy",  # Optimizer family
        optimizer="SLSQP",  # Algorithm to use
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        ftol=1e-8,  # Objective and optimality stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Default

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer=None,  # Algorithm to use
        problem=problem,
        tol=1e-6,  # Method-specific convergence tolerance
        max_iterations=100,  # Demo iterations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Nelder-Mead

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="Nelder-Mead",  # Derivative-free simplex search
        problem=problem,
        adaptive=True,  # Adapt simplex coefficients to dimension
        max_iterations=200,  # Demo iterations; production start: 10000
        xatol=1e-6,  # Absolute variable convergence tolerance
        fatol=1e-8,  # Absolute objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Powell

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="Powell",  # Derivative-free direction-set search
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol=1e-6,  # Relative variable convergence tolerance
        ftol=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy CG

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="CG",  # Nonlinear conjugate-gradient optimization
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy BFGS

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="BFGS",  # Quasi-Newton optimization
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Newton-CG

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="Newton-CG",  # Newton optimization with CG inner solves
        problem=problem,
        hess="2-point",  # Estimate the Hessian from objective gradients
        max_iterations=100,  # Demo iterations; production start: 1000
        xtol=1e-6,  # Average relative step convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy L-BFGS-B

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="L-BFGS-B",  # Bound-constrained limited-memory optimization
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        ftol=1e-9,  # Relative objective improvement tolerance
        gtol=1e-6,  # Projected-gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy TNC

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="TNC",  # Bound-constrained truncated Newton optimization
        problem=problem,
        max_evaluations=500,  # Demo evaluations; production start: 10000
        gtol=1e-6,  # Projected-gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy COBYLA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="COBYLA",  # Derivative-free constrained optimization
        problem=problem,
        rhobeg=1.0,  # Initial trust-region radius in variable units
        max_evaluations=500,  # Demo evaluations; production start: 10000
        tol=1e-6,  # Final trust-region radius
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy COBYQA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="COBYQA",  # Derivative-free quadratic-model optimization
        problem=problem,
        initial_tr_radius=1.0,  # Initial radius in variable units
        final_tr_radius=1e-6,  # Final trust-region radius
        max_iterations=100,  # Demo iterations; production start: 1000
        max_evaluations=500,  # Demo evaluations; production start: 10000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy SLSQP

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="SLSQP",  # Sequential quadratic programming
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        ftol=1e-8,  # Objective and optimality stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Trust-Constr

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="trust-constr",  # Constrained trust-region optimization
        problem=problem,
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Lagrangian gradient and feasibility tolerance
        xtol=1e-8,  # Minimum trust-region radius
        barrier_tol=1e-8,  # Inequality barrier stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Dogleg

import numpy as np

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="dogleg",  # Dogleg trust-region optimization
        problem=problem,
        hess=lambda point: 2.0 * np.eye(len(point)),  # Replace for real problems
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Trust-NCG

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="trust-ncg",  # Trust-region Newton-CG optimization
        problem=problem,
        hess="2-point",  # Estimate the Hessian from objective gradients
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Trust-Exact

import numpy as np

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="trust-exact",  # Nearly exact trust-region optimization
        problem=problem,
        hess=lambda point: 2.0 * np.eye(len(point)),  # Replace for real problems
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Trust-Krylov

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="trust-krylov",  # Krylov trust-region optimization
        problem=problem,
        hess="2-point",  # Estimate the Hessian from objective gradients
        max_iterations=100,  # Demo iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Callable

from scipy.optimize import minimize

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer


def custom_method(fun, initial, args=(), jac=None, **options):
    """Delegate a SciPy callable method to BFGS.

    Parameters
    ----------
    fun
        Objective callable supplied by SciPy.
    initial
        Initial variable vector.
    args
        Additional objective arguments.
    jac
        Objective gradient callable.
    options
        SciPy method arguments; bfgs_iterations and gtol configure the
        delegated BFGS solver. Callable methods own their stopping semantics.

    Returns
    -------
    result
        SciPy optimization result from the delegated solve.
    """
    return minimize(
        fun,
        initial,
        args=args,
        jac=jac,
        method="BFGS",
        options={
            "maxiter": options.get("bfgs_iterations", 100),  # Maximum BFGS iterations
            "gtol": options.get("gtol", 1e-6),  # Gradient convergence tolerance
        },
    )


if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer=custom_method,  # User-provided SciPy optimization method
        problem=problem,
        bfgs_iterations=100,  # Demo delegated iterations; production start: 1000
        gtol=1e-6,  # Gradient convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

SciPy Differential Evolution Setup

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="scipy",  # Optimizer family
        optimizer="differential_evolution",  # Algorithm to use
        problem=problem,
        vectorize=True,  # Evaluate each generation as an iwopy population
        population_multiplier=5,  # Demo multiplier per free variable; production: 15
        seed=42,  # Reproducible initialization and variation
        max_iterations=30,  # Demo generations; production start: 1000
        tol=1e-6,  # Relative population-energy convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

pycma CMA-ES

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    variable_ranges = problem.max_values_float() - problem.min_values_float()
    solver = create_optimizer(
        family="cma",  # Optimizer family
        optimizer="CMAES",  # Algorithm to use
        problem=problem,
        sigma0=0.25 * min(variable_ranges),  # Initial search scale in variable units
        seed=42,  # Reproducible sampling
        max_iterations=50,  # Demo generations; production start: 1000
        tolx=1e-6,  # Variable convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

pymoo GA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="GA",  # Genetic algorithm
        problem=problem,
        vectorize=True,  # Evaluate each generation as an iwopy population
        pop_size=20,  # Demo population; production start: 100
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

pymoo DE

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="DE",  # Differential evolution
        problem=problem,
        variant="DE/best/1/bin",  # Mutation and crossover strategy
        vectorize=True,  # Evaluate each generation as an iwopy population
        pop_size=20,  # Demo population; production start: 100
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

pymoo PSO

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="PSO",  # Particle-swarm optimization
        problem=problem,
        adaptive=True,  # Adapt inertia and attraction coefficients
        vectorize=True,  # Evaluate each generation as an iwopy population
        pop_size=20,  # Demo swarm; production start: 40
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

pymoo NSGA2

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="NSGA2",  # Non-dominated sorting genetic algorithm
        problem=problem,
        vectorize=True,  # Evaluate each generation as an iwopy population
        pop_size=20,  # Demo Pareto population; production start: 100+
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)
    selected_index = result.find_pareto_objmix([0.5, 0.5])
    print("Selected variables:", result.vars_float[selected_index])
    print("Selected objectives:", result.objs[selected_index])

pymoo NSGA3

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="NSGA3",  # Reference-direction non-dominated sorting
        problem=problem,
        n_partitions=12,  # Production: choose partitions for 100+ directions
        vectorize=True,  # Evaluate each generation as an iwopy population
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)
    selected_index = result.find_pareto_objmix([0.5, 0.5])
    print("Selected variables:", result.vars_float[selected_index])
    print("Selected objectives:", result.objs[selected_index])

pymoo NSGA2 Constrained Flow

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem(constrained=True)
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="NSGA2",  # Non-dominated sorting genetic algorithm
        problem=problem,
        vectorize=True,  # Evaluate each generation as an iwopy population
        pop_size=20,  # Demo Pareto population; production start: 100+
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)
    selected_index = result.find_pareto_objmix([0.5, 0.5])
    print("Selected variables:", result.vars_float[selected_index])
    print("Selected objectives:", result.objs[selected_index])
    print("Selected constraint:", result.cons[selected_index])

pymoo NSGA3 Constrained Flow

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem(constrained=True)
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="NSGA3",  # Reference-direction non-dominated sorting
        problem=problem,
        n_partitions=12,  # Production: choose partitions for 100+ directions
        vectorize=True,  # Evaluate each generation as an iwopy population
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)
    selected_index = result.find_pareto_objmix([0.5, 0.5])
    print("Selected variables:", result.vars_float[selected_index])
    print("Selected objectives:", result.objs[selected_index])
    print("Selected constraint:", result.cons[selected_index])

pymoo CMAES

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="CMAES",  # Covariance-matrix adaptation
        problem=problem,
        x0=problem.initial_values_float(),  # Problem-defined starting point
        sigma=0.25,  # Initial scale in normalized variable coordinates
        verb_log=0,  # Disable native file logging
        vectorize=True,  # Evaluate each generation as an iwopy population
        seed=42,  # Reproducible sampling
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

pymoo MixedVariableGA

from iwopy.benchmarks import MixedProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = MixedProblem()
    solver = create_optimizer(
        family="pymoo",  # Optimizer family
        optimizer="MixedVariableGA",  # Mixed integer/float genetic algorithm
        problem=problem,
        vectorize=True,  # Evaluate each generation as an iwopy population
        pop_size=20,  # Demo population; production start: 100
        seed=42,  # Reproducible sampling and variation
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Objective-space convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO NLopt Wrapper

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="cobyla",  # Derivative-free linear constraint models
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO IPOPT

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="ipopt",  # Select the IPOPT backend
        problem=problem,
        hessian_approximation="limited-memory",  # Approximate the Hessian
        pop_size=1,  # One starting point, not a population search
        max_iterations=100,  # Demo iterations; production start: 1000
        tol=1e-8,  # Scaled convergence tolerance
        constr_viol_tol=1e-6,  # Maximum absolute constraint violation
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO SGA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="sga",  # Simple genetic algorithm
        problem=problem,
        cr=0.9,  # Crossover probability
        m=0.02,  # Per-gene mutation probability
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo population; production start: 100
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO PSO

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="pso",  # Particle-swarm optimization
        problem=problem,
        omega=0.7298,  # Inertia or constriction coefficient
        eta1=2.05,  # Attraction toward personal best positions
        eta2=2.05,  # Attraction toward neighbourhood best positions
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo swarm; production start: 40
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO Bee Colony

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="bee_colony",  # Artificial bee colony
        problem=problem,
        limit=20,  # Failed improvement attempts before abandoning a source
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo colony; production start: 100
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO NSGA2

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="nsga2",  # Non-dominated sorting genetic algorithm
        problem=problem,
        cr=0.95,  # Crossover probability
        m=1.0 / problem.n_vars_float,  # Per-gene mutation probability
        seed=42,  # Reproducible evolution
        pop_size=20,  # Production: 100+ individuals, in multiples of four
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    solver.algo.set_verbosity(0)
    result = solver.algo.evolve(solver.pop)
    print(result)

PyGMO DE

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="de",  # Differential evolution
        problem=problem,
        F=0.8,  # Differential mutation scale
        CR=0.9,  # Crossover probability
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo population; production start: 100
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Population objective-spread stopping tolerance
        xtol=1e-6,  # Population variable-spread stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO DE1220

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="de1220",  # Adapt differential-evolution strategies
        problem=problem,
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo population; production start: 100
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Population objective-spread stopping tolerance
        xtol=1e-6,  # Population variable-spread stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO SADE

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="sade",  # Self-adaptive differential evolution
        problem=problem,
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo population; production start: 100
        max_iterations=10,  # Demo generations; production start: 1000
        ftol=1e-6,  # Population objective-spread stopping tolerance
        xtol=1e-6,  # Population variable-spread stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO CMAES

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="cmaes",  # Covariance-matrix adaptation
        problem=problem,
        sigma0=0.25,  # Initial search step size
        force_bounds=True,  # Keep sampled candidates within variable bounds
        seed=42,  # Reproducible evolution
        pop_size=20,  # Production: max(5, 4 + int(3 * log(n_vars)))
        max_iterations=20,  # Demo generations; production start: 1000
        ftol=1e-6,  # Population objective-spread stopping tolerance
        xtol=1e-6,  # Search-distribution stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO GWO

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="gwo",  # Grey-wolf optimization
        problem=problem,
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo population; production start: 100
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO IHS

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="ihs",  # Improved harmony search
        problem=problem,
        phmcr=0.85,  # Probability of reusing a harmony-memory value
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo harmony memory; production start: 100
        max_iterations=100,  # One evaluation/iteration; production start: 10000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO Generational PSO

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="pso_gen",  # Generational particle-swarm optimization
        problem=problem,
        omega=0.7298,  # Inertia or constriction coefficient
        eta1=2.05,  # Attraction toward personal best positions
        eta2=2.05,  # Attraction toward neighbourhood best positions
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo swarm; production start: 40
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO XNES

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="xnes",  # Exponential natural evolution strategy
        problem=problem,
        sigma0=0.25,  # Initial search step size
        force_bounds=True,  # Keep sampled candidates within variable bounds
        seed=42,  # Reproducible evolution
        pop_size=20,  # Production: max(5, 4 + int(3 * log(n_vars)))
        max_iterations=20,  # Demo generations; production start: 1000
        ftol=1e-6,  # Population objective-spread stopping tolerance
        xtol=1e-6,  # Search-distribution stopping tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO SEA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="sea",  # Simple evolutionary algorithm
        problem=problem,
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo parent population; production start: 100
        max_iterations=100,  # One evaluation/iteration; production start: 10000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)
from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="compass_search",  # Derivative-free coordinate search
        problem=problem,
        start_range=0.1,  # Initial step as a fraction of variable ranges
        stop_range=1e-6,  # Minimum step as a fraction of variable ranges
        pop_size=1,  # One problem-defined starting point
        max_evaluations=200,  # Demo evaluations; production start: 10000
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

PyGMO MOEA/D

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="moead",  # Multi-objective decomposition
        problem=problem,
        neighbours=5,  # Production: 20 neighbours with a larger population
        decomposition="tchebycheff",  # Scalar subproblem formulation
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo Pareto population; production start: 100+
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    solver.algo.set_verbosity(0)
    result = solver.algo.evolve(solver.pop)
    print(result)

PyGMO Generational MOEA/D

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="moead_gen",  # Generational multi-objective decomposition
        problem=problem,
        neighbours=5,  # Production: 20 neighbours with a larger population
        decomposition="tchebycheff",  # Scalar subproblem formulation
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo Pareto population; production start: 100+
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    solver.algo.set_verbosity(0)
    result = solver.algo.evolve(solver.pop)
    print(result)

PyGMO NSPSO

from iwopy.benchmarks import ParetoProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = ParetoProblem()
    solver = create_optimizer(
        family="pygmo",  # Optimizer family
        optimizer="nspso",  # Non-dominated sorting particle swarm
        problem=problem,
        omega=0.6,  # Inertia coefficient
        diversity_mechanism="crowding distance",  # Pareto diversity measure
        seed=42,  # Reproducible evolution
        pop_size=20,  # Demo Pareto swarm; production start: 100+
        max_iterations=10,  # Demo generations; production start: 1000
    )
    solver.initialize(verbosity=0)
    solver.algo.set_verbosity(0)
    result = solver.algo.evolve(solver.pop)
    print(result)

NLopt COBYLA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="cobyla",  # Derivative-free linear constraint models
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt BOBYQA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="bobyqa",  # Bound-constrained quadratic approximation
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt NEWUOA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="newuoa",  # Unconstrained quadratic-model search
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Bounded NEWUOA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="newuoa_bound",  # Bound-constrained quadratic-model search
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt PRAXIS

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="praxis",  # Principal-axis derivative-free search
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Nelder-Mead

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="neldermead",  # Derivative-free simplex search
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Subplex

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="sbplx",  # Subspace simplex search
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt MMA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="mma",  # Method of moving asymptotes
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt CCSAQ

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="ccsaq",  # Conservative separable quadratic models
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt SLSQP

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="slsqp",  # Sequential quadratic programming
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt L-BFGS

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="lbfgs",  # Limited-memory quasi-Newton optimization
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Preconditioned Restarted Newton

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="tnewton_precond_restart",  # Preconditioning and restarts
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Preconditioned Newton

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="tnewton_precond",  # Preconditioned truncated Newton
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Restarted Newton

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="tnewton_restart",  # Restarted truncated Newton
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Truncated Newton

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="tnewton",  # Truncated Newton optimization
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt VAR2

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="var2",  # Rank-two variable-metric optimization
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt VAR1

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="var1",  # Rank-one variable-metric optimization
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

NLopt Augmented Lagrangian

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    import pygmo

    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="auglag",  # Augmented-Lagrangian constraint handling
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    local_optimizer = pygmo.nlopt("lbfgs")
    local_optimizer.maxeval = 500  # Demo subproblem budget; production: 10000
    local_optimizer.xtol_rel = 1e-6  # Relative variable convergence tolerance
    solver.algo.extract(pygmo.nlopt).local_optimizer = local_optimizer
    result = solver.solve(verbosity=0)
    print(result)

NLopt Equality Augmented Lagrangian

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    import pygmo

    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nlopt",  # Optimizer family
        optimizer="auglag_eq",  # Equality-focused augmented Lagrangian
        problem=problem,
        pop_size=1,  # One problem-defined starting point
        max_evaluations=500,  # Demo evaluations; production start: 10000
        xtol_rel=1e-6,  # Relative variable convergence tolerance
        ftol_rel=1e-8,  # Relative objective convergence tolerance
    )
    solver.initialize(verbosity=0)
    local_optimizer = pygmo.nlopt("lbfgs")
    local_optimizer.maxeval = 500  # Demo subproblem budget; production: 10000
    local_optimizer.xtol_rel = 1e-6  # Relative variable convergence tolerance
    solver.algo.extract(pygmo.nlopt).local_optimizer = local_optimizer
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad NGOpt

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="NGOpt",  # Adaptive optimizer selection
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad CMA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="CMA",  # Covariance-matrix adaptation
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad DE

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="DE",  # Differential evolution
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad TwoPointsDE

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="TwoPointsDE",  # Differential evolution with two-point crossover
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad PSO

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="PSO",  # Particle-swarm optimization
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad OnePlusOne

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="OnePlusOne",  # One-plus-one evolutionary search
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=1,  # Update the incumbent after each evaluated candidate
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad RandomSearch

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="RandomSearch",  # Independent random-sampling baseline
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Nevergrad TBPSA

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="nevergrad",  # Optimizer family
        optimizer="TBPSA",  # Population-size adaptation for noisy objectives
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Outstanding asks per batch; no threads are created
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo budget; production start: 10000+ evaluations
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Optuna TPE

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="optuna",  # Optimizer family
        optimizer="TPESampler",  # Tree-structured Parzen estimator
        problem=problem,
        n_startup_trials=20,  # Initial random trials before fitting TPE
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=1,  # Incorporate each trial before proposing the next
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo trials; production start: 1000+, subject to cost
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

Optuna Random

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="optuna",  # Optimizer family
        optimizer="RandomSampler",  # Independent random-sampling baseline
        problem=problem,
        vectorize=True,  # Evaluate each batch as an iwopy population
        batch_size=8,  # Trials evaluated together per iwopy batch
        seed=42,  # Reproducible sampling
        max_evaluations=100,  # Demo trials; production start: 1000+, subject to cost
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

DEAP Simple

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="deap",  # Optimizer family
        optimizer="eaSimple",  # Generational replacement
        problem=problem,
        cxpb=0.5,  # Crossover probability
        mutpb=0.2,  # Mutation probability
        vectorize=True,  # Evaluate offspring as an iwopy population
        pop_size=20,  # Demo population/offspring; production start: 100
        seed=42,  # Reproducible initialization and variation
        max_evaluations=400,  # Demo evaluations; production start: 10000+
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

DEAP Mu Plus Lambda

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="deap",  # Optimizer family
        optimizer="eaMuPlusLambda",  # Select survivors from parents and offspring
        problem=problem,
        cxpb=0.5,  # Crossover probability; cxpb + mutpb must not exceed one
        mutpb=0.2,  # Mutation probability
        vectorize=True,  # Evaluate offspring as an iwopy population
        pop_size=20,  # Demo population/offspring; production start: 100
        seed=42,  # Reproducible initialization and variation
        max_evaluations=400,  # Demo evaluations; production start: 10000+
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)

DEAP Mu Comma Lambda

from iwopy.benchmarks import QuadraticProblem
from iwopy import create_optimizer

if __name__ == "__main__":
    problem = QuadraticProblem()
    solver = create_optimizer(
        family="deap",  # Optimizer family
        optimizer="eaMuCommaLambda",  # Select survivors only from offspring
        problem=problem,
        cxpb=0.5,  # Crossover probability; cxpb + mutpb must not exceed one
        mutpb=0.2,  # Mutation probability
        vectorize=True,  # Evaluate offspring as an iwopy population
        pop_size=20,  # Demo population/offspring; production start: 100
        seed=42,  # Reproducible initialization and variation
        max_evaluations=400,  # Demo evaluations; production start: 10000+
    )
    solver.initialize(verbosity=0)
    result = solver.solve(verbosity=0)
    print(result)