SpineOpt.jl icon indicating copy to clipboard operation
SpineOpt.jl copied to clipboard

Create the new variables and constraints for the multi-year investment for units (i.e., vintage)

Open datejada opened this issue 1 year ago • 3 comments

  • [ ] 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

datejada avatar Mar 01 '24 10:03 datejada

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.

manuelma avatar Mar 01 '24 12:03 manuelma

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.

datejada avatar Mar 08 '24 15:03 datejada

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

datejada avatar Mar 08 '24 15:03 datejada

Close in favour of implementing the multi-year investment through data; see las comment #476

datejada avatar Jul 05 '24 07:07 datejada