Set 27 — Economic Load Dispatch
Set 26 settled how much plant of each kind to build. This chapter takes the plant as given and asks the operating question: with several units running, each with its own fuel cost characteristic, how should a given total demand be shared between them so the cost is least? The answer is one line — every unit should operate at the same incremental cost — and the whole chapter is that line, derived, qualified by generator limits, solved numerically, and extended to the question of which units should be running at all.
The input-output curve \(C_i = a_i+b_iP_i+c_iP_i^2\) in Rs/h gives the fuel cost of unit \(i\) at output \(P_i\). Its slope is the incremental cost \(\mathrm{IC}_i = dC_i/dP_i = b_i+2c_iP_i\), in Rs/MWh.
The problem: minimise \(\sum C_i(P_i)\) subject to \(\sum P_i = P_D\) and \(P_i^{\min}\le P_i\le P_i^{\max}\).
The equal-incremental-cost rule. At the optimum every unit not at a limit has the same incremental cost \(\lambda\): \(\dfrac{dC_1}{dP_1} = \dfrac{dC_2}{dP_2} = \cdots = \lambda\). If any two differed, shifting output from the dearer to the cheaper would reduce the total.
Limits modify it in one direction only. A unit at its upper limit has \(\mathrm{IC} \le \lambda\); a unit at its lower limit has \(\mathrm{IC} \ge \lambda\). Units between their limits all sit at \(\lambda\).
Lambda iteration: guess \(\lambda\), compute \(P_i = (\lambda-b_i)/2c_i\) clipped to the limits, compare \(\sum P_i\) with \(P_D\), and adjust. The sum is monotonic in \(\lambda\), so bisection or the secant method always converges.
\(\lambda\) is the system marginal price — the cost of supplying one more megawatt-hour. It is the correct price for a spot market, for valuing a loss reduction, and for deciding whether an import is worth buying.
Average cost is the wrong criterion. Merit order by average cost gives the wrong answer whenever the units' cost curves have different curvatures — it is the incremental cost that must be equalised.
Three thermal units have the cost characteristics below, with \(C\) in thousands of rupees per hour and \(P\) in MW. Establish their basic properties and the range of total output they can supply.
The form and its three terms. Each is a quadratic in output:
| Term | Meaning | Units here |
|---|---|---|
| \(a\) | no-load fuel cost — heat to hold the unit at synchronous speed | thousand Rs/h |
| \(bP\) | the linear bulk of the fuel cost | thousand Rs/h |
| \(cP^2\) | the curvature — efficiency falls as output rises | thousand Rs/h |
Since \(C\) is in thousand Rs/h and \(P\) in MW, the slope \(dC/dP\) comes out in thousand Rs per MWh, which is rupees per kWh — the natural unit for the whole chapter.
Why \(a\) is not zero. A synchronised unit at zero output still burns fuel:
These are notional — no unit can actually run at zero output — but the constant matters, because it is the cost that disappears when a unit is shut down. That is what makes unit commitment (Problem 18) a different problem from dispatch, and it is the reason the constant is carried through even though it plays no part in the dispatch itself.
Why \(c > 0\), and why it must be for the theory to work:
Physically, a turbine's efficiency falls at high output as steam velocities and throttling losses rise. Mathematically, convexity is what guarantees that the equal-incremental-cost condition of Problem 5 gives a minimum rather than any other stationary point, and that a local optimum is global. Problem 17 examines what happens when the real curve is not convex.
The output range of the station:
With all three units synchronised, any demand between 180 and 620 MW can be met. Below 180 MW at least one unit must be shut down — again Problem 18 — and above 620 MW the station cannot help.
The cost at the extremes, which shows how different the three units are:
| Unit | \(C\) at \(P^{\min}\) | \(C\) at \(P^{\max}\) | Average at \(P^{\max}\) (Rs/kWh) |
|---|---|---|---|
| U1 | 714.0 | 1586.0 | 13.22 |
| U2 | 1024.8 | 2765.0 | 9.22 |
| U3 | 860.8 | 2160.0 | 10.80 |
Unit 2 is much the cheapest per unit of energy at full load, and unit 1 the dearest — a small old machine against a large modern one. It is tempting to conclude that unit 2 should be loaded first and unit 1 last, and Problem 4 shows why that conclusion, although it happens to be roughly right here, is reached by invalid reasoning.
Where the coefficients come from in practice:
| Route | Method |
|---|---|
| Heat-rate test | measure fuel flow at several outputs, fit a quadratic |
| Manufacturer's data | guaranteed heat rate at 50/75/100% load |
| Operating records | regression on metered fuel and output |
The last is what most utilities actually use, updated annually. The fit is good to a few per cent over the normal operating range, and considerably worse near the minimum, where the physical curve steepens more sharply than a quadratic can follow.
A 300 MW unit has a heat-input characteristic \(H = 40+2.00P+0.0009P^2\) Mkcal/h. Find its heat rate and efficiency across the load range, locate the point of best efficiency, and relate the heat curve to the cost curve.
Heat rate is heat input per unit of electrical output:
It is the reciprocal of efficiency in disguise, and it is the quantity engineers actually quote because it can be measured directly from a fuel-flow meter and a wattmeter.
Efficiency follows from the thermal equivalent of a kilowatt-hour:
A heat rate of 2400 kcal/kWh is an efficiency of 35.8%; one of 2000 kcal/kWh is 43%. Modern supercritical coal units reach 2100–2200 kcal/kWh and combined-cycle plant about 1500.
Across the load range:
| \(P\) (MW) | \(H\) (Mkcal/h) | HR (kcal/kWh) | \(\eta\) |
|---|---|---|---|
| 80 | 205.76 | 2572.0 | 33.44% |
| 150 | 360.25 | 2401.7 | 35.81% |
| 210.8 | 502.07 | 2379.5 | 36.14% |
| 250 | 596.25 | 2385.0 | 36.06% |
| 300 | 721.00 | 2403.3 | 35.78% |
The heat rate falls, reaches a minimum, and rises again — a shallow U. The unit is least efficient at low load, not at high load, which surprises people who expect efficiency to fall monotonically.
The point of best efficiency is found by minimising HR:
Best efficiency at 70% of rating is entirely typical. The no-load term \(\alpha\) dominates at low output and the curvature \(\gamma\) at high output, and they balance at \(\sqrt{\alpha/\gamma}\).
The crucial distinction: heat rate against incremental heat rate.
The incremental heat rate is higher than the average, and it rises monotonically with output while the average has a minimum. That difference is the entire subject of Problem 4: dispatch is governed by the incremental quantity, and reasoning from the average gives wrong answers.
From heat to cost. The cost curve is the heat curve times the fuel price:
A fuel price of Rs 3835/Mkcal corresponds to coal of 4000 kcal/kg at Rs 15.34/kg — imported coal. Note that every coefficient scales with the fuel price, so a change in fuel cost scales the whole curve and, crucially, scales the incremental cost too. That is what Problem 15 exploits.
Typical heat rates, for calibration:
| Plant | Heat rate (kcal/kWh) | Efficiency |
|---|---|---|
| Subcritical coal, 200 MW | 2500–2700 | 32–34% |
| Supercritical coal, 660 MW | 2200–2350 | 37–39% |
| Ultra-supercritical, 800 MW | 2050–2150 | 40–42% |
| Combined cycle gas | 1450–1650 | 52–59% |
| Open-cycle gas turbine | 2400–3000 | 29–36% |
| Diesel engine | 2000–2200 | 39–43% |
Note the reciprocal relation to the plant-mix logic of Set 26: the plant with the best heat rate is not always the cheapest to run, because the fuel price differs. A combined-cycle unit at 1500 kcal/kWh burning gas at Rs 6000/Mkcal costs Rs 9.00/kWh in fuel; a coal unit at 2400 kcal/kWh burning coal at Rs 2500/Mkcal costs Rs 6.00/kWh. Efficiency and cost are different questions.
Find the incremental cost characteristic of each of the three units of Problem 1, tabulate the range each covers, and identify what those ranges imply about the dispatch.
Differentiate each cost curve:
Three straight lines. The quadratic cost curve gives a linear incremental cost curve, which is exactly why the quadratic form is used — it makes the dispatch equations linear and solvable in closed form.
The range each unit covers:
| Unit | IC at \(P^{\min}\) | IC at \(P^{\max}\) | Range (Rs/kWh) | Slope \(2c\) |
|---|---|---|---|---|
| U1 | 9.70 | 12.10 | 9.70 – 12.10 | 0.0300 |
| U2 | 6.92 | 8.90 | 6.92 – 8.90 | 0.0090 |
| U3 | 8.16 | 10.40 | 8.16 – 10.40 | 0.0160 |
Three observations follow immediately, and each anticipates a later result.
Observation 1 — unit 2's range lies entirely below unit 1's.
Whatever the demand, unit 2 should be fully loaded before unit 1 is loaded above its minimum. The two ranges do not overlap, so no equal-incremental-cost solution involving both units strictly between their limits can exist.
Observation 2 — units 2 and 3 overlap, and units 1 and 3 overlap:
In those two bands of \(\lambda\) the corresponding pair of units genuinely shares load at equal incremental cost. Outside them one or the other is pinned at a limit.
Observation 3 — unit 2's line is much the flattest (\(2c = 0.009\) against 0.030 for unit 1):
Unit 2 responds three times as much as unit 1 to a given change in \(\lambda\). A flat incremental cost curve means a unit that takes most of any load change — and it is the large modern units, with their low \(c\), that do the regulating.
The station's aggregate incremental cost curve is obtained by adding the units horizontally:
| \(\lambda\) | \(P_1\) | \(P_2\) | \(P_3\) | Total |
|---|---|---|---|---|
| 7.00 | 40 (min) | 88.9 | 60 (min) | 188.9 |
| 8.00 | 40 (min) | 200.0 | 60 (min) | 300.0 |
| 8.90 | 40 (min) | 300.0 | 106.25 | 446.25 |
| 9.70 | 40.0 | 300 (max) | 156.25 | 496.25 |
| 10.40 | 63.3 | 300 (max) | 200.0 | 563.3 |
| 12.10 | 120.0 | 300 (max) | 200 (max) | 620.0 |
Monotonically increasing in \(\lambda\) — which is the property that makes the lambda-iteration of Problem 8 always converge. The curve is piecewise linear with a break wherever a unit reaches a limit.
What incremental cost means physically:
Not the average cost of its output, and not the cost of the last MWh it produced. It is a forward-looking marginal quantity, and it is the only cost concept that answers the question "where should the next megawatt come from?".
A common but incorrect rule is to load units in merit order of average cost. Show why this is wrong, and construct a case in which it gives a demonstrably worse answer.
The two quantities are different functions, and behave differently:
The average has a minimum at \(P = \sqrt{a/c}\); the incremental rises monotonically. They are equal only at the point of minimum average cost, and nowhere else.
Tabulated for the three units:
| Unit | \(P\) | Average cost | Incremental cost | Which is larger? |
|---|---|---|---|---|
| U1 | 40 | 17.85 | 9.70 | average |
| U1 | 120 | 13.22 | 12.10 | average |
| U2 | 80 | 12.81 | 6.92 | average |
| U2 | 300 | 9.22 | 8.90 | average |
| U3 | 60 | 14.35 | 8.16 | average |
| U3 | 200 | 10.80 | 10.40 | average |
The average exceeds the incremental everywhere in this range, because every unit is operating below its minimum-average-cost output. The gap narrows as output rises, and the two would cross at \(\sqrt{a/c}\) — 152.8, 333.3 and 223.6 MW respectively, all outside the units' ranges.
The logical error in the average-cost rule:
But loading it fully means taking its last megawatt at IC = 8.90, while unit 3's first megawatt above minimum costs only 8.16. Those last megawatts of unit 2 are dearer than the first megawatts of unit 3, so the allocation is not optimal — even though unit 2's average cost is lower at every output.
A worked counter-example. Take \(P_D = 350\) MW with only units 2 and 3 running:
| Rule | \(P_2\) | \(P_3\) | \(C_2\) | \(C_3\) | Total |
|---|---|---|---|---|---|
| Average-cost merit order | 290 | 60 | 2676.45 | 860.80 | 3537.25 |
| Equal incremental cost | 264 | 86 | 2450.43 | 1078.37 | 3528.80 |
The average-cost rule loads unit 2 to 290 MW (leaving unit 3 at its 60 MW minimum) and costs Rs 8.45 thousand per hour more. The optimum backs unit 2 down to 264 MW and raises unit 3 to 86 MW, at which point both units have \(\text{IC} = 8.5760\) Rs/kWh.
Verify the optimum satisfies the rule:
Equal to four decimal places, and the total is 350 MW ✓. Note that unit 2's average cost at 264 MW is 9.28 against unit 3's at 86 MW of 12.54 — the average costs are wildly unequal at the optimum, which is exactly the point.
The general principle, stated as an exchange argument:
Only the incremental costs appear. The average costs, the no-load costs and the units' sizes are all irrelevant to whether a small transfer is beneficial — and the optimum is precisely the point at which no such transfer helps, which requires all the incremental costs to be equal.
Where the average-cost rule is nonetheless used, and legitimately:
| Question | Correct criterion |
|---|---|
| How should this demand be shared? | incremental cost |
| Which units should be running at all? | average cost including no-load |
| Which plant should be built? | total annual cost (Set 26) |
| What should the next MWh be priced at? | incremental cost |
The second row is genuinely an average-cost question, because shutting a unit down removes its no-load cost entirely — a discrete change, not a marginal one. That is unit commitment, and it is why Problem 18 uses different reasoning from Problems 5–11.
Establish the equal-incremental-cost criterion by an exchange argument, without calculus, and state its scope and its exceptions.
Suppose an allocation is optimal and consider transferring a small amount \(\Delta P\) from unit \(j\) to unit \(i\). The demand constraint is preserved, and the cost changes by:
to first order in \(\Delta P\). Nothing else changes: the constant terms are untouched, the other units are untouched, and the total output is unchanged.
The argument. If \(\text{IC}_i < \text{IC}_j\), then \(\Delta C < 0\) for positive \(\Delta P\) — the transfer reduces the cost, so the original allocation was not optimal. Contradiction.
Calling the common value \(\lambda\):
The criterion:
\(n\) equations from the criterion plus one demand constraint, in \(n+1\) unknowns (\(n\) outputs and \(\lambda\)). Determinate, and for quadratic cost curves, linear.
The qualification that makes it correct. The argument required the transfer to be possible in both directions. If unit \(j\) is at its lower limit it cannot give up output; if unit \(i\) is at its upper limit it cannot take any:
Read the second line physically: a unit is at its maximum precisely because it is cheap — we would take more if we could. And the third: a unit is held at its minimum because it is dear — we would take less if the minimum allowed. These are the Karush–Kuhn–Tucker conditions, arrived at without invoking them.
Why convexity is essential. The exchange argument shows only that the optimum is a stationary point:
If some \(c_i\) were negative the same condition could identify a maximum, and if the cost curve had several local minima the criterion would be satisfied at each. Problem 17 examines exactly that situation, which arises physically from turbine valve points.
What the criterion does not depend on:
| Quantity | Enters the dispatch? |
|---|---|
| No-load cost \(a_i\) | no — it differentiates away |
| Unit size | no, except through the limits |
| Average cost | no |
| Unit age, efficiency, fuel type | only through \(b_i\) and \(c_i\) |
| Transmission losses | not yet — Set 28 adds them |
The first row is worth dwelling on. Two units with identical \(b\) and \(c\) but no-load costs of 100 and 1000 are dispatched identically — because once both are running, the no-load cost is sunk. It reappears only when the question is whether to run them at all.
The result is more general than thermal units. The same criterion governs:
| Problem | Equalise |
|---|---|
| Economic dispatch | incremental fuel cost |
| Hydro-thermal scheduling | incremental cost, with a water value |
| Reactive power dispatch | incremental loss |
| Optimal capacitor placement | incremental benefit per kVAr |
| Any resource allocation | marginal return per unit of resource |
The last row is the general economic principle of which economic dispatch is one instance: at an optimum, the marginal return per unit of resource is equal across all uses. Power engineers call it equal \(\lambda\); economists call it equimarginal allocation; the mathematics is identical.
Derive the equal-incremental-cost criterion formally by the method of Lagrange multipliers, and interpret the multiplier.
State the problem:
Ignore the inequality limits for now; they are restored in Problem 9. One equality constraint means one multiplier.
Form the Lagrangian:
The sign of the multiplier term is a convention; taking \((P_D-\sum P_i)\) makes \(\lambda\) come out positive, which is convenient because it will turn out to be a price.
Set the partial derivatives to zero:
The first recovers the exchange argument of Problem 5; the second recovers the constraint. \(n+1\) equations in \(n+1\) unknowns.
Solve for quadratic costs. With \(C_i = a_i+b_iP_i+c_iP_i^2\):
A closed-form answer, valid whenever no limit binds. Note its structure: \(\lambda\) is a weighted average of the \(b_i\) plus a term proportional to the demand, with the weights \(1/2c_i\) — so the flattest unit dominates.
Evaluate for the three units of Problem 1 at \(P_D = 450\) MW, ignoring limits:
And the outputs: \(P_1 = 18.23\), \(P_2 = 316.33\), \(P_3 = 115.44\) MW. Two of these violate the limits — \(P_1\) is below 40 and \(P_2\) above 300 — which is why Problems 9 and 10 exist.
The interpretation of \(\lambda\). Differentiate the optimal cost with respect to the demand:
using the fact that all the incremental costs equal \(\lambda\) and the outputs sum to \(P_D\). So:
The result:
This is a general property of Lagrange multipliers — each is the sensitivity of the optimal objective to a relaxation of its constraint — and it is what makes \(\lambda\) useful far beyond the dispatch itself. It is the correct price for a spot market, the correct value to place on a megawatt of loss saved, and the correct threshold for deciding whether to buy an import. Problem 13 develops all three.
Restoring the inequality limits requires the Karush–Kuhn–Tucker conditions:
The complementary-slackness condition in the last line says a multiplier is non-zero only when its constraint is active. Working through the three cases reproduces exactly the inequalities of Problem 5 — \(\text{IC} \le \lambda\) at a maximum, \(\ge \lambda\) at a minimum — which is reassuring but adds nothing the exchange argument had not already given.
Units 2 and 3 alone supply 350 MW. Find the optimal allocation in closed form, verify the criterion, and show how the allocation shifts as the demand changes.
Apply the closed form with two units:
The outputs:
Both within limits (80–300 and 60–200) ✓, and summing to 350 MW ✓. Exact round numbers, which is a happy accident of the chosen data.
Verify the criterion directly:
An average of 10.08 Rs/kWh — but note again that neither unit's average cost is anywhere near that, and neither needs to be.
The two-unit result in a memorable form. Eliminating \(\lambda\):
Checking: \(P_2 = [0.016(350)+(7.20-6.20)]/[2(0.0045+0.0080)] = (5.60+1.00)/0.025 = 264\) ✓. Two terms: a share of the demand weighted by the other unit's curvature, plus a fixed offset set by the difference in the linear coefficients.
How the allocation shifts with demand:
| \(P_D\) | \(\lambda\) | \(P_2\) | \(P_3\) | \(\Delta P_2/\Delta P_D\) |
|---|---|---|---|---|
| 200 | 7.7120 | 168.00 | 32.00 → 60 (min) | — |
| 250 | 8.0000 | 200.00 | 50.00 → 60 (min) | — |
| 300 | 8.2880 | 232.00 | 68.00 | 0.64 |
| 350 | 8.5760 | 264.00 | 86.00 | 0.64 |
| 400 | 8.8640 | 296.00 | 104.00 | 0.64 |
| 450 | — | 300 (max) | 150.00 | 0 |
While both units are free, unit 2 takes a fixed 64% of every increment, because \(\Delta P_2/\Delta P_D = c_3/(c_2+c_3) = 0.0080/0.0125 = 0.64\). The sharing ratio is constant, set entirely by the curvatures — not by the units' sizes, their limits or their linear coefficients.
Two limiting cases worth recognising:
The second case is a unit with a linear cost curve — constant incremental cost. Such a unit is either fully loaded or at its minimum, never in between, because its incremental cost cannot adjust to match \(\lambda\). That is exactly what a merit-order despatch assumes, and it is why merit order and equal-\(\lambda\) dispatch coincide when all the cost curves are linear.
Set out the lambda-iteration algorithm, explain why it always converges, and demonstrate it on the three-unit system at \(P_D = 500\) MW.
Why an iterative method is needed at all. The closed form of Problem 6 fails as soon as a limit binds, because the set of units at their limits is not known in advance:
This is a nonlinear function of \(\lambda\) — piecewise linear, with a kink wherever a unit hits a limit. There is no general closed form, but the structure makes iteration trivial.
The key property — monotonicity:
The total output is a non-decreasing function of \(\lambda\). So the equation \(\sum P_i(\lambda) = P_D\) has a solution, it is essentially unique, and any bracketing method finds it. Convergence is guaranteed — a property remarkably few power-system algorithms enjoy.
The algorithm:
| Step | Action |
|---|---|
| 1 | Bracket: \(\lambda_{lo} = \min_i b_i\), \(\lambda_{hi} = \max_i(b_i+2c_iP_i^{\max})\) |
| 2 | Take \(\lambda = \tfrac12(\lambda_{lo}+\lambda_{hi})\) |
| 3 | Compute each \(P_i(\lambda)\) with clipping |
| 4 | Form the mismatch \(\Delta = P_D-\sum_iP_i\) |
| 5 | If \(\Delta > 0\) set \(\lambda_{lo} = \lambda\), else \(\lambda_{hi} = \lambda\); repeat from 2 |
| 6 | Stop when \(|\Delta| < \varepsilon\) |
Bisection halves the interval each time, so it needs about \(\log_2(\text{range}/\varepsilon)\) iterations — around 20 for a 0.01 MW tolerance on a 500 MW system. The secant method converges in 4–6 but can fail at a kink; bisection never fails, and 20 evaluations of a linear formula cost nothing.
Demonstration at \(P_D = 500\) MW. Bracket \([6.20,\ 12.10]\):
| Iter | \(\lambda\) | \(P_1\) | \(P_2\) | \(P_3\) | \(\sum P\) | \(\Delta\) |
|---|---|---|---|---|---|---|
| 1 | 9.1500 | 40.0 | 300.0 | 121.88 | 461.88 | +38.12 |
| 2 | 10.6250 | 70.83 | 300.0 | 200.0 | 570.83 | −70.83 |
| 3 | 9.8875 | 46.25 | 300.0 | 167.97 | 514.22 | −14.22 |
| 4 | 9.5188 | 40.0 | 300.0 | 144.92 | 484.92 | +15.08 |
| 5 | 9.7031 | 40.10 | 300.0 | 156.45 | 496.55 | +3.45 |
| 6 | 9.7953 | 43.18 | 300.0 | 162.21 | 505.39 | −5.39 |
| … | … | … | … | … | … | … |
| 20 | 9.7391 | 41.30 | 300.0 | 158.70 | 500.00 | 0.00 |
Twenty bisections take the mismatch below 0.01 MW. Note that unit 2 is pinned at 300 MW throughout — the algorithm handles the limit automatically, with no special logic.
Verify the converged answer analytically. With unit 2 at its maximum, units 1 and 3 must supply 200 MW at a common \(\lambda\):
Matching the iteration to five figures. And the consistency check on unit 2: \(\text{IC}_2 = 8.90 \le \lambda = 9.739\) ✓ — a unit at its maximum must have incremental cost below \(\lambda\), which it does.
The secant method, for comparison, using the projected gradient:
Since the aggregate curve is piecewise linear, this converges in exactly one step within a segment and needs one extra step for each limit crossed. Starting from \(\lambda = 9.15\) it reaches the answer in three iterations against bisection's twenty — and this is the method real dispatch software uses, with a bisection fallback for robustness.
Scale in practice:
| System | Units | Solution time |
|---|---|---|
| Single station | 3–8 | microseconds |
| Regional despatch | 50–200 | milliseconds |
| National, with losses and network | 500–2000 | seconds (an OPF, not a lambda iteration) |
Plain lambda iteration remains fast enough for real-time use at any scale, which is why it survives inside the automatic generation control loop even where a full optimal power flow runs every five minutes alongside it.
State the modified optimality conditions when generator limits are active, give the systematic procedure for finding which limits bind, and identify where the limits come from physically.
The three cases, established in Problem 5 and re-derived from the KKT conditions in Problem 6:
| Unit's state | Condition | Physical reading |
|---|---|---|
| \(P_i^{\min} < P_i < P_i^{\max}\) | \(\text{IC}_i = \lambda\) | free to adjust; marginal |
| \(P_i = P_i^{\max}\) | \(\text{IC}_i \le \lambda\) | cheap — we would take more if we could |
| \(P_i = P_i^{\min}\) | \(\text{IC}_i \ge \lambda\) | dear — we would take less if allowed |
The inequalities point in the directions common sense demands, which is a useful mnemonic: a unit is pinned at its ceiling because it is a bargain, and at its floor because it is expensive.
The systematic procedure:
| Step | Action |
|---|---|
| 1 | Solve ignoring all limits, using the closed form |
| 2 | If no limit is violated, stop — this is the answer |
| 3 | Fix the most violated unit at the limit it violated |
| 4 | Reduce \(P_D\) by that unit's fixed output and remove it from the free set |
| 5 | Repeat from step 1 with the reduced problem |
| 6 | Finally, check the inequality for every fixed unit |
Fixing the most-violated unit first is what makes the procedure terminate reliably. Step 6 is not optional: a unit fixed early can turn out, once other limits bind, to belong in the free set after all.
Worked at \(P_D = 450\) MW. Round 1, from Problem 6:
Two violations. Unit 2 exceeds its maximum by 16.33 MW; unit 1 falls short of its minimum by 21.77 MW. Unit 1 is the more violated, so fix \(P_1 = 40\).
Round 2 — units 2 and 3 supply \(450-40 = 410\) MW:
Fix \(P_2 = 300\) as well.
Round 3 — only unit 3 remains free, supplying \(450-40-300 = 110\) MW:
Within limits ✓. The system incremental cost is set by unit 3 alone — it is the only marginal unit.
Step 6 — check the fixed units:
Both inequalities hold, confirming the solution. Note how close unit 2's inequality is: 8.90 against 8.96. Only 0.06 Rs/kWh of margin — a slightly lower demand would free unit 2 from its limit.
Where the limits come from:
| Limit | Physical cause | Typical value |
|---|---|---|
| Upper | turbine and boiler rating; stator heating | 100% of MCR |
| Upper (temporary) | condenser cooling water temperature | −3 to −8% in summer |
| Lower | stable combustion without oil support | 40–60% of rating |
| Lower | boiler circulation and drum level stability | — |
| Lower | turbine blade windage heating at low steam flow | — |
The lower limit is the more interesting engineering constraint and the more expensive one. Below about 40% load a coal boiler cannot sustain a stable flame on coal alone and must be supported with oil, which is both costly and a fire risk — so the "technical minimum" is a hard operating constraint, not a preference. Reducing it from 55% to 40% is a substantial retrofit and is now commonly undertaken specifically to accommodate variable renewable generation.
Solve the complete three-unit dispatch at \(P_D = 500\) MW, present the full result, and interpret every quantity in it.
Round 1 — ignore limits:
Unit 2 is violated by 43.18 MW and unit 1 by 13.71 MW, so unit 2 is fixed first this time.
Round 2 — units 1 and 3 supply 200 MW:
Both within limits, and summing with unit 2's 300 MW to exactly 500 MW ✓. Unit 1 is now just above its minimum — it has come off the limit that bound it at \(P_D = 450\).
The complete result:
| Unit | \(P\) (MW) | State | IC (Rs/kWh) | \(C\) (thousand Rs/h) | Average (Rs/kWh) |
|---|---|---|---|---|---|
| U1 | 41.3043 | free | 9.7391 | 720.68 | 17.45 |
| U2 | 300.0000 | at max | 8.9000 | 2765.00 | 9.22 |
| U3 | 158.6957 | free | 9.7391 | 1750.08 | 11.03 |
| Total | 500.0000 | — | \(\lambda = 9.7391\) | 5235.76 | 10.47 |
Note the two free units share the same incremental cost, 9.7391, while their average costs differ by 60% (17.45 against 11.03). That is the equal-incremental-cost rule doing exactly what Problem 4 said it would.
Reading the result. Four observations, each carrying information:
| Observation | Meaning |
|---|---|
| \(\lambda = 9.7391\) | the next MWh costs Rs 9.74 — the system marginal price |
| U2 at its maximum | its capacity is worth having; a bigger U2 would save money |
| U1 barely above minimum | it is expensive and only just worth running above the floor |
| Average 10.47 > U2's 9.22 | the marginal units drag the average up |
The second row is a capacity-planning signal emerging from an operating calculation: a unit persistently at its maximum is telling the planner that more of it would be worth building — which is the link back to Set 26.
The value of unit 2's constraint. Its KKT multiplier is:
One more megawatt of capability on unit 2 would save Rs 839 per hour, or Rs 73.5 lakh a year if the condition persisted. That is the economic value of relieving the constraint — an uprate, a condenser clean, or a lower cooling-water temperature — and it is available directly from the dispatch without any further calculation.
The dispatch as demand varies through the day. Using the load curve of Set 26 scaled to this station:
| Period | \(P_D\) | \(\lambda\) | \(P_1\) | \(P_2\) | \(P_3\) |
|---|---|---|---|---|---|
| 00–06 | 200 | 7.1000 | 40 | 100.0 | 60 |
| 06–08 | 250 | 7.5500 | 40 | 150.0 | 60 |
| 08–12 | 400 | 8.6336 | 40 | 270.4 | 89.6 |
| 12–14 | 350 | 8.3456 | 40 | 238.4 | 71.6 |
| 14–18 | 450 | 8.9600 | 40 | 300.0 | 110.0 |
| 18–22 | 500 | 9.7391 | 41.3 | 300.0 | 158.7 |
| 22–24 | 250 | 7.5500 | 40 | 150.0 | 60 |
Unit 2 does all the load-following until it saturates at 300 MW, after which unit 3 takes over and unit 1 finally comes off its floor. Units 1 and 3 sit at their minimums for two-thirds of the day — which raises the question of whether they should be running at all, and that is Problem 18.
Produce the complete dispatch schedule for the three-unit station across its whole operating range, 200 to 600 MW, and interpret the pattern.
Apply the procedure of Problem 9 at each demand. The full schedule:
| \(P_D\) | \(\lambda\) | \(P_1\) | \(P_2\) | \(P_3\) | \(C\) | Average | Binding limits |
|---|---|---|---|---|---|---|---|
| 200 | 7.1000 | 40.00 | 100.00 | 60.00 | 2739.80 | 13.699 | U1min, U3min |
| 250 | 7.5500 | 40.00 | 150.00 | 60.00 | 3106.05 | 12.424 | U1min, U3min |
| 300 | 8.0000 | 40.00 | 200.00 | 60.00 | 3494.80 | 11.649 | U1min, U3min |
| 350 | 8.3456 | 40.00 | 238.40 | 71.60 | 3904.37 | 11.155 | U1min |
| 400 | 8.6336 | 40.00 | 270.40 | 89.60 | 4328.85 | 10.822 | U1min |
| 450 | 8.9600 | 40.00 | 300.00 | 110.00 | 4767.80 | 10.595 | U1min, U2max |
| 500 | 9.7391 | 41.30 | 300.00 | 158.70 | 5235.76 | 10.472 | U2max |
| 550 | 10.2609 | 58.70 | 300.00 | 191.30 | 5735.76 | 10.429 | U2max |
| 600 | 11.5000 | 100.00 | 300.00 | 200.00 | 6275.00 | 10.458 | U2max, U3max |
Five distinct regimes, separated by the demands at which a limit becomes active or inactive.
The five regimes:
| Range | Free units | Who follows the load |
|---|---|---|
| 180–317.8 MW | U2 only | unit 2 alone; 1 and 3 pinned at their minima |
| 317.8–446.3 MW | U2, U3 | shared 64:36 by curvature |
| 446.3–496.3 MW | U3 only | unit 3 alone; 1 at minimum, 2 at maximum |
| 496.3–563.3 MW | U1, U3 | shared 35:65 |
| 563.3–620 MW | U1 only | units 2 and 3 both at maximum |
The transition at 317.8 MW is where \(\lambda\) reaches unit 3's minimum incremental cost of 8.16; the one at 446.3 MW is where unit 2 saturates at 8.90; the one at 496.3 MW is where \(\lambda\) reaches unit 1's 9.70; and the last, at 563.3 MW, is where unit 3 saturates at 10.40.
The \(\lambda\) curve is the station's supply curve. Plotting \(\lambda\) against \(P_D\):
| Regime | Free units | \(\sum 1/2c_i\) | \(d\lambda/dP_D\) |
|---|---|---|---|
| 180–317.8 | U2 | 111.11 | 0.0090 |
| 317.8–446.3 | U2, U3 | 173.61 | 0.0058 |
| 446.3–496.3 | U3 | 62.50 | 0.0160 |
| 496.3–563.3 | U1, U3 | 95.83 | 0.0104 |
| 563.3–620 | U1 | 33.33 | 0.0300 |
The slope is a staircase, and it jumps upward whenever a unit saturates and downward whenever one comes free. The steepest region above 563 MW, where unit 1 alone is free, is where a single small unit carries every increment and the price is most sensitive — exactly the condition under which real electricity markets show price spikes.
The average cost curve is U-shaped:
Falling from 13.70 at 200 MW to 10.4263 at 564 MW, then rising to 10.458 at 600 MW. At low demand the no-load costs of three synchronised units are spread over little output; at high demand the expensive unit 1 must be loaded. The station is cheapest per unit at 91% of its capability — which is also, exactly, the point at which unit 3 saturates.
Where \(\lambda\) and the average cost cross is worth noting:
Marginal cost passes through the minimum of average cost, exactly as in elementary economics — and for the same reason. If the marginal unit is cheaper than the average, adding output pulls the average down; if dearer, it pushes it up.
What the schedule is used for in an operating control room:
| Use | How |
|---|---|
| Base points for AGC | the \(P_i\) columns are the setpoints |
| Participation factors | \(dP_i/dP_D = (1/2c_i)/\sum_{\text{free}}(1/2c_j)\) |
| Bidding into a market | the \(\lambda\) column is the offer curve |
| Buy-or-generate decisions | compare \(\lambda\) with the import price |
The participation factors are what automatic generation control uses between full dispatch calculations: the AGC allocates each second's small correction in proportion to \(1/2c_i\) over the free units, and the full dispatch is recomputed every few minutes to correct the drift.
At \(P_D = 500\) MW, compare the optimal dispatch with four other plausible allocation rules, and quantify the annual saving.
The optimum, from Problem 10:
Four alternative rules:
| Rule | \(P_1\) | \(P_2\) | \(P_3\) | \(C\) | Excess | Annual (Rs lakh) |
|---|---|---|---|---|---|---|
| Optimum | 41.30 | 300.00 | 158.70 | 5235.76 | — | — |
| Merit by \(b_i\) (U2, U3, U1) | 40.00 | 300.00 | 160.00 | 5235.80 | +0.04 | 0.04 |
| Pro-rata capacity | 96.77 | 241.94 | 161.29 | 5345.86 | +110.10 | 9.6 |
| Equal % of range | 98.18 | 240.00 | 161.82 | 5350.91 | +115.15 | 10.1 |
| Merit by size (U1, U2, U3) | 120.00 | 300.00 | 80.00 | 5378.20 | +142.44 | 12.5 |
Annual figures assume the condition persists for 8760 hours, which it does not — but the comparison is what matters. The worst rule costs Rs 12.5 lakh a year more, or 2.7%.
The second row is the interesting one. Simple merit order by the linear coefficient \(b_i\) — load the unit with the lowest \(b\) first — costs only Rs 0.04 thousand per hour more than the true optimum:
Essentially exact. The reason is that the limits are doing most of the work here: with unit 2 at its maximum and unit 1 near its minimum, there is very little freedom left for the optimisation to exploit. Merit order gives 40/300/160 against the optimal 41.30/300/158.70 — a difference of 1.3 MW.
When does merit order fail badly? Precisely when the units are free:
| \(P_D\) | Free units | Merit-order cost | Optimum | Excess |
|---|---|---|---|---|
| 350 | U2, U3 | 3906.05 | 3904.37 | +1.68 (0.04%) |
| 400 | U2, U3 | 4339.80 | 4328.85 | +10.95 (0.25%) |
| 500 | U1, U3 | 5235.80 | 5235.76 | +0.04 (0.00%) |
At 400 MW, merit order loads unit 2 to its maximum of 300 and leaves unit 3 at its 60 MW minimum — but the optimum backs unit 2 down to 270.4 and raises unit 3 to 89.6. The error is 0.25%, some three hundred times larger than at 500 MW, though still small in absolute terms.
Why the savings are modest in absolute terms. The general result:
The cost penalty of a misallocation is quadratic in the error, because the optimum is a stationary point. A 20 MW misallocation on unit 1 costs \(0.015\times400 = 6\) thousand Rs/h — small. That quadratic flatness is why crude rules perform well, and why economic dispatch was for decades regarded as a refinement rather than a necessity.
Why it is nonetheless worth doing. Three reasons:
| Reason | Magnitude |
|---|---|
| The saving is free — it costs nothing to compute | 0.1–3% of fuel cost |
| On a national scale, 1% of fuel is enormous | hundreds of crores a year |
| \(\lambda\) is needed anyway, for pricing and for losses | essential |
The second row is the practical argument. A system burning Rs 50 000 crore of fuel a year saves Rs 500 crore from a 1% improvement, for the cost of a computer program written once. Few investments in the industry have a comparable return.
A caution about the annual figures. The table above extrapolates one hour to a year, which overstates the saving:
Since the excess varies from 0.00% at 500 MW to 0.25% at 400 MW, the true annual figure depends on the load duration curve. Weighting by the daily schedule of Problem 11 gives an average excess of about 0.1% for merit order — roughly Rs 5 lakh a year for this station, and the honest number to quote. The pro-rata and equal-percentage rules, at 2%, are twenty times worse.
Interpret \(\lambda\) as a price. Compute the revenue, cost and producer surplus at \(P_D = 500\) MW if every megawatt-hour is settled at \(\lambda\), and explain what the result means.
The market interpretation. In a competitive pool, every generator is paid the system marginal price for every megawatt-hour, whatever its own cost:
Note this is the fuel revenue only; a real settlement includes capacity and ancillary payments.
Compare with the cost:
The generators collectively lose Rs 3.66 lakh an hour. This is not an error, and understanding why is the point of the problem.
Unit by unit:
| Unit | \(P\) | Revenue \(\lambda P\) | Cost \(C_i\) | Margin |
|---|---|---|---|---|
| U1 | 41.30 | 402.27 | 726.68 | −324.41 |
| U2 | 300.00 | 2921.74 | 2765.00 | +156.74 |
| U3 | 158.70 | 1545.56 | 1744.08 | −198.53 |
| Total | 500.00 | 4869.57 | 5235.76 | −366.20 |
Only the saturated unit makes money. Units 1 and 3, both operating at \(\text{IC} = \lambda\), lose — and they lose exactly their no-load costs plus a share of the curvature.
The explanation:
for a free unit. So a unit is profitable at marginal-cost pricing only when \(c_iP_i^2 > a_i\), i.e. when \(P_i > \sqrt{a_i/c_i}\) — which, from Problem 2, is exactly the output of minimum average cost. Checking: unit 1 needs 152.8 MW and has 41.3; unit 3 needs 223.6 and has 158.7. Neither reaches it, so both lose.
The general result, which is the central fact about marginal-cost pricing:
A generator earns a positive margin only in the hours when it is inframarginal — when it is cheaper than the price-setting unit. Unit 2 earns Rs 1.57 lakh an hour here precisely because it is at its maximum and the price is set by someone dearer.
How real markets close the gap:
| Mechanism | What it pays for |
|---|---|
| Scarcity pricing at peak | \(\lambda\) rises far above fuel cost when capacity is tight |
| Capacity market / capacity payment | availability, separately from energy |
| Uplift / make-whole payment | tops a unit up to its as-bid cost |
| Ancillary services | reserve, frequency response, reactive support |
| Bilateral contracts and hedges | most energy is not settled at the spot price at all |
The first row is the theoretically clean answer and the practically troublesome one: in a well-functioning energy-only market the peak-hour prices must be high enough, often enough, to recover all fixed costs — which means occasional prices of many times the fuel cost. Political tolerance for that is limited, which is why capacity mechanisms exist almost everywhere.
Three other uses of \(\lambda\), all of which follow from \(\lambda = dC^*/dP_D\):
| Decision | Rule | Here |
|---|---|---|
| Buy an import? | buy if price \(< \lambda\) | buy below Rs 9.74/kWh |
| Value of a loss reduction | 1 MW of loss saved is worth \(\lambda\) | Rs 9.74/kWh — see Set 28 |
| Worth of demand response | pay up to \(\lambda\) per MWh shed | Rs 9.74/kWh |
The second is the bridge to the next chapter: once transmission losses are included, a megawatt of generation at a remote bus delivers less than a megawatt to the load, and \(\lambda\) is the price at which that shortfall is valued.
Verify numerically that \(\lambda = dC^*/dP_D\), examine how the approximation degrades for finite increments, and use the result to price a block of demand response.
Recompute the dispatch at neighbouring demands around the base case of 500 MW:
| \(\Delta P_D\) | \(C^*\) | \(\Delta C\) | \(\Delta C/\Delta P_D\) | Error vs \(\lambda\) |
|---|---|---|---|---|
| −50 | 4767.80 | −467.96 | 9.3592 | −3.90% |
| −20 | 5043.80 | −191.96 | 9.5980 | −1.45% |
| −10 | 5139.00 | −96.76 | 9.6761 | −0.65% |
| −1 | 5226.03 | −9.7339 | 9.7339 | −0.05% |
| 0 | 5235.76 | — | 9.73913 | — |
| +1 | 5245.51 | +9.7443 | 9.7443 | +0.05% |
| +10 | 5333.67 | +97.91 | 9.7913 | +0.54% |
| +50 | 5735.76 | +500.00 | 10.0000 | +2.68% |
The ratio converges to \(\lambda = 9.73913\) as the increment shrinks, from above on one side and below on the other ✓. This is the numerical confirmation of the Lagrangian result of Problem 6.
Why the finite-difference value exceeds \(\lambda\) for an increase. Because \(\lambda\) itself rises with demand:
Matching the +10 MW row exactly, using \(d\lambda/dP_D = 1/95.833 = 0.010435\) from Problem 11. The second-order term is what the marginal price omits.
The −50 MW case is different, and shows a limitation:
The quadratic estimate is wrong by 1.3%, because between 500 and 450 MW the dispatch crosses the regime boundary at 496.3 MW: unit 1 returns to its minimum, and \(d\lambda/dP_D\) changes from 0.01043 to 0.0160. A Taylor expansion cannot cross a kink, and any use of \(\lambda\) for a large increment must check whether the limit set changes.
Pricing a block of demand response. An industrial consumer offers to shed 20 MW for four hours in the evening:
Below \(\lambda = 9.739\) by 1.4%, partly from the curvature and partly because the block crosses the 496.3 MW regime boundary. So the utility can offer up to Rs 9.598/kWh — and paying \(\lambda\) itself would overpay by 1.4%, which for a 20 MW block is worth the extra calculation.
The four-hour value:
If such an event occurs on 60 evenings a year, the contract is worth Rs 4.61 crore annually — before counting the capacity benefit of a 20 MW lower peak, which from Set 26 would be worth a further Rs 0.4 crore. Demand response is priced from \(\lambda\), and that is the whole of its economics.
When \(\lambda\) is not the right price for a finite block:
| Situation | Correct price |
|---|---|
| Small block, no limit change | \(\lambda\) — error under 0.1% |
| Large block, no limit change | \(\lambda+\frac12(d\lambda/dP_D)\Delta\) |
| Block crosses a regime boundary | recompute \(C^*\) at both ends |
| Block changes the unit commitment | recompute including start-up costs |
The last row can produce enormous values. If shedding 20 MW allows a whole unit to be shut down, the saving includes that unit's no-load cost and its start-up cost — which can make the block worth several times \(\lambda\). This is exactly why demand response is most valuable at the margin of a commitment decision, and why its value is so lumpy.
Fuel prices change. Determine how a 20% rise in unit 2's fuel price, and a 20% fall, alter the dispatch and the system price, and establish the general rule.
How a fuel price enters the cost curve. From Problem 2, \(C = F\times H\), so a change in fuel price scales every coefficient:
Both the intercept and the slope of the incremental cost line scale together. This is often got wrong: raising \(b\) alone shifts the line without tilting it, which corresponds to no physical change at all.
Unit 2's fuel up 20% (\(k = 1.2\)): its curve becomes \(600+7.44P_2+0.0054P_2^2\), with \(\text{IC}_2 = 7.44+0.0108P_2\) spanning 8.30 to 10.68:
| Quantity | Base | U2 fuel +20% | Change |
|---|---|---|---|
| \(\lambda\) | 9.7391 | 10.2015 | +4.75% |
| \(P_1\) | 41.30 | 56.72 | +15.4 MW |
| \(P_2\) | 300.00 | 255.69 | −44.3 MW |
| \(P_3\) | 158.70 | 187.59 | +28.9 MW |
| \(C\) | 5235.76 | 5767.92 | +10.16% |
Unit 2 comes off its maximum — its incremental cost now reaches 10.68 at full load, above the system \(\lambda\), so it is no longer worth loading fully. The other two units take up the 44 MW it sheds.
The cost increase is less than proportional, which is the value of re-dispatching:
Re-optimising after the price change recovers 3.8% of the increase. This is the general envelope-theorem result: the optimal cost responds less than proportionally to any parameter change, because the allocation adapts — but the recovery is second-order, so it is always modest.
Unit 2's fuel down 20% (\(k = 0.8\)): \(\text{IC}_2 = 4.96+0.0072P_2\), spanning 5.54 to 7.12:
| Quantity | Base | U2 fuel −20% | Change |
|---|---|---|---|
| \(\lambda\) | 9.7391 | 9.7391 | unchanged |
| \(P_1, P_2, P_3\) | 41.30 / 300 / 158.70 | 41.30 / 300 / 158.70 | unchanged |
| \(C\) | 5235.76 | 4682.76 | −10.56% |
The dispatch does not move at all. Unit 2 was already at its maximum; making it cheaper cannot make it produce more. The cost falls by exactly \(0.2\times2765.00 = 553.00\) — 20% of unit 2's own cost, to the rupee — and the system price is entirely unaffected.
The asymmetry is the lesson:
| Unit's state | Fuel price rises | Fuel price falls |
|---|---|---|
| At its maximum | may come off the limit; \(\lambda\) rises | no effect on dispatch or \(\lambda\) |
| At its minimum | no effect on dispatch or \(\lambda\) | may come off the limit; \(\lambda\) falls |
| Free (marginal) | \(\lambda\) rises | \(\lambda\) falls |
Only marginal plant sets the price. A change in the fuel cost of a unit at a limit changes the bill but not the price — which is why, in a market, a cheap saturated generator captures the full benefit of a fall in its own fuel cost while a marginal one passes it straight to consumers.
Two more sensitivities, for completeness:
| Change | \(\lambda\) | \(P_1/P_2/P_3\) | \(\Delta C\) |
|---|---|---|---|
| U1 fuel −20% | 8.9600 | 90.00 / 300 / 110.00 | −192.76 |
| U3 fuel +10% | 10.3529 | 61.76 / 300 / 138.24 | +164.45 |
The first is striking: making the expensive unit 1 cheaper by 20% raises its output from 41 to 90 MW and drops \(\lambda\) from 9.74 to 8.96. A 20% change in one unit's fuel has moved the system price by 8%, because that unit was marginal.
The general sensitivity, for a free unit \(j\):
The price moves in proportion to the unit's own share of the free capacity. A large flat unit (small \(c\)) dominates the price; a small steep one barely affects it. In a national system with hundreds of units, no single fuel contract moves \(\lambda\) perceptibly — but a change in the price of a whole fuel type moves it a great deal.
Real cost curves are not quadratics. Approximate unit 2's curve by four linear segments, set out how dispatch is performed with piecewise-linear costs, and assess the error.
Why the piecewise-linear form is used. Three reasons, all practical:
| Reason | Comment |
|---|---|
| It is what generators actually bid | market rules require a stepped offer curve |
| It makes the dispatch a linear program | solvable at national scale with network constraints |
| It represents non-convexities honestly | a quadratic cannot show a valve point |
The second is decisive for large systems. A quadratic dispatch with a full AC network is a hard nonlinear program; a piecewise-linear one with a DC network is a linear program of a few hundred thousand variables, which solves in seconds.
Segment unit 2's range 80–300 MW into four equal blocks and take the average incremental cost over each:
| Segment (MW) | Width | Segment IC (Rs/kWh) | Exact IC at midpoint |
|---|---|---|---|
| 80–135 | 55 | 7.1675 | 7.1675 |
| 135–190 | 55 | 7.6625 | 7.6625 |
| 190–245 | 55 | 8.1575 | 8.1575 |
| 245–300 | 55 | 8.6525 | 8.6525 |
The segment incremental cost equals the exact incremental cost at the midpoint — exactly, not approximately. That is a property of quadratics: the average slope over an interval is the slope at its centre. So the piecewise approximation is a set of chords touching the true incremental cost line at four points.
Dispatch with piecewise-linear costs is pure merit order. Each segment of each unit is a block with a fixed price; load the cheapest blocks first:
| Rank | Block | MW | Price | Cumulative MW |
|---|---|---|---|---|
| — | minima (U1 40, U2 80, U3 60) | 180 | must-run | 180 |
| 1 | U2 seg 1 | 55 | 7.1675 | 235 |
| 2 | U2 seg 2 | 55 | 7.6625 | 290 |
| 3 | U3 seg 1 | 35 | 8.2400 | 325 |
| 4 | U2 seg 3 | 55 | 8.1575 | — |
Ranked strictly by price, block 4 (8.1575) precedes block 3 (8.2400). The merit stack interleaves the units' segments, which is exactly what equal-\(\lambda\) dispatch does continuously — merit order over segments is the discrete form of the equal-incremental-cost rule.
The price is set by the marginal block, and this is where the two formulations differ:
A piecewise-linear dispatch gives a step price curve — the price stays at 7.6625 for an entire 55 MW block, then jumps to 8.1575. Real markets show exactly this behaviour, and it is why spot prices sit on plateaux and then move abruptly.
The approximation error, assessed by comparing the two dispatches at 400 MW:
| Model | \(P_1/P_2/P_3\) | \(C\) | Error |
|---|---|---|---|
| Exact quadratic | 40.00 / 270.40 / 89.60 | 4328.85 | — |
| 4 segments | 40.00 / 272.50 / 87.50 | 4329.05 | +0.005% |
| 2 segments | 40.00 / 245.00 / 115.00 | 4335.20 | +0.15% |
Four segments give an error of five thousandths of one per cent. Even two segments cost only 0.15%. The error falls as the square of the segment width, for the same reason the misallocation penalty of Problem 12 was quadratic — so doubling the number of segments quarters the error.
How many segments are needed in practice:
| Application | Segments per unit |
|---|---|
| Textbook illustration | 1 (constant IC) |
| Market bidding (typical rules) | 5–10 |
| Security-constrained unit commitment | 3–5 |
| Detailed production costing | 10–20 |
Note that market rules usually cap the number of segments, not to limit the accuracy but to limit the scope for strategic bidding — a generator with a hundred segments can shape its offer curve far more finely than one with five, and that flexibility is worth money to it and costs the consumer.
One requirement the segments must satisfy:
This is the discrete statement of convexity, and market rules enforce it. A non-monotonic offer curve would allow a generator to be dispatched to a locally cheap block while skipping a dearer one below it — which breaks the merit-order logic entirely and turns the linear program into a mixed-integer one.
A steam turbine's admission valves open in sequence, producing a rippled cost curve. Model the effect for unit 2, explain why it destroys the equal-incremental-cost argument, and describe what is done about it.
The physical cause. A large steam turbine admits steam through four to eight nozzle groups, each with its own valve:
| Condition | Effect on efficiency |
|---|---|
| A valve just fully open | best — no throttling loss |
| A valve partly open | throttling across the valve wastes enthalpy |
| Just before the next valve opens | worst — maximum throttling |
So the heat rate does not vary smoothly. It sags to a local minimum each time a valve reaches full opening, then climbs as the next valve is cracked open — one ripple per valve across the load range.
The standard model adds a rectified sinusoid to the smooth curve:
with \(e\) the ripple amplitude and \(f\) setting its period. Taking \(e = 30\) thousand Rs/h and \(f = 0.045\) per MW for unit 2 gives a period of \(2\pi/f = 139.6\) MW — about 1.6 ripples across its 220 MW range, corresponding to a two-valve machine.
The rippled curve:
| \(P\) (MW) | Smooth \(C\) | With valves | Ripple |
|---|---|---|---|
| 80 | 1024.80 | 1024.80 | 0.00 |
| 100 | 1165.00 | 1188.50 | +23.50 |
| 150 | 1531.25 | 1531.50 | +0.25 |
| 200 | 1920.00 | 1943.18 | +23.18 |
| 250 | 2331.25 | 2360.63 | +29.38 |
| 300 | 2765.00 | 2778.73 | +13.73 |
The ripple is at most 1.3% of the cost — small in itself, but its derivative is not small, and that is what matters.
Why it destroys the argument. Differentiating:
Against a smooth incremental cost spanning 6.92 to 8.90, a ripple of \(\pm1.35\) is enormous. The incremental cost curve is no longer monotonic — it rises, falls, and rises again — so the equation \(\text{IC}(P) = \lambda\) can have several solutions, and the cost function is no longer convex.
The consequences:
| Property | Convex case | With valve points |
|---|---|---|
| Solutions of \(\text{IC} = \lambda\) | one | several |
| Local optimum is global | yes | no |
| Lambda iteration converges | always | to a solution, not the best |
| Aggregate \(P(\lambda)\) monotonic | yes | no |
The last row is the practical killer: lambda iteration relies on monotonicity for its guaranteed convergence, and with valve points that guarantee is gone. The method may oscillate or land on a poor local optimum.
What is done about it. Four approaches, in ascending order of sophistication:
| Approach | Method | Comment |
|---|---|---|
| Ignore it | use the smooth fit | error 0.1–0.5%; usual practice |
| Operate at valve points | restrict output to the local optima | discrete setpoints; loses fine control |
| Piecewise-linear with integers | mixed-integer linear program | exact, and solvable |
| Metaheuristics | genetic algorithm, PSO, differential evolution | a large research literature |
The first row is what most utilities actually do, and it is defensible: the ripple is a genuine physical effect but the fitted smooth curve passes through the middle of it, so the error is bounded by half the ripple amplitude. The fourth row is the subject of hundreds of papers, most of which compare algorithms on the same three-unit and thirteen-unit test systems — a substantial literature built on a 0.3% effect.
The second approach is the one used in practice where it matters:
A unit run continuously at base load is set at a valve point deliberately, and the regulating duty is given to another machine. This is why "valve-point loading" appears in operating instructions, and why a base-load unit's output is often a peculiar number like 273 MW rather than a round 275.
Determine which units should be running at each demand from 180 to 450 MW, quantify the saving over running all three, and set out why the problem is fundamentally harder than dispatch.
Why it is a different problem. Dispatch takes the committed set as given and optimises continuously; commitment optimises over a discrete set:
| Property | Dispatch | Commitment |
|---|---|---|
| Variables | continuous \(P_i\) | binary \(u_i \in \{0,1\}\) and continuous \(P_i\) |
| No-load cost | irrelevant | central |
| Solution method | lambda iteration | mixed-integer programming |
| Combinations | 1 | \(2^n-1\) per hour |
| Couples across time? | no | yes — start-up, min run/down times |
The last two rows are why commitment is hard. With 100 units over 24 hours there are \(2^{2400}\) possible schedules, and the time coupling means they cannot be evaluated hour by hour.
Enumerate for three units. With only seven combinations, exhaustive search is trivial:
| \(P_D\) | Best set | Cost | \(\lambda\) | All three | Saving | Rs lakh/yr |
|---|---|---|---|---|---|---|
| 180 | U2 | 1761.80 | 7.8200 | 2599.60 | 837.80 | 73.4 |
| 200 | U2 | 1920.00 | 8.0000 | 2739.80 | 819.80 | 71.8 |
| 250 | U2 | 2331.25 | 8.4500 | 3106.05 | 774.80 | 67.9 |
| 300 | U2 | 2765.00 | at max | 3494.80 | 729.80 | 63.9 |
| 320 | U2+U3 | 3274.11 | 8.4032 | 3656.59 | 382.48 | 33.5 |
| 350 | U2+U3 | 3528.80 | 8.5760 | 3904.37 | 375.57 | 32.9 |
| 400 | U2+U3 | 3964.80 | 8.8640 | 4328.85 | 364.05 | 31.9 |
| 450 | U2+U3 | 4425.00 | 9.6000 | 4767.80 | 342.80 | 30.0 |
Unit 2 alone serves up to 300 MW — its own maximum. From 300 to 450 MW, unit 2 and unit 3 suffice, and unit 1 is not needed at all. Above 450 MW all three must run, since \(300+200 = 500\) is the two-unit ceiling and reserve considerations bite before then.
The savings are an order of magnitude larger than dispatch savings:
Six times more. And the reason is exactly the no-load cost: shutting down units 1 and 3 removes \(350+400 = 750\) thousand Rs/h of fuel that was buying nothing. Getting the commitment right is worth far more than getting the dispatch right, which is why modern system operation solves them together and why the dispatch problem is, in a sense, the easy half.
The simple decision rule for whether to keep a unit running, ignoring time coupling:
In words: the unit is worth running only if its own cost is less than what the remaining units would charge for the same output. At \(P_D = 300\), unit 3 at its 60 MW minimum costs 860.80, while unit 2 would supply that 60 MW for about 435 — so unit 3 should be shut down, as the table says.
What the simple rule omits — start-up cost. Restarting a shut-down unit is expensive:
| Unit state | Start-up cost | Reason |
|---|---|---|
| Hot (down < 8 h) | 1000–3000 | fuel to re-raise steam |
| Warm (8–48 h) | 3000–8000 | plus a longer soak |
| Cold (> 48 h) | 8000–20 000 | full boiler warm-through, 8–12 h |
In thousand Rs, for a unit of this size. Taking a warm start of 8000 for unit 3, and a saving of 364.60 thousand Rs/h while it is off:
The break-even down time:
So shutting unit 3 down is worthwhile only if it will stay off for more than 22 hours. Since the demand at 300 MW lasts only the six overnight hours of the Set 26 load curve, the unit should not be shut down at all — the hour-by-hour analysis of the table above is misleading, and this is precisely the time coupling that makes commitment a scheduling problem rather than an hourly one.
The other time-coupled constraints:
| Constraint | Typical value | Reason |
|---|---|---|
| Minimum up time | 4–24 h | thermal stress on drums and rotors |
| Minimum down time | 4–12 h | controlled cooling |
| Ramp rate | 1–5% of rating per minute | differential expansion |
| Start-up ramp | 2–12 h to full load | boiler warm-through |
| Number of starts per year | limited by fatigue life | each start consumes creep-fatigue life |
The last is often decisive and rarely modelled explicitly: a large drum boiler is designed for a few thousand starts over forty years, and cycling a base-load unit daily consumes that budget in a decade. The cost is real but appears only as a shortened plant life, which is why it is usually converted into a notional start-up cost rather than a constraint.
How the problem is actually solved at scale:
| Method | Era | Comment |
|---|---|---|
| Priority list | 1960s– | rank by full-load average cost; still used as a check |
| Dynamic programming | 1970s–80s | exact for small systems; exponential in units |
| Lagrangian relaxation | 1980s–2000s | decouples units; gives a bound, not the optimum |
| Mixed-integer linear programming | 2000s– | the current standard — exact, and fast enough |
MILP won because commercial solvers improved by roughly a factor of a million between 1990 and 2015 — about half from algorithms and half from hardware. A security-constrained unit commitment over 24 hours with 1000 units and 10 000 network constraints now solves to within 0.1% of optimal in under twenty minutes, which was inconceivable when Lagrangian relaxation was devised.
Real dispatch is not free to choose. Enumerate the constraints that force units to run or to hold particular outputs, and quantify what one of them costs.
The categories of must-run constraint:
| Category | Example | Effect on dispatch |
|---|---|---|
| Reserve | spinning reserve of one largest unit | caps output below \(P^{\max}\) |
| Voltage support | a unit needed for reactive power locally | forces it on, often at minimum |
| Transmission security | a unit behind a constrained corridor | forces it on, sometimes at high output |
| System inertia | minimum synchronous machines online | forces a count, not an output |
| Contractual | take-or-pay fuel; must-run PPA | forces a minimum energy |
| Cogeneration | steam host requires process heat | output set by the heat load |
| Environmental | emission cap; cooling-water temperature | caps output or hours |
The third and fourth rows have grown enormously in importance. As renewable generation displaces synchronous plant, system operators increasingly run thermal units purely for inertia and short-circuit level — paying fuel for a service that has nothing to do with energy.
How a must-run constraint enters the dispatch. It simply raises the unit's lower limit:
Nothing else in the method changes. The unit is pinned, the remaining demand is dispatched among the others, and the cost of the constraint is the difference between the constrained and unconstrained optima.
Worked example — reserve. Require 50 MW of spinning reserve at \(P_D = 500\) MW. Reserve must come from headroom on synchronised units:
In the base dispatch the headroom is \((120-41.30)+(300-300)+(200-158.70) = 78.7+0+41.3 = 120\) MW — comfortably above 50, so the constraint is not binding. It becomes binding only above 570 MW.
Worked example — voltage support. Suppose unit 1 must run at a minimum of 80 MW rather than 40 for local voltage support at \(P_D = 500\):
| Case | \(P_1\) | \(P_2\) | \(P_3\) | \(\lambda\) | \(C\) |
|---|---|---|---|---|---|
| Unconstrained | 41.30 | 300.00 | 158.70 | 9.7391 | 5235.76 |
| \(P_1 \ge 80\) | 80.00 | 300.00 | 120.00 | 9.1200 | 5259.20 |
Rs 23 440 an hour, or Rs 2.05 crore a year if permanent. Note that \(\lambda\) falls from 9.74 to 9.12: forcing an expensive unit up displaces a cheaper one, and the marginal unit — now unit 3 alone — is further down its curve.
That is a general and counter-intuitive result:
Because the forced generation displaces marginal generation, leaving less for the free units to supply. In a market this produces the familiar situation where the spot price is depressed by out-of-merit running, while the total system cost — recovered through uplift charges — rises. Consumers see a low price and a large uplift bill, and the two move in opposite directions.
Cogeneration is the constraint that changes the problem most fundamentally:
Such a unit has no dispatch freedom at all in electrical terms and enters as a fixed injection. An extraction-condensing set has partial freedom, described by a two-dimensional feasible region in the \((P,Q)\) plane rather than a line — and its dispatch requires a two-dimensional generalisation of the equal-\(\lambda\) rule, with a separate multiplier for the heat balance.
How much of a real dispatch is actually free? A representative breakdown:
| Category | Share of capacity |
|---|---|
| Must-run: nuclear, run-of-river, renewables | 30–50% |
| Must-run: security and voltage support | 5–15% |
| Contractually fixed | 10–20% |
| Genuinely free to optimise | 20–40% |
Only a minority of the fleet is actually dispatchable in the sense this chapter assumes. That does not diminish the theory — the free fraction is where all the marginal decisions are made, and it is what sets the price for everything else.
Carry out a complete daily dispatch study for the three-unit station serving the load curve of Set 26 scaled to this station, including commitment, and set out the verification checks.
Step 1 — the load. Scaling Set 26's daily curve so the peak is 500 MW:
| Period | Hours | \(P_D\) (MW) | Energy (MWh) |
|---|---|---|---|
| 00–06 | 6 | 200 | 1200 |
| 06–08 | 2 | 250 | 500 |
| 08–12 | 4 | 400 | 1600 |
| 12–14 | 2 | 350 | 700 |
| 14–18 | 4 | 450 | 1800 |
| 18–22 | 4 | 500 | 2000 |
| 22–24 | 2 | 250 | 500 |
| Total | 24 | — | 8300 |
Load factor \(= 8300/(500\times24) = 0.6917\). All demands lie within the station's 180–620 MW range with all three units committed.
Step 2 — the commitment decision. From Problem 18, unit 1 is not needed below 450 MW and unit 3 not below 300 MW. But the start-up analysis showed a 22-hour break-even:
| Option | Hours unit 1 off | Fuel saving | Start-up cost | Net |
|---|---|---|---|---|
| All three all day | 0 | — | — | baseline |
| Unit 1 off 00–14 (14 h) | 14 | 4926 | 8000 | −3074 |
| Unit 1 off 22–14 (16 h) | 16 | 5620 | 8000 | −2380 |
Both shut-down options lose money, because the overnight trough is not long enough. All three units stay synchronised for the whole day — which is exactly the answer a naive hourly analysis would have got wrong.
Step 3 — the hourly dispatch:
| Period | \(P_D\) | \(\lambda\) | \(P_1\) | \(P_2\) | \(P_3\) | \(C\) (per h) | Cost (period) |
|---|---|---|---|---|---|---|---|
| 00–06 | 200 | 7.1000 | 40.00 | 100.00 | 60.00 | 2739.80 | 16 438.8 |
| 06–08 | 250 | 7.5500 | 40.00 | 150.00 | 60.00 | 3106.05 | 6 212.1 |
| 08–12 | 400 | 8.6336 | 40.00 | 270.40 | 89.60 | 4328.85 | 17 315.4 |
| 12–14 | 350 | 8.3456 | 40.00 | 238.40 | 71.60 | 3904.37 | 7 808.7 |
| 14–18 | 450 | 8.9600 | 40.00 | 300.00 | 110.00 | 4767.80 | 19 071.2 |
| 18–22 | 500 | 9.7391 | 41.30 | 300.00 | 158.70 | 5235.76 | 20 943.0 |
| 22–24 | 250 | 7.5500 | 40.00 | 150.00 | 60.00 | 3106.05 | 6 212.1 |
| Total | — | — | — | — | — | — | 94 001.3 |
Rs 9.40 crore per day, for 8300 MWh — an average of Rs 11.325 per kWh. Note this exceeds every individual period's average except the two cheapest, because the low-demand hours carry three units' no-load costs on very little output.
Step 4 — the energy split:
| Unit | Energy (MWh) | Share | Capacity factor | Cost share |
|---|---|---|---|---|
| U1 | 965.2 | 11.6% | 0.335 | 19.0% |
| U2 | 4881.6 | 58.8% | 0.678 | 48.4% |
| U3 | 2453.2 | 29.6% | 0.511 | 32.6% |
Unit 1 produces 11.6% of the energy and incurs 19.0% of the cost — the expensive unit is over-represented in the bill, which is the whole point. Unit 2 is the reverse: 58.8% of the energy for 48.4% of the cost.
Step 5 — the marginal unit through the day, which is what a market would price:
| Period | Marginal unit | \(\lambda\) |
|---|---|---|
| 00–08, 22–24 | U2 | 7.10–7.55 |
| 08–14 | U2 and U3 | 8.35–8.63 |
| 14–18 | U3 | 8.96 |
| 18–22 | U1 and U3 | 9.74 |
The price ranges from 7.10 to 9.74 Rs/kWh across the day — a factor of 1.37, which is modest because this station's units are similar. On a real system with hydro, nuclear and gas turbines the daily price range is a factor of three to ten.
Step 6 — the verification checks. Six identities, each independent of what it checks:
| Check | Expected | Found |
|---|---|---|
| Hours sum | 24 | 6+2+4+2+4+4+2 = 24 ✓ |
| Outputs sum to demand | each period | all seven ✓ |
| Energies sum | 8300 MWh | 965.2+4881.6+2453.2 = 8300.0 ✓ |
| Free units share \(\lambda\) | equal ICs | all periods ✓ |
| Units at limits satisfy inequalities | \(\le\) at max, \(\ge\) at min | all ✓ |
| \(\lambda\) monotone in \(P_D\) | increasing | 7.10 < 7.55 < 8.35 < 8.63 < 8.96 < 9.74 ✓ |
The fifth is the one that most often fails in a hand calculation and is easiest to check: at 450 MW, unit 1 at its 40 MW minimum has \(\text{IC} = 9.70 \ge \lambda = 8.96\) ✓ and unit 2 at its 300 MW maximum has \(\text{IC} = 8.90 \le 8.96\) ✓.
Step 7 — the value of the exercise. Comparing with three cruder policies over the whole day:
| Policy | Daily cost | Excess | Annual (Rs crore) |
|---|---|---|---|
| Optimal dispatch | 94 001 | — | — |
| Merit order by \(b_i\) | 94 062 | +0.06% | +0.02 |
| Pro-rata capacity | 96 730 | +2.90% | +1.00 |
| Equal sharing where feasible | 97 850 | +4.09% | +1.41 |
Rs 1.4 crore a year for one small station, from a calculation that takes microseconds. Scaled to a national fleet of two hundred such stations, the figure is measured in hundreds of crores — which is the answer to anyone who asks whether a 0.06% improvement is worth the trouble.
Step 8 — what has been assumed away, and what Set 28 restores:
| Assumption | Restored in |
|---|---|
| All units at one bus; no transmission | Set 28 |
| No transmission losses | Set 28 |
| No network constraints | security-constrained dispatch |
| No ramp-rate limits | multi-period dispatch |
| Perfect load forecast | stochastic unit commitment |
| Convex cost curves | Problem 17 |
The first two are the subject of the next chapter, and they change the criterion in a specific way: with losses, a megawatt generated at a remote bus delivers less than a megawatt to the load, so the equal-incremental-cost rule becomes equal penalised incremental cost, and the whole load-flow machinery of Part 4 re-enters the economics.
Practice Problems
Twelve problems on economic dispatch. Problems 1 and 3–5 use a small two-unit station of their own; Problems 5–12 return to the three-unit station of the worked set (costs in thousand Rs/h with \(P\) in MW, so incremental costs come out directly in Rs/kWh). Solve each one before opening the answer.
1. Two units have \(C_1 = 300+20P_1+0.05P_1^2\) and \(C_2 = 400+16P_2+0.08P_2^2\) Rs/h, with no binding limits. Dispatch 250 MW economically and find the saving over an equal split.
Answer
\(\mathrm{IC}_1 = 20+0.10P_1\), \(\mathrm{IC}_2 = 16+0.16P_2\). Setting both to \(\lambda\): \(P_1 = 10(\lambda-20)\), \(P_2 = 6.25(\lambda-16)\), and \(16.25\lambda = 550\) gives \(\lambda = \) Rs 33.846/MWh, \(P_1 = \) 138.46 MW, \(P_2 = \) 111.54 MW. Cost Rs 7207.69/h against Rs 7231.25/h for 125 MW each — a saving of Rs 23.56/h (0.33%). Note the cheaper unit (lower \(b\)) takes less, because its curve is steeper.
2. A unit's heat input is \(H = 30+1.90P+0.0025P^2\) Gcal/h for \(40\le P\le 200\) MW. Find the heat rate and thermal efficiency at 40 and 160 MW, the output of minimum heat rate, and the incremental heat rate at that output.
Answer
At 40 MW: \(H = 110.0\) Gcal/h, \(\mathrm{HR} = 2.7500\) Gcal/MWh, \(\eta = 0.86/2.75 = \) 31.27%. At 160 MW: \(H = 398.0\), \(\mathrm{HR} = 2.4875\), \(\eta = \) 34.57%. Minimum heat rate where \(d(30/P+1.90+0.0025P)/dP = 0\), i.e. \(P = \sqrt{30/0.0025} = \) 109.54 MW, giving \(\mathrm{HR} = 2.4477\) and \(\eta = \) 35.13%. There \(\mathrm{IHR} = 1.90+0.005(109.54) = \) 2.4477 Gcal/MWh — identical to the heat rate, which is the general property of the minimum-heat-rate point.
3. Coal costs Rs 3200/tonne with a calorific value of 4500 kcal/kg. Convert the unit of Problem 2 to a rupee cost curve and find its incremental cost at 120 MW.
Answer
One tonne yields 4.5 Gcal, so fuel costs \(3200/4.5 = \) Rs 711.11 per Gcal. Multiplying through: \(C = 21\,333+1351.1P+1.7778P^2\) Rs/h. Then \(\mathrm{IC} = 1351.1+3.5556(120) = 1777.8\) Rs/MWh \(= \) Rs 1.778/kWh. The fuel price scales all three coefficients — a point Problem 15 of the worked set turns on.
4. Units with \(C_1 = 200+7.0P_1+0.008P_1^2\) and \(C_2 = 180+6.3P_2+0.009P_2^2\) (thousand Rs/h) have limits \(30\le P_1\le 100\) and \(50\le P_2\le 150\). Dispatch (a) 200 MW and (b) 230 MW.
Answer
(a) Ignoring limits, \(\lambda = \) 8.3647, \(P_1 = 85.29\), \(P_2 = 114.71\) — both inside their ranges, so this is the answer. (b) The unconstrained solution gives \(P_1 = 111.8 > 100\). Fix \(P_1 = 100\), so \(P_2 = 130\) and \(\lambda = \mathrm{IC}_2 = 6.3+0.018(130) = \) 8.6400. Check the sign: \(\mathrm{IC}_1 = 8.60 \le \lambda\) ✓ — a unit stuck at its upper limit must be the cheaper one at the margin.
5. For the three-unit station of the worked set, compare the optimum dispatch of 500 MW with a pro-rata split in the ratio of the units' capacities.
Answer
Total capacity 620 MW, so pro-rata gives \(P = 96.77 / 241.94 / 161.29\) MW at a cost of 5345.86 against the optimum 5235.76 — an excess of 110.10 thousand Rs/h, or 2.10%. (An equal three-way split is not even feasible: 166.67 MW exceeds unit 1's 120 MW limit.) At 400 MW the pro-rata excess is 99.92, or 2.31%.
6. A different station has \(C_A = 500+5.3P+0.004P^2\) (50–200 MW), \(C_B = 400+5.5P+0.006P^2\) (40–150 MW) and \(C_C = 200+5.8P+0.009P^2\) (30–100 MW). Dispatch 300 MW and 400 MW.
Answer
At 300 MW: \(\lambda = \) 6.6053 with \(P = 163.16 / 92.11 / 44.74\), cost 2906.18. At 400 MW: the free solution wants \(P_A = 213.2 > 200\), so \(P_A = 200\) and the remaining 200 MW is shared by B and C at \(\lambda = \) 7.0600, giving \(P = 200 / 130 / 70\) and cost 3586.50. Check \(\mathrm{IC}_A = 5.3+0.008(200) = 6.90 \le 7.06\) ✓.
7. The station of the worked set is carrying 500 MW. A neighbouring utility offers a firm block of 50 MW. Above what price should the offer be refused, and how does the break-even price depend on the block size?
Answer
Buying 50 MW lets own generation fall to 450 MW, costing 4767.80 instead of 5235.76 — a saving of 467.96. The break-even price is \(467.96/50 = \) Rs 9.3592/kWh. For a 25 MW block it is 9.5584 and for 100 MW it is 9.0691. The break-even price falls as the block grows, and every one of them is below \(\lambda = 9.7391\): \(\lambda\) prices the next megawatt, not an average over a finite block, so using \(\lambda\) to value a large block overstates the benefit.
8. Unit 3's fuel price rises 15%. Re-dispatch 500 MW and find how much of the extra cost re-dispatching recovers.
Answer
Scale \(a_3,b_3,c_3\) by 1.15. New solution: \(\lambda = \) 10.6446, \(P = 71.49 / 300 / 128.51\), cost 5475.33 — up 239.57 on the base 5235.76. Holding the old dispatch would have cost 5497.37, so re-dispatching recovers only 22.05 thousand Rs/h, about 9% of the increase. Unit 3 backs off 30 MW and unit 1 picks it up; unit 2 stays pinned at its maximum throughout.
9. At what demands is it worth committing all three units rather than only units 2 and 3? Compare running costs at 200, 300, 400 and 500 MW.
Answer
| \(P_D\) (MW) | U2+U3 | All three | Penalty |
|---|---|---|---|
| 200 | 2317.0 | 2739.8 | 422.8 |
| 300 | 3107.2 | 3494.8 | 387.6 |
| 400 | 3964.8 | 4328.9 | 364.1 |
| 500 | 4925.0 | 5235.8 | 310.8 |
Never, on running cost alone — unit 1 is dearer at every demand it is not needed for, and the penalty is essentially its no-load cost of 350 plus the distortion of forcing 40 MW onto it. Units 2 and 3 together cover up to 500 MW, so unit 1 is required only above that. The penalty shrinks with load, which is why the break-even down time against a start-up cost matters more than any single snapshot.
10. Two units are offered as blocks: A as 60 MW at 6.0, 60 MW at 7.0 and 60 MW at 8.5 Rs/kWh; B as 100 MW at 6.5 and 100 MW at 7.8. Dispatch 280 MW and identify the marginal price.
Answer
Merit order: A1 (6.0), B1 (6.5), A2 (7.0), B2 (7.8), A3 (8.5). Filling in order: A1 = 60, B1 = 100, A2 = 60, then 60 of B2's 100. So \(P_A = \) 120 MW, \(P_B = \) 160 MW, cost 1898.0 thousand Rs/h. The marginal block is B2, so \(\lambda = \) Rs 7.80/kWh. Only one block is ever partly loaded at the optimum — the discrete analogue of "only the free units sit at \(\lambda\)".
11. What is \(\lambda\) at the two ends of the worked station's range, 180 MW and 620 MW?
Answer
It is not defined at either end. At 180 MW every unit sits at its minimum, so the equality constraint is met without any unit being free; \(\lambda\) can be anything up to 6.92 (the lowest incremental cost, unit 2's at its minimum) and the Kuhn–Tucker conditions still hold. At 620 MW all three are at maximum and \(\lambda\) is anything above 12.10. Physically: at the floor no unit can be backed off, so an extra megawatt of demand is free of re-dispatch cost until 180 MW is exceeded; at the ceiling no unit can be pushed harder, so the marginal price is set by whatever the demand must be cut with — a scarcity price, not a fuel cost.
12. A day's load duration curve is approximated by five blocks: 250 MW for 6 h, 320 for 5 h, 400 for 5 h, 480 for 5 h and 560 for 3 h. Find the daily energy, load factor, fuel cost and average cost, with all three units committed.
Answer
| \(P_D\) | h | \(\lambda\) | \(P_1/P_2/P_3\) | C | Block cost |
|---|---|---|---|---|---|
| 250 | 6 | 7.5500 | 40.0 / 150.0 / 60.0 | 3106.05 | 18 636.3 |
| 320 | 5 | 8.1728 | 40.0 / 219.2 / 60.8 | 3656.59 | 18 283.0 |
| 400 | 5 | 8.6336 | 40.0 / 270.4 / 89.6 | 4328.85 | 21 644.2 |
| 480 | 5 | 9.4400 | 40.0 / 300.0 / 140.0 | 5043.80 | 25 219.0 |
| 560 | 3 | 10.3652 | 62.2 / 300.0 / 197.8 | 5838.89 | 17 516.7 |
Energy \(= \) 9180 MWh; load factor \(= 9180/(24\times560) = \) 0.6830; daily cost 101 299 thousand Rs = Rs 10.13 crore; average cost Rs 11.035/kWh. The average is far above every \(\lambda\) in the table because the fixed terms \(a_i = 350+500+400 = 1250\) thousand Rs/h are spread over the energy — Rs 3.27/kWh of the average is no-load cost alone.
Challenge Problems
Three extended investigations: the complete \(\lambda(P_D)\) characteristic of a station and what its integral means, a daily unit-commitment problem in which the cheapest running cost is not the cheapest schedule, and a market study of what dispatch prices actually pay for.
For the three-unit station, construct \(\lambda(P_D)\) in closed form over the whole range 180–620 MW. Identify every breakpoint, give the slope in each segment, prove that \(C(P_D)\) is convex, and verify numerically that \(\int\lambda\,dP_D\) reproduces the cost.
Step 1 — where the breakpoints must be. A breakpoint occurs whenever a unit reaches a limit, and a unit reaches a limit at one specific value of \(\lambda\), namely its own incremental cost there:
| Event | \(\lambda\) (Rs/kWh) | \(P_D\) (MW) |
|---|---|---|
| U2 leaves its minimum | 6.92 | 180.00 |
| U3 leaves its minimum | 8.16 | 317.78 |
| U2 reaches its maximum | 8.90 | 446.25 |
| U1 leaves its minimum | 9.70 | 496.25 |
| U3 reaches its maximum | 10.40 | 563.33 |
| U1 reaches its maximum | 12.10 | 620.00 |
The \(\lambda\) column is fixed by the cost curves alone, before any dispatch is computed — this is what makes the whole characteristic constructible by hand. The \(P_D\) column follows by evaluating \(P_D(\lambda) = \sum_i \mathrm{clip}\!\left[(\lambda-b_i)/2c_i\right]\) at each of those six values. Notice the six events fall in strictly increasing order of \(\lambda\), so the segments never overlap.
Step 2 — the slope in each segment. Inside a segment the set of free units \(\mathcal{F}\) does not change, and each free unit contributes \(dP_i/d\lambda = 1/2c_i\):
| \(P_D\) range (MW) | Free units | \(\sum 1/2c_i\) | \(d\lambda/dP_D\) |
|---|---|---|---|
| 180.00 – 317.78 | U2 | 111.111 | 0.009000 |
| 317.78 – 446.25 | U2, U3 | 173.611 | 0.005760 |
| 446.25 – 496.25 | U3 | 62.500 | 0.016000 |
| 496.25 – 563.33 | U1, U3 | 95.833 | 0.010435 |
| 563.33 – 620.00 | U1 | 33.333 | 0.030000 |
The slope is not monotonic — it falls from 0.0090 to 0.0058 when U3 joins, then jumps to 0.0160 when U2 saturates. Adding a free unit always flattens the characteristic (one more term in the sum); losing one always steepens it. The station is at its most price-elastic between 318 and 446 MW, where two units are free at once.
Step 3 — \(\lambda(P_D)\) assembled. Each segment is a straight line through its left-hand breakpoint:
Spot check at \(P_D = 500\): \(\lambda = 9.70+0.010435(3.75) = 9.7391\) — exactly the value found by iteration in Problem 10. The whole dispatch of the station, for any demand, is now available without solving anything: read \(\lambda\) off this formula and clip each unit.
Step 4 — convexity. Two facts do it. First, \(\lambda(P_D)\) is continuous: at each breakpoint the unit that enters or leaves does so at its limit, contributing nothing discontinuous to \(P_D\). Second, every slope is positive. Hence
The first equality is the envelope theorem — the Lagrange multiplier of Problem 6 is the derivative of the optimal cost. Convexity is what guarantees that lambda iteration cannot land on a local minimum and that the marginal price rises with demand; both properties fail the moment valve points (Problem 17) are admitted, because then \(\lambda(P_D)\) is no longer monotonic.
Step 5 — the integral check. If \(dC/dP_D = \lambda\), then the area under the characteristic must be a cost difference. Integrating the five straight-line pieces from 180 to 500 MW:
Agreement to every figure carried. This is the strongest single check available on a dispatch calculation: it ties together the cost function, the multiplier and the limit handling, and it fails if any of the breakpoints or slopes is wrong. It is also the practical basis for the trapezoidal "production costing" used on load duration curves — integrate \(\lambda\) against the duration curve and the fuel bill falls out.
Step 6 — what the characteristic is used for. Three things, all of them daily practice in a control room:
| Use | What is read off |
|---|---|
| Spot price | \(\lambda(P_D)\) directly |
| Value of an import or a loss reduction | \(\lambda\), for small quantities; \(\Delta C/\Delta P_D\) for blocks |
| Station bid curve in a pool | the whole curve, offered as the station's supply function |
In a competitive pool the station's honest offer is this curve, and the pool's clearing price is the intersection of the summed offer curves with demand — which is the same equal-\(\lambda\) calculation done across owners instead of within one. That equivalence is the theoretical justification for marginal-cost pools.
The station meets a daily load of 200 MW (00–04), 260 (04–08), 420 (08–12), 380 (12–16), 480 (16–20), 560 (20–22) and 300 MW (22–24). Start-up costs are 8000 (U1), 20 000 (U2) and 5000 (U3) thousand Rs. Find the least-cost commitment for a repeating daily cycle, and compare it with three plausible alternatives.
Step 1 — the running-cost table. For each period and each feasible commitment, dispatch economically. Writing the commitment as a three-bit pattern (U1 U2 U3):
| Period | \(P_D\) | 010 | 011 | 110 | 111 |
|---|---|---|---|---|---|
| 00–04 | 200 | 1920.0 | 2317.0 | 2321.2 | 2739.8 |
| 04–08 | 260 | 2416.2 | 2780.8 | 2795.8 | 3182.0 |
| 08–12 | 420 | — | 4144.2 | 4351.0 | 4502.7 |
| 12–16 | 380 | — | 3788.7 | 3891.0 | 4157.3 |
| 16–20 | 480 | — | 4720.2 | — | 5043.8 |
| 20–22 | 560 | — | — | — | 5838.9 |
| 22–24 | 300 | 2765.0 | 3107.2 | 3130.2 | 3494.8 |
A dash means infeasible — the committed set cannot reach the demand within its limits, or cannot come down to it. The 560 MW peak is the binding entry: only 111 can carry it (U2+U3 max out at 500 MW), so unit 1 must run at least during 20–22, and the whole problem reduces to deciding when it is cheaper to keep it synchronised than to restart it.
Step 2 — why greedy fails. Choosing the cheapest column in each row independently gives 010, 010, 011, 011, 011, 111, 010, with a running cost of only 85 165 — the lowest possible. But it starts U3 twice and U1 once per cycle:
Running cost and total cost rank the schedules differently, which is the entire content of the unit-commitment problem. It is not solvable period by period, because the decision in one period changes the cost of the next.
Step 3 — the dynamic-programme solution. Treat the commitment pattern as a state and the transition cost as the start-up charge for units that go from off to on. With the cycle closed (the state at 22–24 must connect back to 00–04):
| Period | \(P_D\) | Commitment | \(P_1/P_2/P_3\) | Cost/h |
|---|---|---|---|---|
| 00–04 | 200 | 110 | 40.0 / 160.0 / off | 2321.2 |
| 04–08 | 260 | 110 | 40.0 / 220.0 / off | 2795.8 |
| 08–12 | 420 | 110 | 120.0 / 300.0 / off | 4351.0 |
| 12–16 | 380 | 110 | 80.0 / 300.0 / off | 3891.0 |
| 16–20 | 480 | 111 | 40.0 / 300.0 / 140.0 | 5043.8 |
| 20–22 | 560 | 111 | 62.2 / 300.0 / 197.8 | 5838.9 |
| 22–24 | 300 | 110 | 40.0 / 260.0 / off | 3130.2 |
The optimum keeps unit 1 running all day and cycles unit 3 — the opposite of what merit order suggests, because unit 1 is the dearer machine. The reason is the start-up charges: U1 costs 8000 to restart and U3 only 5000, so if exactly one unit is to be cycled it should be the cheap-to-start one, whatever its fuel cost.
Step 4 — the alternatives compared. Four candidate schedules, with energy 8680 MWh for the day:
| Schedule | Running | Start-up | Total | Average (Rs/kWh) |
|---|---|---|---|---|
| A — all three on all day | 97 169.8 | 0 | 97 169.8 | 11.1947 |
| B — optimum (DP) | 91 549.4 | 5000 | 96 549.4 | 11.1232 |
| C — U1 started for the evening only | 90 190.1 | 8000 | 98 190.1 | 11.3122 |
| D — greedy least running cost | 85 164.9 | 13 000 | 98 164.9 | 11.3093 |
Read the columns against each other: the running costs rank D < C < B < A and the totals rank B < A < D < C. The order is almost exactly reversed. D beats B on fuel by 6385 and loses to it by 1615 overall; C, the schedule most operators would guess at, is the worst of the four. Doing nothing at all (A) beats two of the three "clever" schedules.
Step 5 — the break-even rule behind it. Shutting a unit down for \(t\) hours saves \(\Delta C\cdot t\) in fuel and costs \(S\) to restart, so it pays only if
The longest window either unit could be off is the 18 hours outside the 16:00–22:00 peak. Over exactly those 18 hours:
Unit 3 clears its break-even with two hours to spare, so cycling it earns \(5620.4-5000 = \) 620.4 — exactly the margin of schedule B over schedule A. Unit 1's break-even of 20.63 hours exceeds the longest trough available, so cycling it loses \(8000-6979.7 = \) 1020.3 — exactly how much schedule C is worse than A. Both comparisons in Step 4 are reproduced by this one ratio. It is also why large coal units run continuously through weekday nights while gas turbines start and stop twice a day: \(t^*\) is small for a machine that is cheap to start, and it is the start-up cost, not the fuel cost, that decides.
Step 6 — what a real commitment adds. Three constraints omitted here would change the answer further:
| Constraint | Effect |
|---|---|
| Minimum up/down times (typically 8–24 h on coal) | Forbids some transitions outright; usually makes schedules flatter |
| Ramp rates (1–3% of rating per minute) | Couples adjacent periods even at fixed commitment |
| Spinning reserve (largest unit, or a % of demand) | Forces extra units on; often the binding reason a unit runs part-loaded |
Add a spinning-reserve requirement of one largest unit here and schedule B becomes infeasible in the peak — 111 at 560 MW leaves only 60 MW of headroom against a largest unit of 300 MW, so a fourth machine, or a contract for reserve, would be required. Dispatch answers how much; commitment answers which; reserve answers what if — and the three are solved together in practice, as a mixed-integer programme over 24 to 168 periods.
Settle the station's output at the marginal price \(\lambda\) for \(P_D = 500\) MW and examine whether each unit covers its costs. Then add a must-take solar profile of 0, 0, 60, 150, 80, 0, 0 MW to the seven periods of Challenge 2 and find the fuel saving, the implied value of the solar energy, and the effect on market revenue.
Step 1 — settlement at the marginal price. At \(P_D = 500\), \(\lambda = 9.73913\) and \(P = 41.30/300/158.70\). Paying every megawatt-hour at \(\lambda\):
| Unit | \(P_i\) | Revenue \(\lambda P_i\) | Cost \(C_i\) | Margin |
|---|---|---|---|---|
| U1 | 41.30 | 402.27 | 726.68 | −324.41 |
| U2 | 300.00 | 2921.74 | 2765.00 | +156.74 |
| U3 | 158.70 | 1545.56 | 1744.08 | −198.53 |
| Station | 500.00 | 4869.57 | 5235.76 | −366.20 |
The station loses 366 thousand Rs/h at its own marginal price. This is not an arithmetic slip — it is structural, and every marginal-cost market has to deal with it.
Step 2 — why, exactly. For a free unit, \(\lambda = b_i+2c_iP_i\), so
The quadratic term earns the unit a rent of \(c_iP_i^2\) — that is what makes marginal cost exceed average variable cost — but the no-load cost \(a_i\) is never recovered from it unless \(c_iP_i^2 > a_i\). Check: \(0.015(41.30)^2-350 = -324.41\) ✓ and \(0.008(158.70)^2-400 = -198.53\) ✓. Unit 2 is the exception, and for a different reason: it is at its limit, so its incremental cost 8.90 is below \(\lambda\) and it earns inframarginal rent \((\lambda-8.90)\times300 = 251.74\) on top — which is why its margin of +156.74 does not equal \(c_2P_2^2-a_2 = -95.00\).
Step 3 — the recovery mechanisms. Real markets close the 366 gap in one of three ways:
| Mechanism | What it pays for |
|---|---|
| Scarcity pricing | \(\lambda\) is allowed far above fuel cost in tight hours; the rent from a few hours covers the year |
| Capacity payments | A separate Rs/MW/yr payment for availability, as in Set 26's plant-mix economics |
| Uplift / make-whole | The pool pays any committed unit the shortfall between its offer cost and its energy revenue |
The choice between them is one of the central design questions in electricity market regulation, and it is not settled anywhere. Note that the no-load cost \(a_i\) is only unrecoverable because the unit was committed — which is precisely why unit commitment (Challenge 2) is priced separately from dispatch.
Step 4 — solar netted against the load. Must-take generation at zero marginal cost is subtracted from the demand before dispatch, so the thermal units see the net load:
| Period | \(P_D\) | Solar | Net | \(\lambda\) before | \(\lambda\) after | \(C\) before | \(C\) after |
|---|---|---|---|---|---|---|---|
| 00–04 | 200 | 0 | 200 | 7.1000 | 7.1000 | 2739.8 | 2739.8 |
| 04–08 | 260 | 0 | 260 | 7.6400 | 7.6400 | 3182.0 | 3182.0 |
| 08–12 | 420 | 60 | 360 | 8.7488 | 8.4032 | 4502.7 | 3988.1 |
| 12–16 | 380 | 150 | 230 | 8.5184 | 7.3700 | 4157.3 | 2956.9 |
| 16–20 | 480 | 80 | 400 | 9.4400 | 8.6336 | 5043.8 | 4328.9 |
| 20–22 | 560 | 0 | 560 | 10.3652 | 10.3652 | 5838.9 | 5838.9 |
| 22–24 | 300 | 0 | 300 | 8.0000 | 8.0000 | 3494.8 | 3494.8 |
Solar energy is \(4(60)+4(150)+4(80) = 1160\) MWh, so the avoided fuel cost is \(9720/1160 = \) Rs 8.379/kWh. That number, not the average cost of Rs 11.19/kWh, is what a solar plant is worth to this system — it displaces the marginal unit, never the average one.
Step 5 — the three effects on the market. Netting the solar changes more than the fuel bill:
| Effect | Before | After |
|---|---|---|
| Daily fuel cost (th.Rs) | 97 170 | 87 450 |
| Average cost (Rs/kWh) | 11.195 | 10.075 |
| Market revenue \(\sum\lambda P_D t\) (th.Rs) | 75 805 | 71 931 |
| Midday \(\lambda\) (12–16) | 8.5184 | 7.3700 |
| Evening peak \(\lambda\) (20–22) | 10.3652 | 10.3652 |
Three things happen at once. (i) The merit-order effect: midday \(\lambda\) falls 13.5%, so solar suppresses the very price that pays for it. (ii) Revenue cannibalisation: market revenue falls 3874, more than the fuel saving is worth to any one generator — thermal margins shrink faster than thermal costs. (iii) The peak is untouched: \(\lambda\) at 20:00–22:00 is unchanged at 10.3652, because there is no sun. Solar displaces energy and buys no capacity, so every megawatt of thermal plant still has to be there — which is exactly the two-part problem Set 26 posed and this chapter has now priced.
Step 6 — the ramp the thermal plant must supply. Look at the net load rather than the gross:
The thermal fleet's evening ramp grows by 83% — the "duck curve". The station's total flexible range is only \(620-180 = 440\) MW, so a 330 MW swing consumes three quarters of it in four hours, at roughly 1.4 MW/min. That is inside a coal plant's ramp rate but not by much, and it is why systems with high midday solar buy flexibility (storage, hydro, gas) rather than more energy. Notice also that the saving is unevenly distributed: unit 2 stays at its maximum in every period, so all of the displacement falls on units 1 and 3, deepening their part-loading and worsening their heat rates — a second-order cost this quadratic model cannot see.
Multiple-Choice Questions
MCQ 1. At the economic dispatch optimum, with no unit at a limit, the units operate at equal:
(a) output (b) average cost (c) incremental cost (d) heat rateShow answer
(c). Only the incremental costs are equalised. Equal outputs, equal average costs and equal heat rates are all different — and generally more expensive — allocations. Problems 4, 5, 6.MCQ 2. The incremental fuel cost of \(C = a+bP+cP^2\) is:
(a) \(a/P+b+cP\) (b) \(b+2cP\) (c) \(b+cP\) (d) \(2a+b\)Show answer
(b). Answer (a) is the average cost, and the factor of 2 that distinguishes them is the single most common slip in the whole chapter. Problem 3.MCQ 3. A unit held at its upper limit at the optimum has an incremental cost that is:
(a) equal to \(\lambda\) (b) greater than \(\lambda\) (c) less than or equal to \(\lambda\) (d) unrelated to \(\lambda\)Show answer
(c). It is pinned at its maximum precisely because it is cheap at the margin — the system would load it further if it could. A unit at its lower limit has the reverse: \(\mathrm{IC}\ge\lambda\). Getting these two inequalities the wrong way round is the classic limit-handling error. Problem 9.MCQ 4. The Lagrange multiplier \(\lambda\) in the dispatch problem has units of:
(a) Rs/h (b) Rs/MWh (c) MW (d) dimensionlessShow answer
(b), the same as an incremental cost — and it is that identity, not a coincidence, that makes \(\lambda\) the system marginal price. Formally \(\lambda = dC^*/dP_D\) by the envelope theorem. Problems 6, 13.MCQ 5. Loading units in merit order of average cost:
(a) always gives the optimum (b) gives the optimum only if all \(c_i\) are equal (c) never gives the optimum (d) gives the optimum only if all \(b_i\) are equalShow answer
(b). If the curvatures are equal, the incremental costs differ from one another by constants and ordering by either criterion gives the same answer. With different curvatures the orderings can even reverse, which is why the counter-example of Problem 4 works. Problems 4, 12.MCQ 6. Lambda iteration converges reliably because \(\sum P_i(\lambda)\) is:
(a) linear in \(\lambda\) (b) monotonically non-decreasing in \(\lambda\) (c) periodic (d) independent of the limitsShow answer
(b). Each \(P_i(\lambda)\) is non-decreasing (it rises with \(\lambda\) and then flattens at a limit), so the sum is too and bisection cannot fail. It is piecewise linear, not linear — the kinks are exactly the limit events. Problems 8, 11.MCQ 7. With \(m\) units free of their limits, \(d\lambda/dP_D\) equals:
(a) \(\sum 2c_i\) (b) \(\left(\sum 1/2c_i\right)^{-1}\) (c) \(2c_{\max}\) (d) \(1/m\)Show answer
(b) — the harmonic-type combination, exactly like resistors in parallel. Each free unit adds a term to the sum, so more free units always means a flatter price characteristic. Challenge 1.MCQ 8. The average cost of generation at the station is:
(a) always equal to \(\lambda\) (b) always less than \(\lambda\) (c) always greater than \(\lambda\) (d) either, depending on the no-load costsShow answer
(d). Revenue at \(\lambda\) minus cost is \(\sum(c_iP_i^2-a_i)\) for the free units: large no-load costs make the average exceed \(\lambda\), heavy loading of steep units makes it fall below. At \(P_D = 500\) the average is 10.47 against \(\lambda = 9.74\). Problem 13, Challenge 3.MCQ 9. When a unit's fuel price rises by 10%, its cost curve changes by:
(a) \(b\) only (b) \(b\) and \(c\) only (c) \(a\), \(b\) and \(c\) all scaled by 1.10 (d) \(a\) onlyShow answer
(c). The heat-rate curve is unchanged; the whole cost curve is the heat curve multiplied by the price, so every coefficient scales. Scaling only \(b\) gives the wrong re-dispatch and the wrong cost. Problem 15.MCQ 10. Valve-point loading effects make the dispatch problem:
(a) linear (b) non-convex (c) unconstrained (d) easier to solveShow answer
(b). The sinusoidal ripple destroys the monotonicity of \(\mathrm{IC}(P)\), so lambda iteration can converge to any of several points and none of them need be the global optimum. This is what motivates the evolutionary and mixed-integer methods used in practice. Problem 17.MCQ 11. The decision of which units to run, as distinct from how to load them, is:
(a) economic dispatch (b) unit commitment (c) load flow (d) state estimationShow answer
(b). Commitment is an integer problem coupled across time by start-up costs and minimum up/down times; dispatch is a continuous problem solved afresh each interval within a commitment. On this station commitment savings are six times the dispatch savings. Problem 18, Challenge 2.MCQ 12. A must-run constraint that forces a unit above its economic output causes \(\lambda\) to:
(a) rise (b) fall (c) stay the same (d) become undefinedShow answer
(b). The forced megawatts displace output from the free units, which back down their incremental cost curves — so the marginal price falls even though the total cost rises. At \(P_D = 500\) with \(P_1\ge80\), \(\lambda\) drops from 9.7391 to 9.1200 while the cost rises 23.44. Problem 19.
Key Formulas
The cost characteristic — from heat input to rupees:
At the point of minimum heat rate, \(\text{IHR} = \text{HR}\) — the general property of the minimum of any ratio. A fuel price change scales \(a\), \(b\) and \(c\) together.
The dispatch problem and its solution:
Closed form and iteration:
\(\sum P_i(\lambda)\) is continuous, piecewise linear and non-decreasing, so bisection always converges; the secant method converges quadratically between kinks.
Sensitivity and price:
A finite block of \(\Delta P\) is worth \(\Delta C/\Delta P\), not \(\lambda\); because \(\lambda\) rises with \(P_D\), using \(\lambda\) for a block always overstates the benefit.
Piecewise-linear and non-convex costs:
The ripple adds \(\pm ef\) to the incremental cost — a small percentage on cost but a large one on slope, which is what breaks convexity and with it the equal-\(\lambda\) argument.
Unit commitment:
Solved by dynamic programming over commitment states, or as a mixed-integer programme. Minimum up/down times, ramp rates and spinning-reserve requirements are additional constraints; the least running cost schedule is routinely not the least total cost schedule.
Common Mistakes
Differentiating \(cP^2\) to \(cP\). The incremental cost is \(b+2cP\), not \(b+cP\). Missing the 2 changes every \(\lambda\), every dispatch and every saving in the chapter — Problem 3.
Dispatching by average cost or by "cheapest unit first". The unit with the lowest average cost is often not the one that should take the extra megawatt. Merit order by average cost is exact only when all the curvatures \(c_i\) are equal — Problems 4, 12.
Getting the limit inequalities backwards. Upper limit means \(\mathrm{IC}\le\lambda\); lower limit means \(\mathrm{IC}\ge\lambda\). Always check the sign after clipping — it is the only thing that confirms the clipped solution is optimal — Problem 9.
Clipping and stopping. Fixing one unit at a limit changes \(\lambda\) for all the others, which can push a second unit onto its limit. The iteration must be repeated until no further limit is violated — Problems 9, 10.
Assuming \(\lambda\) exists. When every unit is at a limit — at the very bottom or very top of the station's range — \(\lambda\) is not determined by the dispatch at all, only bracketed. Practice Problem 11.
Confusing \(\lambda\) with the average cost of generation. They are different numbers with different uses: \(\lambda = 9.7391\) prices the next megawatt-hour; 10.4715 is what the fuel bill divided by the output happens to be — Problem 13.
Valuing a large block at \(\lambda\). \(\lambda\) is the derivative. A 50 MW purchase is worth \(\Delta C/\Delta P = 9.3592\), not 9.7391 — a 4% error, and it grows with the block — Problem 14, Practice 7.
Scaling only \(b\) for a fuel price change. Price multiplies the entire heat curve, so \(a\), \(b\) and \(c\) all scale. Scaling \(b\) alone gives both the wrong re-dispatch and the wrong cost — Problem 15.
Expecting re-dispatch to absorb a fuel price rise. It recovers only a few per cent of it. The dispatch is already near-optimal, so the envelope theorem guarantees the first-order effect of re-optimising is small — Problem 15.
Mixing MW, kWh and the cost units. With \(C\) in thousand Rs/h and \(P\) in MW, \(dC/dP\) comes out directly in Rs/kWh. Change either convention and a factor of 1000 appears — Problems 1, 13.
Treating commitment as a sequence of independent dispatches. Start-up costs couple the periods, and the schedule with the lowest running cost can be the dearest overall — here by 1615 thousand Rs a day — Problem 18, Challenge 2.
Believing marginal-cost settlement pays for the plant. A station paid \(\lambda\) for all its output under-recovers by \(\sum(a_i-c_iP_i^2)\) — 366 thousand Rs/h here. Energy prices pay for fuel; capacity has to be paid for separately — Challenge 3.
This chapter answered the operating question for units at one station: share the load so that every unit not at a limit has the same incremental cost. That single condition produced the dispatch schedule, the marginal price \(\lambda\), the sensitivities to fuel price and demand, and — once start-up costs were admitted — the commitment decision as well. Throughout it, one assumption went unremarked: that a megawatt generated anywhere is a megawatt delivered to the load.
Set 28 removes it. When the units are spread over a network, generation at a remote bus arrives diminished by transmission loss, and the loss itself depends on every generator's output — quadratically, through the \(B\)-coefficients of the loss formula. The equal-incremental-cost rule survives, but each unit's incremental cost is first multiplied by a penalty factor \(L_i = 1/(1-\partial P_L/\partial P_i)\) that charges it for the losses its own output creates. A unit deep in a load centre may then be worth running above its unpenalised economic output, and a remote unit below it, even though nothing about their fuel curves has changed. That is loss-coordinated dispatch, and it is where the load-flow machinery of Part 4 rejoins the economics of Part 6.