Changelog¶
v0.1¶
Copying code from
foxes.opt
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1
v0.1.3¶
Adding documentation
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.3
v0.1.4¶
Adding example notebook:
layout_optimization.ipynb
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.4
v0.1.5¶
Adding first test
00_layout_single_state
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.5
v0.1.6¶
Fixing bug in test
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.6
v0.1.7¶
Updated documention
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.7
v0.2¶
Adding github workflow for automatic testing
Adding support for foxes engines
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2
v0.2.1¶
Bug fixed with
MaxFarmPowerobjective, now using states weights in states contraction
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.1
v0.2.2¶
New notebook:
wake_steering.ipynb, demonstrating how to optimize yaw angles
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.2
v0.3¶
Introducing command line application
foxes_opt_yaml: Runs optimization fromyamlparameter input file, no Python script needed.Changes in
FarmVarsObjective: Renaming contraction rulemeanintomean_no_weights.Adding run-time factories to problems, objectives, and constraints.
Introducing
outputsub package, and first outputsSingleOptResultsWriterandMultiOptResultsWriterNew example
yaml_input, demonstrating how to run *foxes_out through a yaml parameter file
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3
v0.4¶
Support for foxes v1.3
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.4
v0.5¶
Support for foxes v1.4
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.5
v0.6¶
Compatibility with foxes v1.5
Dropping support for Python 3.8
Introducing minimal package versions of dependencies
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.6
v0.7.0¶
Compatibility with foxes v1.7.0
Moving currently not running or deprecated opt problems to new
scratchfolder:GeomLayoutGridded,GeomLayout,RegGridsLayoutOptProblemBug fixes:
Bugs fixed that caused error with
RegularLayoutOptProblemBug fixed with
GGand layout problems
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.7.0
v0.7.1¶
Compatibility with foxes v1.7.4
Compatibility with iwopy v0.5.0
New optimization pipeline:
LayoutPipeline, combining different optimizations for generating an optimal wind farm layout
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.7.1
v0.8.0¶
General:
Compatibility with foxes v1.9.2
Fixed vectorized wake-steering optimization with gridded rotor weights
Dropping support for Python 3.9
Introducing type annotations
Raising overlapping dependency minimum versions in
pyproject.tomlto be no lower than the corresponding minimum versions in foxes
Documentation:
Migrating Sphinx API docs from
sphinx_immaterial.apidoc.python.apigento AutoAPI
Examples:
New example
layout_field_data, demonstrating pymoo-based layout optimization withFieldDatastates loaded from multiple NetCDF files
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.8.0
v0.9.0¶
General:
Expanded type annotations and tightened code checks across the package
Dependencies:
Raised the minimum supported versions to foxes v1.9.6 and iwopy v0.5.0, and aligned overlapping dependency floors with both projects
Callbacks:
Added an optimizer-independent layout callback with optional intermediate CSV output, configurable image snapshots and objective titles, and red highlighting of constraint violations in the legend
Pipelines:
LayoutPipelinenow retains stage results and supports layout plot and CSV outputAdded
LayoutOptimizerStagefor optimizer-driven refinement of layouts from previous stages, with user-selectable optimization problem typesAdded
RandomSubsetStagefor successive layout optimizations over random turbine and state subsets, forwarding layout optimizer configuration through its base stage
Examples:
Added pymoo and SLSQP wind-rose examples using the layout callback
Added a pygmo-IPOPT wind-rose example without callbacks, since pygmo exposes neither exact live IPOPT iterations nor their decision vectors
Added a pygmo-IPOPT single-state layout example with configurable, layout-scale finite differences; progress output reports native IPOPT iterations separately from objective function evaluations
Bug fixes:
Weighted state contractions now normalize by the selected weight sum
Fixed multi-state population optimization for population-major foxes state ordering
Full Changelog: https://github.com/FraunhoferIWES/foxes-opt/commits/v0.9.0
v0.9.1¶
Dependencies and iwopy integration:
Require FOXES >=1.9.8 to inherit its corrected runtime security floor
Require iwopy >=1.0.0 and consume CSR
get_jacobian/calc_jacobianmatrices,iwopy.create_optimizer, flat native options, sharedmax_iterations/max_evaluationscontrols, and pymoo pure-limit selectors throughout maintained workflows and documentation; YAML usesfamily/optimizer, while layout stages useoptimizer_family, including boundary-repair overrides. Retained scalar-gradient terms, native convergence, and distinct population/batch units; documented sparse native boundaries and corrected spacing-selection ownership
General:
Added support for Python 3.14
Added coding-agent policies, including developer-owned uv setup and mandatory
uv run --no-sync, plus FOXES Optimization-specific architecture, naming, development, docstring, ADR, data-classification, and visual-design guidanceRecorded Fraunhofer corporate design for FOXES Optimization visual surfaces
Callbacks:
Layout image snapshots now omit turbine annotations, use true turbine radii with color-matched outlines, use configurable validity colors that default to high-contrast blue and red, and live in a file-type subdirectory. Added restart offsets and optional initial step-zero snapshots, enabled by default; initial objectives and constraints are evaluated before plotting, including without integer variables. Fixed validity colors for small turbines and nearest-group constraint violations
Added a CSV optimization-history callback that records objective values and violated constraint-component counts per iteration, with restart offsets and validated append mode. Optional initial evaluation (
write_initial=Falseby default) records the starting values before the first optimizer iteration
Pipelines:
LayoutOptimizerStagenow forwards callbacks to the optimizer and accepts stage-local FOXES algorithm parameter overrides throughalgo_parsLayoutPipelineaccepts finite initial coordinates without a preceding layout-generation stage and can restart a selected stage from a validated persisted layout index without resetting earlier pipeline resultsAutomatic minimum-distance constraints accept their own parameter mapping, allowing boundary and spacing families to use independent tolerances
Layout plots now match callback snapshots with true turbine radii, high-contrast colors, matched outlines, and validity legends
Constraints:
MinDistConstraintnow provides analytical position derivatives, vectorized variable-dependency masks for faster large-farm Jacobians, and bound-certified nearby-pair selection preserving full component identities and checks; callers enforce selection bounds, while current iwopy SLSQP evaluates all registered pairsAdded
NearestGroupConstraint, enforcing nearest-distance and minimum connected-group-size limits with piecewise analytical position derivativesAdded analytical derivatives for area boundaries and geometrical layout constraints, including composed and internally excluded geometries, with cached bulk signed-distance gradients for area-geometry Jacobians
Objectives:
Added analytical derivatives for turbine-count and geometrical layout objectives; FOXES-result objectives continue to require
iwopy.LocalFD
Bug fixes:
Layout candidates now update turbine coordinates before FOXES state initialization, while final individual layouts restore scalar positions
Partial-turbine population objectives now select the turbine axis and the matching turbine-dependent weights
Local-square layout bounds remain anchored to the initial layout during vectorized population evaluations
Full Changelog: https://github.com/FraunhoferIWES/foxes-opt/compare/v0.9.0…v0.9.1