What Dispatch actually does in production
// LANE-2 · the joint problemFATHOM Dispatch is where the money is made and lost. The lane formulates the operator's problem as a rolling-horizon mixed-integer stochastic programme over a 4-hour to 168-hour horizon, re-solved at the customer-chosen cadence — typically every five minutes, sometimes faster on event triggers. The objective is portfolio P&L net of asset-degradation cost. The constraints encode the physics, the contracts, and the network: per-asset ramp and energy limits, per-cell cycle-life budgets, per-feeder network capacity envelopes, per-product contracted obligations, and per-portfolio reserve commitments.
The decision variables are continuous power set-points per asset per settlement period, plus binary commitment for products with on/off discontinuities. The output is a set-point trajectory, a probability of constraint binding at each percentile of the forecast distribution, and a structured rationale that explains why a particular set-point was chosen — not just what it is. That rationale is the thing that survives the post-trade review with the trading desk and the post-incident review with the regulator.
The lane is co-optimisation in the literal sense. We do not run wholesale first, then run DC-L on the residual, then bolt capacity-market obligations on top. We solve all of them jointly, which means the optimiser can choose to give up a wholesale trade because the cycle it would consume is more valuable held as headroom for a likely frequency event two hours later. This is the single biggest revenue-uplift our customers see versus their incumbent stacks.
How it stays fast
// warm-start policy · recourseThe mathematical formulation alone does not get you a P99 of 1.2 seconds. What does is a warm-start policy network: we trained a graph-attention model on five years of historically solved instances; given the current portfolio state, market context and forecast bands, it emits an initial integer solution in under twenty milliseconds. The MIP solver — HiGHS by default, Gurobi or COPT under customer licence — then verifies and tightens, usually in two or three branch-and-bound iterations rather than thousands. Without the warm-start the same instance solves in 45–80 seconds on the same hardware; we know because we still measure it nightly as a regression test.
Recourse — what the lane does when reality deviates from the plan — is handled by a five-minute re-optimisation and an event trigger. The trigger fires on three classes of event: a forecast-band excursion outside the planning envelope, an asset health excursion from LANE-3, or a market signal arriving outside the scheduled cadence (a fast reserve activation, a BM acceptance, a curtailment instruction). When it fires, the lane resolves against the new state in under two seconds and emits a corrected set-point. The customer's EMS or trading desk gets the corrected set-point on the same channel as the original — there is no separate "emergency" interface to learn.
The solver and the warm-start net run on the same node. Inference acceleration is GPU-optional; on CPU-only edge boxes we ship a quantised policy net that gives up roughly 8% of the warm-start quality in exchange for being able to run inside a substation rack with no accelerator.
DISP · ENGINE
- FORMULATION
- rolling-horizon MISP
- HORIZON
- 4 h to 168 h
- CADENCE
- 5 min · event-triggered
- SOLVERS
- HiGHS · Gurobi · COPT
- WARM-START
- GAT policy · < 20 ms
- P99 SOLVE
- 1.18 s @ 200 MW
- RECOURSE
- 5-min · event-trig < 2 s
Stacked revenue, conflict resolution
// what makes the +14.2% realEvery battery vendor promises stacked revenue. Most operators leave 25–40% on the table because the naive stacking strategy — wholesale first, then frequency response on whatever capacity is left over, then capacity market on top — does not survive contact with reality. Frequency-response commitments constrain the state-of-charge envelope; capacity-market obligations constrain the binary "available" state; wholesale opportunities are stochastic and time-correlated with the very events that move the frequency response market. The four stacks fight, and the operator who does not solve them jointly is leaving 14.2% of revenue on the table on average across our fleet.
FATHOM Dispatch's conflict-resolution rules are explicit and operator-controllable: capacity obligations are hard (we will not breach them); frequency-response commitments are soft-hard (we will not breach without operator approval but the lane can recommend a buy-out); wholesale is soft (we will give it up if the joint value is lower); ancillary services like reactive support sit between, with per-portfolio rules. The operator can override any layer through the structured intervention API, and every override lands in the same audit ledger as the optimiser's own decisions.
Across eight live UK assets we measure a mean revenue uplift of 14.2% versus a strong rules-based baseline, sustained over twelve months. The figure is calibrated against a control window (months where the lane was deliberately switched off for one asset at a time) and against a counterfactual model that replays the period with each asset's incumbent stack — both methods give numbers within 0.6% of each other.
Operationally invisible. Audit-ready by default.
// the dispatch ledgerEvery decision emitted by FATHOM Dispatch lands in an immutable audit ledger before it touches an actuator. The ledger entry carries the solver instance hash, the forecast band the decision was made against, the model and warm-start versions, the binding constraints, the marginal value of every product, and a signed receipt from the EMS confirming actuator state. A regulator who wants to know why a particular set-point was emitted at 14:22:33 can resolve the answer in under three seconds. We built this because the question gets asked, and because "we will get back to you" is not an acceptable answer when the question is from Ofgem.
Operationally the lane is meant to disappear. Hot-standby on two nodes per region; sub-second failover with zero loss of dispatch state; rolling upgrades that interleave with the five-minute solve cycle so the new binary takes over only after it has shadowed the incumbent for three full solves. The default deployment expects two GPUs per region and one CPU-only edge box per substation; smaller deployments collapse the warm-start net and the solver onto the same node and lose roughly 8% of P99 latency in exchange for a smaller bill of materials.
Continue exploring
// the other two lanesFATHOM Forecast — LANE-1. The probabilistic load & generation forecaster whose P5–P95 bands feed this lane. Day-ahead MAPE 1.71% median, intraday 3.39% median. Sub-second emit on the short head.
FATHOM Sentinel — LANE-3. The physics-informed anomaly & condition lane. Median 19-day lead time on transformer winding faults across the UK DNO trial; its asset-health excursions are one of the three event triggers that fire Dispatch recourse.
Ready to evaluate FATHOM Dispatch?
The standard pilot is a single asset on a single market product, four weeks shadow-mode against your incumbent stack, then eight weeks live. We do not charge for the shadow period. We publish a side-by-side P&L attribution at the end of every pilot — including the trades we got wrong.