-
Notifications
You must be signed in to change notification settings - Fork 9
Description
Background and potential
Currently, roughly half the time needed to solve a model is spent loading inputs and writing outputs (the other half is spent actually running the solver). Yet, a large amount of these inputs and outputs are related to unnecessary generation plants that don't impact the model results. I measured that in my recent 2050 zero-emission baseline run, 68% of the candidate and 73% of the existing plants were unnecessary. This means we can achieve a ~70% reduction in the size of our input plants dataset by removing the unnecessary plants before solving. I expect such a change to reduce our overall solve time by 25-50%.
Additionally, with fewer generation plants, the model might become simpler to solve which would enable the use of the faster but less robust interior-point methods (i.e. --recommended-fast).
Types of unnecessary plants
Plants that retire before the first period
In my most recent run, I had 3580 existing plants of which 2,570 (72%) retired before the first period (2046-2055). We could add a post-process step to get_inputs.py that would remove these plants from our inputs.
Note: If we do this, let's make sure to use the same definition of "retired" as gen_build_can_operate_in_period() in generators.core.build.py (ideally sharing the same code)
- TODO: Add post-process step to remove plants that retire before the first period.
Plants that can't get built or used due to a zero-emissions constraint
A recent baseline scenario I ran had 372 candidate plants (out of 4908) and 981 existing plants (out of 3580) that used coal, gas or oil as a fuel. These plants could not be built or operated due to a no-emissions constraint. A simple fix would be to add a post-process step to the get_inputs script that would remove any plants that run on emitting fuels if there is a zero-emissions constraint.
- TODO: Add post-process step to remove emitting plants when there's a zero-emissions constraint.
Plants that are too expensive to get built.
In a recent baseline for a paper, here was the number of candidate plants per technology (excluding coal and gas plants discussed above).
gen_tech
Bio_Gas 50
Bio_Gas_Internal_Combustion_Engine_Cogen 11
Bio_Liquid_Steam_Turbine_Cogen 7
Bio_Solid_Steam_Turbine_Cogen 22
CSP_Trough_6h_Storage 1432
CSP_Trough_No_Storage 1471
Central_PV 340
Commercial_PV 216
Geothermal 258
LDES 50
Offshore_Wind 48
Residential_PV 215
Wind 416
Name: GENERATION_PROJECT, dtype: int64
And here was the list of plants that were actually built by the model.
gen_tech
Bio_Gas 50
Central_PV 88
Commercial_PV 11
LDES 50
Residential_PV 2
Wind 24
As we can see, numerous technologies don't get built. For example, we model in every run 2,900+ CSP plants that never get built.
These alone make up 60% of the candidate plants in our model. A simple fix would be to either a) remove CSP from the technologies used in the inputs, or b) aggregate the CSP plants into one plant per load zone with the parameters being representative of a typical CSP plant (as we do for Central_PV and Wind, see #109).
- TODO: Decide on the best approach and then implement.