Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit commitment smaller problem #128

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

josiahjohnston
Copy link
Contributor

A variety of optional tweaks to reduce the problem size. The default behaviors remain the same as before. In one benchmark, these tweaks reduced the number of variables & constraints by about 66% each.

  • Optionally define spinning reserves as expressions rather than decision variables
  • Set part-rate fuel use requirements to an equality (instead of an inequality) when only one line segment is provided
  • Provide an option to skip tracking unit commitment startup & shutdown.

…riables and constraints) to reduce the problem size.
When a single-line segment is available for a part-load heat rate curve (which is the most common situation), specify fuel use as an equality constraint that can be simplified out during optimizer pre-solve steps, and only use an inequality when multiple line segments are provided. Also, be robust to the situation of startup not being tracked.
…mitment to reduce problem size. The default behavior is still to track startup & shutdown.
@bmaluenda
Copy link
Member

These look good, though I have a question: Is there any downside to defining spinning reserves as expressions? Why do it optionally and don't just make it the default behavior?

@josiahjohnston
Copy link
Contributor Author

Expressions might be a better default behavior, but that is a larger discussion and depends on people's use cases. My motivations for this pull request were:

  1. Being conservative about backwards compatibility of behaviors (trying to maximize chances of consensus)
  2. Using variables enables taking on lower values to reduce project-level contigencies, especially when discrete unit commitment is enabled, and committed capacity may exceed the amount of capacity that is strictly needed.
  3. Also opens up the possibility of further customizations like adding variable costs for spinning reserve provision. (low likely-hood)

@mfripp
Copy link
Member

mfripp commented Nov 6, 2019

Could we automate this?

  • Do startup/shutdown calculations if and only if minimum uptime, minimum downtime, startup fuel or startup O&M are specified; otherwise these calculations can be omitted (probably done with sparse sets)
  • I see you already use the simpler fuel use calculation automatically when there is only a single fuel; does this make a difference in model size or speed?
  • At one point we planned to deprecate spinning_reserves in favor of spinning_reserves_advanced. But maybe we should just lock in these simplifications, or go further and use the up/down slack directly. Then we could rename it spinning_reserves_simple and keep it in the codebase. It would be interesting to see if this is much smaller/faster than the simplest implementation with spinning_reserves_advanced.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants