Thermal Power Plant

The representation of thermal power plants is a generic representation in the sense that it allows representation of a range of different power plant technologies, such as gas, oil, nuclear, etc. We assume that the power output from each plant can be described by a maximum capacity \( \textrm{ProdThermMax} \) and a marginal cost \( C_{therm} \).

Production of energy from the thermal plants is expressed in the \( prod\_therm \) variable, measured in \( GWh \).

\[ 0 \leq prod\_therm(g,k) \leq \textrm{ProdThermMax}(g,k) \]

Thermal production is added to the power balance:

\[ \textrm{POWBAL}(a,k) [LHS]: += \sum_g prod\_therm(g,k)\]

The cost of thermal production is added to the objective:

\[ Cost: += \sum_{g,k} C_{therm}(g,k)*prod\_therm(g,k)\]

Dynamic Thermal Capacity

Sometimes it can be reasonable to assume that the power production does not change immediately in response to higher or lower prices, but rather adjust gradually over time when the price level is high or low. To model this we have implemented three types of responses to price changes: momentary, asymptotic and linear.

To implement the responses we generalize the previously described modelling of the thermal power plant by splitting the production capacity \( \textrm{ProdThermMax} \) into three parts and use these values in the lp problem.

Part

Description

\( \textrm{FlexibleCapacity} \)

Part of the total capacity that can be used based on the current power price.

\( \textrm{InflexibleUsedProduction} \)

Part of the total capacity that is produced no matter how high the price becomes.

\( \textrm{InflexibleUnusedProduction} \)

Part of the total capacity that is not produced nomatter how low the price becomes.

The flexible capacity constrains the thermal production variable:

\[ \forall \ g \in Thermal, \ k \in Timesteps \]
\[ 0 \leq prod\_therm(g,k) \leq \textrm{FlexibleCapacity}(g,k) \]

Inflexible used production is subtracted from the right hand side of the power balance:

\[ \textrm{POWBAL}(a,k) [RHS]: -= \textrm{InflexibleUsedProduction}(g,k) \]

The cost of thermal production added to the objective function remains the same:

\[ Cost: += \sum_{g,k} C_{therm}(g,k)*prod\_therm(g,k)\]

The three response types differ in how the three capacity parts are calculated. Before showing the equations we define the total production of a thermal plant to be

\[ \textrm{TotalProduction}(g,k) = \textrm{InflexibleUsedProduction}(g,k) + prod\_therm(g,k) \]

In the following equations we skip the parameter \( g \in Thermal \) for readability.

Momentary

The thermal plant production immediately changes according to price level. This results in a contribution to the lp problem that is identical to the previously described modelling.

\[\begin{split} \begin{aligned} \textrm{InflexibleUsedProduction}(k) &= 0 \\ \textrm{InflexibleUnusedProduction}(k) &= 0 \\ \textrm{FlexibleCapacity}(k) &= \textrm{ProdThermMax(k)} \end{aligned} \end{split}\]

Asymptotic

The thermal plant production approaches zero asymptotically when prices stay high over time and maximum capacity when prices stay low.

\[\begin{split} \begin{aligned} \textrm{InflexibleUsedProduction}(k) &= \alpha(k) \ \textrm{TotalProduction}(k - \Delta k) \\ \textrm{InflexibleUnusedProduction}(k) &= \alpha(k) \ (\textrm{ProdThermMax}(k) - \textrm{TotalProduction}(k - \Delta k) \\ \textrm{FlexibleCapacity}(k) &= \textrm{ProdThermMax}(k) \ (1-\alpha(k)) \end{aligned} \end{split}\]

where \( \alpha(k) \in [0,1] \) is an inertia parameter and \( \Delta k > \text{DecisionProblemLength} \) is how far back in time to find the previous production.

If \( \textrm{InflexibleUnusedProduction}(k) < 0 \) we replace part of the above equations with

\[\begin{split} \begin{aligned} \textrm{InflexibleUnusedProduction}(k) &= 0 \\ \textrm{InflexibleUsedProduction}(k) &= \alpha(k) \ \textrm{ProdThermMax}(k) \end{aligned} \end{split}\]

Linear

The thermal plant production approaches zero linearly when prices stay high over time and maximum capacity when prices stay low.

\[\begin{split} \begin{aligned} \textrm{InflexibleUsedProduction}(k) &= \textrm{TotalProduction}(k - \Delta k) - (1 - \beta(k)) \ \textrm{ProdThermMax(k)} \\ \textrm{FlexibleCapacity}(k) &= 2(1-\beta(k)) \ \textrm{ProdThermMax}(k) \end{aligned} \end{split}\]

where \( \beta(k) \in [0,1] \) is an inertia parameter and \( \Delta k > \text{DecisionProblemLength} \) is how far back in time to find the previous production.

If \( \textrm{InflexibleUsedProduction(k)} < 0 \) we replace the above equations with

\[\begin{split} \begin{aligned} \textrm{InflexibleUsedProduction}(k) &= 0 \\ \textrm{FlexibleCapacity}(k) &= (1 - \beta(k)) \ \textrm{ProdThermMax} \end{aligned} \end{split}\]

and if \( \textrm{TotalProduction}(k) > \textrm{ProdThermMax} \) we use

\[ \textrm{FlexibleCapacity}(k) = \textrm{ProdThermMax(k)} - \textrm{InflexibleUsedProduction}(k) \]

Ramping

Changes in production for a thermal unit \( g \) between two consecutive time steps can be constrained by a ramping limit \( \textrm{RampBnd}(g,k) \) which is symmetric for upwards and downwards ramping.

\[ \textrm{RAMPTHERM}(g,k): \textrm{RampBnd}(g,k) \leq prod\_therm(g,k) - prod\_therm(g,k-1) \leq \textrm{RampBnd}(g,k) \]

In the special case of \( k=0 \), \( prod\_therm(g,-1) \) is obtained from the solution of the previous decision stage.

Ramping involves a time-coupling that ideally should be valued at the end of the decision period. Such valuation will properly incentivize keeping an appropriate ramping level at the of the decision period.

ramping feedback is introduced by adding the following to the objective function:

\[ \textrm{Cost}: \mathrel{+}= \mathrm{ProdThermValue}(g, p-1) * \mathrm{prod\_therm}(g,K) \]

where \( p \) is the period and

\[ \mathrm{ProdThermValue}(g, p-1) = \mathrm{dual} \Bigr(\mathrm{RampLower}(g, 0, p-1) \Bigr) + \mathrm{dual} \Bigr(\mathrm{RampUpper}(g, 0, p-1) \Bigr) \]

Note that the computation of \( ProdThermValue \) described above is a fast and easy procedure, and that more exact computations are possible, but not currently implemented.

Start-up Costs

Exact modeling of start-up costs for thermal units would require use of binary variables. The model allows approximate representation of start-up costs based on linearization.

The cost of a start-up is measured to \( \textrm{Cost}(i,k) \). Two new variables are introduced, the cost of starting up thermal units \( startup\_cost(i,k) \), measured in mu, and the state of each unit \( therm\_state(i,k) \), measured as a fraction.

\[ 0 \leq startup\_cost(i,k) ,\forall \enspace i \in ThermalUnits, \ k \in Timesteps \]
\[ 0 \leq therm\_state(i,k) \leq 1 ,\forall \enspace i \in ThermalUnits, \ k \in Timesteps \]

The following constraint ensure that an increase in \( therm\_state \) always comes at a cost.

\[ \textrm{SUCOST}(i,k): startup\_cost(i,k) \geq \textrm{COST}(i,k) * \Bigr( therm\_state(i,k)-therm\_state(i,k-1) \Bigr) \]
\[ \textrm{PRODLOW}(i,k): prod\_therm(i,k) \geq therm\_state(i,k)* \textrm{ProdThermMin}(i,k) \]
\[ \textrm{PRODHIGH}(i,k): prod\_therm(i,k) \leq therm\_state(i,k)* \textrm{ProdThermMax}(i,k) \]

In the special case where k=1, \( therm\_state(i,0) \) is obtained from the solution of the previous decision stage.

The cost of thermal production is added to the objective: $\( Cost: += \sum_{i,k} startup\_cost(i,k)\)$