p11 | Sub-Hour Unit Commitment (SHUC)¶
See also
This problem is sourced from EvoCut.
Note
We add implicit assumptions for non-empty sets, non-negativity of all parameters, and the ordering constraints \(P^{\max}_g \ge P^{\min}_g\) and \(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t}\).
EvoCut arXiv submission
v1does not include this problem.EvoCut arXiv submission
v2proposes 10 inequalities; the first three are combined to generate formulationp11.band the remainder are used to generate formulationsp11.c-i.
Description¶
Decide generator commitment (on/off) and dispatch levels over a sub-hour horizon to meet demand and spinning reserve requirements at minimum cost. Includes piecewise production costs, startup categories with time-dependent costs, ramping limits, and minimum up/down times. Formulated as a MILP.
Formulations¶
Formulation a (valid)¶
See also
This formulation is sourced from EvoCut.
Note
This is the MILP formulation given in Section F.7 of EvoCut arXiv submission
v2.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation b (valid)¶
See also
This formulation is sourced from EvoCut (name: EC1).
Note
These three inequalities are a linearization defining an auxiliary variable \(b_{g,t}\) as the product \(v_{g,t} \cdot w_{g,t+1}\).
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC1 indicator: 1 if generator g starts at t and shuts down at t+1 |
binary |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC1 upper bound on v: b[g,t] is at most v[g,t].
\[ b_{g,t} \le v_{g,t} \quad \forall g, t < T-1 \]EC1 upper bound on w: b[g,t] is at most w[g,t+1].
\[ b_{g,t} \le w_{g,t+1} \quad \forall g, t < T-1 \]EC1 lower bound: b[g,t] equals 1 when both v[g,t] and w[g,t+1] are 1.
\[ b_{g,t} \ge v_{g,t} + w_{g,t+1} - 1 \quad \forall g, t < T-1 \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation c (valid)¶
See also
This formulation is sourced from EvoCut (name: EC2a).
Note
During a startup period, generator \(g\)’s maximum available output above its minimum is reduced by \(\max(P^{\max}_g - SU_g, 0)\), reflecting the startup ramp limit.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC2a auxiliary: maximum reachable output of generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC2a: P_bar is bounded by the startup-derated capacity.
\[ \overline{P}_{g,t} \le P^{\max}_g u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation d (valid)¶
See also
This formulation is sourced from EvoCut (name: EC2b).
Note
In the period immediately before a shutdown, generator \(g\)’s maximum available output above its minimum is reduced by \(\max(P^{\max}_g - SD_g, 0)\), reflecting the shutdown ramp limit.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC2b auxiliary: maximum reachable output of generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC2b: P_bar is bounded by the shutdown-derated capacity for periods before a shutdown.
\[ \overline{P}_{g,t} \le P^{\max}_g u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation e (valid)¶
See also
This formulation is sourced from EvoCut (name: EC2c).
Note
Generator \(g\)’s maximum available output above its minimum is reduced by both the startup derating at period \(t\) and the shutdown derating at \(t+1\), with a recovery term \(b_{g,t} = v_{g,t} \cdot w_{g,t+1}\) that adds back the smaller of the two when startup and shutdown occur in consecutive periods (so the derating is not double-counted).
This inequality relies on the auxiliary variable \(b_{g,t}\), so the three inequalities that define it (see
p11.b) are also included.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC2c auxiliary: maximum reachable output of generator g at time t |
continuous |
|
|
EC1 indicator: 1 if generator g starts at t and shuts down at t+1 |
binary |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC1 upper bound on v: b[g,t] is at most v[g,t].
\[ b_{g,t} \le v_{g,t} \quad \forall g, t < T-1 \]EC1 upper bound on w: b[g,t] is at most w[g,t+1].
\[ b_{g,t} \le w_{g,t+1} \quad \forall g, t < T-1 \]EC1 lower bound: b[g,t] is at least v[g,t] + w[g,t+1] - 1.
\[ v_{g,t} + w_{g,t+1} - 1 \le b_{g,t} \quad \forall g, t < T-1 \]EC2c: P_bar is bounded by the combined startup-shutdown derated capacity with recovery term for simultaneous startup-shutdown.
\[ \bar{P}_{g,t} \le P^{\max}_g u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} + \min(\max(P^{\max}_g - SU_g, 0), \max(P^{\max}_g - SD_g, 0)) b_{g,t} \quad \forall g, t < T-1 \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation f (valid)¶
See also
This formulation is sourced from EvoCut (name: EC3a).
Note
Generator \(g\)’s maximum available output in period \(t\) is at most its output in period \(t-1\) plus its ramp-up limit \(RU_g\); the bound is relaxed when the generator was offline at \(t-1\).
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC3a auxiliary: maximum reachable output of generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC3a: P_bar is bounded by previous period output plus ramp-up, with relaxation for offline previous period.
\[ \overline{P}_{g,t} \le P^{\min}_g u_{g,t} + p_{g,t-1} + RU_g + (P^{\max}_g - P^{\min}_g)(1 - u_{g,t-1}) \quad \forall g, t \ge 1 \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation g (valid)¶
See also
This formulation is sourced from EvoCut (name: EC3b).
Note
Generator \(g\)’s maximum available output in period \(t\) is bounded by the reachable level from \(t-1\) assuming startup derating was applied at \(t-1\).
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC3b auxiliary: maximum reachable output of generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC3b: P_bar is bounded by the ramp reachability from previous period with startup derating at t-1.
\[ \overline{P}_{g,t} \le P^{\min}_g u_{g,t} + (P^{\max}_g - P^{\min}_g) u_{g,t-1} - \max(P^{\max}_g - SU_g, 0) v_{g,t-1} + RU_g \quad \forall g, t \ge 1 \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation h (valid)¶
See also
This formulation is sourced from EvoCut (name: EC3c).
Note
Generator \(g\)’s maximum available output in period \(t\) is bounded by the reachable level from \(t-1\) assuming shutdown derating is applied at \(t\).
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC3c auxiliary: maximum reachable output of generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC3c: P_bar is bounded by ramp reachability from previous period with shutdown derating at current period t.
\[ \overline{P}_{g,t} \le P^{\min}_g u_{g,t} + (P^{\max}_g - P^{\min}_g) u_{g,t-1} - \max(P^{\max}_g - SD_g, 0) w_{g,t} + RU_g \quad \forall g, t \ge 1 \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.
Formulation i (valid)¶
See also
This formulation is sourced from EvoCut (name: EC4).
Note
At each period \(t\), the sum of generators’ maximum available outputs must cover net demand (load minus renewable) plus the spinning reserve requirement.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of time periods |
integer |
scalar |
|
Number of thermal generators |
integer |
scalar |
|
Number of renewable (wind) generators |
integer |
scalar |
|
Number of startup categories per thermal generator |
integer |
|
|
Startup lag for each startup category of each generator |
integer |
|
|
Startup cost for each startup category of each generator |
continuous |
|
|
Number of piecewise production breakpoints per generator |
integer |
|
|
Piecewise production breakpoints for each generator |
continuous |
|
|
Piecewise variable production cost at each breakpoint for each generator |
continuous |
|
|
Fixed cost incurred when a thermal generator is on during a time period |
continuous |
|
|
Demand requirement at each time period |
continuous |
|
|
Spinning reserve requirement at each time period |
continuous |
|
|
Minimum thermal output of each generator |
continuous |
|
|
Maximum thermal output of each generator |
continuous |
|
|
Minimum renewable output for each wind generator at each time period |
continuous |
|
|
Maximum renewable output for each wind generator at each time period |
continuous |
|
|
Ramp-up limit for each generator |
continuous |
|
|
Ramp-down limit for each generator |
continuous |
|
|
Startup ramp limit for each generator |
continuous |
|
|
Shutdown ramp limit for each generator |
continuous |
|
|
Minimum up time for each generator |
integer |
|
|
Minimum down time for each generator |
integer |
|
|
Must-run flag for each generator |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
On status of generator g at time t |
binary |
|
|
Startup indicator of generator g at time t (1 if started) |
binary |
|
|
Shutdown indicator of generator g at time t (1 if shut down) |
binary |
|
|
Startup category selection for generator g, category s, at time t (ragged by n_S[g]) |
binary |
|
|
Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) |
continuous |
|
|
Thermal output above P_min for generator g at time t |
continuous |
|
|
Spinning reserve of generator g at time t |
continuous |
|
|
Variable production cost above fixed cost for generator g at time t |
continuous |
|
|
EC4 auxiliary: maximum reachable output of generator g at time t |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of time periods is positive. |
\(T \ge 1\) |
yes |
Number of thermal generators is positive. |
\(n_G \ge 1\) |
yes |
Number of wind generators is positive. |
\(n_W \ge 1\) |
yes |
Each generator has at least one startup category. |
\(n_{S,g} \ge 1 \quad \forall g\) |
yes |
Each generator has at least one piecewise breakpoint. |
\(n_{L,g} \ge 1 \quad \forall g\) |
yes |
Startup lags are non-negative. |
\(\ell_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Startup costs are non-negative. |
\(C^{su}_{g,s} \ge 0 \quad \forall g, s\) |
yes |
Piecewise production breakpoints are non-negative. |
\(P_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Piecewise variable production costs are non-negative. |
\(C_{g,l} \ge 0 \quad \forall g, l\) |
yes |
Fixed on-costs are non-negative. |
\(C^{\text{fixed}}_g \ge 0 \quad \forall g\) |
yes |
Demand at each time period is non-negative. |
\(L_t \ge 0 \quad \forall t\) |
yes |
Spinning reserve requirement is non-negative. |
\(R_t \ge 0 \quad \forall t\) |
yes |
Minimum thermal output is non-negative. |
\(P^{\min}_g \ge 0 \quad \forall g\) |
yes |
Maximum thermal output is non-negative. |
\(P^{\max}_g \ge 0 \quad \forall g\) |
yes |
Minimum renewable output is non-negative. |
\(P^{w,\min}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Maximum renewable output is non-negative. |
\(P^{w,\max}_{w,t} \ge 0 \quad \forall w, t\) |
yes |
Ramp-up limits are non-negative. |
\(RU_g \ge 0 \quad \forall g\) |
yes |
Ramp-down limits are non-negative. |
\(RD_g \ge 0 \quad \forall g\) |
yes |
Startup ramp limits are non-negative. |
\(SU_g \ge 0 \quad \forall g\) |
yes |
Shutdown ramp limits are non-negative. |
\(SD_g \ge 0 \quad \forall g\) |
yes |
Minimum up times are at least one period. |
\(U_g \ge 1 \quad \forall g\) |
yes |
Minimum down times are at least one period. |
\(D_g \ge 1 \quad \forall g\) |
yes |
Must-run flag is binary. |
\(MR_g \in \{0,1\} \quad \forall g\) |
yes |
Maximum thermal output is at least the minimum thermal output for each generator. |
\(P^{\max}_g \ge P^{\min}_g \quad \forall g\) |
yes |
Maximum renewable output is at least the minimum renewable output for each wind generator and time period. |
\(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t} \quad \forall w, t\) |
yes |
Constraints¶
Demand balance: total thermal and renewable output equals demand at each period.
\[ \sum_{g} (p_{g,t} + P^{\min}_g u_{g,t}) + \sum_{w} p^w_{w,t} = L_t \quad \forall t \]Spinning reserve: total reserve meets or exceeds requirement at each period.
\[ \sum_{g} r_{g,t} \ge R_t \quad \forall t \]Commitment transition: links on-status to startup and shutdown indicators.
\[ u_{g,t} - u_{g,t-1} = v_{g,t} - w_{g,t} \quad \forall g, t \ge 1 \]Minimum up time: a generator that starts must remain on for at least U[g] periods.
\[ \sum_{\tau=t-U_g+1}^{t} v_{g,\tau} \le u_{g,t} \quad \forall g, t \ge U_g - 1 \]Minimum down time: a generator that shuts down must remain off for at least D[g] periods.
\[ \sum_{\tau=t-D_g+1}^{t} w_{g,\tau} \le 1 - u_{g,t} \quad \forall g, t \ge D_g - 1 \]Startup decomposition: startup indicator equals sum of startup category selections.
\[ v_{g,t} = \sum_{s} d_{g,s,t} \quad \forall g, t \]Startup category timing: category s can only be selected if the generator was off for the required lag.
\[ d_{g,s,t} \le \sum_{i=\ell_{g,s}}^{\ell_{g,s+1}-1} w_{g,t-i} \quad \forall g, s < |S_g| - 1, t \ge \ell_{g,s+1} - 1 \]Must-run: generators with MR[g]=1 must remain on at all times.
\[ u_{g,t} \ge \mathrm{MR}_g \quad \forall g, t \]Startup derating: net output above minimum is limited by startup ramp during startup periods.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SU_g, 0) v_{g,t} \quad \forall g, t \]Shutdown derating: net output above minimum is limited by shutdown ramp the period before shutdown.
\[ p_{g,t} + r_{g,t} \le (P^{\max}_g - P^{\min}_g) u_{g,t} - \max(P^{\max}_g - SD_g, 0) w_{g,t+1} \quad \forall g, t < T-1 \]Ramp-up limit: output plus reserve cannot increase by more than RU[g] from the previous period.
\[ p_{g,t} + r_{g,t} - p_{g,t-1} \le RU_g \quad \forall g, t \ge 1 \]Ramp-down limit: output cannot decrease by more than RD[g] from the previous period.
\[ p_{g,t-1} - p_{g,t} \le RD_g \quad \forall g, t \ge 1 \]Piecewise production: output equals the convex combination of production breakpoints above minimum.
\[ p_{g,t} = \sum_{l} (P_{g,l} - P_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise cost: variable cost equals the convex combination of cost breakpoints above fixed cost.
\[ c_{g,t} = \sum_{l} (C_{g,l} - C_{g,0}) \lambda_{g,l,t} \quad \forall g, t \]Piecewise weights: convex combination weights sum to on-status.
\[ \sum_{l} \lambda_{g,l,t} = u_{g,t} \quad \forall g, t \]Piecewise weights are at most one.
\[ \lambda_{g,l,t} \le 1 \quad \forall g, l, t \]EC4: Total reachable capacity must cover net demand plus reserve at each period.
\[ L_t - \sum_{w} p^w_{w,t} + R_t \le \sum_{g} \overline{P}_{g,t} \quad \forall t \]
Objective¶
Minimize total production cost (fixed on-cost plus variable cost) and startup costs over all generators and time periods.