SPP Network Reduction & CEP v3.0
Master Documentation · 2026-03-19

ISO New England — Capacity Expansion Plan

Master Documentation

ISO New England (PSS/E network area 101, FERC‑714 respondent 76) modeled with the same methodology as SPP: substation‑based network reduction → Ward equivalencing → capacity‑expansion optimization. It was produced by parameterizing the SPP pipeline by region (a registry + --region flag); SPP results are unchanged.


1. Overview

ISO‑NE(SPP, for reference)
Network area(s)10123 areas
FERC‑714 respondent76 (ISO New England Inc.)146
Raw buses in footprint4,90611,610
Reduced buses440 (8.97%, 11.15×)1,304
Reduced lines1,2783,626
Existing fleet22,459 MW
2024 peak load24,854 MW (FERC‑714) → 23,899 MW (PSS/E snapshot)
Reference CEP cost$76.2B NPV$298.5B

Source network: data/source/2024ITPFinal-24S.raw (2024 ITP, REV 35) — ISO‑NE is an area‑101 carve‑out of the same Eastern‑Interconnection case used for SPP.


2. Network reduction (4,906 → 440)

Buses in the same physical substation are grouped and collapsed to one representative. Grouping criteria (identical to SPP):

Each group is represented by its highest‑voltage bus. Degree‑1 radial taps are absorbed; the retained set = subgraph representatives plus degree‑≥3 junctions, all at ≥ 69 kV. Remaining buses are removed by Ward reduction (their injections/flows fold into the retained set as equivalent lines + injections).

Result: 440 retained buses, 1,278 equivalent lines, single connected component.


3. Generator technology (22,459 MW)

ISO‑NE has no PROMOD coverage, so technology is classified by layering three national sources (most authoritative first): EIA bus‑match (Generator_to_PSSE_Bus_Match_Finale.xlsx) → In_PSSEData (PSSE_Gens_Tech_latest) → GenData gen‑sheet heuristic. Result: 0.9% Unknown.

CategoryMWCategoryMW
Combined Cycle9,304Oil GT/ST906
Nuclear (Seabrook, Millstone)3,527Coal ST645
Gas CT2,303Solar (existing)667
Pumped Storage (Northfield, Bear Swamp)1,507Wind (existing)518
Biomass1,125Gas ST666
Hydro1,056Battery21

Gas‑dominant (~55%), with significant nuclear, pumped storage, biomass and oil peakers — characteristic of the ISO‑NE fleet.


4. Load

Hours per Season × Block (sum 8,760):

SeasonB1 nightB2 morningB3 afternoonB4 evening
Winter720630450360
Spring735644460368
Summer736644460367
Fall729637455364
Peak1

Growth scenarios (single‑rate proxies for ISO‑NE studies): low 0.9% (historical), reference 1.7% (2024 CELT), high 3.5% (deep‑decarbonization electrification). Limitation: a single uniform rate cannot reproduce ISO‑NE's faster winter‑peak (heat‑pump) growth or the projected summer→winter peak flip.


5. Renewables

Investible (candidate) capacity — NREL reV supply curves, three access scenarios. Each renewable point is mapped to its nearest of all 4,897 area‑101 buses (full network), then rolled up to the 440 representatives; investible capacity at a bus = Σ point MW. Sites are clipped to the 6 ISO‑NE states (ME/NH/VT/MA/RI/CT).

ScenarioWindSolar
limited97 GW667 GW
reference206 GW1,761 GW
open305 GW4,058 GW

Capacity‑factor shapes — from the NOAA HRRR backcast (2024). A bus's CF shape = its points' shapes weighted by point MW. CF varies by every Season × Block:


6. CEP model

Gurobi LP, DC optimal power flow, planning years 2024 / 2029 / 2034 / 2039 / 2044 / 2049. Carbon‑emission cap enforced (−2 %/yr trajectory); planning reserve margin 15 %; value of lost load $9,000/MWh; load‑shedding slack at every bus.


7. Scenario results

3 load scenarios at reference renewables, plus a high‑load renewable bracket:

ScenarioNPV costWindSolarGas CTCCShed
low (0.9 %)$66.8B13.912.37.10.40
reference (1.7 %)$76.2B16.217.88.44.10
high (3.5 %)$104.6B44.521.919.68.80
high × limited renewables$118.6B56.930.613.19.813 MWh
high × open renewables$103.4B43.420.020.68.70
ref × capped (1 GW/bus)$76.3B16.618.18.43.80
high × capped (1 GW/bus)$105.7B43.227.216.810.00

(Build in GW added 2024→2049.) Findings:

  1. Load is the dominant driver — cost ranges 66.8B → 104.6B across the growth band.
  2. Renewable access is non‑binding at low/reference load (candidate capacity ≫ what is built) but binds at high load: restricting to limited access costs +$14B and forces a costlier, wind‑heavier build with a sliver of shedding. Reference ≈ open.
  3. All cases solve OPTIMAL with ~zero load shedding — the system is resource‑adequate under the carbon cap given real renewable capacity factors.

Formal scenario reduction is unnecessary (small deterministic grid); a screening design (vary the binding dimension, test the other) gave the full picture in 5 solves.


8. Caveats / lower‑fidelity items (vs a production ISO‑NE study)

  1. Candidate renewable capacity is uncapped (raw reV technical potential — reference solar ≈ 1,761 GW ≈ 70× peak). Tested with a per‑bus cap scenario (1 GW/bus, --candcap-renewable-max 1000): cost rises only +0.1B at reference** and **+1.1B (~1%) at high load. So the optimum is robust to a realistic interconnection cap — the absurd‑looking uncapped potential is never heavily exploited (renewables spread across buses naturally). The cap mildly redistributes the high‑load build (less wind concentration, more solar + CC).
  2. ~31 % of pre‑reduction generator capacity rests on the name/sheet heuristic layer (not EIA‑matched).
  3. Single‑rate load growth cannot capture ISO‑NE's winter‑peak electrification or the summer→winter flip; the 2024 load shape is frozen across the horizon.
  4. ISO‑NE is an area‑101 carve‑out of the SPP‑ITP case; no neighbor (NY/HQ/NB) imports are modeled — consistent with SPP's self‑contained methodology.
  5. 194 of 4,897 buses lack OSM coordinates and are dropped from renewable siting.

9. How to reproduce

Environment: /local/alij/anaconda3/bin/python (Python 3.13 + numba + Gurobi).

python generators/build_region_gen_tech.py --region isone        # gen technology
python reduction/run_subgraph_ward.py      --region isone         # reduction → 440 buses
python reduction/load_analysis.py          --region isone         # FERC-714 load
python reduction/build_region_renewables.py --region isone        # siting (3 scenarios)
python reduction/aggregate_capacity_factors.py --region isone --scenario reference \
   --wind-parquet  /research/alij/backcast2024_rev/outputs/wind_output_baseline_2023_12_to_2025_01_UTC_hourly.parquet \
   --solar-parquet /research/alij/backcast2024_rev/outputs/solar_output_power_baseline_20231231_to_20250101_UTC_hourly.parquet \
   --output-dir data/processed/capacity_factors
python reduction/build_cep_full_dataset.py --region isone         # CEP dataset
python reduction/cep_model.py --region isone \
   --input data/processed/cep/In_DatasetISONE.xlsx \
   --output data/processed/cep/results_isone --no-crossover       # solve
python reduction/cep_dashboard.py --region isone \
   --results data/processed/cep/results_isone --input data/processed/cep/In_DatasetISONE.xlsx \
   --output data/processed/cep/isone_dashboard.html               # dashboard

Scenario runs use load_analysis.py --load-growth <pct> and build_cep_full_dataset.py --renewable-scenario <limited|reference|open>.