p11 | Sub-Hour Unit Commitment (SHUC)¶
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}\).
NP-hard: yes
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)¶
Note
This is the SHUC formulation from
v2of Yazdani et al. [2].
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 |
|
|
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}_g\) for generator \(g\) at time \(t\) |
continuous |
|
|
Spinning reserve of generator \(g\) at time \(t\) |
continuous |
|
|
Variable production cost above the cost at the first breakpoint for generator \(g\) at time \(t\) |
continuous |
|
|
Renewable output for wind generator \(w\) 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 |
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 \(\mathrm{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 the cost at the first breakpoint.
\[ 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 \]Renewable output is at least the minimum for each wind generator and time period.
\[ P^{w,\min}_{w,t} \le p^w_{w,t} \quad \forall w, t \]Renewable output is at most the maximum for each wind generator and time period.
\[ p^w_{w,t} \le P^{w,\max}_{w,t} \quad \forall w, t \]Piecewise convex combination weights are non-negative. (implicit)
\[ \lambda_{g,l,t} \ge 0 \quad \forall g, l, t \]Thermal output above the minimum is non-negative. (implicit)
\[ p_{g,t} \ge 0 \quad \forall g, t \]Spinning reserve is non-negative. (implicit)
\[ r_{g,t} \ge 0 \quad \forall g, t \]Variable production cost above the cost at the first breakpoint is non-negative. (implicit)
\[ c_{g,t} \ge 0 \quad \forall g, t \]
Objective¶
Minimize total production cost (on-cost at the first breakpoint plus variable cost) and startup costs over all generators and time periods.
Formulation b (valid)¶
Note
This is the SHUC formulation from
v2of Yazdani et al. [2] augmented with its ten jointly applied acceleration cuts. It introduces auxiliary variables \(\overline{P}_{g,t}\) and \(b_{g,t}\) to enforce that demand minus renewable output plus reserve can be met by thermal capacity that is reachable under ramp limits, with derating during startups and shutdowns
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 |
|
|
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}_g\) for generator \(g\) at time \(t\) |
continuous |
|
|
Spinning reserve of generator \(g\) at time \(t\) |
continuous |
|
|
Variable production cost above the cost at the first breakpoint for generator \(g\) at time \(t\) |
continuous |
|
|
Renewable output for wind generator \(w\) at time \(t\) |
continuous |
|
|
EC1 indicator: \(1\) if generator \(g\) starts at \(t\) and shuts down at \(t+1\) |
binary |
|
|
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 |
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 \(\mathrm{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 the cost at the first breakpoint.
\[ 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 \]Renewable output is at least the minimum for each wind generator and time period.
\[ P^{w,\min}_{w,t} \le p^w_{w,t} \quad \forall w, t \]Renewable output is at most the maximum for each wind generator and time period.
\[ p^w_{w,t} \le P^{w,\max}_{w,t} \quad \forall w, t \]Piecewise convex combination weights are non-negative. (implicit)
\[ \lambda_{g,l,t} \ge 0 \quad \forall g, l, t \]Thermal output above the minimum is non-negative. (implicit)
\[ p_{g,t} \ge 0 \quad \forall g, t \]Spinning reserve is non-negative. (implicit)
\[ r_{g,t} \ge 0 \quad \forall g, t \]Variable production cost above the cost at the first breakpoint is non-negative. (implicit)
\[ c_{g,t} \ge 0 \quad \forall g, t \]One of three inequalities forming a standard Fortet linearization of \(b_{g,t} = 1\) if and only if generator \(g\) starts at \(t\) and shuts down at \(t+1\).
\[ b_{g,t} \le v_{g,t} \quad \forall g, t < T-1 \]One of three inequalities forming a standard Fortet linearization of \(b_{g,t} = 1\) if and only if generator \(g\) starts at \(t\) and shuts down at \(t+1\).
\[ b_{g,t} \le w_{g,t+1} \quad \forall g, t < T-1 \]One of three inequalities forming a standard Fortet linearization of \(b_{g,t} = 1\) if and only if generator \(g\) starts at \(t\) and shuts down at \(t+1\).
\[ b_{g,t} \ge v_{g,t} + w_{g,t+1} - 1 \quad \forall g, t < T-1 \]\(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 \]\(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 \]\(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 \]\(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 \]\(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 \]\(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 \]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 (on-cost at the first breakpoint plus variable cost) and startup costs over all generators and time periods.
Reformulations¶
Each entry below pairs two formulations of this problem, records whether the second is a reformulation of the first, and gives the parameter map carrying the first formulation’s parameters to the second’s.
a → b (valid)¶
Note
Formulation
bhas the same parameters as formulationa; the map is the identity.
Parameter map
Name |
Definition in terms of |
|---|---|
|
\(T = T\) |
|
\(n_G = n_G\) |
|
\(n_W = n_W\) |
|
\(n_{S,g} = n_{S,g}\) |
|
\(\ell_{g,s} = \ell_{g,s}\) |
|
\(C^{su}_{g,s} = C^{su}_{g,s}\) |
|
\(n_{L,g} = n_{L,g}\) |
|
\(P_{g,l} = P_{g,l}\) |
|
\(C_{g,l} = C_{g,l}\) |
|
\(L_t = L_t\) |
|
\(R_t = R_t\) |
|
\(P^{\min}_g = P^{\min}_g\) |
|
\(P^{\max}_g = P^{\max}_g\) |
|
\(P^{w,\min}_{w,t} = P^{w,\min}_{w,t}\) |
|
\(P^{w,\max}_{w,t} = P^{w,\max}_{w,t}\) |
|
\(RU_g = RU_g\) |
|
\(RD_g = RD_g\) |
|
\(SU_g = SU_g\) |
|
\(SD_g = SD_g\) |
|
\(U_g = U_g\) |
|
\(D_g = D_g\) |
|
\(\mathrm{MR}_g = \mathrm{MR}_g\) |