Expand description
Distributed slack: sharing the system imbalance across generators instead of dumping all of it on one bus.
A single slack bus absorbs every megawatt the rest of the schedule does not account for, transmission losses included. On a real network that is a few hundred megawatts appearing at one point, and every branch flow around it is distorted by the difference. Distributing the imbalance by participation weight is what the reference tools all do instead.
§Why it converges, and why not in one pass
Write the slack’s excess over its own schedule as \(\Delta\), and let \(\alpha_s\) be the slack’s own share. Distributing adds \((1-\alpha_s)\Delta\) to the other participants’ schedules, so the next solve asks the slack for that much less while its own schedule has risen by \(\alpha_s\Delta\). Those cancel exactly, which is what makes this affordable as an outer loop.
What is left over is the change in transmission losses caused by the
redistributed flows, and that does not vanish — it shrinks. Convergence is
therefore linear at roughly the fractional loss sensitivity, a few per cent
per pass. Measured on pglib at tolerance = 1e-8: case14_ieee,
case30_ieee and case118_ieee each take seven passes, moving 2.3,
2.4 and 16.5 per-unit off their slacks respectively.
§The schedule is the slack’s own p_spec
Ordinary power flow ignores that field for a slack bus — the slack’s output is an answer, not an input — so it is free to carry the schedule here. Worth knowing that a document which never needed it may leave it at zero, in which case the slack is treated as scheduled for nothing and its entire output is redistributed.
Structs§
- Distributed
Slack - Moves the slack’s deviation from its own schedule onto the participating generators, by normalized weight, until the deviation is inside tolerance.
- Slack
Distribution - Who participates in picking up the imbalance, and by how much.
- Slack
Distribution Report - What
DistributedSlackdid.