v0.22.0
TulipaEnergyModel v0.22.0
Breaking changes
-
Reworked model parameters. The
ModelParametersJulia struct andEnergyProblem(connection; model_parameters_file=...)path were removed. Model parameters now live in themodel_parameterstable, with defaults populated during data preparation. -
Renamed/refactored investment method configuration. The old
asset.investment_methodfield was replaced byasset.vintage_method, with current values:aggregatedcompact_profilescompact_efficiencies
-
Changed storage-energy investment configuration.
storage_method_energyis now a string option instead of a boolean:noneoptimize_storage_capacityuse_fixed_energy_to_power_ratio
-
Changed unit commitment configuration.
unit_commitmentis now the method selector with values such asnone,basic, and3var; the old separateunit_commitment_methodfield was removed. -
Reworked investment-group inputs. The old
group_assettable andasset.investment_groupcolumn were replaced by explicit tables:investment_group_assetinvestment_group_asset_membership
-
Renamed storage “over-clustered year” terminology to “inter-period”. This affects internal/output names such as
var_storage_level_inter_period,cons_balance_storage_inter_period, and related dual outputs. -
Assets with
min_operating_point > 0can now receive minimum flow constraints even whenunit_commitment = "none". Existing models that relied onmin_operating_pointbeing inactive without unit commitment may solve differently.
Added
-
Added Conditional Value at Risk support for stochastic optimization, including:
- model parameters
risk_aversion_weight_lambdaandrisk_aversion_confidence_level_alpha - Value at Risk threshold variable
mu - tail excess slack variable
xi - scenario tail excess constraints
- CVaR objective contribution
- model parameters
-
Added objective cost breakdown support through
obj_breakdown, with documentation for extracting more detailed objective components. -
Added validation for consistency between
investablesettings andasset_bothdata. -
Added support for minimum flow limits without requiring full unit commitment.
-
Added schema-derived documentation for mandatory input columns.
Changed
-
Refactored objective construction into
src/objectives/, with one file per objective term. -
Updated inter-period storage balance to use the accumulated intra-period storage level delta formulation.
-
Updated to TulipaBuilder
0.3. -
Updated documentation for multi-year investments, CVaR, objective breakdowns, API references, and developer guidance.
Fixed
-
Fixed seasonal storage min/max profile queries to use
assets_timeframe_profiles. -
Updated the JuMP IIS infeasibility-checking example.
-
Removed temporary debug files introduced during the TulipaBuilder update.
Maintenance
-
Added Aqua tests and fixed issues they reported.
-
Updated CI actions and dependency compat bounds, including Codecov, stale action, upload-artifact, julia-actions/cache, ParametricOptInterface, and OrderedCollections.
-
Added data schema migration guidance and migration scripts for investment-group changes.
Merged pull requests:
- [AUTO] pre-commit update (#1514) (@github-actions[bot])
- Bump julia-actions/cache from 2 to 3 (#1515) (@dependabot[bot])
- Add copilot instructions for issues and reviews (#1516) (@datejada)
- Rename overcluster year (#1530) (@g-moralesespana)
- Fix issue #1531: Update the working example of checking infeasibility through JuMP IIS functionality. (#1532) (@IsaiMaganTNO)
- Change in energy to power ratio method for energy storage assets (#1533) (@datejada)
- Add model parameters for risk aversion: weight lambda and confidence level alpha (#1534) (@florinelaseur)
- Add variable Value at Risk threshold mu and tests (#1535) (@florinelaseur)
- docs: add florinelaseur as a contributor for code, research, and doc (#1536) (@allcontributors[bot])
- Add objective cost breakdown to existing components in the objective (#1537) (@gnawin)
- [docs] Add more instructions to AGENTS.md (#1539) (@gnawin)
- Add tail excess loss slack variable xi and tests (#1540) (@florinelaseur)
- Refactor model parameters (#1542) (@datejada)
- Add CVaR term to objective and tests (#1543) (@florinelaseur)
- More improvements to AGENTS.md (#1545) (@abelsiqueira)
- Split objective.jl into objectives/ folder (one file per term) (#1551) (@Copilot)
- Remove year_data table (#1552) (@gnawin)
- Add Julia MCP testing instructions to AGENTS.md and developer docs (#1556) (@abelsiqueira)
- Update docs with inter-period instead of over-cluster-year (#1557) (@datejada)
- Update to TulipaBuilder 0.3 (#1558) (@abelsiqueira)
- Bump codecov/codecov-action from 5 to 6 (#1561) (@dependabot[bot])
- Change investment group description to use separate table for membership (#1562) (@abelsiqueira)
- Remove ModelParameters struct (#1567) (@gnawin)
- Add data schema migration guidelines to docs and AGENTS (#1568) (@abelsiqueira)
- Small refactor of data validation and agent docs (#1569) (@abelsiqueira)
- Update TulipaBuilder requirement to 0.3.0 in /test (#1570) (@dependabot[bot])
- [docs] Update formulation (#1571) (@gnawin)
- Add CVaR scenario tail excess constraints (#1575) (@datejada)
- Add SQL guidelines for coding (#1576) (@datejada)
- Centralize export declarations (#1581) (@abelsiqueira)
- Add AI usage disclosure section to JOSS paper and small fix (#1582) (@abelsiqueira)
- Refactor inter period storage balance to use accumulated intra period storage level (delta formulation) (#1586) (@datejada)
- Add paragraph related to impact to JOSS paper (#1591) (@abelsiqueira)
- Update mathematical formulation with delta formulation (#1592) (@datejada)
- Create output directory in tutorial 1 (#1594) (@abelsiqueira)
- Fix seasonal storage min/max profile query to use assets_timeframe_profiles (#1595) (@datejada)
- Refactor and rename investment methods (#1596) (@gnawin)
- Update documentation with CVaR feature (#1599) (@datejada)
- Refactor unit_commitment parameter (#1602) (@datejada)
- Remove debug files added by 6591482 (#1603) (@abelsiqueira)
- Update documentation on multi-year investments (#1605) (@gnawin)
- Add instructions for finer objective breakdown-down (#1606) (@gnawin)
- Bump actions/stale from 10.2.0 to 10.3.0 (#1607) (@dependabot[bot])
- [AUTO] pre-commit update (#1608) (@github-actions[bot])
- Update SIENNA link (#1610) (@datejada)
- Update SIENNA link (#1611) (@datejada)
- Document mandatory input columns with schema-derived summary table (#1612) (@Copilot)
- [AUTO] pre-commit update (#1613) (@github-actions[bot])
- Add min flow limit without unit commitment constraint (#1614) (@datejada)
- [AUTO] pre-commit update (#1616) (@github-actions[bot])
- Bump codecov/codecov-action from 6 to 7 (#1617) (@dependabot[bot])
- Update OrderedCollections requirement from 1 to 1, 2.0 (#1618) (@dependabot[bot])
- Update OrderedCollections requirement from 1 to 1, 2.0 in /docs (#1619) (@dependabot[bot])
- Restructure API reference and align docs checks with public API (#1620) (@Copilot)
- Rename investment group input tables to explicit
investment_*names (#1621) (@Copilot) - Update coverage recommendation in docs (#1622) (@datejada)
Closed issues:
- Align terminology with INES-spec (#622)
- Rename rep_periods_mapping (#643)
- Write Developer documentation for adding features (#986)
- Create the flows
rep_periods_partitiontable from the information of the assets (#1052) - Add two-stage stochastic optimization feature (#1082)
- Improve model creation by using expressions and bounds instead of constraints (#1084)
- Improve required/optional section of Model Parameters (#1087)
- Validate the sum of minimum constraints is greater than the group maximum constraint (#1112)
- Add maximum capacity group constraint (#1152)
- Change binary and handling of flow capacity (#1162)
- Add a method to determine how you want to consider the final storage level of a storage asset (#1174)
- Metadata for visualisation dashboard (#1201)
- Update JuliaFormatter to v2 (#1233)
- Remove efficiency and other parameters from the unrolled partitions (#1235)
- Investigate time efficiency and TimerOutput oddities (#1243)
- [Validation] consistency between
investableand investment methodnone(#1249) - Refactor the logic of the multi-year expressions around the definition of
investment_method(#1250) - Improve build speed of documentation (#1264)
- Improve benchmarks to Include more features (#1278)
- How should we treat "ignored" values (#1285)
- Rename or remove year-data (#1356)
- Output breakdown of the objective value (#1389)
- Add documentation on vintage modeling (#1424)
- [Bug] The parameter
energy_to_power_ratiois no longer used in the code (#1446) - [Bug] Double counting operational cost (#1473)
- Align parameters with the formulation (#1485)
- Update coverage recommendation in docs from codecov.yml (#1517)
- Rename storage level variables (#1518)
- Add storage level intra-period variable for seasonal storage (#1519)
- Modify storage balance inter-period constraint with deltas (#1520)
- [CVaR]: Add new model parameter for risk aversion (#1524)
- [CVaR]: Add VaR threshold variable (#1525)
- [CVaR]: Add slack variable that captures tail excess losses (#1526)
- [CVaR]: Add CVaR term in the objective function (#1527)
- [CVaR]: Add tail excess constraint (#1528)
- [CVaR]: Update documentation (#1529)
- [docs] Update documentation on exploring infeasibility (#1531)
- Objective breakdown in post-processing (#1538)
- Use a DuckDB for model parameters instead of a TOML file (#1541)
- [CVaR]: Make stochastic_scenario table mandatory (#1547)
- Rearrange objective terms into more files (#1549)
- [Bug] Min/Max limits for seasonal storage always use default values (#1553)
- Remove ModelParameter structure (#1554)
- Make the code such that an asset can belong to more than one group (#1559)
- Change name from
group_assettoinvestment_group_asset(or any other better name) (#1565) - Missing output directory - Tutorial 1 (#1578)
- Better structure of API Reference in documentation (#1579)
- Centralize export declarations (#1580)
- Add storage level intra-period constraints for seasonal storage (#1584)
- Update mathematical formulation with delta formulation (#1593)
- Add
minimum_flow_limitconstraint to represent must-run features (#1597) - Change default for the
unit_commitment_methodparameter or remove it (#1598) - Add mandatory columns per table to the documentation (#1600)
- Update link to SIENNA (#1609)