With the fixture now solved under DCPPowerModel; use_slacks = true (#4 / PR #9), the results store carries PSI's system balance slack variables:
SystemBalanceSlackUp — fills generation shortfall: this is unserved energy / load shed
SystemBalanceSlackDown — absorbs surplus; expected to stay ~zero in practice
Proposed work:
- Expose slack-up as an unserved-energy dataset through the Scenario API (and decide its display-group treatment — e.g. an 'Unserved Energy' technology in dispatch stacks, conventionally rendered as a red band at the top).
- Add a stressed fixture variant to actually exercise it — the standard RTS week solves with ~zero slack, so UE tests need a scenario that is genuinely short (e.g. a
LOAD_SCALE env knob in generate.jl, or an outage week). Note any generate.jl change rotates the fixture cache key: bundle it with a deliberate refresh + baseline regen per the tests.yml procedure.
- Regression-test the sign/direction convention: shortage shows up as positive slack-up, never as silently-clipped load.
This also feeds the units design (#8): unserved energy is exactly the kind of cross-tool comparison quantity (MWh of shed load) where unit and sign conventions differ between tools and must be normalized at the parser boundary.
With the fixture now solved under
DCPPowerModel; use_slacks = true(#4 / PR #9), the results store carries PSI's system balance slack variables:SystemBalanceSlackUp— fills generation shortfall: this is unserved energy / load shedSystemBalanceSlackDown— absorbs surplus; expected to stay ~zero in practiceProposed work:
LOAD_SCALEenv knob in generate.jl, or an outage week). Note any generate.jl change rotates the fixture cache key: bundle it with a deliberate refresh + baseline regen per the tests.yml procedure.This also feeds the units design (#8): unserved energy is exactly the kind of cross-tool comparison quantity (MWh of shed load) where unit and sign conventions differ between tools and must be normalized at the parser boundary.