Skip to content

Equipment-Specific Formulations

This spec details the LP constraints for each equipment type in Cobre. While system elements describes what each element is and its decision variables, this spec contains the detailed mathematical constraints governing each equipment type’s behavior within the LP. The reading order is: system elementsLP formulationthis spec (per-equipment deep dives).

For variable definitions and index sets, see notation conventions. For hydro production constraints specifically, see hydro production models.

Thermal generation cost is modeled as a piecewise-linear convex function of dispatched power. Each cost segment represents a generation tranche with its own marginal cost — for example, a 200 MW plant might have its first 50 MW at $100/MWh, the next 50 MW at $150/MWh, and the final 100 MW at $200/MWh. Because the segment costs are non-decreasing (convex), the LP solver naturally fills cheaper segments first.

Decision Variables:

  • gj,k,sg_{j,k,s} = generation at thermal jj, block kk, cost segment ss

Constraints:

Total generation:

gj,k=sgj,k,sg_{j,k} = \sum_{s} g_{j,k,s}

Segment bounds:

0gj,k,sgˉj,ss0 \leq g_{j,k,s} \leq \bar{g}_{j,s} \quad \forall s

Total generation bounds:

Gjgj,kGˉj\underline{G}_j \leq g_{j,k} \leq \bar{G}_j

Both bounds are hard constraints with no slack variables — thermal dispatch is directly controllable (unlike hydro, which depends on exogenous inflows).

Objective Contribution:

kτkscj,sthgj,k,s\sum_{k} \tau_k \sum_{s} c^{th}_{j,s} \cdot g_{j,k,s}

Decision Variables:

  • fl,k+f^+_{l,k} = direct flow (source → target)
  • fl,kf^-_{l,k} = reverse flow (target → source)

Bounds:

0fl,k+Fˉl+,0fl,kFˉl0 \leq f^+_{l,k} \leq \bar{F}^+_l, \quad 0 \leq f^-_{l,k} \leq \bar{F}^-_l

Load Balance Contribution:

At source bus:

fl,k++ηlfl,k-f^+_{l,k} + \eta_l f^-_{l,k}

At target bus:

ηlfl,k+fl,k\eta_l f^+_{l,k} - f^-_{l,k}

where ηl=1losses_percent/100\eta_l = 1 - \text{losses\_percent}/100 accounts for transmission losses.

Objective Contribution:

kτkclexch(fl,k++fl,k)\sum_{k} \tau_k \cdot c^{exch}_l (f^+_{l,k} + f^-_{l,k})

Each contract is unidirectional — either an import or an export contract, identified by a type field.

Decision Variables:

  • χc,k\chi_{c,k} = dispatched power for contract cc, block kk

Bounds:

Ccχc,kCˉc\underline{C}_c \leq \chi_{c,k} \leq \bar{C}_c

Load Balance Contribution:

At connected bus:

  • Import contracts (cCimpc \in \mathcal{C}^{imp}): +χc,k+\chi_{c,k} (power entering the system)
  • Export contracts (cCexpc \in \mathcal{C}^{exp}): χc,k-\chi_{c,k} (power leaving the system)

Objective Contribution:

kτkcCccctrχc,k\sum_{k} \tau_k \sum_{c \in \mathcal{C}} c^{ctr}_c \cdot \chi_{c,k}

Because import prices (ccctrc^{ctr}_c) are positive and export prices are negative, this single summation naturally adds import costs and subtracts export revenue. The price sign is independent of the load-balance sign: an import column injects +χc,k+\chi_{c,k} and carries a positive (cost) price; an export column withdraws χc,k-\chi_{c,k} and carries a negative (revenue) price.

Take-or-pay floor and lifecycle. A non-zero lower bound Cc\underline{C}_c is a hard take-or-pay obligation: the LP must dispatch at least Cc\underline{C}_c at the contract price, even when cheaper supply exists. Bounds [Cc,Cˉc][\underline{C}_c, \bar{C}_c] and the price ccctrc^{ctr}_c may both vary by stage. Contracts honor the generic commissioning window (system elements §1) — outside [entry_stage_id, exit_stage_id) the column is pinned to zero. A contract is stateless: it carries no state variable and contributes nothing to the Benders cuts.

Pumping stations transfer water from a source reservoir to a destination reservoir, consuming electrical power in the process. The source-to-destination direction is a modeling choice (typically uphill / against the cascade); the formulation does not require any particular elevation relationship.

Decision Variables:

  • pj,kp_{j,k} = pumped water flow at station jj, block kk (m³/s)

Bounds:

Pjpj,kPˉj\underline{P}_j \leq p_{j,k} \leq \bar{P}_j

Both bounds are hard constraints. Pumping stations honor the generic commissioning window (system elements §1): outside [entry_stage_id, exit_stage_id) the flow column is pinned to zero, so the station moves no water and draws no power.

Power Consumption:

Pj,kpump=γjpj,kP^{pump}_{j,k} = \gamma_j \cdot p_{j,k}

where γj\gamma_j is the power consumption rate (MW per m³/s).

Water Balance Impact:

  • Source hydro: pj,k-p_{j,k} (water removed)
  • Destination hydro: +pj,k+p_{j,k} (water added)

Load Balance Impact:

At connected bus: Pj,kpump=γjpj,k-P^{pump}_{j,k} = -\gamma_j \cdot p_{j,k} (power consumed)

Objective Contribution: None

Hydro constraints are the most complex in the system. Rather than duplicating them here, the hydro formulation is split across two specs:

  • Water balance, outflow, storage bounds, and soft constraints: See LP formulation §4 (water balance), §6 (generation constraints), §7 (outflow constraints), §8 (variable bounds), §9 (constraint violation penalties).
  • Production function models (constant productivity, FPHA, linearized head): See hydro production models.

For hydro decision variables and physical meaning, see system elements §5.

Non-controllable sources (wind farms, solar plants, small run-of-river hydros) have stochastic availability determined by the scenario pipeline. The solver can only curtail generation below the available amount — it cannot dispatch upward beyond what nature provides.

Decision Variables:

  • gr,kncg^{nc}_{r,k} = generation at non-controllable source rr, block kk

Bounds (hard):

0gr,kncAr0 \leq g^{nc}_{r,k} \leq A_r

where ArA_r is the stochastic available generation for the current (stage, scenario), bounded by [0,Gˉr][0, \bar{G}_r] (installed capacity).

Load Balance Contribution:

At connected bus: +gr,knc+g^{nc}_{r,k} (generation injected)

Objective Contribution:

kτkrRcrcurt(Argr,knc)\sum_{k} \tau_k \sum_{r \in \mathcal{R}} c^{curt}_r \cdot (A_r - g^{nc}_{r,k})

The curtailment cost crcurtc^{curt}_r is a regularization penalty (Category 3 in the Penalty System), analogous to spillage_cost for hydros — curtailment discards available “free” energy.

  • Notation conventions — variable and set definitions (gjg_j, flf_l, χc\chi_c, pjp_j, τk\tau_k)
  • System elements — element descriptions, decision variables, and connections
  • LP formulation — how equipment constraints integrate into the assembled LP; hydro water balance (§4), generation constraints (§6), variable bounds (§8)
  • Hydro production models — hydro-specific production function constraints (constant, FPHA, linearized head)
  • Penalty System — penalty taxonomy, regularization vs. violation costs
  • Block formulations — block structure within which equipment constraints operate
  • SDDP Algorithm — iterative algorithm that solves stage subproblems containing these equipment constraints