Skip to content

Improving performance by removing unnecessary plants. #120

@staadecker

Description

@staadecker

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions