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¶
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 / Powell |
Single; bounds; derivative-free |
Local direction-set search |
Derivative-free local refinement with box bounds |
|
SciPy / CG |
Single; unconstrained; gradients |
Nonlinear conjugate gradients |
Large smooth problems where memory matters |
|
SciPy / BFGS |
Single; unconstrained; gradients |
Local quasi-Newton search |
Smooth small-to-medium problems |
|
SciPy / Newton-CG |
Single; unconstrained; curvature |
Local Newton-CG; example supplies a Hessian |
Smooth problems with cheap curvature products |
|
SciPy / L-BFGS-B |
Single; bounds; gradients |
Limited-memory local quasi-Newton search |
Large smooth box-bounded problems |
|
SciPy / TNC |
Single; bounds; gradients |
Local truncated Newton |
Smooth box bounds with truncated-Newton steps |
|
SciPy / dogleg |
Single; unconstrained; Hessian |
Local dogleg trust region |
Small problems with a positive-definite Hessian |
|
SciPy / trust-ncg |
Single; unconstrained; curvature |
Local Newton-CG trust region |
Curvature products without storing a dense Hessian |
|
SciPy / trust-exact |
Single; unconstrained; Hessian |
Nearly exact local trust-region solve |
Small-to-medium problems with affordable Hessians |
|
SciPy / trust-krylov |
Single; unconstrained; curvature |
Local Krylov trust region |
Large smooth problems with curvature products |
|
SciPy / callable method |
Single; custom |
User method; example delegates to BFGS |
Integrate your own minimize-compatible method |
|
PyGMO / cmaes |
Single; bounds; derivative-free |
Continuous covariance adaptation |
Correlated continuous variables in a PyGMO workflow |
|
PyGMO / xnes |
Single; bounds; derivative-free |
Exponential natural evolution strategies |
Compare distribution-based continuous search |
|
PyGMO / sea |
Single; bounds; derivative-free |
Simple evolutionary search |
A minimal evolutionary comparison baseline |
|
PyGMO / compass_search |
Single; bounds; derivative-free |
Local coordinate pattern search |
Cheap derivative-free local refinement |
|
NLopt / bobyqa |
Single; bounds; derivative-free |
Local quadratic approximation |
Smooth box-bounded black boxes |
|
NLopt / newuoa |
Single; unconstrained; derivative-free |
Local quadratic approximation |
Smooth unconstrained black boxes |
|
NLopt / newuoa_bound |
Single; bounds; derivative-free |
Bound-constrained NEWUOA |
Local quadratic models with box bounds |
|
NLopt / praxis |
Single; bounds; derivative-free |
Local principal-axis search |
Derivative-free search with changing search directions |
|
NLopt / neldermead |
Single; bounds; derivative-free |
Local simplex search |
Small nonsmooth local-search problems |
|
NLopt / sbplx |
Single; bounds; derivative-free |
Local subspace simplex search |
Simplex search on larger or nonsmooth problems |
|
NLopt / lbfgs |
Single; bounds; gradients |
Local limited-memory BFGS |
Smooth problems where low memory is useful |
|
NLopt / tnewton_precond_restart |
Single; bounds; gradients |
Preconditioned restarted truncated Newton |
Large smooth problems with gradient evaluations |
|
NLopt / tnewton_precond |
Single; bounds; gradients |
Preconditioned truncated Newton |
Gradient-based local search with preconditioning |
|
NLopt / tnewton_restart |
Single; bounds; gradients |
Restarted truncated Newton |
Gradient-based local search with restarts |
|
NLopt / tnewton |
Single; bounds; gradients |
Local truncated Newton |
Smooth local search using gradients |
|
NLopt / var2 |
Single; bounds; gradients |
Rank-two limited-memory variable metric |
Compare smooth variable-metric local search |
|
NLopt / var1 |
Single; bounds; gradients |
Rank-one limited-memory variable metric |
Compare a lighter variable-metric update |
Single-Objective, Unconstrained, Global¶
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 / pso |
Single; bounds; derivative-free |
Population particle swarm |
Continuous swarm search with box bounds |
|
PyGMO / bee_colony |
Single; bounds; derivative-free |
Artificial bee-colony search |
An alternative continuous population heuristic |
|
PyGMO / de |
Single; bounds; derivative-free |
Population differential evolution |
A box-bounded global-search baseline |
|
PyGMO / de1220 |
Single; bounds; derivative-free |
Self-adaptive DE strategy variants |
Compare DE strategies without fixing one variant |
|
PyGMO / sade |
Single; bounds; derivative-free |
Self-adaptive differential evolution |
Reduce manual DE parameter tuning |
|
PyGMO / gwo |
Single; bounds; derivative-free |
Grey-wolf population search |
Compare another box-bounded population heuristic |
|
PyGMO / pso_gen |
Single; bounds; derivative-free |
Generational particle swarm |
Generational swarm search in a PyGMO workflow |
Single-Objective, Constrained, Local¶
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 / SLSQP |
Single; constraints; gradients |
Scaled local SLSQP with population Jacobians |
Smooth constrained problems needing local refinement |
|
SciPy / default |
Single; method-dependent |
Local method chosen from bounds and constraints |
A first local solver for smooth problems |
|
SciPy / COBYLA |
Single; inequalities; derivative-free |
Local linear approximation |
Nonlinear inequalities without derivatives |
|
SciPy / COBYQA |
Single; constraints; derivative-free |
Local quadratic approximation; SciPy >=1.14 |
Smooth constrained problems without gradients |
|
SciPy / SLSQP |
Single; constraints; gradients |
Local sequential quadratic programming |
Smooth equalities and inequalities |
|
SciPy / trust-constr |
Single; constraints; gradients |
Constrained local trust-region search |
Smooth constrained problems needing trust-region control |
|
pycma / CMA-ES |
Single; constraints; derivative-free |
Continuous population covariance adaptation |
Correlated continuous variables and nonlinear black boxes |
|
pymoo / CMAES |
Single; one-sided constraints; derivative-free |
Continuous covariance adaptation |
CMA-ES within an existing pymoo workflow |
|
PyGMO / nlopt |
Single; solver-dependent |
Optional native local-solver wrapper |
Choose a specific NLopt local method below |
|
PyGMO / ipopt |
Single; constraints; gradients |
Optional native interior-point local solver |
Smooth constrained problems in an IPOPT-enabled build |
|
NLopt / cobyla |
Single; constraints; derivative-free |
Local constrained linear approximation |
Constrained black boxes without derivatives |
|
NLopt / mma |
Single; inequalities; gradients |
Local method of moving asymptotes |
Smooth nonlinear inequality constraints |
|
NLopt / ccsaq |
Single; inequalities; gradients |
Local conservative separable approximation |
Smooth inequality-constrained local refinement |
|
NLopt / slsqp |
Single; constraints; gradients |
Local sequential quadratic programming |
Smooth equality and inequality constraints |
|
NLopt / auglag |
Single; constraints; gradients in setup |
Augmented Lagrangian with local L-BFGS |
General constraints with a chosen smooth local solver |
|
NLopt / auglag_eq |
Single; constraints; gradients in setup |
Equality augmented Lagrangian with local L-BFGS |
Equalities when the local solver handles remaining restrictions |
|
Nevergrad / CMA |
Single; mixed; constraints; derivative-free |
Population covariance adaptation |
Correlated black-box variables |
|
Nevergrad / OnePlusOne |
Single; mixed; constraints; derivative-free |
One-plus-one evolutionary search |
Small budgets or cheap incremental search |
|
Nevergrad / TBPSA |
Single; mixed; constraints; derivative-free |
Test-based population-size adaptation |
Noisy objectives with sufficient evaluations |
Single-Objective, Constrained, Global¶
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 |
|
pymoo / GA |
Single; one-sided constraints; derivative-free |
Population genetic search |
A general evolutionary baseline |
|
pymoo / DE |
Single; one-sided constraints; derivative-free |
Population differential evolution |
Continuous multimodal black-box search |
|
pymoo / PSO |
Single; one-sided constraints; derivative-free |
Population particle swarm |
Continuous swarm search as a comparison baseline |
|
pymoo / MixedVariableGA |
Single; mixed; one-sided constraints; derivative-free |
Mixed integer/float genetic search |
Genetic search with both integer and floating variables |
|
PyGMO / ihs |
Single; constraints; derivative-free |
Improved harmony search |
Constrained heuristic search without derivatives |
|
Nevergrad / NGOpt |
Single; mixed; constraints; derivative-free |
Adaptive optimizer portfolio |
A black-box starting point when strategy is uncertain |
|
Nevergrad / DE |
Single; mixed; constraints; derivative-free |
Population differential evolution |
Multimodal bounded black-box search |
|
Nevergrad / TwoPointsDE |
Single; mixed; constraints; derivative-free |
Two-point DE crossover |
Compare a different DE crossover strategy |
|
Nevergrad / PSO |
Single; mixed; constraints; derivative-free |
Population particle swarm |
A swarm baseline for bounded black boxes |
|
Nevergrad / RandomSearch |
Single; mixed; constraints; derivative-free |
Independent random search |
A reproducible baseline before adaptive search |
|
Optuna / TPESampler |
Single; mixed; constraints; derivative-free |
Parzen estimation with pending-trial handling |
Costly bounded integer/float tuning |
|
Optuna / RandomSampler |
Single; mixed; constraints; derivative-free |
Random sampling without a constraint model |
Baselines or very small evaluation budgets |
|
DEAP / eaSimple |
Single; mixed; constraints; derivative-free |
Tournament-based generational replacement |
Straightforward generational genetic search |
|
DEAP / eaMuPlusLambda |
Single; mixed; constraints; derivative-free |
Tournament selection from parents and offspring |
Genetic search that retains parent candidates |
|
DEAP / eaMuCommaLambda |
Single; mixed; constraints; derivative-free |
Offspring-only tournament replacement |
Exploratory genetic search replacing all parents |
Multi-Objective, Unconstrained, Global¶
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 / NSGA3 |
Multi; bounds; derivative-free |
Unconstrained reference-direction Pareto search |
Many competing objectives without extra restrictions |
|
PyGMO / nsga2 |
Multi (native); bounds; derivative-free |
Native Pareto nondominated sorting |
Two or three objectives when native PyGMO results suffice |
|
PyGMO / moead |
Multi (native); bounds; derivative-free |
Native Pareto decomposition search |
Trade-offs organized by scalar subproblems |
|
PyGMO / moead_gen |
Multi (native); bounds; derivative-free |
Generational native Pareto decomposition |
A generational variant of decomposition search |
|
PyGMO / nspso |
Multi (native); bounds; derivative-free |
Native Pareto particle swarm |
Compare swarm-based trade-off search |
Multi-Objective, Constrained, Global¶
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 / NSGA3 (constrained flow) |
Multi; one-sided constraints; derivative-free |
Feasible reference-direction Pareto search |
Many objectives with additional restrictions |
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:
Unconstrained: pymoo NSGA2 and pymoo NSGA3.
- With
x + y <= -0.25: pymoo NSGA2 Constrained Flow and
- With
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)
PyGMO Compass Search¶
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)