History

v0.0.11-alpha

This is the initial release of iwopy - ready for testing.

So far not many models have been transferred from the Fraunhofer IWES in-house predecessor iwes-opt, they will be added in the following versions. We are just getting started here!

Enjoy - we are awaiting comments and issues, thanks for testing.

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.0.11

v0.0.12-alpha

  • Benchmarks:

    • New benchmark rosenbrock added

  • Tests:

    • Extended tests for pygmo and pymoo

  • Fixes:

    • Bugs fixed with discretization

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.0.12

v0.0.13-alpha

  • Wrappers:

    • Introducing SimpleObjective and SimpleConstraint, for functions of simple numeric types like f(x, y, ...)

  • Examples:

    • New example: electrostatics, solvable with IPOPT, GA, PSO

  • Notebooks:

    • Work on examples.ipynb: Adding section on simple function minimization

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.0.13

v0.0.14-alpha

  • Notebooks:

    • Work on examples.ipynb: Adding electrostatics example

  • Core:

    • OptResults can now be printed

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.0.14

v0.0.15-alpha

  • Utils:

    • RegularDiscretizationGrid now with interpolation parameter: None, nearest or linear

  • Wrappers:

    • New wrapper: LocalFD, Local Finite Difference. Calculates function derivatives by applying local finite difference rules. Currently orders 1 and 2 are implemented, more could be added later.

  • Optimizers:

    • New optimizer: GG, Greedy Gradient. A pretty straight forward gradient based local optimizer that projects out (or reverses) directions of constraint violation. Mostly implemented for the purpose of testing gradients, but maybe worth a try also for problem solving.

  • Examples:

    • electrostatics: New optional constraint MinDist, forcing charges to keep a minimal distance. Also adding a script that demonstrates how to solve this problem using NLOPT via pygmo, and another for solving the problem using the GG algorithm.

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.0.15

v0.1.0-alpha

  • Bug fixes

  • Updated documentation

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.0

v0.1.1-alpha

  • Tests:

    • pygmo: Increased ngen and npop, intended for osx systems to pass tests

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.

v0.1.2-alpha

  • Tests:

    • pygmo: Fixing test such that it passes on all systems

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.2

v0.1.3-alpha

  • Core:

    • Support for multi objective optimizations

    • Splitting OptResults into SingleObjOptResults and MultiObjOptResults

  • Interfaces:

    • pymoo: Adding nsga2

  • Examples:

    • New: multi_obj_chain, demonstrating multi objective optimization using pymoo’s NSGA2

  • Notebooks:

    • New: multi_obj_chain.ipynb, demonstrating multi objective optimization using pymoo’s NSGA2

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.3

v0.1.4-alpha

  • Interfaces:

    • Improved: pymoo now supports mixed int/float problems and algorithm MixedVariableGA

    • Changed: pymooalgorithms now selectable via same name as in package, i.e., GA, PSO, NSGA2, MixedVariableGA

  • Examples:

    • New: mixed, demonstrating how to solve a mixed int/float problem with pymoo

  • Notebook:

    • New: mixed, demonstrating how to solve a mixed int/float problem with pymoo

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.4

v0.1.5-alpha

  • Small bug fixes

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.5

v0.1.6-alpha

  • Interfaces

    • New interface to scipy: Calling the scipy.optimize.minimize function

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.6

v0.1.7-beta

  • Utils

    • New import_module utility, dynamically loading packages and modules

  • Interfaces

    • Improved dynamic imports of pygmo and pymoo

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.7

v0.1.8-beta

  • Bug fixed in setup.cfg

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.8

v0.1.9-beta

  • Bug fixes

    • Fixes for bugs in tests for Python 3.7 and 3.11

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.1.9

v0.2-beta

  • Interfaces:

    • Improved pymoo: Dynamical derivation from classes from optional package import

  • Documentation:

    • Completely new sphinx style

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.2

v0.2.1

  • Documentation improvements

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.2.1

v0.2.2

  • Restricting numpy to <2, due to dependencies

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.2.2

v0.2.3

  • Recovering support for Python 3.7

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.2.3

v0.3

  • removing restriction numpy <2, since now latest numpy is supported again by indirect dependency autograd

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.3

v0.3.1

  • Added factories for allowing automatized setups

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.3.1

v0.4.0

  • Dropping support for Python 3.8

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.4.0

v0.5.0

  • Core:

    • Added optimization pipelines through the new abstract Pipeline base class.

    • Added native optimizer callbacks with normalized intermediate states for GG, SLSQP, SciPy, pymoo, and PyGMO. Callback validation and finalization are now consistent, callback-free runs avoid adapter overhead, and unsupported PyGMO IPOPT callbacks fail explicitly.

    • Unified problem summaries across optimizer output.

  • Optimizers:

    • Added SLSQP for constrained single-objective problems, with automatic dimensionless scaling, vectorized iwopy Jacobians, evaluation-free progress output, and reuse of cached function values in LocalFD.

    • Hardened GG for zero and non-finite gradients, general constraint bounds, stalled constraints, hard iteration limits, and convergence edge cases.

  • Interfaces:

    • Extended pymoo factories with DE, NSGA3, and CMAES, and improved integer offspring handling, reusable configurations, and bounded single-objective termination.

    • Expanded PyGMO algorithm support and made IPOPT option handling more robust.

  • Problems:

    • Added DiscreteLocalMoveOptProblem for applying one small discrete move per wind turbine.

  • Examples:

    • Added runnable SLSQP and pymoo examples for general constraints and callbacks, including live progress and objective-history plots.

  • Bugs:

    • Fixed lower-bound second-order finite differences in LocalFD, maximization gradient orientation in PyGMO, and callback leakage after PyGMO solves.

    • Fixed regular-grid index and interpolation error handling, SciPy mixed-variable bounds and cache eviction, disabled pymoo problem-result storage access, and empty PyGMO gradient sparsity handling.

    • Rejected boolean values for integer-only GG iteration settings and GG or SLSQP memory sizes.

    • Fixed package-version fallback lookup on Python versions without tomllib.

  • Dependencies:

    • Added the iwopy[scipy], iwopy[pymoo], iwopy[pygmo], and iwopy[opt] extras; dropped Python 3.9 and raised runtime, PyGMO, test, and documentation dependency floors.

  • Development:

    • Added package-wide type annotations and strict mypy checking, enforced by pre-commit.

    • Standardized API docstrings and Sphinx configuration on the foxes NumPyDoc style, with a Python 3.10 TOML fallback for documentation builds.

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v0.5.0

v1.0.0

  • Python versions:

    • Added Python 3.14 support; Python 3.10 remains the minimum supported version.

  • Core:

    • Jacobian assembly and optimizer caches now use SciPy CSR matrices instead of dense arrays. Use Problem.get_jacobian() and calc_jacobian() for matrix derivatives; scalar gradients and backend-required native names retain their meaning.

    • Added iwopy.create_optimizer to select a backend family and algorithm, including a PyGMO-backed nlopt family. The root and core exports are the same function; public optimizer class names are unchanged.

    • Pipelines support restart result seeding for selected stage ranges and clear running state before finalization after stage-reported failures.

  • Wrappers:

    • LocalFD supports bounded vectorized finite-difference batches through max_population_size and avoids evaluating analytically differentiated components during numerical Jacobian completion.

  • Optimizers:

    • GG caps fresh finite-difference steps without extra backtracking evaluations, aligns progress output with completed-iteration callbacks, and keeps a feasible iterate when every trial violates constraints.

    • SLSQP retains its best fully feasible point independently of convergence, supports inward margins and bounded restoration with explicit positive restoration_scales, and starts objective-progress patience only after feasibility. Restoration merit and derivatives use consistent normalization; bound-certified row reduction preserves full feasibility checks.

  • Interfaces:

    • Gradient-capable SciPy minimizers use cached, population-vectorized Jacobians and grouped general constraints for continuous variables.

    • Added SciPy differential evolution with mixed integer/float variables, cached nonlinear constraint evaluations, callbacks, and per-dimension population sizing.

    • Added lazy optional Nevergrad, Optuna, and DEAP interfaces for bounded single-objective problems, general constraints, and evaluated-candidate results. The evolutionary adapter exposes generation limits.

    • Added the lazy optional cma interface for pycma CMA-ES with native augmented-Lagrangian constraints, callbacks, finalized results, and termination diagnostics; it supports scalar and population evaluation.

    • pymoo run limits compose with custom termination criteria

    • pygmo reads sparse fitness-Jacobian entries without densification.

  • Benchmarks:

    • Published QuadraticProblem, ParetoProblem, and MixedProblem through iwopy.benchmarks, replacing the optimizer examples’ local shared-case module.

  • Examples and documentation:

    • Added an optimizer catalog with 81 runnable, main-guarded factory-call scripts using installed-package imports without path setup. Entries are grouped by objective, constraint, and local/global capabilities, with practical recommendations and links to class APIs.

    • Added constrained NSGA2/NSGA3 Pareto examples with explicit weighted selection. All maintained examples and notebooks use the root optimizer factory and current constructor and run-limit controls; maintained FOXES Optimization callers were migrated too.

    • Reworked optimizer setups with individually annotated controls, short demo budgets, and production starting suggestions. Local PyGMO solvers use one starting point; native iwopy optimizers are identified as such.

    • Expanded the Vectorized Interfaces overview to cover all adapters and distinguish search, Jacobian, and batch-fitness vectorization. Added shared parameter and termination support tables.

    • Corrected chain constraint counts, callback failure semantics, and the gradient optimizer architecture link; aligned token-review guidance with the policy keeping documentation checks outside pytest.

    • Consolidated these release notes by area, separating user-facing changes and breaking APIs from contributor workflow details.

Full Changelog: https://github.com/FraunhoferIWES/iwopy/commits/v1.0.0