Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Release notes for MUSE2 v2.1.0 (March 31, 2026)

This release represents over 5 months of development since v2.0.0, adding a number of exciting new features, as well as some small improvements, bug fixes, and underlying code changes designed to improve performance and maintainability.

Please be aware that there are some breaking changes in this release, which may require you to update the input files of any existing models. We have tried to outline these in the “Breaking changes” section below, but please do get in touch if you have any issues adapting models to the new version.

Some of the new features in this release are still experimental, and will continue to be worked on for future releases. In the meantime, any feedback on these features is very welcome.

As always, you can keep track of upcoming changes for the next release in the upcoming release notes.

New features

Asset mothballing

Assets can now remain unused for a certain number of years before being decommissioned, via the global mothball_years parameter defined in model.toml (#1022). The default value for this parameter is 0 years, meaning that assets are decommissioned immediately when they are no longer used, which is equivalent to the behaviour in previous versions of MUSE2.

Process investment constraints

Users can now add yearly limits on the maximum amount of investment in each process via the new process_investment_constraints.csv file (#1020 and #1096).

Circular commodity dependencies

Users can now have circular dependencies between commodities, such as a hydrogen power plant that itself requires electricity (#999 and #1004). This is currently an experimental feature that may not work in all cases - feedback is appreciated. There are also known limitations such as incompatibility with the new commodity pricing strategies (see below, #1168), which we plan to address in future releases. The main new parameter to be aware of is the capacity_margin parameter defined in model.toml.

Divisible assets

Assets can now be made divisible to represent many individual sub-assets, such as a fleet of gas boilers, which can be partially decommissioned (#1030). This is implemented via the new optional unit_size column in processes.csv. For example, a unit_size of 10 means that the smallest granular unit of asset capacity represents 10 capacity units (e.g. a single gas boiler, or a defined aggregate of gas boilers, depending on the desired resolution). Omitting this column or leaving values empty means that assets are indivisible (i.e. must be decommissioned in one go), which is the default behaviour and the same as in previous versions of MUSE2.

It is worth noting that the current implementation incurs a potentially significant performance cost when setting unit_size very small compared to overall capacity, although we plan to address this in future releases.

New commodity pricing strategies

There are four new pricing strategies for commodities: full, marginal, full_average and marginal_average (#1021 and #1205). Unlike previously, where the pricing strategy was set at the model level, users can now specify the pricing strategy for each commodity individually in the commodities.csv file via the new optional pricing_strategy column. The new strategies are in addition to the existing shadow and scarcity strategies, as well as an unpriced option for oth type commodities that should not be priced.

Other new features

  • Users can now optionally specify an explicit decommission year for an asset in assets.csv (#966)
  • Allow users to specify ranges of years in input files (#1017)
  • You can now set both upper and lower bounds in process_availabilities.csv (#1018)
  • Availability limits can now be provided at multiple levels for a process (#1018)
  • Allow for adding both a prod and cons levy to a commodity in commodity_levies.csv (#969)
  • The default output root path is now configurable in settings.toml (#1003)
  • If demand cannot be satisfied by the simulation, we now inform users what the offending commodities and time slices are (#767)
  • Trim whitespace from fields when reading in CSV files (#976)
  • Default to no availability limits if user doesn’t provide any for a process (#1018)
  • Users can now omit empty CSV files (#961)
  • Several changes to the NPV agent objective designed to improve results (#994 and #997)

Breaking changes

These changes may require users to update the input files for existing models developed using previous versions of MUSE2.

Bug fixes

  • Fix: process availability constraints were wrongly being applied to individual time slices, regardless of time slice level (#1018)
  • Various fixes to process flows and availabilities input code for non-milestone years (#868, #1000, #1010)
  • Users can now set demand to zero in demand.csv (#871)
  • Fix: sign for levies of type net was wrong for inputs (#969)
  • Fix --overwrite option for save-graphs command (#1001)