Model coverage and replay accuracy
Power Dispatch Studio is a three-zone economic dispatch model for the Philippine Wholesale Electricity Spot Market (WESM). This page lists the calculations it performs, its replay results against published prices, the available analyst workflows, and its limits.
License and inputs
The code uses the MIT license. Calculated data uses CC BY 4.0. Model inputs come from public records or are labeled assumptions.
Browser and Python calculation
Both interfaces use HiGHS and build the same linear program. A parity test checks the model text and reference results.
Replay results
Recorded days are compared with published prices. Correlation, average error, bias, and high-price-hour agreement are reported below.
Model coverage
| Capability | Coverage | Implementation |
|---|---|---|
| Economic dispatch, hourly | Yes | A linear program over three zones and 24 hours, priced from the balance duals |
| Transfer limits between zones | Yes | Two high-voltage direct-current links, with an hourly limit and a wheeling cost |
| Storage | Yes | State of charge with a round-trip efficiency, and a free terminal state each day |
| Reserve capacity | Partly | The hourly replay holds the published reserve requirement out of the energy stack. Published reserve prices and a separate offer replay are shown; reserve prices are not co-optimized with energy. |
| Hydro energy budget | Yes | A daily MWh limit per zone, taken from the recorded day |
| Shortfall penalty | Yes | Unserved load uses the published ₱32/kWh offer cap. This is a numerical penalty, not an estimate of the value of lost load. |
| Loss of load probability | Yes | Random forced outages, sampled, reported per zone |
| Capacity expansion | No | The long-term view reports DOE demand paths and project lists. It does not choose a least-cost build. |
| Multi-period chronology | Partly | 168 hours as one program in one view. Everything else solves one day at a time |
| Unit commitment | No | An experimental fuel-block minimum-output test is documented on the method page. It is not per-unit commitment and is not a Studio capability. |
| Named units | Partly | Named plants supply capacity and outage inputs. Energy dispatch remains aggregated by fuel and grid. |
| Security-constrained nodal dispatch | No | A reduced loss surface over mapped routes, checked per zone. It is not a network model |
| Contracts and settlement | Partly | A contract book marks against modeled spot, per contract and net. No capacity fee, no wheeling charge, no tax, no credit terms |
| Stochastic multi-stage | No | Repeated draws over one stage, never a scenario tree |
The model dispatches fuel blocks rather than named units. Unit commitment therefore cannot be applied per plant. The method page documents the separate fuel-block experiment and its limits.
Replay accuracy
Every recorded day replays two ways. The cost model prices a competitive fuel-cost floor. The offer replay clears the market operator's own published bid book. Neither reproduces every price, and the table states the gap that remains. Recorded prices never set the model inputs.
| Grid | Target | Correlation | Average error | Bias | High-hour hit |
|---|---|---|---|---|---|
| Luzon | LWAP | 0.73 | P2.93 | +P1.91 | 59% |
| Visayas | LWAP | 0.75 | P4.77 | -P1.25 | 55% |
| Mindanao | LWAP | 0.81 | P4.20 | -P1.73 | 75% |
| Luzon | MCP | 0.75 | P2.94 | +P2.24 | 67% |
| Visayas | MCP | 0.77 | P5.53 | -P4.35 | 52% |
| Mindanao | MCP | 0.84 | P3.74 | -P2.88 | 61% |
LWAP is the load-weighted average price and MCP is the market clearing price, both published by the market operator. High-hour hit is the share of the dearest recorded hours the model also calls dear. The nightly build rewrites this table from the current archive, so it cannot freeze behind the data.
Analysis views by task
| Analyst task | Studio view |
|---|---|
| Short-term schedule, one day | Hourly market replay |
| Supply curve and price-setting fuel | Lowest-cost-first dispatch |
| N-1 contingency | Power-shortfall risk |
| Loss of load probability | Power-shortfall risk |
| PASA, adequacy outlook | Supply after scheduled outages |
| Price distribution and duration | Price range across recorded days |
| Capture price by technology | Average price earned by each technology |
| Interface and transfer limits | Power between island grids |
| Recorded connection-point differences | Recorded connection-point price differences |
| Reserve prices and capacity holdback | Reserve market |
| Demand path and project lists | Annual demand and supply outlook |
| Market power and HHI | Supplier concentration |
| Contract position, hedge cover | Contract position |
| Backcast, model validation | Replay accuracy |
| Input database | Assumptions and model inputs |
| Solution file, report | Saved runs, which writes an HTML report and an hourly CSV |
Ways to run the project
- Map. Review the archive by location.
- Studio. Follow an analyst workflow, search the full view library, and share a scenario link.
- Python. Install
power-dispatch-studiofor notebooks and scripts. The package includes a dated archive snapshot for offline use. - Repository. Run
make datato rebuild calculated data from the committed source files.
Use other system data
The engine reads dispatch.json and profiles.json
from a supplied directory. Those files can describe a different power system.
pip install power-dispatch-studio
power-dispatch run --data-dir ./mysystem --date 2030-01-01
The data contract lists every key those two files must carry, and carries a 30-line system that runs. A test builds that system, solves it, and fails when the document stops matching the engine.
Model limits
The following calculations are outside this model's scope.
- No per-unit dispatch or commitment, start cost, or minimum run time.
- No full network model. Transmission geometry comes from OpenStreetMap, and the ratings are class defaults.
- No multi-year chronology. A year of days is 365 separate 24-hour programs, with storage reset at each midnight.
- Three zones, so nothing below the island grid except the reduced loss surface.
The method page explains these limits and identifies the source records, calculations, and assumptions used elsewhere.
Code uses the MIT license. Calculated data products use CC BY 4.0. Source records stay the property of their publishers.