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

Missing functionality in unit commitment #23

Open
4 tasks
sstroemer opened this issue Oct 25, 2024 · 2 comments
Open
4 tasks

Missing functionality in unit commitment #23

sstroemer opened this issue Oct 25, 2024 · 2 comments

Comments

@sstroemer
Copy link
Member

The current UC formulation is missing a few points that should be properly integrated:

  • Cyclic behaviour, similar to that of stateful Nodes, for the parameters that support initial pre-modeling-period settings (e.g., startup which already takes unit.is_on_before into account, but does not allow choosing that)
  • Fixes to min/max on/off time formulations (with different Snapshot durations, unit counts, ...)
  • Properly implemented/tested endogenous investment decisions (from an external Decision) combined with active UC
  • ...?

A lot of that is actually due to the current/old issues with representative Snapshots. Since they conflict with various things, and complicate a lot of different formulations, we discussed removing them on multiple occasions (and switching to a different formulation, e.g., Kotzur et al.). Therefore, this might be best done as part of a larger rework to prevent future mess/dept in the whole UC implementation.

@GerhardTotschnig
Copy link

GerhardTotschnig commented Oct 25, 2024

@sstroemer
Title: Change part load calculation to avoid incremental efficiency:
In the distric heat model we changed form using the incremental efficiency to a more readable form:

The old form with GenAboveMinLoad_MW:

Elec_generation_MW[u,t]=UnitsOnline[t,u]* unitCap_MinLoadMW[u,t,f]+GenAboveMinLoad_MW[t,u]
Constraint: Elec_generation_MW[u,t]<=UnitsOnline[t,u]*unit_cap_MW[t,g]
FuelConsumption_MW[u,t]=UnitsOnline[t,u]* unitCap_MinLoadMW[u,t,f]/eff_minLoad[u,t] + GenAboveMinLoad_MW[t,g]/incremental_eff[u,t]

So here you need to calculate the incremental_efficiency. Which is a little complicated to explain.

With a change form GenAboveMinLoad_MW -> Units_At_Full_Load (see below), the calculation of the input and output flows is much more easy to understand. There is no need to calculate incremental efficiencies anymore:

The new formulation for unit type „u“, which may have mutliple identical units installed, and has multiple inputs and putputs:
Var:
UnitsOn[u,t]: 0<=, up and running units of type „u“; linear, binary or integer
• AvaiableUnits[u,t]: 0<= Number of units available in a certain time step ; linear
Costraint: 0<=UnitsOn[u,t] <= AvaiableUnits[t]
Costraint: AvaiableUnits[u,t] <= exiting_units[u,year[t]]+new_installed_units[u,year[t]]-decomissioned_units[u,year[t]]
-temporarilty_nonavailable_units[u,t]
• Units_At_Full_Load[u,t]: 0<=, Number of Units at full load; linear
Constraint: 0<= Units_At_Full_Load[u,t] <= UnitsOn[u,t]

NEW

Input_Output_MW_Expression[u in Units, t in Steps, f in In_Out_Flows]:=
           UnitsOn[u,t]* unitCap_MinLoadMW[u,t,f] 
           + Units_At_Full_Load[u,t]*(unitCap_FullLoad_MW[u,t,f] -unitCap_MinLoadMW[u,t,f])

There is no need to calculate incremental efficiencies anymore and easy to understand.

@sstroemer
Copy link
Member Author

Note: The "mention" above from issue "# 25" is not intentional and just GitHub messing with the auto-mention ...

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

No branches or pull requests

2 participants