EnergyInnovation / eps-us

Energy Policy Simulator - United States
GNU General Public License v3.0
22 stars 7 forks source link

Move electricity dispatch from ALLOCATE AVAILABLE to logit choice function #180

Closed robbieorvis closed 2 years ago

robbieorvis commented 2 years ago

We had previously discussed making this update when we implemented the choice functions, but didn't see a need to as we hadn't had large issues with dispatch at the time.

The state models are proving to very challenging to calibrate in the power sector, in part because in many states, economic dispatch is not the electricity generating paradigm. Many utilities will run their power plants at a loss because they can recoup these costs from a captive rate base. As a result, we see that the dispatch based on market prices does not align with empirical data. Moving to a logit choice mechanism would allow us to use the share-weights to calibrate the power sector accordingly.

We have observed similar challenges with the EU model, like due to the fact that it represents a compilation of countries each of which has different market practices for electricity dispatch.

The move to dispatch based on logit choice functions makes it dramatically easier to calibrate the power sector.

jrissman commented 2 years ago

Notes to self:

The first thing to do here is to determine if the logit choice function can allocate a single quantity across two or more subscripts. (We do not currently do this in any of our logit functions. For instance, in New Vehicles Allocated by Technology, we have three subscripts, but the allocation operation is splitting independent quantities (one for each "vehicle type" and "cargo type" combination) across a single "vehicle technology" subscript.)

As a reminder, we are using the "Modified Logit" function as described at https://jgcri.github.io/gcam-doc/choice.html

If the logit choice function can allocate a single total across multiple subscripts, then we should get rid of the following subscript, which will no longer be needed:

We should also delete several variables (e.g. Potential Electricity Output moved to Vector for Allocation) whose only purpose is to translate between two-dimensional arrays and a one-dimensional vector to reformat data for use in ALLOCATE AVAILABLE.


Separately, and irrespective of whether or not the logit choice function can allocate one total across multiple subscripts, we should get rid of the following subscript after removing the last ALLOCATE AVAILABLE functions:

Also remember to update the comments in a few variables that refer to ALLOCATE AVAILABLE. Do a text search of the .mdl file for "allocate available" to easily find these instances.

jrissman commented 2 years ago

Wait a minute. I think there is something odd here. You write, "in many states, economic dispatch is not the electricity generating paradigm. Many utilities will run their power plants at a loss because they can recoup these costs from a captive rate base." But as far as I'm aware, electricity rates aren't based on which plants are being dispatched. Electric rates are based on things like what tier of usage a customers is in (based on total use), sometimes the time of day, and for businesses, capacity charges (peak usage rate).

Even if I'm a utility who has the ability to recover the costs of running uneconomic plants (i.e. break even) from my captive rate base, I nonetheless would prefer to dispatch cheaper sources of power, if I have them available. To do otherwise is leaving money on the table. The dispatch calculations take place after we've already established which plants exist and what their bid capacity factors are, so if the model is dispatching something, that really is a plant that is standing by and ready to dispatch.

The only way a utility would choose to dispatch a less-economic plant rather than a more-economic plant is if their rate recovery is tied specifically to running the uneconomic plant and producing power with it. I thought PUCs typically grant utilities rate recovery for a power plant project at the time the plant is approved, even before it is built, and then the utility can recover the costs of the plant in the electric rates for however-many years, no matter how much or how little they dispatch the plant.

However, if the rate recovery is in fact tied to the dispatch of a specific type of plant, that's exactly what the guaranteed dispatch mechanism was designed to handle. Remember, we build that for China, which grants contracts to coal plants that guarantee them the ability to run a specific number of hours, even if it's uneconomic. That seems to be the same situation you're describing here, for purposes of deciding which plants to dispatch.

So I think there might be a misunderstanding about which model component to use to represent the behavior of utilities in these U.S. states. I don't think you want to remove the least-cost decision-making mechanism entirely (i.e., by switching to logit exponents, and then altering them), because utilities still need some way to make decisions on a least-cost basis after having fulfilled all dispatch requirements needed to secure their special rate recovery.

So if the rate recovery is tied to dispatching specific plants or plant types, perhaps you can put those in as BAU guaranteed dispatch percentages. Using that mechanism, it should already be possible to calibrate to pretty much any values you desire for any plant types. The least-cost dispatch mechanism can stay as is, because it only covers the remaining power demand after all the contracts (or special rate recovery situations) have been satisfied.

You could then expose the lever to switch to the non-BAU guaranteed dispatch percentages in the web app, and consider setting them to zero in the non-BAU input file. This lever would then represent the termination of the special rate recovery policy or contracts that incentivize utilities to dispatch uneconomic plants.

What do you think?

robbieorvis commented 2 years ago

Hi Jeff,

First - yes I think the logit function should work fine across subscripts, but I haven’t tested it.

On the utility piece, it involves an explanation of rate design and cost recovery. The short version is that utilities get paid a fixed rate of return, approved by the regulator, on capital. Fuel and operating costs are pass through costs to customers, meaning the utilities can just pass through the costs of running a plant. Because of this, there is little incentive for vertically integrated utilities to minimize customer costs other than to get good treatment from the public utility commission. In vertically integrated utility territories, utilities have a captive rate base so their customers can’t leave.

So if I’m a utility in an electricity market and I make profits through a regulated rate of return on my capital/assets, my number one goal is to maximize the amount of stuff I build and the lifetime of that stuff, because that’s how I get paid. Even if it costs my customers more to run my more expensive coal plant, I don’t care, because I can simply pass those costs onto ratepayers. The only thing that matters at the end of the day is what my assets get in terms of the regulated rate of return.

This is exactly the case in many regions in the US where utilities run plants at a loss in the market but just pass those costs onto customers and continue to collect the return on their capital separately. It’s also why EI started the performance based regulation push in APP/the power sector transformation team: the goal was to tie the rate of return to other outcomes, like environmental performance, instead of just a pure return on capital.

On Aug 10, 2021, at 10:32 PM, Jeff Rissman @.**@.>> wrote:

Wait a minute. I think there is something odd here. You write, "in many states, economic dispatch is not the electricity generating paradigm. Many utilities will run their power plants at a loss because they can recoup these costs from a captive rate base." But as far as I'm aware, electricity rates aren't based on which plants are being dispatched. Electric rates are based on things like what tier of usage a customers is in (based on total use), sometimes the time of day, and for businesses, capacity charges (peak usage rate).

Even if I'm a utility who has the ability to recover the costs of running uneconomic plants (i.e. break even) from my captive rate base, I nonetheless would prefer to dispatch cheaper sources of power, if I have them available. To do otherwise is leaving money on the table. The dispatch calculations take place after we've already established which plants exist and what their bid capacity factors are, so if the model is dispatching something, that really is a plant that is standing by and ready to dispatch.

The only way a utility would choose to dispatch a less-economic plant rather than a more-economic plant is if their rate recovery is tied specifically to running the uneconomic plant and producing power with it. I thought PUCs typically grant utilities rate recovery for a power plant project at the time the plant is approved, even before it is built, and then the utility can recover the costs of the plant in the electric rates for however-many years, no matter how much or how little they dispatch the plant.

However, if the rate recovery is in fact tied to the dispatch of a specific type of plant, that's exactly what the guaranteed dispatch mechanism was designed to handle. Remember, we build that for China, which grants contracts to coal plants that guarantee them the ability to run a specific number of hours, even if it's uneconomic. That seems to be the same situation you're describing here, for purposes of deciding which plants to dispatch.

So I think there might be a misunderstanding about which model component to use to represent the behavior of utilities in these U.S. states. I don't think you want to remove the least-cost decision-making mechanism entirely (i.e., by switching to logit exponents, and then altering them), because utilities still need some way to make decisions on a least-cost basis after having fulfilled all dispatch requirements needed to secure their special rate recovery.

So if the rate recovery is tied to dispatching specific plants or plant types, perhaps you can put those in as BAU guaranteed dispatch percentages. Using that mechanism, it should already be possible to calibrate to pretty much any values you desire for any plant types. The least-cost dispatch mechanism can stay as is, because it only covers the remaining power demand after all the contracts (or special rate recovery situations) have been satisfied.

You could then expose the lever to switch to the non-BAU guaranteed dispatch percentages in the web app, and consider setting them to zero in the non-BAU input file. This lever would then represent the termination of the special rate recovery policy or contracts that incentivize utilities to dispatch uneconomic plants.

What do you think?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/Energy-Innovation/eps-us/issues/180#issuecomment-896452565, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AK5N6SNIV2FVNDACBLW3RYTT4HOKRANCNFSM5B5BAGBQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email.

robbieorvis commented 2 years ago

Following up with my comment yesterday with some more detail (it was late and I didn't fully take in your comment!)

The approach with guaranteed dispatch is what we have been trying in the states, but it has some issues.

First is that, if for some reason electricity demand decreases (say from efficiency) the plants with guaranteed dispatch are unaffected, ie they continue to run at fixed output. This isn't entirely accurate: even in the situation described above, we would expect to see plants owned by monopoly utilities decrease their output if demand decreases. It's mainly that they make dispatch decisions irrespective of the market price, but demand for electricity does matter still.

Second is that with guaranteed dispatch, carbon pricing doesn't affect the behavior of plants with guaranteed dispatch. In the real world, we would expect to see some changes in dispatch at those plants.

@oashmoore pointed out some issues to me yesterday that I am failing to remember right now. Perhaps she can drop those in here.

It may be possible to achieve what we need with guaranteed dispatch but I think it is proving challenging to use this to calibrate each of the models whereas shareweights would make calibration much easier.

oashmoore commented 2 years ago

My main issue with using guaranteed dispatch is that I can use it to calibrate the start year (2020) but am relying on economic dispatch for future years. Because (as Robbie mentioned) the power plants are not necessarily dispatching economically, this leaves me with the choice of either assuming a constant level of guaranteed dispatch for future years (which I don't want to do) or relying on economic choice which can lead to some incongruous results. For example, a state that had very very little coal dispatch in 2019 and 2020 jups to dispatching 300% of its 2019 coal in 2021. Other states use a lot of coal generation, but without using guaranteed dispatch, EPS will only deploy gas. So in those states, I have significant coal use in the start year and then it drops to near zero in 2021 (which seems unlikely).

jrissman commented 2 years ago

Okay, I understand now. Thank you both for helping me understand why the guaranteed dispatch mechanism + least cost allocation isn't sufficient. I know it takes time to write things up for internal staff, and I recognize and appreciate the time involved.

I will plan on completing this GitHub issue as part of my work when I get back to working on the EPS.

robbieorvis commented 2 years ago

Great, thank you Jeff! It’s always helpful to write these things out to explain them since it makes sure we also fully understand the existing structure as well as what we propose.


Robbie Orvis Senior Director of Energy Policy Design +1 415-799-2171 1225 Eye Street, N.W. Suite 904 Washington, D.C. 20005 www.energyinnovation.orghttp://www.energyinnovation.org/ @.***

From: Jeff Rissman @.> Sent: Thursday, August 12, 2021 2:40 PM To: Energy-Innovation/eps-us @.> Cc: Robbie Orvis @.>; Author @.> Subject: Re: [Energy-Innovation/eps-us] Move electricity dispatch from ALLOCATE AVAILABLE to logit choice function (#180)

Okay, I understand now. Thank you both for helping me understand why the guaranteed dispatch mechanism + least cost allocation isn't sufficient. I know it takes time to write things up for internal staff, and I recognize and appreciate the time involved.

I will plan on completing this GitHub issue as part of my work when I get back to working on the EPS.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/Energy-Innovation/eps-us/issues/180#issuecomment-897879113, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AK5N6SMCGRV7RHA7RM6OFV3T4QIOPANCNFSM5B5BAGBQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email.

jrissman commented 2 years ago

This has been completed in 7a8aeac. Starting with EPS 3.3.1, we will no longer use ALLOCATE AVAILABLE anywhere in the model. I was also successfully able to remove a good bit of junk code, including two subscripts, that we no longer need after this change. This definitely makes the model cleaner and easier to understand.

We also no longer need one of the more complicated input variables to calculate, the normalized standard deviation of electricity dispatch costs by plant type. So that will make supplying input data for future models a little easier.

I calibrated the logit exponent, elec/EDLE Electricity Dispatch Logit Exponent, so that the overall emissions in the BAU case are as close as possible to what they were when using ALLOCATE AVAILABLE. Here's a graph showing the difference, where I'd implemented logit choice for the policy case (blue line) but the red line was still using ALLOCATE AVAILABLE. The two lines are using identical input data (such as which power plants exist in the start year, etc.), so all differences are due solely to the different dispatch calculation methodology.

EDLE_Calibration

You can see that the match is extremely close, except in the early years, where the logit function actually has better behavior that smooths out some of the jaggedness we see with ALLOCATE AVAILABLE.

Thanks for suggesting this improvement.

jrissman commented 2 years ago

Note that in my implementation, the EPS is calculating shareweights endogenously, which is generally what you will want to do and will produce the most accurate results. The shareweights adjust dynamically to reflect the changing mix of power plants and are therefore responsive to policy.

However, if you find the EPS is not matching ideosyncratic dispatch behavior in a particular U.S. state, let me know, and I'll put in a manual override so you can override the EPS's endogenous calculations with manually-supplied dispatch shareweights for some or all plant types. Note that if you do this, the shareweights will no longer dynamically adjust themselves to changing conditions, so you should only use an override if truly necessary.

robbieorvis commented 2 years ago

Hi Jeff, thanks for doing this. I haven't yet tested this, but I'm almost certain we will need manual overrides. That was part of the reason for developing this bit of structure in fact. Many states indeed have idiosyncratic behavior because of the business structure of the utilities and the weird incentives they have. I think the initial comments on this issue highlight what some of those are.

jrissman commented 2 years ago

I added the manual override in 0205e72.

robbieorvis commented 2 years ago

Terrific!


Robbie Orvis Senior Director of Energy Policy Design +1 415-799-2171 1225 Eye Street, N.W. Suite 904 Washington, D.C. 20005 www.energyinnovation.orghttp://www.energyinnovation.org/ @.***

From: Jeff Rissman @.> Sent: Monday, September 13, 2021 1:58 PM To: Energy-Innovation/eps-us @.> Cc: Robbie Orvis @.>; Author @.> Subject: Re: [Energy-Innovation/eps-us] Move electricity dispatch from ALLOCATE AVAILABLE to logit choice function (#180)

I added the manual override in 0205e72https://github.com/Energy-Innovation/eps-us/commit/0205e725ac362ce71f6bdc28ba2e039d6bc90a60.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/Energy-Innovation/eps-us/issues/180#issuecomment-918436346, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AK5N6SP5V54DBB66F2GOX53UBY3RPANCNFSM5B5BAGBQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.