I'm formulating a scheduling problem with the following decision variables:

$$X_t \space \text{is power sold to market in time period t} \\ Y_t \space \text{is power used for production in time period t} \\ z_t \space \text{is binary variable for full load production or idle mode}$$

I have to model three constraints:

  1. Total power available in time period t.
  2. Plant can remain in idle state(10MW) for exactly 4 hours at a time and immediately after that it should be in full load production(100MW) for at least 2 hours.
  3. Idle mode uses power but does not produce material, thus incurring cost.

I have available the cost of power, market price of power (for selling power to the market), material price of the market and a conversion efficiency of power to material.

My formulation is currently incomplete because I have to use a linear objective but currently I can manage only a bilinear one: $$ max \sum_{t}^{T} R_t^m + R_t^p \cdot z_t - C_t \\ s.t. R_t^m = X_t \cdot \Delta{t} \cdot \pi_t^m \\ R_t^p = \frac{Y_t \cdot \Delta{t} \cdot \pi_t^p}{\eta} \\ X_t + Y_t \leq P_t \\ C_t = (X_t + Y_t) \cdot \Delta{t} \cdot \pi_t^c \\ Y_t = 100 \cdot z_t + 10 \cdot (1-z_t) \\ X_t, Y_t \geq 0 ; z_t \in (0,1) $$ where : $$ R_t^m \text{ is the revenue earned by selling power on market with power price } \pi_t^m \\ R_t^p \text{ is the revenue earned by selling produced material with market price } \pi_t^p \\ P_t \text{ is the total power available for that period and is a parameter}\\ \eta \text{ is the power to material conversion efficiency of the plant} \\ C_t \text{ is the cost of power in time period t with unit cost } \pi_t^c \\ \Delta{t} \text{ is unit time period} $$

My questions are:

  1. How can I formulate a constraint for the idling requirements in constraint 2, preferable without adding another binary variable?
  2. Currently I multiply revenue earned by material production by the state of the plant to make sure revenue is calculated only when full load production takes place. However, that makes the term bilinear. How can I reformulate to have a linear objective?

I did think of using indicator constraints but I'd rather first ask whether there is a simpler way to reformulate. Thank you.


1 Answer 1


There are some sources of confusion in your model. $P_t$ is never defined; I'm going to assume it is a constant. It's not clear what "$\Delta t$ is unit time period" means; I'm going to assume it represents an hour and that $\Delta t = 1$ (and can thus be ignored).

It's also unclear whether you mean that the plant can idle for up to four hours at a time or exactly four hours at a time. Assuming the former, you can enforce it with a set of constraints $$z_t + z_{t+1} + \dots + z_{t+4} \ge 1$$ for all relevant $t$, which says that the plant cannot be idling ($z_t=0$) in any block of five consecutive hours.

To ensure that revenue from production is zero when the plant is idling, you can remove $z_t$ from the objective and instead change the second constraint from $R^p_t = \dots$ to $R^p_t \le \dots$ and add a constraint $R^p_t \le Mz_t$ where $M$ is sum a priori upper bound on production revenue in any hour. If the plant is idle ($z_t = 0$), this will force $R^p_t = 0.$ If the plant is at full load ($z_t = 1$), the big-M constraint will be nonbinding and, because you are maximizing revenue, the second constraint will be maxed out (effectively an equality).

  • $\begingroup$ Thank you for the response. Your assumptions are correct and I have added them to my question. The plant can idle 'exactly four hours at a time' and needs to produce a full load for atleast 2 hours post the idle period. I did find a way to achieve this per the suggestions in this post or.stackexchange.com/questions/7403/… Thank you for suggesting the big-M edit for the revenue issue. That works for me. $\endgroup$
    – fikacoder
    Commented Oct 12, 2023 at 11:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.