p11 | Sub-Hour Unit Commitment (SHUC)

See also

This problem is sourced from EvoCut.

Note

  • We add implicit assumptions for non-empty sets, non-negativity of all parameters, and the ordering constraints \(P^{\max}_g \ge P^{\min}_g\) and \(P^{w,\max}_{w,t} \ge P^{w,\min}_{w,t}\).

  • EvoCut arXiv submission 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)

See also

This formulation is sourced from EvoCut.

Note

  • This is the MILP formulation given in Section F.7 of EvoCut arXiv submission v2.

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC1).

Note

  • These three inequalities are a linearization defining an auxiliary variable \(b_{g,t}\) as the product \(v_{g,t} \cdot w_{g,t+1}\).

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC2a).

Note

  • During a startup period, generator \(g\)’s maximum available output above its minimum is reduced by \(\max(P^{\max}_g - SU_g, 0)\), reflecting the startup ramp limit.

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC2b).

Note

  • In the period immediately before a shutdown, generator \(g\)’s maximum available output above its minimum is reduced by \(\max(P^{\max}_g - SD_g, 0)\), reflecting the shutdown ramp limit.

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC2c).

Note

  • Generator \(g\)’s maximum available output above its minimum is reduced by both the startup derating at period \(t\) and the shutdown derating at \(t+1\), with a recovery term \(b_{g,t} = v_{g,t} \cdot w_{g,t+1}\) that adds back the smaller of the two when startup and shutdown occur in consecutive periods (so the derating is not double-counted).

  • This inequality relies on the auxiliary variable \(b_{g,t}\), so the three inequalities that define it (see p11.b) are also included.

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC3a).

Note

  • Generator \(g\)’s maximum available output in period \(t\) is at most its output in period \(t-1\) plus its ramp-up limit \(RU_g\); the bound is relaxed when the generator was offline at \(t-1\).

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC3b).

Note

  • Generator \(g\)’s maximum available output in period \(t\) is bounded by the reachable level from \(t-1\) assuming startup derating was applied at \(t-1\).

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC3c).

Note

  • Generator \(g\)’s maximum available output in period \(t\) is bounded by the reachable level from \(t-1\) assuming shutdown derating is applied at \(t\).

Parameters

Name

Description

Type

Shape

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)

See also

This formulation is sourced from EvoCut (name: EC4).

Note

  • At each period \(t\), the sum of generators’ maximum available outputs must cover net demand (load minus renewable) plus the spinning reserve requirement.

Parameters

Name

Description

Type

Shape

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} \]