|
| 1 | +# Release notes for MUSE2 v2.1.0 (March 31, 2026) |
| 2 | + |
| 3 | +This release represents over 5 months of development since v2.0.0, adding a number of exciting new |
| 4 | +features, as well as some small improvements, bug fixes, and underlying code changes designed to |
| 5 | +improve performance and maintainability. |
| 6 | + |
| 7 | +Please be aware that there are some breaking changes in this release, which may require you to |
| 8 | +update the input files of any existing models. We have tried to outline these in the "Breaking |
| 9 | +changes" section below, but please do get in touch if you have any issues adapting models to the new |
| 10 | +version. |
| 11 | + |
| 12 | +Some of the new features in this release are still experimental, and will continue to be worked on |
| 13 | +for future releases. In the meantime, any feedback on these features is very welcome. |
| 14 | + |
| 15 | +As always, you can keep track of upcoming changes for the next release in the |
| 16 | +[upcoming release notes](upcoming.md). |
| 17 | + |
| 18 | +## New features |
| 19 | + |
| 20 | +### Asset mothballing |
| 21 | + |
| 22 | +Assets can now remain unused for a certain number of years before being decommissioned, via the |
| 23 | +global `mothball_years` parameter defined in [`model.toml`] ([#1022]). The default value for this |
| 24 | +parameter is 0 years, meaning that assets are decommissioned immediately when they are no longer |
| 25 | +used, which is equivalent to the behaviour in previous versions of MUSE2. |
| 26 | + |
| 27 | +### Process investment constraints |
| 28 | + |
| 29 | +Users can now add yearly limits on the maximum amount of investment in each process via the new |
| 30 | +[`process_investment_constraints.csv`] file ([#1020] and [#1096]). |
| 31 | + |
| 32 | +### Circular commodity dependencies |
| 33 | + |
| 34 | +Users can now have circular dependencies between commodities, such as a hydrogen power plant that |
| 35 | +itself requires electricity ([#999] and [#1004]). This is currently an experimental feature that may |
| 36 | +not work in all cases - feedback is appreciated. There are also known limitations such as |
| 37 | +incompatibility with the new commodity pricing strategies (see below, [#1168]), which we plan to |
| 38 | +address in future releases. The main new parameter to be aware of is the `capacity_margin` parameter |
| 39 | +defined in [`model.toml`]. |
| 40 | + |
| 41 | +### Divisible assets |
| 42 | + |
| 43 | +Assets can now be made divisible to represent many individual sub-assets, such as a fleet of gas |
| 44 | +boilers, which can be partially decommissioned ([#1030]). This is implemented via the new optional |
| 45 | +`unit_size` column in [`processes.csv`]. For example, a `unit_size` of 10 means that the smallest |
| 46 | +granular unit of asset capacity represents 10 capacity units (e.g. a single gas boiler, or a defined |
| 47 | +aggregate of gas boilers, depending on the desired resolution). Omitting this column or leaving |
| 48 | +values empty means that assets are indivisible (i.e. must be decommissioned in one go), which is the |
| 49 | +default behaviour and the same as in previous versions of MUSE2. |
| 50 | + |
| 51 | +It is worth noting that the current implementation incurs a potentially significant performance cost |
| 52 | +when setting `unit_size` very small compared to overall capacity, although we plan to address this |
| 53 | +in future releases. |
| 54 | + |
| 55 | +### New commodity pricing strategies |
| 56 | + |
| 57 | +There are four new pricing strategies for commodities: `full`, `marginal`, `full_average` and |
| 58 | +`marginal_average` ([#1021] and [#1205]). Unlike previously, where the pricing strategy was set at |
| 59 | +the model level, users can now specify the pricing strategy for each commodity individually in the |
| 60 | +[`commodities.csv`] file via the new optional `pricing_strategy` column. The new strategies |
| 61 | +are in addition to the existing `shadow` and `scarcity` strategies, as well as an `unpriced` option |
| 62 | +for `oth` type commodities that should not be priced. |
| 63 | + |
| 64 | +### Other new features |
| 65 | + |
| 66 | +- Users can now optionally specify an explicit decommission year for an asset in [`assets.csv`] |
| 67 | + ([#966]) |
| 68 | +- Allow users to specify ranges of years in input files ([#1017]) |
| 69 | +- You can now set both upper and lower bounds in [`process_availabilities.csv`] ([#1018]) |
| 70 | +- Availability limits can now be provided at multiple levels for a process ([#1018]) |
| 71 | +- Allow for adding both a `prod` and `cons` levy to a commodity in [`commodity_levies.csv`] ([#969]) |
| 72 | +- The default output root path is now configurable in [`settings.toml`] ([#1003]) |
| 73 | +- If demand cannot be satisfied by the simulation, we now inform users what the offending |
| 74 | + commodities and time slices are ([#767]) |
| 75 | +- Trim whitespace from fields when reading in CSV files ([#976]) |
| 76 | +- Default to no availability limits if user doesn't provide any for a process ([#1018]) |
| 77 | +- Users can now omit empty CSV files ([#961]) |
| 78 | +- Several changes to the NPV agent objective designed to improve results ([#994] and [#997]) |
| 79 | + |
| 80 | +## Breaking changes |
| 81 | + |
| 82 | +These changes may require users to update the input files for existing models developed using |
| 83 | +previous versions of MUSE2. |
| 84 | + |
| 85 | +- The previously-named `year` column in [`process_flows.csv`], [`process_availabilities.csv`], |
| 86 | + [`process_parameters.csv`] and [`process_investment_constraints.csv`] has been renamed to |
| 87 | + `commission_years` to better reflect that these parameters refer to the year in which a process |
| 88 | + is commissioned as an asset ([#964]). |
| 89 | +- The [`process_availabilities.csv`] file follows new syntax that better allows for specifying |
| 90 | + availabilities as ranges ([#1018]). |
| 91 | +- The [`commodities.csv`] file has a new compulsory `units` column ([#1110]). |
| 92 | +- The default value for the `max_ironing_out_iterations` parameter in [`model.toml`] has been |
| 93 | + changed from 10 to 1 (i.e. turning the ironing-out loop off by default; [#1170]). If users wish to |
| 94 | + use the ironing out loop, they must explicitly set this parameter to a higher value. |
| 95 | +- Pricing strategy is now set per commodity, so there is now a `pricing_strategy` column in |
| 96 | + [`commodities.csv`] rather than a single parameter in [`model.toml`] ([#1021]). |
| 97 | + |
| 98 | +## Bug fixes |
| 99 | + |
| 100 | +- Fix: process availability constraints were wrongly being applied to individual time slices, |
| 101 | + regardless of time slice level ([#1018]) |
| 102 | +- Various fixes to process flows and availabilities input code for non-milestone years ([#868], |
| 103 | + [#1000], [#1010]) |
| 104 | +- Users can now set demand to zero in [`demand.csv`] ([#871]) |
| 105 | +- Fix: sign for levies of type `net` was wrong for inputs ([#969]) |
| 106 | +- Fix `--overwrite` option for `save-graphs` command ([#1001]) |
| 107 | + |
| 108 | +[#767]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/767 |
| 109 | +[#868]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/868 |
| 110 | +[#871]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/871 |
| 111 | +[#961]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/961 |
| 112 | +[#964]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/964 |
| 113 | +[#966]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/966 |
| 114 | +[#969]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/969 |
| 115 | +[#976]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/976 |
| 116 | +[#994]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/994 |
| 117 | +[#997]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/997 |
| 118 | +[#999]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/999 |
| 119 | +[#1004]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1004 |
| 120 | +[#1000]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1000 |
| 121 | +[#1001]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1001 |
| 122 | +[#1003]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1003 |
| 123 | +[#1010]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1010 |
| 124 | +[#1017]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1017 |
| 125 | +[#1018]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1018 |
| 126 | +[#1020]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1020 |
| 127 | +[#1021]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1021 |
| 128 | +[#1022]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1022 |
| 129 | +[#1030]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1030 |
| 130 | +[#1096]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1096 |
| 131 | + |
| 132 | +<!-- Use absolute links so they work when we paste into release notes box --> |
| 133 | +[`demand.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#demandcsv |
| 134 | +[`processes.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#processescsv |
| 135 | +[`process_flows.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#process_flowscsv |
| 136 | +[`process_availabilities.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#process_availabilitiescsv |
| 137 | +[`process_parameters.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#process_parameterscsv |
| 138 | +[`process_investment_constraints.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#process_investment_constraintscsv |
| 139 | +[`commodities.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#commoditiescsv |
| 140 | +[`commodity_levies.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#commodity_leviescsv |
| 141 | +[`model.toml`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#model-parameters-modeltoml |
| 142 | +[`assets.csv`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/input_files.html#assetscsv |
| 143 | +[`settings.toml`]: https://energysystemsmodellinglab.github.io/MUSE2/file_formats/program_settings.html |
0 commit comments