SpineOpt.jl
SpineOpt.jl copied to clipboard
Create the new variables and constraints for the multi-year investment for units (i.e., vintage)
- [ ] Create the vintage variables and constraints, but don't link them to the current variables
- [ ] Create the tests for the new variables and constraints
This issue is only for the units. The changes for storage are in #976 and for connections are in #977
Don't change the objective function yet; this will be covered in #912
Here it would be nice to have a comprehensive list of all the new variables and constraints, and their purpose. For the constraint formulation we could use math assuming constant time resolution and no stochastics.
Here it would be nice to have a comprehensive list of all the new variables and constraints, and their purpose. For the constraint formulation we could use math assuming constant time resolution and no stochastics.
Thanks @manuelma. I have gatter the main changes for this part of the epic issue to put them here and discuss how we should continue. There are three main categories: units, storages, connections. So, in the following comment let's start with the units. Please, add your comments and suggestions.
Changes for the units
New variables
- units_decommissioned(unit,stochastic_scenario,t)
- units_decommissioned_vintage(unit,stochastic_scenario,t_vintage,t)
- units_demothballed_vintage(unit,stochastic_scenario,t_vintage,t)
- units_early_decommissioned_vintage(unit,stochastic_scenario,t_vintage,t)
- units_invested_available_vintage(unit,stochastic_scenario,t_vintage,t)
- units_invested_state(unit,stochastic_scenario,t)
- units_invested_state_vintage(unit,stochastic_scenario,t_vintage,t)
- units_mothballed_state_vintage(unit,stochastic_scenario,t_vintage,t)
- units_mothballed_vintage(unit,stochastic_scenario,t_vintage,t)
New constraints
units_decommissioned(unit=u, stochastic_path=s, t)
simplified version:
units_decommissioned[u, s, t] == sum(tv, units_decommissioned_vintage[u, s, t_v, t])
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_decommissioned.jl
units_decommissioned_vintage(unit=u, stochastic_path=s, t_v, t_after)
simplified version:
units_decommissioned_vintage[u, s_after(s), t_v, t_after]
>=
+ units_invested_state_vintage[u, s_before(s), t_v, t_before(t)]
- units_invested_state_vintage[u, s_after(s), t_v, t_after(t)]
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_decommissioned_vintage.jl
units_invested_available_bound(unit=u, stochastic_path=s, t)
simplified version:
units_invested[u, s, t] <= candidate_units
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_invested_available_bound.jl
units_invested_available_vintage(unit=u, stochastic_path=s, t_v, t)
simplified version:
units_invested_available_vintage[u, s, t_v, t]
==
+ units_invested_state_vintage[u, s, t_v, t]
- units_mothballed_state_vintage[u, s, t_v, t]
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_invested_available_vintage.jl
units_invested_state(unit=u, stochastic_path=s, t)
simplified version:
units_invested_state[u, s, t] == sum(t_v, units_invested_state_vintage[u, s, t_v, t])
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_invested_state.jl
units_invested_state_vintage(unit=u, stochastic_path=s, t_v, t)
simplified version:
units_invested_state_vintage[u, s, t_v, t]
==
+ unit_capacity_transfer_factor * (
+ units_invested[u, s_v(s), t_v]
- units_early_decommissioned_vintage[u, s_(s), t_v, t_(s)])
)
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_invested_state_vintage.jl
units_mothballed_state_vintage(unit=u, stochastic_path=s, t_v, t_after)
simplified version:
+ units_mothballed_state_vintage[u, s_after(s), t_v, t_after]
- units_mothballed_state_vintage[u, s_before(s), t_v, t_before(s)]
==
+ units_mothballed_vintage[u, s, t_v, t_after]
- units_demothballed_vintage[u, s, t_v, t_after]
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_mothballed_state_vintage.jl
Modified constraints
The following constraints will link the new variables and constraints to the existing ones. So, This should be in #912
units_invested_available
full version: https://github.com/spine-tools/SpineOpt.jl/blob/7e988de7971afab1b4e503efa9c0c29665ce8d93/src/constraints/constraint_units_invested_available.jl
Close in favour of implementing the multi-year investment through data; see las comment #476