Capacity growth and total capacity constraints
@AdrianDAlessandro is already working on this.
Since Aug 20, 2026.
Assessment
This issue has not been assessed yet.
Description
In MUSE1, users can provide three constraints on investments
- addition limits: amount of added capacity in a year
- growth limits: percentage change in capacity per year (e.g 0.1 -> max 10% growth allowed)
- total capacity limits: a hard upper limit on total capacity
See MUSE1 docs here: https://muse-os.readthedocs.io/en/latest/inputs/technodata.html (under "Capacity constraints"). That goes through it in way more detail, with examples.
In MUSE2, we currently have addition constraints implemented, but not the other two. We need to find a way to get the other two constraints in there. Rough idea:
- add two more columns to
process_investment_constraints.csv - sensible validation (e.g. not negative)
- missing values should be allowed -> implies no limit (just like MUSE1)
- store these as extra fields in
ProcessInvestmentConstraint. Note that growth limits will need to be pre-scaled at load time based on the gap between milestone years, just like we currently do for addition limits. - modify
get_addition_limitto solve all the maths to get an overall addition limit, taking into account the three different constraints - This addition limit can then be used downstream just as it currently is (i.e. scaled by the
commodity_portion*, returned frommax_installable_capacity, etc.)
The main challenge is that calculating an overall addition limit from the provided growth limits and total capacity limits requires knowledge of the current capacity, so we'll need to find a way to make max_installable_capacity and get_addition_limit aware of this.
Quite a lot to do, so may be best to break this into multiple PRs (e.g. one for input loading and validation, one for implementation)
* It may actually be more correct to gather the capacity owned by each agent first, and calculate growth limits from this, rather than summing all capacity, calculating an overall limit, then splitting this between agents according to their commodity portion. That would probably require more substantial changes to the code, but could be considered as a future improvement.
- Dominant language
- Rust
- Stars
- 8
- Forks
- 5
- Avg merge
- 11h 31m
- Merged PRs (30d)
- 33
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from EnergySystemsModellingLab/MUSE2
-
bug documentation
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
EnergySystemsModellingLab/MUSE2#1367 · 1 comment ·
-
Remove the `ironing out iteration 0` prefix from debug files when the ironing out loop is turned off Openmuse xiii question
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
EnergySystemsModellingLab/MUSE2#1221 ·
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
EnergySystemsModellingLab/MUSE2#1554 ·
-
bug
EnergySystemsModellingLab/MUSE2#1541 · 2 comments · 1 assignee ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
EnergySystemsModellingLab/MUSE2#1526 ·
All issues in EnergySystemsModellingLab/MUSE2
Similar issues
-
bug CLI custom-model
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
rust-bitcoin/rust-bitcoin#6930 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
fulcrumgenomics/ferro-hgvs#2251 ·
-
A-allocators A-docs C-enhancement T-libs
Difficulty 2/5 1-3 hours Newbie friendliness 75/100