Skip to content

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 10 Jun 11:05
· 40 commits to main since this release
132e469

TulipaEnergyModel v0.22.0

Diff since v0.21.0

Breaking changes

  • Reworked model parameters. The ModelParameters Julia struct and EnergyProblem(connection; model_parameters_file=...) path were removed. Model parameters now live in the model_parameters table, with defaults populated during data preparation.

  • Renamed/refactored investment method configuration. The old asset.investment_method field was replaced by asset.vintage_method, with current values:

    • aggregated
    • compact_profiles
    • compact_efficiencies
  • Changed storage-energy investment configuration. storage_method_energy is now a string option instead of a boolean:

    • none
    • optimize_storage_capacity
    • use_fixed_energy_to_power_ratio
  • Changed unit commitment configuration. unit_commitment is now the method selector with values such as none, basic, and 3var; the old separate unit_commitment_method field was removed.

  • Reworked investment-group inputs. The old group_asset table and asset.investment_group column were replaced by explicit tables:

    • investment_group_asset
    • investment_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 > 0 can now receive minimum flow constraints even when unit_commitment = "none". Existing models that relied on min_operating_point being inactive without unit commitment may solve differently.

Added

  • Added Conditional Value at Risk support for stochastic optimization, including:

    • model parameters risk_aversion_weight_lambda and risk_aversion_confidence_level_alpha
    • Value at Risk threshold variable mu
    • tail excess slack variable xi
    • scenario tail excess constraints
    • CVaR objective contribution
  • Added objective cost breakdown support through obj_breakdown, with documentation for extracting more detailed objective components.

  • Added validation for consistency between investable settings and asset_both data.

  • 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:

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_partition table 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 investable and investment method none (#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_ratio is 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_asset to investment_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_limit constraint to represent must-run features (#1597)
  • Change default for the unit_commitment_method parameter or remove it (#1598)
  • Add mandatory columns per table to the documentation (#1600)
  • Update link to SIENNA (#1609)