--- tocdepth: 3 --- # p11 | Sub-Hour Unit Commitment (SHUC) ```{seealso} This problem is sourced from [EvoCut](https://arxiv.org/abs/2508.11850). ``` ```{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 `v1` does not include this problem. - EvoCut arXiv submission `v2` proposes 10 inequalities; the first three are combined to generate formulation `p11.b` and the remainder are used to generate formulations `p11.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) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850). ``` ```{note} - This is the MILP formulation given in Section F.7 of EvoCut arXiv submission `v2`. ``` #### Parameters | Name | Description | Type | Shape | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `b` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `b` | EC1 indicator: 1 if generator g starts at t and shuts down at t+1 | binary | `[n_G, T-1]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `c` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC2a auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `d` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC2b auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `e` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC2c auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | | `b` | EC1 indicator: 1 if generator g starts at t and shuts down at t+1 | binary | `[n_G, T-1]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `f` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC3a auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `g` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC3b auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `h` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC3c auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$ ### Formulation `i` (valid) ```{seealso} This formulation is sourced from [EvoCut](https://arxiv.org/abs/2508.11850) (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 | |---|---|---|---| | `T` | Number of time periods | integer | *scalar* | | `n_G` | Number of thermal generators | integer | *scalar* | | `n_W` | Number of renewable (wind) generators | integer | *scalar* | | `n_S` | Number of startup categories per thermal generator | integer | `[n_G]` | | `ell` | Startup lag for each startup category of each generator | integer | `[n_G, n_S[n_G]]` | | `C_su` | Startup cost for each startup category of each generator | continuous | `[n_G, n_S[n_G]]` | | `n_L` | Number of piecewise production breakpoints per generator | integer | `[n_G]` | | `P` | Piecewise production breakpoints for each generator | continuous | `[n_G, n_L[n_G]]` | | `C` | Piecewise variable production cost at each breakpoint for each generator | continuous | `[n_G, n_L[n_G]]` | | `C_fixed` | Fixed cost incurred when a thermal generator is on during a time period | continuous | `[n_G]` | | `L` | Demand requirement at each time period | continuous | `[T]` | | `R` | Spinning reserve requirement at each time period | continuous | `[T]` | | `P_min` | Minimum thermal output of each generator | continuous | `[n_G]` | | `P_max` | Maximum thermal output of each generator | continuous | `[n_G]` | | `P_wind_min` | Minimum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `P_wind_max` | Maximum renewable output for each wind generator at each time period | continuous | `[n_W, T]` | | `RU` | Ramp-up limit for each generator | continuous | `[n_G]` | | `RD` | Ramp-down limit for each generator | continuous | `[n_G]` | | `SU` | Startup ramp limit for each generator | continuous | `[n_G]` | | `SD` | Shutdown ramp limit for each generator | continuous | `[n_G]` | | `U` | Minimum up time for each generator | integer | `[n_G]` | | `D` | Minimum down time for each generator | integer | `[n_G]` | | `MR` | Must-run flag for each generator | binary | `[n_G]` | #### Variables | Name | Description | Type | Shape / Indices | |---|---|---|---| | `u` | On status of generator g at time t | binary | `[n_G, T]` | | `v` | Startup indicator of generator g at time t (1 if started) | binary | `[n_G, T]` | | `w` | Shutdown indicator of generator g at time t (1 if shut down) | binary | `[n_G, T]` | | `d_su` | Startup category selection for generator g, category s, at time t (ragged by n_S[g]) | binary | `[n_G, n_S[n_G], T]` | | `lam` | Piecewise convex combination weight for generator g, breakpoint l, at time t (ragged by n_L[g]) | continuous | `[n_G, n_L[n_G], T]` | | `p` | Thermal output above P_min for generator g at time t | continuous | `[n_G, T]` | | `r` | Spinning reserve of generator g at time t | continuous | `[n_G, T]` | | `c_var` | Variable production cost above fixed cost for generator g at time t | continuous | `[n_G, T]` | | `P_bar` | EC4 auxiliary: maximum reachable output of generator g at time t | continuous | `[n_G, T]` | #### 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. $$ \min \sum_{g} \sum_{t} (c_{g,t} + C^{\text{fixed}}_g u_{g,t}) + \sum_{g} \sum_{s} \sum_{t} C^{su}_{g,s} d_{g,s,t} $$