Overview
A production-cost (historical back-cast) model of the California ISO market for the full year 2025 at 3-hourly resolution. The fleet is fixed to the historical mix of real, named generating units, and the model dispatches them economically to meet observed demand — answering "given the plants that actually existed, how would the system have been operated, and at what locational prices?"
Carved from the Western Interconnection to California. CAISO imports roughly a quarter of its energy from neighbouring states, which the model represents explicitly as capacity-limited boundary links (calibrated to observed net interchange) — so the in-state fleet isn't forced to self-supply imported energy.
Spatial resolution: 58 county-level zones. Built on the open-source PyPSA-USA toolchain.
How it's built
- Fleet — every operable generating unit from the latest EIA record (EIA-860 2024 final plus EIA-860M 2025 monthlies, so 2025 build-out is included), placed at its true coordinates with named identity, scoped to this market's balancing authority.
- Renewables — wind and solar capacity factors from ERA5 reanalysis (2025 weather), mapped to each bus.
- Demand — hourly EIA-930 / GridEmissions actuals for the market's balancing authority.
- Dispatch — an economic-dispatch LP (coal on a must-run floor; no unit commitment yet) over the full year, fixed transmission, load-shedding priced at value-of-lost-load, solved with MOSEK.
Validation
This page checks the model's output against independent observations — see the tables and charts above:
- Generation by technology — modelled vs CAISO's published fuel mix (gridstatus), per fuel, with daily correlation — the complete observed reference for a battery- and import-rich market (it carries the battery and net-import series the EIA-930 archive lacks).
- Generation mix — each technology's share of total generation, model vs observed.
- CO₂ emissions — annual generation CO₂ vs an EIA-930-derived estimate; a single headline trust number.
- Battery storage — modelled vs observed (gridstatus) discharge.
Renewable generation tracks the observed daily shape well (high day-to-day correlation for wind and solar). With imports now explicitly modelled, gas and CO₂ read realistically (CO₂ within ~17% of observed) rather than the gas over-dispatch an import-free carve produces. The model does, however, under-cycle its battery fleet — the energy-only dispatch's near-flat price curve leaves little arbitrage spread (the Battery storage row shows this honestly). Wholesale-price validation against ISO day-ahead LMP is deferred to a future calibrated version — the energy-only economic dispatch clears at marginal fuel cost and structurally underprices vs day-ahead LMP (the price metrics are computed and retained in the backend). See Known limitations and the project's validation audit for the full cross-market detail.
Known limitations
This is a research-grade back-cast; treat it as indicative, not a settlement-grade reproduction.
- Fuel-cost vintage, not fleet. The generator fleet is latest-operable and already includes 2025 build-out (via EIA-860M); what is held at 2024 is unit fuel costs and heat rates (PUDL has no 2025 EIA-923 yet). Any capacity commissioned after the EIA data cutoff is not captured, so the newest late-2025 renewables can read slightly low. Refreshes when EIA-860/923 2025 final lands (~Oct 2026).
- Imports modelled; batteries under-cycle. CAISO's ~25% net imports are represented as capacity-limited boundary links calibrated to observed interchange, so gas and CO₂ are realistic. But the cheap, near-constant import price flattens the intraday price curve, so the model barely cycles its ~15 GW battery fleet versus the ~250–300 cycles/yr of reality (visible in the Battery storage row). Both stem from the same energy-only price formation; a future version with finer temporal resolution and scarcity pricing addresses it.
- Wholesale prices are not yet validated on the page. The energy-only merit-order LP clears at marginal generation cost (≈ gas cost) and omits scarcity/reserve pricing, time-varying fuel, and fine-grained congestion, so modelled prices sit well below ISO day-ahead LMP. Price validation is deferred to a future calibrated version; the metrics are computed and retained in the backend.
Data & attribution
EIA-860 / EIA-923 / EIA-930 (US Energy Information Administration, public domain), ERA5 reanalysis (Copernicus / ECMWF), renewable profiles via NREL GODEEEP, network and methodology from PyPSA-USA (MIT), solved with MOSEK.
Downloads
- Solved network (
.nc) — the full PyPSA network with dispatch and prices (free, sign-in). - Convexity database (
.db) — re-solvable model with named units pinned at their sites (licence-gated).