The dispatch model is a single-asset BESS optimization that maximizes revenue by solving a MILP for the battery’s charge/discharge schedule against day-ahead energy prices, subject to a reserve-margin headroom constraint. Unlike the production cost model (system-wide cost minimization), the dispatch model optimizes from the perspective of one asset owner.
The methodology is shared across the Eastern Interconnection. The points below apply to all three regions, with region-specific revenue streams documented in the dropdowns that follow.
Energy arbitrage is the only stream inside the MILP. The solver maximizes the spread between discharge hours (sell high) and charge hours (buy low) across the region’s day-ahead market, subject to the battery’s physical constraints (SoC evolution, power limits, cycling, ramping).
Perfect foresight over the DAM horizon. The solver has perfect foresight over the day-ahead price horizon (daily batches), representing an upper bound on achievable revenue. Simulated energy revenue is then scaled toward realized performance through a calibration factor, described under Revenue calibration below.
Ancillary services are valued post-solve, not co-optimized. The dispatch holds reserve-margin headroom for the modeled AS products, and their revenue is applied after the MILP is solved using post-processed AS prices. AS is never co-optimized inside the MILP. Prices are calculated in a post-processing step from historical clearing prices, with a saturation effect that depresses per-asset value as the storage fleet grows. The trade-off: reserve-margin headroom held for AS reduces the MW available for energy arbitrage, while AS capacity earns a guaranteed payment ($/MW/hour) valued post-solve at the predicted clearing prices.
Capacity revenue is a post-solve calculation. Capacity payments do not affect the dispatch schedule. A battery’s accredited capacity is multiplied by the relevant clearing price for its zone or locality.
Revenue calibration
The perfect-foresight optimization sets an upper bound on what a battery could earn, so simulated energy arbitrage revenue is multiplied by a flat calibration factor before it is reported. The factor can be read as a “percent of perfect”: it bridges three residual gaps between idealized dispatch and what a real BESS achieves.
- Foresight gap: the solver optimizes against the full day-ahead price path, which a real trader does not know with certainty at gate closure.
- Availability gap: real assets are not available 100% of the time. Outages, maintenance windows, prequalification re-tests, and other downtime reduce the hours in which a battery can earn.
- Execution gap: bid latency, partial market access, operator strategy variation, and residual trading frictions sit outside the optimization.
NYISO, MISO, and PJM each apply a factor of 0.80, scaling simulated energy revenue to 80% of the perfect-foresight result. The factor applies to energy arbitrage only. Ancillary service, capacity, and (for NYISO) Indexed Storage Credit revenues are not scaled, because they settle at known cleared prices rather than being outputs of the optimization. The factor is applied in both forecast and backtest modes.
The 0.80 value is anchored to observed fleet capture in Great Britain, where asset-level disclosures allow a direct comparison between perfect-foresight modeled revenue (from the same dispatch model run on GB historical prices) and realized asset revenue. It is applied as a single scalar rather than a market-by-market calibration, to preserve the internal revenue ratios produced by the optimization. The value is an interim anchor pending region-specific observed-versus-modeled benchmark datasets.
NYISO
Revenue streams
| Stream | Method | Frequency | Source |
|---|---|---|---|
| Energy arbitrage | MILP optimization | Hourly | DAM prices from PCM |
| Ancillary services | Applied post-solve | Hourly | AS prices from post-processing |
| Capacity market | Post-solve calculation | Monthly | ICAP demand curve clearing |
| ISC contract | Post-solve calculation | Monthly | Indexed to REAP + RCP |
The four revenue streams above are summarized in the chart below.
Ancillary services
Four NYISO products are modeled. The product parameters are listed in the table below.
| Product | Direction | Max Call Duration | SOC Headroom | Symmetric |
|---|---|---|---|---|
| 10-min spinning | Discharge only | 30 min | SoC >= MinSoC + (MW x 0.5h) | No |
| 10-min non-sync | Discharge only | 30 min | SoC >= MinSoC + (MW x 0.5h) | No |
| 30-min operating | Discharge only | 1 hour | SoC >= MinSoC + (MW x 1.0h) | No |
| NYCA regulation | Both (symmetric) | ~36 sec | Minimal | Yes |
NYISO-specific rules modeled:
- 10-min spinning and 10-min non-sync are mutually exclusive: a battery offers into one or the other each hour, not both
- Regulation is symmetric: must reserve equal MW for up (discharge) and down (charge). NYISO pays a single capacity price regardless of direction.
- SOC headroom: must hold enough stored energy to deliver at full reserved power for the product’s maximum call duration
- Acceptance rate saturation: empirical cap on per-asset participation for each product
The per-product AS revenue is broken out in the chart below.
Capacity market payments
ICAP demand curve
NYISO clears monthly capacity prices for four nested localities via a downward-sloping demand curve, as set out below.
| Locality | Zones | Description |
|---|---|---|
| NYCA | All 11 | Statewide: every resource participates |
| G-J Locality | G, H, I, J | Downstate: transmission-constrained premium |
| NYC | J | Most constrained: highest prices |
| Long Island | K | Island: limited interconnection |
CAFs
Each BESS earns a fraction of nameplate MW as UCAP credit, based on duration, locality, year, and scenario (base/low/high). CAFs decline as storage penetration grows: see Capacity Expansion Model for the full table.
Monthly revenue = clearing price ($/kW-mo) x CAF x 1,000
The relationship between CAF and duration is shown below.
See Capacity Prices for CAF tables and demand curve parameters.
Indexed Storage Credit (ISC)
The ISC is NYISO’s 15-year availability-based subsidy for battery storage, awarded through competitive solicitation. Three tenders are planned leading up to 2030, targeting ~1,000 MW per tender.
The ISC is an indexed contract: payments adjust monthly based on what the battery “should” have earned. When market revenues are low, the ISC tops up income. When revenues are high, the developer pays back part of the windfall.
Contract mechanics
Monthly payment = (Strike Price - Reference Price) x MW x Duration x Days
The components of the payment formula are defined below.
| Component | Formula | Source |
|---|---|---|
| Strike price | Defaults to Gross CONE x 1,000 / (Duration x 365 x Availability); user-configurable to reflect a specific tender outcome or sensitivity | DCR Table 42, by locality and duration |
| REAP | Avg(top-X - bottom-X / 0.85) daily, X = min(duration, 8) | DAM prices |
| RCP | UCAP price x CAF x 1,000 / (Duration x Days) | Capacity auction |
| Reference price | REAP + RCP | |
| Clawback cap | Monthly payment cannot exceed strike x operational MWh |
Strike price escalation
The Gross CONE methodology escalates annually from the 2025-2026 base using a weighted composite (DCR Table 60), so the default strike price varies depending on when a project becomes operational. The composite weights are set out below.
| Component | Weight |
|---|---|
| Construction labor | 40% |
| Storage batteries | 35% |
| Materials | 15% |
| GDP deflator | 10% |
The waterfall below decomposes the resulting ISC revenue.
The ISC contract mechanics and escalation methodology are defined in the following sources.
| Input | Source | Link |
|---|---|---|
| Gross CONE by locality/duration | NYISO DCR Table 42 | NYISO DCR |
| Escalation rate weights | NYISO DCR Table 60 | NYISO DCR |
| ISC formula definitions | NYSERDA ISC RFP | NYSERDA ISC RFP |
Model integration
| Input | Source | Format |
|---|---|---|
| Energy prices | PCM zonal DAM LMPs | Parquet (S3) |
| AS prices | PCM ML predictions | Parquet (S3) |
| Capacity prices | PCM ICAP demand curve | Parquet (S3) |
| CAFs | NYISO iCAF Set 1 | CSV (S3) |
| Gross CONE | NYISO DCR Table 42 | CSV (S3) |
| Escalation rates | NYISO DCR Table 60 | CSV (S3) |
Assumptions and caveats
- No real-time market: all settlement at DAM prices. RT price volatility not captured.
- AS acceptance rates are empirical averages: actual call patterns vary with system conditions.
- ISC terms based on 2025-2029 DCR: will change in future reset cycles.
- Capacity prices are endogenous PCM outputs, not historical: reflect the model’s supply-demand view.
- Duration capping: capacity and ISC calculations clamp duration to 8h max, round down to nearest supported (2, 4, 6, 8).
Data sources
| Source | Description | Link |
|---|---|---|
| NYISO DCR | Demand curve parameters, Gross CONE, escalation rates | NYISO DCR |
| NYISO ICAPWG | Capacity Accreditation Factors | NYISO ICAPWG |
| NYISO ICAP | UCAP auction results | NYISO ICAP |
| NYISO OASIS | Historical ancillary service prices (inputs to the AS post-processing) | NYISO OASIS |
| NYISO Manual 2 | Ancillary service product definitions | NYISO Manual 2 |
MISO
MISO has no storage subsidy comparable to NYISO’s Indexed Storage Credit, so revenue comes from energy, ancillary services, and the seasonal capacity auction.
Revenue streams
| Stream | Method | Frequency | Source |
|---|---|---|---|
| Energy arbitrage | MILP optimization | Hourly | DAM prices from PCM |
| Ancillary services | Applied post-solve | Hourly | AS prices from post-processing |
| Capacity market | Post-solve calculation | Seasonal | MISO PRA clearing |
These three streams are broken out in the chart below.
Ancillary services
MISO’s market co-optimizes five reserve products with energy (regulation, spinning reserve, supplemental reserve, short-term reserve, and ramp capability), but regulation is the only one that meaningfully pays batteries. The model represents the three priced reserves, across MISO’s reserve zones:
- Regulation
- Spinning reserve
- Supplemental reserve
Short-term reserve and ramp capability are not currently modeled.
Capacity market payments
A battery’s accredited capacity (see Capacity Prices) is multiplied by the seasonal PRA clearing price for its zone.
Assumptions and caveats
- Only regulation, spinning, and supplemental reserves are modeled among MISO’s ancillary products.
Data sources
| Source | Description |
|---|---|
| MISO ASM market reports | Day-ahead ancillary service clearing prices (training data) |
| MISO PRA reports | Seasonal capacity clearing prices |
PJM
PJM has no storage subsidy comparable to NYISO’s Indexed Storage Credit, so revenue comes from energy, ancillary services, and the forward RPM capacity auction.
Revenue streams
| Stream | Method | Frequency | Source |
|---|---|---|---|
| Energy arbitrage | MILP optimization | Hourly | DAM prices from PCM |
| Ancillary services | Applied post-solve | Hourly | AS prices from post-processing |
| Capacity market | Post-solve calculation | Forward (annual) | RPM clearing |
The chart below shows how these streams combine.
Ancillary services
The model includes the PJM products that carry meaningful value for storage (regulation and synchronized/primary reserve). PJM’s day-ahead scheduling reserve has historically cleared near zero and is excluded.
Capacity market payments
A battery’s ELCC-accredited capacity (see Capacity Prices) is multiplied by the forward RPM clearing price for its LDA.
Assumptions and caveats
- Among PJM’s ancillary products, only regulation and synchronized/primary reserve are modeled.
Data sources
| Source | Description |
|---|---|
| PJM day-ahead AS results | Regulation and reserve clearing prices (training data) |
| PJM BRA results | Forward capacity clearing prices |
Data sources
The energy, ancillary service, and capacity prices that drive the dispatch are produced by the production cost and capacity expansion models, then consumed by the dispatch as inputs. Each region’s specific market data sources are listed inside its dropdown above.
| Source | Description |
|---|---|
| PCM zonal DAM LMPs | Day-ahead energy prices that the MILP optimizes against |
| AS post-processing | Predicted ancillary service clearing prices applied post-solve |
| Capacity model outputs | Accreditation factors and clearing prices for post-solve capacity revenue |