1 Introduction

The standard unit commitment (UC) problem for power systems operations involves determining which thermal generators should be scheduled to meet projected demand for power over a given time horizon, while ensuring physical and operational constraints are satisfied. The time horizon is typically one or two days at an hourly resolution. Feasible operating constraints for thermal generators include limits on ramping, minimum up and down times, startup and shutdown ramp rates, and minimum and maximum production levels. The UC problem is extensively studied in the optimization and power systems literature (Anjos and Conejo 2017; Damcı-Kurt et al. 2016; Ostrowski et al. 2015; Padhy 2004; Queyranne and Wolsey 2017; Silbernagl 2016). It can be formulated as a mixed-integer linear program (MILP) and solved with commercial branch-and-cut software packages (Knueven et al. 2020, 2018b; Morales-España et al. 2013; O’Neill 2017). Prior to recent advances in MILP solver technology and UC formulations, even modest instances were computationally challenging to solve in time limits required by operations. Consequently, techniques such as Lagrangian decomposition (Borghetti et al. 2003), Benders decomposition (Wu and Shahidehpour 2010), and metaheuristics (Kazarlis et al. 1996) were previously employed. Presently, MILP solvers are regularly employed by Independent System Operators (ISOs) and Vertically Integrated Utilities to solve UC instances for real time operations; see, e.g. O’Neill (2017) and Ott (2010).

The standard UC model is implicitly a deterministic MILP, with inherently uncertain parameters such as demand being populated with their forecasted “point” quantities, with potential deviations from forecasted quantities being addressed by reserve margins. With the growing deployment of renewable energy sources, particularly wind and solar generators, there is increasing interest in explicitly treating uncertain aspects of the UC problem—yielding stochastic UC models; see, e.g., van Ackooij et al. (2018), Wang et al. (2012) and Zhao et al. (2013). Takriti et al. (2000) present a stochastic single-UC formulation with uncertain electricity prices, but from the perspective of an individual generator participating in a market. Uncertain demand is also a factor driving interest in stochastic UC formulations; see, e.g., Ozturk et al. (2004).

Stochastic UC is commonly formulated as an extensive stochastic program; see, e.g., Birge and Louveaux (2011) for an introduction to this decision formalism. Standard stochastic programming models assume that uncertainty is captured via a finite set of discrete scenarios, and that any solution to the model ensures feasibility of all constraints in all scenarios. A less stringent approach is to assume that some constraints can be violated with a small probability, resulting in chance constrained stochastic programming models. Due to their flexibility and explicit acknowledgment that certain constraints may be violated while ensuring reliability, chance constrained models are frequently found in the stochastic UC literature; see, e.g., Pozo and Contreras (2013), Singh et al. (2018), Wang et al. (2012) and Wu et al. (2014). Chance constrained models are seldom solved using a naive extensive formulation; see (Ozturk et al. 2004) for an approximation using iteratively updated union bounds,  Pozo and Contreras (2013) for an approximation using conditional value-at-risk, Zhao et al. (2014) for a Monte Carlo sample average approximation, and Watson et al. (2010) for decomposition methods.

Operational limits on thermal generators are key inputs to both deterministic and stochastic UC models. Often, these limits are based on engineering judgment or economic considerations, rather than physical limitations. For example, minimum power outputs are commonly set to levels such that lower production levels are not profitable for operators, while maximum power outputs can be exceeded in practice for short periods of time to ensure reliable system operation. Consequently, system operators can, and do, run thermal generators beyond these limits (Kraemer 2013). We further note that such limits are also explicitly recognized by operators as “soft” constraints (Blumsack 2018), reinforcing the notion that they can be occasionally violated in practice. ISOs within the US, such as MISO (2018) and System Operations Division, PJM (2019), have mechanisms in place to allow for infrequent exceedance of normal production (i.e., dispatch) limits. Such mechanisms are different from spinning reserves and other ancillary service products in that they are typically held back for when net-load is significantly different from the forecasted quantity, whereas ancillary services are commonly dispatched to address contingencies (generator and/or transmission) and more typical deviations from net-load forecasts.

In principle, a stochastic programming model for UC can address anticipated variations in net-load (Wang and Hobbs 2014). For reserve products, market operators typically procure sufficient generation to cover a \((1-\varepsilon )\) proportion of possible net-load realizations (Cornelius 2014). Compared to holding energy in reserve, stochastic programming can yield overly conservative schedules by scheduling sufficient generation to cover all—or a very large range of—possible load realizations. Our proposed stochastic UC model yields a method for incorporating the practical consideration of procuring sufficient generation to address a large proportion of possible net-load realizations into stochastic UC, while allowing for a currently-used recourse action (emergency capacity) if a low probability net-load realization is not covered under normal operations.

To the best of our knowledge, previous work has not analyzed the effect of periodically violating these soft operational constraints associated with thermal generators, in support of either cost reductions or system reliability. We acknowledge that a thermal generator should not be operated outside its prescribed engineering and/or economic limits for significant amounts of time, as this would likely incur increased maintenance costs and lifetime reductions (Dahal and Chakpitak 2007). Further, running thermal generators beyond their prescribed ratings is not fuel efficient (Knudsen et al. 2017). However, occasional violations may not significantly inflate maintenance costs or reduce lifetime, and may yield significant overall operational cost savings. Because of the scales involved, even a 1% savings in energy production costs is worth more than $10 billion per year globally, and more than $1 billion per year in the U.S. alone (O’Neill 2007). Thus, it is important to understand the trade-offs between the frequency and magnitude of these violations and any potential cost savings.

Here, we explicitly allow thermal generators to occasionally produce beyond their prescribed minimum and maximum ratings, while simultaneously limiting the extent of violations. We informally refer to the operation of a thermal generator in this mode as an “non-nominality”. We limit the number of these non-nominalities to a small quantity using a chance constraint, in the broader context of a stochastic UC formulation. Unlike traditional chance-constrained stochastic programming models where violations are generally unbounded, thermal generators are still restricted by their absolute minimum and maximum ratings. As these absolute maximum ratings are typically proprietary information and consequently unknown to system operators, we take the absolute ratings to be a few percent greater than the prescribed ratings. Thus, unlike a traditional chance constraint where the magnitude of violations could be unrestricted, in our work the non-nominalities qualify as (tightly) bounded violations.

We summarize our main contributions in this article as follows:

  • We present a mathematical formulation for a chance-constrained stochastic UC model where thermal generators are allowed to produce modestly beyond their technical minimum and maximum ratings with a small probability, in order to address discrepancies between forecasted and actual net-load.

  • We show that an extensive form of the resulting chance-constrained stochastic UC model can be solved directly by commercial MILP branch-and-cut solvers for modestly sized problem instances.

  • We demonstrate significant operational cost savings (on the order of \(\approx \) 1%) can be obtained via infrequent and modest exceedance of nominal thermal generator production limits.

  • We analyze the structure of optimal solutions to our chance-constrained UC model and assess the generalizability of our results to distinct test cases and operational restrictions.

The remainder of this paper is organized as follows. In Sect. 2, we present our chance-constrained stochastic UC model. In Sect. 3, we describe the data and sources associated with two different UC test cases that serve as the basis for our computational experiments. Our experimental results are detailed in Sect. 4, and include a sensitivity analysis to the parameters associated with the limit violation’s frequency and magnitude. We conclude in Sect. 5 with a summary of our contributions and plans for future work.

2 Chance-constrained stochastic unit commitment formulation

We now present our chance-constrained stochastic unit commitment formulation. We begin in Sect. 2.1 by introducing the notation, and then formally describe the mathematical programming model in Sect. 2.2.

2.1 Notation

Indices and Sets

\(g \in \mathcal {G}\) :

Thermal generators.

\(t \in \mathcal {T}\) :

Hourly time steps: \(1, \ldots , T\); i.e., \([a, b) \in \mathcal {T}\times \mathcal {T}\) such that \(b \ge a + {UT}^g\).

\(l \in \mathcal {L}^g\) :

Piecewise production cost intervals for generator g: \(1, \ldots , {L}_g\).

\(s \in \mathcal {S}^g\) :

Start-up categories for generator g, from hottest (1) to coldest (\(S_g\)).

\(\omega \in \varOmega \) :

Scenarios: \(\omega _1, \ldots , \omega _N\).

Parameters: First Stage

\(C^{l,g}\) :

Marginal cost for piecewise segment l for generator g ($/MWh).

\({\overline{C}}^g\) :

Marginal cost for production above \({\overline{P}}^g\) ($/MWh).

\({\underline{C}}^g\) :

Marginal cost for production below \({\underline{P}}^g\) ($/MWh).

\(C^{R,g}\) :

Cost of generator g running and operating at minimum production \({\underline{P}}_g\) ($/h).

\(C^{s,g}\) :

Start-up cost of category s for generator g ($).

\({DT}^g\) :

Minimum down time for generator g (h).

\({\overline{P}}^g\) :

Maximum power output for generator g under normal operations (MW).

\({\overline{\overline{P}}}^g\) :

Maximum power output for generator g under non-nominal operations (MW).

\({\underline{P}}^g\) :

Minimum power output for generator g under normal operations (MW).

\({\underline{\underline{P}}}^g\) :

Minimum power output for generator g under non-nominal operations (MW).

\({\overline{P}}^{l,g}\) :

Maximum power available for piecewise segment l for generator g (MW) (with \({\overline{P}}^{0,g} = {\underline{P}}^g\)).

\({RD}^g\) :

Ramp-down rate for generator g (MW/h).

\({RU}^g\) :

Ramp-up rate for generator g (MW/h).

\({SD}^g\) :

Shutdown ramp rate for generator g (MW/h).

\({SU}^g\) :

Start-up ramp rate for generator g (MW/h).

\({TC}^g\) :

Time down after which generator g goes cold (h).

\({\underline{T}}^{s,g}\) :

Time offline after which the start-up category s is available (h) (with \({\underline{T}}^{1,g} = {DT}^g\), \({\underline{T}}^{S^g,g} = {TC}^g\))

\({UT}^g\) :

Minimum up time for generator g (h).

Parameters: Second Stage

\({D}_t^{\omega }\) :

Load (demand) at time t in scenario \(\omega \) (MW).

\({\overline{W}}_t^{\omega }\) :

Maximum power from renewables at time t in scenario \(\omega \) (MW).

\({\underline{W}}_t^{\omega }\) :

Minimum power from renewables at time t in scenario \(\omega \) (MW).

Variables: First Stage

\(c^{SU,g}_t\) :

Start-up cost of generator g at time t ($).

\(u^g_t\) :

Commitment status of generator g at time t, \(\in \{0,1\}\).

\(v^g_t\) :

Start-up status of generator g at time t, \(\in \{0,1\}\).

\(w^g_t\) :

Shutdown status of generator g at time t, \(\in \{0,1\}\).

\(x^g_{[t,t')}\) :

Indicator arc for shutdown at time t, start-up at time \(t'\), uncommitted for \(i \in [t, t')\), for generator g, \(\in \{0,1\}\), \([t,t')\) such that \(t + {DT}^g \le t' \le t+{TC}^g -1\).

Variables: Second Stage

\(p_t^{g,\omega }\) :

Power above minimum from generator g at time t in scenario \(\omega \) (MW).

\({\overline{p}}_t^{g,\omega }\) :

Power above maximum from generator g at time t in scenario \(\omega \) (MW).

\({\underline{p}}_t^{g,\omega }\) :

Power below minimum from generator g at time t in scenario \(\omega \) (MW).

\(p^{l,g,\omega }_t\) :

Power from piecewise interval l for generator g at time t in scenario \(\omega \) (MW).

\(r^{n,\omega }_t\) :

Power from renewables at time t in scenario \(\omega \) (MW).

\(y^{g,\omega }_t\) :

Non-nominal operation status of generator g at time t in scenario (MW).

2.2 Mathematical programming model

We assume that the generator operating cost is increasing, piecewise linear and convex in \(p_t^{g,\omega }\) under normal operating conditions. Further, let \(\mathcal {G}^{>1} = \{ g \in \mathcal {G}\mid {UT}^g > 1 \}\) and \(\mathcal {G}^1 = \{g \in \mathcal {G}\mid {UT}^g = 1 \}\); i.e., \(\mathcal {G}^{>1}\) and \(\mathcal {G}^1\) denote the set of generators with an uptime greater than one and equal to one, respectively. We use the so-called “3-bin” formulation from (Knueven et al. 2020; Morales-España et al. 2013), with the ramping constraints from (Damcı-Kurt et al. 2016).

$$\begin{aligned} \text {min} \sum _{g \in \mathcal {G}} \sum _{t \in \mathcal {T}} \left( \sum _{l \in \mathcal {L}^g} \mathbb {E}[C^{l,g} \, p^{l,g,\omega }_t + {\overline{C}}^{g} \, {\overline{p}}^{g,\omega }_t + {\underline{C}}^g \, {\underline{p}}^{g,\omega }] \> + C^{R,g} \, u^g_t + c^{SU,g}_t \right) \end{aligned}$$
(1)

subject to:

$$\begin{aligned} u^g_t - u^g_{t-1}&= v^g_t - w^g_t \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G} \end{aligned}$$
(2a)
$$\begin{aligned} \sum _{i= t-{UT}^g + 1}^t v^g_i&\le u^g_t \qquad \qquad \forall t \in [{UT}^g, T], \, \forall g \in \mathcal {G} \end{aligned}$$
(2b)
$$\begin{aligned} \sum _{i= t-{DT}^g + 1}^t w^g_i&\le 1 - u^g_t \qquad \qquad \forall t \in [{DT}^g, T], \> \, \forall g \in \mathcal {G} \end{aligned}$$
(2c)
$$\begin{aligned} \sum _{t'= t-{TC}^g+1}^{t-{DT}^g} x^g_{[t',t)}&\le v^g_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G} \end{aligned}$$
(2d)
$$\begin{aligned} \sum _{t' = t+{DT}^g}^{t+{TC}^g-1} x^g_{[t,t')}&\le w^g_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}\end{aligned}$$
(2e)
$$\begin{aligned} c^{SU, g}_t&= C^{S,g} v^g_t + \sum _{s=1}^{S^g-1} (C^{s,g} - C^{S,g}) \left( \sum _{ t' = t-{\underline{T}}^{s+1,g}+1 }^{t-{\underline{T}}^{s,g}} x^g_{[t',t)} \right) \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G} \end{aligned}$$
(2f)
$$\begin{aligned} p_t^{g,\omega }&\le ({\overline{P}}^g-{\underline{P}}^g) u^g_t - ({\overline{P}}^g - {SU}^g) v^g_t - ({\overline{P}}^g - {SD}^g) w^g_{t+1} \qquad \qquad \forall t \in \mathcal {T}, \forall g \in \mathcal {G}^{>1}, \forall \omega \in \varOmega \end{aligned}$$
(3a)
$$\begin{aligned} p_t^{g,\omega }&\le ({\overline{P}}^g-{\underline{P}}^g) u^g_t - ({\overline{P}}^g - {SU}^g) v^g_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}^1, \, \forall \omega \in \varOmega \end{aligned}$$
(3b)
$$\begin{aligned} p_t^{g,\omega }&\le ({\overline{P}}^g-{\underline{P}}^g) u^g_t - ({\overline{P}}^g - {SD}^g) w^g_{t+1} \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}^1, \, \forall \omega \in \varOmega \end{aligned}$$
(3c)
$$\begin{aligned} p_t^{g,\omega } - p^{g, \omega }_{t-1}&\le ({SU}^g - {RU}^g - {\underline{P}}^g) v^g_t + {RU}^g u^g_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(3d)
$$\begin{aligned} p^{g, \omega }_{t-1} - p_t^{g,\omega }&\le ({SD}^g - {RD}^g - {\underline{P}}^g) w^g_t + {RD}^g u^g_{t-1} \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(3e)
$$\begin{aligned} p_t^{g,\omega }&= \sum _{l \in \mathcal {L}^g} p^{l,g,\omega }_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(3f)
$$\begin{aligned} p^{l,g,\omega }_t&\le ({\overline{P}}^{l,g}- {\overline{P}}^{l-1,g})u^g_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall l \in \mathcal {L}^g, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(3g)
$$\begin{aligned} y^{g,\omega }_t&\le u^g_t - v^g_t - w^g_{t+1} \qquad \qquad \forall t \in \mathcal {T}, \forall g \in \mathcal {G}^{>1}, \forall \omega \in \varOmega \end{aligned}$$
(4a)
$$\begin{aligned} y^{g,\omega }_t&\le u^g_t - v^g_t \qquad \qquad \forall t \in \mathcal {T}, \forall g \in \mathcal {G}^1, \forall \omega \in \varOmega \end{aligned}$$
(4b)
$$\begin{aligned} y^{g,\omega }_t&\le u^g_t - w^g_{t+1} \qquad \qquad \forall t \in \mathcal {T}, \forall g \in \mathcal {G}^1, \forall \omega \in \varOmega \end{aligned}$$
(4c)
$$\begin{aligned} {\overline{p}}^{g, \omega }_t&\le \left( {\overline{\overline{P}}}- {\overline{P}}\right) y^{g,\omega }_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(4d)
$$\begin{aligned} {\underline{p}}^{g,\omega }_t&\le \left( {\underline{P}}- {\underline{\underline{P}}}\right) y^{g, \omega }_t \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(4e)
$$\begin{aligned}&\sum _{g \in \mathcal {G}} \left( p_t^{g,\omega } + {\overline{p}}^{g,\omega }_t -{\underline{p}}^{g,\omega }_t + {\underline{P}}^g u^g_t \right) + r_t^{\omega } = {D}_t^{\omega } \quad \forall t \in \mathcal {T}, \, \forall \omega \in \varOmega \end{aligned}$$
(5)
$$\begin{aligned}&\frac{1}{|\mathcal {G}||\mathcal {T}||\varOmega |} \sum _{\omega \in \varOmega } \sum _{g \in \mathcal {G}} \sum _{t \in T} y_t^{g,\omega } \le \varepsilon \end{aligned}$$
(6)
$$\begin{aligned}&p^{l,g,\omega }_t \in \mathbb {R}_+ \qquad \qquad \forall t \in \mathcal {T}, \, \forall l \in \mathcal {L}^g, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(7a)
$$\begin{aligned}&p_t^{g,\omega }, {\overline{p}}_t^{g,\omega }, {\underline{p}}_t^{g,\omega } \in \mathbb {R}_+ \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G}, \, \forall \omega \in \varOmega \end{aligned}$$
(7b)
$$\begin{aligned}&r_t^{n,\omega } \in \left[ {\underline{W}}^{n,\omega }_t, {\overline{W}}^{n,\omega }_t \right] \qquad \qquad \forall t \in \mathcal {T}, \forall n \in \mathcal {N}, \forall \omega \in \varOmega \end{aligned}$$
(7c)
$$\begin{aligned}&u^g_t, v^g_t, w^g_t \in \{0, 1\} \qquad \qquad \forall t \in \mathcal {T}, \, \forall g \in \mathcal {G} \end{aligned}$$
(7d)
$$\begin{aligned}&x^g_{[t,t')} \in \{0, 1\} \qquad \qquad \forall [t,t') \in \mathcal {X}^g, \, \forall g \in \mathcal {G} \end{aligned}$$
(7e)
$$\begin{aligned}&y^{g,\omega }_t \in \{0,1\} \qquad \qquad \forall t \in \mathcal {T}, \forall g \in \mathcal {G}, \forall \omega \in \varOmega . \end{aligned}$$
(7f)

We introduce this model only briefly here, details are available in Morales-España et al. (2013). Constraints (2) describe the use of the generator with its on and off variables and encode the start-up costs (which are directly substituted into the objective function via equation (2f). Constraints (3) represent the generator’s start-up and shutdown requirements, ramping requirements, and piecewise power production. Constraint (5) ensures we meet the uncertain demand exactly with the thermal and renewable generators. Variable \(y_t^{g,\omega }\) is one when the generator g is operating in a non-nominal mode at hour t in scenario \(\omega \), and zero under normal operating conditions. Turning to constraints (4), first notice by constraints (4a)–(4c) that a generator can only be in non-nomimal mode at time t if it is on (\(u_t=1\)), has been on (\(v_t=0\)), and will be on for at least one hour (\(w_{t+1}=0\)). Constraints (4d) and (4e) enforce that in a non-nominal mode the generator can produce power up to \({\overline{\overline{P}}}^g\) or down to \({\underline{\underline{P}}}^g\). Notice that the total output of the generator at t in scenario \(\omega \) is represented by the quantity \(\left( p_t^{g,\omega } + {\overline{p}}^{g,\omega }_t -{\underline{p}}^{g,\omega }_t + {\underline{P}}^g u^g_t \right) \). Finally, constraint (6) restricts the proportion of non-nominalities across all generators, times and scenarios to be no more than \(\varepsilon \). Here, \(\varepsilon \) is a small number less than one, such as 0.01 or 0.05. We explain the particular choice of this chance constraint in Section 2.3. The remaining constraints ensure the non-negativity and binary restrictions on the relevant decision variables and the stochastic bounds on the renewable power.

Because of the additional variables used to represent dispatch over \({\overline{P}}^g\) and under \({\underline{P}}^g\), this formulation implicitly relaxes the ramping requirements. We believe this to be reasonable as \({\overline{\overline{P}}}^g\) (\({\underline{\underline{P}}}^g\)) will be not too different from \({\overline{P}}^g\) (\({\underline{P}}^g\)), so the relaxation of the ramping requirements will be of the same scale as the relaxation of the operating limits.

In the two-stage stochastic program represented by model (1)–(7), we decide each generator’s operation status in the first stage. Then, we observe the uncertainty in the demand and wind power. After this, we decide the amount of power to employ from each generator that was declared to be “on” in the first stage. Under normal operating conditions, generator g can use power up to \({\overline{P}}^g\). This limit is increased to \({\overline{\overline{P}}}^g\) under non-nominal operations. Similarly, if there is the potential for an over-generation event, the lower limit can be reduced from \({\underline{P}}^g\) to \({\underline{\underline{P}}}^g\). Also notice that power below minimum \({\underline{p}}^{g,\omega }_t\) is penalized with a positive term in the objective function, and similarly for \({\overline{p}}^{g,\omega }_t\). When the provided cost curve \(C^{l,g}\) is convex, the overall production costs with non-nominalities will be convex when \({\overline{C}}^g \ge C^{L_g,g}\) and \({\underline{C}}^g \ge -C^{1,g}\). The first condition says the marginal cost of providing non-nominal power by dispatching above \({\overline{P}}^g\)is at least that of the generator operating at \({\overline{P}}^g\), and the second says the marginal cost of dispatching below \({\underline{P}}^g\) is at least that of being dispatched at \({\underline{P}}^g\). In practice we will consider \({\underline{C}}^g > 0\) so as to compensate generators for dispatch below \({\underline{P}}^g\).

During a non-nominality, we allow generator g to produce power up to \({\overline{\overline{P}}}^g > {\overline{P}}^g\), at a cost greater than that during normal operations. Similarly, we allow generator g to produce power down to \({\underline{\underline{P}}}^g < {\underline{P}}^g\), at cost \({\underline{C}}^g\). Given the lack of data, we selected parameters \(\beta , \gamma > 0\) for use in our study:

$$\begin{aligned} {\overline{\overline{P}}}^g&= (1+ \beta ) {\overline{P}}^g \\ {\underline{\underline{P}}}^g&= (1 - \beta ) {\underline{P}}^g \\ {\overline{C}}^g&= (1+ \gamma ) C^{L^g,g} \\ {\underline{C}}^g&= (1+ \gamma ) C^{L^g, g}. \end{aligned}$$

2.3 Choice of the chance constraint

We begin with a few definitions, motivated by Prékopa (1988); Singh and Watson (2019). Define the event \(E_t^g = \{\omega : y_t^{g,\omega } = 0 \}\). Then, the complement of \(E_t^g\) is \(\overline{E}_t^g = \{\omega : y_t^{g,\omega } = 1 \}\). Define the event \(F =\{ \omega : \cap _{t \in \mathcal {T}, g \in \mathcal {G}} E_t^g \}\). Then, the complement of F is \(\overline{F}= \{ \omega : \cup _{t \in \mathcal {T}, g \in \mathcal {G}} \overline{E}_t^g \}\). Consider the following probabilistic constraints:

$$\begin{aligned} \mathbb {P}(\overline{F})\le & {} \varepsilon . \end{aligned}$$
(8a)
$$\begin{aligned} \sum _{g \in \mathcal {G}} \sum _{t \in T} \mathbb {P}\left( \overline{E}_t^g \right)\le & {} \varepsilon . \end{aligned}$$
(8b)

Lemma 1

The constraint (8b) implies the constraint (8a).

Proof

The proof follows from the definitions of \(\overline{F}\) and \(\overline{E}_t^g\), and the classical probability inequality: \(\mathbb {P}\left( \cup _{t \in \mathcal {T}, g \in \mathcal {G}} \overline{E}_t^g \right) \le \sum _{g \in \mathcal {G}} \sum _{t \in T} \mathbb {P}\left( \overline{E}_t^g \right) \). \(\square \)

Next, we construct a sample average approximation (SAA) of the above probabilistic constraints with \(|\varOmega |\) samples. To this end, we define a new binary variable: \(z^\omega =0 \) if \(y_t^{g,\omega } = 0, \forall t \in \mathcal {T}, g \in \mathcal {G}\), and \(z^\omega =1\) otherwise. We can relate the z and y variables as follows:

$$\begin{aligned} z^\omega\le & {} \sum _{g \in \mathcal {G}} \sum _{t \in T} y_t^{g,\omega }, \forall \omega \in \varOmega \end{aligned}$$
(9a)
$$\begin{aligned} z^\omega\ge & {} y_t^{g,\omega }, \forall t \in \mathcal {T}, \forall g \in \mathcal {G}, \forall \omega \in \varOmega . \end{aligned}$$
(9b)

The SAA of the probabilistic constraints (8a) and (8b) are respectively:

$$\begin{aligned} \frac{1}{|\varOmega |} \sum _{\omega \in \varOmega } z^\omega\le & {} \varepsilon . \end{aligned}$$
(10a)
$$\begin{aligned} \frac{1}{|\varOmega |} \sum _{g \in \mathcal {G}} \sum _{t \in T} \sum _{\omega \in \varOmega } y_t^{g, \omega }\le & {} \varepsilon . \end{aligned}$$
(10b)

Equations (9b) and (10a) imply:

$$\begin{aligned} \frac{1}{|\varOmega ||\mathcal {T}||\mathcal {G}|} \sum _{g \in \mathcal {G}} \sum _{t \in T} \sum _{\omega \in \varOmega } y_t^{g, \omega } \le \varepsilon , \end{aligned}$$
(11)

which is weaker than constraint (10b). The above discussion can be summarized in the following lemma.

Lemma 2

Under Eq. (9), the constraint (10b) implies the constraint (10a) which further implies the constraint (11).

In model (1)–(7), we choose the weakest of the above three probabilistic constraints. If the SAA is constructed using only a few scenarios, as is often the case with stochastic UC, the constraints (10b) and constraint (10a) might be too stringent; e.g., a model with 99 scenarios and \(\varepsilon =0.01\) would have \(z^\omega = 0, \forall \omega \in \varOmega \). To summarize the above discussion, we define a non-nominality as an operation outside of the prescribed technical ratings in a {generator, time, scenario} triplet. And, we restrict the proportion of these non-nominalities to a small positive quantity, namely \(\varepsilon \).

In Sect. 4 we analyze the sensitivity of the stochastic solution to \(\beta \), \(\gamma \), and \(\varepsilon \). Larger values of \(\beta \) relax the nominal operating constraints further, and larger values for \(\gamma \) penalize deviation from the nominal operating constraints through the cost via the objective function.

3 Case study

To analyze the impact of considering bounded exceedances of generator ratings directly in a stochastic UC model, we consider two case studies. The first case study considers the WECC240++ system (Rachunok et al. 2018). WECC240++ UC instances have 85 thermal generating units. Demand profiles are based on real-world data from 2004. Wind generation scenarios are based on data from 2013, scaled to achieve approximately 30% penetration levels. We selected one day in the 2013 simulation set, 11 May 2013, and consider 50 probabilistic scenarios and a time horizon of 48 hours at hourly resolution. Scenarios were constructed using the Markov-Chain Monte-Carlo procedure to model wind production; demand is treated as deterministic. Wind generation is fully curtailable. For additional details, the reader is referred to Rachunok et al. (2018).

The second case study is based on the recently introduced RTS-GMLC system (RTS-GMLC 2018; Barrows et al. 2020). The RTS-GMLC system has 73 thermal generators (oil, coal, gas, and nuclear) and 81 renewable generators (wind, hydro, utility-scale photo-voltaic, and rooftop photo-voltaic). Simulated load and renewable generation is provided on a 5-minute basis for the year 2020. We consider the date 10 July 2020 with a 48 hour planning horizon, at hourly resolution, and use 16 probabilistic wind scenarios obtained from Staid et al. (2017). All other data is considered deterministic for this study. We additionally assume hydro units are self-scheduling and the rooftop photo-voltaic is must-take. However, the wind and utility-scale photo-voltaic are fully curtailable. Hence, the aggregate renewables at each bus in the system is a mix of must-take and curtailable resources.

4 Computational experiments

4.1 Computational setup

We encoded all models using the Pyomo 5.5 (Hart et al. 2017) algebraic modeling language. All models are solved using the commercial Gurobi 8.0.1 (Gurobi Optimization 2018) MILP solver, on a laptop comprising of a 2.8 GHz Intel Core i7 processor and 16 GB of RAM. We consider \(\varepsilon = 0.01\) and 0.05, corresponding respectively to use of nominal generator operations at least 99% and 95%, across all scenarios, generators, and time periods. We attempt to solve all problems to a MILP optimality gap of 0.001 (i.e., 0.1%) within a time limit of 1800 seconds. Additionally, we set the Gurobi parameter Method=1, which dictates that dual simplex is to be used to solve the root LP relaxations. All other Gurobi solver parameter settings were preserved at their defaults. We report the MILP optimality gap at termination when a problem could not be solved within the 1800 second time limit. The expected cost at \(\varepsilon =0\) is the baseline for operations when no non-nominal states are permitted; i.e., standard stochastic UC. In this case, the values of \(\beta \) and \(\gamma \) are irrelevant. Setting \(\varepsilon > 0\) allows for varying degrees of non-nominal operations. In addition to absolute cost, we report the percentage of savings relative to the base case (\(\varepsilon =0\)). In general, this percentage represents the minimum percentage cost saved, as some problems could not be solved within the time limit, and in any case all models are only solved to a termination criteria of a 0.1% MILP gap.

4.2 Comparison of the two test systems

In Table 1 we present the results for the WECC-240++ case. All parameterizations of this case study were solved to 0.1% optimality gap within the time limit; this is reflected using “-” in the MILP gap column. In Table 2, we present analogous results for a single representative day for the RTS-GMLC case. Here, we do observe non-zero MILP gaps in some parameterizations of our model.

Table 1 Computational results for the WECC240++ 50 scenario test case for 11 May 2013. The “MILP gap (%)” column is empty as all instances were solved to the optimal tolerance level
Table 2 Computational results for the RTS-GMLC 16 scenario case for 10 July 2020. A blank in the “MILP gap (%)” column indicates that the instance was solved to the optimal tolerance level

Both of our baseline case studies consider data from late spring and summer months in the US. Winter and fall months necessarily exhibit different load profiles. Next, we consider RTS-GMLC case results using data from the winter (for 10 January 2020). The results, shown in Table 3, indicate qualitatively identical behavior for our model.

Table 3 Computational results for the RTS-GMLC 16 scenario case for 10 January 2020. A blank in the “MILP gap (%)” column indicates that the instance was solved to the optimal tolerance level

Despite having a similar number of generators and fewer scenarios, the RTS-GMLC system is generally more computationally demanding than the WECC-240++ system. However, despite this difference, the qualitative performance of our model with respect to parameterizations of \(\varepsilon \), \(\beta \), and \(\gamma \) across the two cases is identical. We observe that higher values of \(\varepsilon \) results in lower operation costs, but at the expense of a larger computation time. This increase is conceptually consistent with the increase in combinatorics (in terms of the number of possible combinations of scenarios, generators, and time periods) allowed by a larger \(\varepsilon \). Second, increasing the value of \(\beta \) increases the percentage of costs savings. This is expected as larger values of \(\beta \) allow the emergency limits to be larger. However, the effect of changes in \(\beta \) on computational difficulty is not consistent. Third, increasing \(\gamma \) decreases the percentage of costs savings. This is again expected as the piecewise cost for operation during an emergency is larger for a larger \(\gamma \). Again, the effect of \(\gamma \) on computational times in not consistent. For a system operator, the results with \(\varepsilon =0.01\) are likely more valuable and relevant, as a 5% exceedance regime may be too disruptive. For the WECC240++ case, cost savings are between 0.3% and 1.6%. For the RTS-GMLC case, the savings are larger and lie between 1.2% and 2.1%. Although the two systems we consider are test systems, we note that a 1% savings can result in system operators saving several billions of dollars saved per year (O’Neill 2007). Finally, in comparison to some other chance-constrained variants of UC (Kargarian et al. 2016; Singh et al. 2018; Wang et al. 2012), our solution results in no loss of load in any scenario as we require demand to be satisfied when possible.

4.3 Sensitivity analysis of optimal solution

Next, we analyze the structure of an optimal solution (subject to the MILP optimality gap) to the RTS-GMLC system with \(\varepsilon =0.01\), \(\beta =0.1\), and \(\gamma =0.1\), in order to analyze differences relative to an optimal solution to the baseline stochastic UC model. Figure 1a presents the aggregate number of non-nominalities per scenario (i.e., \(\sum _{g\in \mathcal {G}}\sum _{t\in \mathcal {T}}y_t^{g,\omega })\). The total number of non-nominalities is 560, which is 1% of \(|\mathcal {G}||\mathcal {T}||\varOmega |\). Clearly, the model incentivizes choosing a lower cost generator whenever possible. As a result, the sole nuclear generator in the RTS-GMLC system—which is the cheapest marginal unit—enters a non-nominal mode in all of the 16 scenarios for at least one hour in the operating horizon. We further observe (not shown) that this non-nominality is largely consistent in timing across scenarios; i.e., the nuclear generator is in a non-nominal operations mode for almost all of the same hours across all the 16 scenarios. While nuclear generators tend to have low marginal costs, in practice, they are operated in narrow windows and are subject to rigorous oversight. Thus, we conducted another analysis to see the impacts if the nuclear generator were not allowed to run at all in a non-nominal mode. Figure 1b presents the aggregated non-nominalities per scenario for this case. The variability in the non-nominalities per scenario is notably larger in Fig. 1b than Fig. 1a. Specifically, the standard deviation in the number of non-nominalities across the 16 scenarios is 20.2 for Fig. 1b and 14.8 for Fig. 1a. While the cost savings relative to the stochastic solution for Fig. 1a is 1.51%, the cost savings for the solution represented in Fig. 1b is only 1.15%, indicating that shifting of non-nominal operations to more expensive units does decrease the overall cost benefit. This is, again, expected as the latter solution is suboptimal.

Fig. 1
figure 1

An example showing the number of non-nominalities aggregated across each of the scenarios for the RTS-GMLC 16 scenario case for 10 July 2020

Table 4 Cost savings for the RTS-GMLC 16 scenario case for 10 July 2020
Table 5 Computational results for the RTS-GMLC 16 scenario case for 11-16 July 2020. A blank in the “MILP gap (%)” column indicates that the instance was solved to the optimal tolerance level

To examine the sensitivity of cost savings relative to any one generator, we now consider the instance analyzed in Table 2 under another restrictive operational regime; the results are shown in Table 4. The first considers only allowing units to activate non-nominal operations once per day; i.e., adds the following constraints

$$\begin{aligned}&\sum _{t = 1}^{24} y_t^{g,\omega } \le 1 \qquad \qquad \forall g \in \mathcal {G}, \ \forall \omega \in \varOmega \\&\sum _{t = 25}^{48} y_t^{g,\omega } \le 1 \qquad \qquad \forall g \in \mathcal {G}, \ \forall \omega \in \varOmega \end{aligned}$$

to the model (1)–(7). Results for this regime are reported in the column labeled “Limited”. The second, mentioned above, disables non-nominal operation for the nuclear unit in this system, and is reported in the column labeled “No nuclear”. The “Optimal” column reports the savings achieved using the non-modified model (same as Table 2). We note that we can still observe cost savings on the order of 1% in both cases, which is particularly surprising for the much more conservative Limited case. Hence, despite placing these additional restrictions on when non-nominal generation can be dispatched, significant cost savings can still be realized.

To analyze the generalizability of our observed cost savings, we next solve our model for another six days of the RTS-GMLC system. Table 5 reports these results, for \(\varepsilon =0.01, \beta =0.05, 0.1, \gamma =0.1\). Of the 12 instances considered, only one could not be solved to within the specified MILP optimality gap in the 1800 second time limit. The percentage cost savings do not differ qualitatively from those in Table 2, which were generated under the same parameterization. The average and standard deviation across the six days in terms of percentage cost savings for the \(\beta =0.05\)\((\beta =0.1)\) case are 1.29% (2.34%) and 0.56% (0.86%).

Table 6 Computational results for the WECC240++ 10 and 100 scenario test cases for 11 May 2013. A blank in the “MILP gap (%)” column indicates that the instance was solved to the optimal tolerance level. For instances that could not be solved within the time limit the MILP gaps are large, and thus the savings could not be accurately computed (denoted by “n/a”)

We next comment on the economic implications for our study. While saving operational costs is clearly desirable, our proposed non-nominality UC would also incentivize less expensive generators to relax their operating constraints, which would shift revenue from more expensive peaking units. However, this effect may not be so determinative if a more restrictive policy such as Limited is considered. Future extensions could consider a fixed cost for operating a generator in non-nominal mode or a maximum up-time for non-nominal mode, so as to fully capture the additional costs or restrictions for operating outside of non-nominal mode. In the context of stochastic UC, wide variation in renewables generation and/or load across scenarios may lead to solutions that are overly conservative. That is, there may be generators that are dispatched to provide power only for an event with low probability; see, e.g., Rachunok et al. (2018). Although we did not examine this for this study, the use of non-nominal modes could serve as an inexpensive way to add additional peaking capacity to a system so as to enable higher renewables penetration.

We observe that all of our computational experiments were conducted on a modest laptop. The problems are generally tractable even without any custom algorithms (e.g., decomposition) for the number of scenarios considered above. An ISO or a utility would likely run the optimizations on larger machines and with a greater number of scenarios. In this context, we next test our stochastic UC model by using (i) a small batch of 10 scenarios and (ii) a large batch of 100 scenarios, both for the WECC-240++ case for 11 May 2013. Tables 6a and 6b report results analogous to Table 1, respectively, for the 10 and 100 scenario variants. These computational results reinforce two intuitive observations. First, as expected, the respective cost values do not differ significantly between the three instances, i.e., with 10, 50, and 100 scenarios. Second, the computational effort required increases with an increase in the number of scenarios. However, only one of the instances in Table 6b could not be solved within the 1800 second time limit. The 100 scenario instances have approximately half a million binary variables after Gurobi’s presolve. Future research could examine specialized algorithms that would further assist in tractability, as well as examining larger test cases with hundreds or thousands of generators.

5 Conclusion

We presented a chance-constrained unit commitment formulation to incorporate small violations of the technical ratings of a generator. Our motivation comes from the fact that system operators occasionally run generators in non-nominal conditions; this can create significant economical benefits, especially in the context of stochastic unit commitment with a wide diversity in scenarios. The model can also be useful when there is an outage, either unplanned or planned, since system operators often analyze contingencies on a case-by-case basis (Power Water 2017). In our study, we demonstrated a small percentage savings in the costs which could translate to a significant amount of dollars saved over the year; see, also (O’Neill 2007). We analyzed the sensitivity of the optimal solution under restricted regimes as well. The models we presented are generally tractable, however future work could examine tailored algorithms to achieve even faster solutions.