This document defines a modeling strategy for forecasting and stress-testing U.S. electrical grid demand, capacity, congestion, and market outcomes using an attributed nonlinear graph. The core approach is to represent the grid, market structure, weather, fuel, assets, constraints, scenarios, and hedge exposures as a temporal property graph, then use graph analytics to identify relevant subgraphs, simplify model scope, and guide physics- and market-valid numerical solves.
More precisely, the recommended framing is a temporal attributed property graph over nonlinear physical-market dynamics. The graph itself is not nonlinear in the numerical-solver sense. The physical and market systems represented by the graph are nonlinear, discontinuous, regime-dependent, and often only locally approximable.
This approach enables LLM agentic workflows and MCP Tool Servers with structured queries and supports reproducible experiments with evidence chains.
The graph is not itself the power-flow or market-clearing solver. Instead, it is the system-of-record and dependency layer that organizes data, identifies high-impact regions of the network, supports scenario construction, and persists sensitivities. Numerical models such as DC power flow, AC power flow, OPF, SCED, unit commitment, and reduced-order approximations are then executed over full networks or graph-selected subgraphs.
This allows an agentic workflow to ask structured questions such as: “Assuming all other things are equal, what is the sensitivity of Houston real-time prices to a 10% derate on a north-to-Houston import constraint during evening peak?”
The strategy is built around three linked graphs:
Together, these graphs support the key hedge-fund question:
Where will the grid be short, when, by how much, and how will that scarcity propagate into price, congestion, volatility, basis, reserve scarcity, and tradable hedge exposure?
The objective is not merely to forecast electrical demand. Hedge funds and derivatives market participants need a model that translates physical and operational grid conditions into tradable market consequences.
The modeling stack would estimate:
The model should support both forecasting and counterfactual sensitivity analysis.
Example hedge-relevant questions:
The goal is to combine scalar load forecasts with probabilistic views of how physical grid state and market structure interact.
Core prediction targets might include:
| Category | Prediction Target | Trading Relevance |
|---|---|---|
| Demand | Load by bus, zone, hub, and ISO | Energy price level, scarcity risk, reserve margin |
| Supply | Available thermal generation | Marginal unit, fuel exposure, price stack |
| Renewables | Wind and solar production | Volatility, negative prices, curtailment, ramp risk |
| Storage | State of charge and dispatch behavior | Peak clipping, arbitrage, reserve provision |
| Transmission | Flow, derates, outage states | Congestion, basis spreads, FTR/CRR value |
| Market Constraints | Binding probability and shadow price | LMP separation and congestion rent |
| Fuel | Gas, coal, oil, and basis prices | Heat-rate economics and spark spread |
| Weather | Temperature, wind, irradiance, humidity | Load and renewable forecast error |
| Ancillary Services | Reserve scarcity and regulation needs | Price spikes and tail risk |
| Portfolio | Position-level P&L sensitivity | Hedge sizing, risk limits, scenario exposure |
Different decisions require different horizons.
| Horizon | Use Case | Required Model Behavior |
|---|---|---|
| Real-time / intraday | RT price, congestion, virtual trade adjustment | Fast state update, current topology, outage ingestion |
| Day-ahead | DA bids, virtuals, next-day hedge | Weather/load forecast, unit availability, constraint forecast |
| Week-ahead | Gas/power positioning, risk limits | Weather ensembles, outage schedule, fuel basis |
| Seasonal | Capacity, heat/cold risk, storage value | Load distribution, reserve margin, outage risk |
| Long-term | Capacity market, infrastructure thesis | Demand growth, retirements, interconnection queues |
The model should produce market-native outputs, not just engineering quantities.
| Output | Description |
|---|---|
LMP_energy |
System marginal energy component |
LMP_congestion |
Price component caused by binding transmission constraints |
LMP_loss |
Marginal loss component |
Reserve_price |
Ancillary or scarcity component |
Basis |
Price difference between node, zone, hub, or ISO reference |
Spread |
DA/RT, hub/node, gas/power, or inter-regional spread |
Constraint_shadow_price |
Marginal value of relaxing a binding constraint |
Congestion_rent |
Economic value created by constrained transmission |
Binding_probability |
Probability a constraint binds under a scenario distribution |
P&L_sensitivity |
Position-level exposure to modeled shocks |
Hedge-fund requirements should be segmented by trading horizon, instrument, and decision cadence. The same graph and solver substrate can support each segment, but the feature priorities, validation logic, and model latency requirements differ materially.
| Use Case | Required Model Emphasis | Example Decision |
|---|---|---|
| Intraday real-time trading | Current topology, outages, renewable nowcasts, constraint pressure, fast PTDF/LODF screening | Adjust RT exposure before congestion materializes |
| Day-ahead virtuals | Next-day load, renewables, unit availability, offer-curve assumptions, DA/RT spread history | Bid virtual supply/demand at nodes with expected DA/RT divergence |
| FTR/CRR valuation | Long-horizon congestion regimes, outage seasonality, path shadow-price distributions | Buy/sell congestion rights or hedge basis exposure |
| Gas-power spread trading | Fuel hub mapping, heat-rate stack, pipeline constraints, gas basis volatility | Position spark spreads or gas-linked power exposure |
| Options and tail risk | Scarcity regimes, reserve shortage probability, volatility surface, extreme-weather scenarios | Hedge or monetize price-spike convexity |
| Long-term infrastructure thesis | Load growth, retirements, interconnection queues, transmission buildout, policy regime | Build directional thesis on regional basis, capacity, or congestion |
The product should not treat hedge funds as a monolithic user. Each market desk asks a different version of the same fundamental question: which physical-market state transition creates tradable dislocation before consensus has priced it?
The proposed architecture uses a heterogeneous, temporal property graph as the organizing abstraction.
The graph contains:
The graph is attributed because every node and edge carries quantitative and categorical state. It is nonlinear because the relationships between load, flows, voltage, dispatch, congestion, and price are not globally linear, even if some screening approximations use linearized models.
The preferred wording is: temporal attributed property graph over nonlinear physical-market dynamics. This avoids implying that the graph data structure itself performs nonlinear calculation.
The modeling strategy should explicitly separate three linked graphs.
The physical graph represents grid topology and operating state.
Primary entities:
Primary purpose:
The market dependency graph represents how physical state maps into price formation and tradable instruments.
Primary entities:
Primary purpose:
The scenario and sensitivity graph records structured model questions and their outputs.
Primary entities:
Primary purpose:
The architecture should include an explicit ISO/RTO-specific market rule adapter layer. The grid graph may use common abstractions across markets, but settlement, product design, reserve mechanics, public-data availability, and price formation differ by ISO/RTO.
Representative adapters:
Each adapter should encode:
Without this adapter layer, the system risks becoming a generic grid simulator rather than a market-native hedge-decision engine.
The model should distinguish three tasks that are often conflated:
| Task | Meaning | Validation Question |
|---|---|---|
| LMP prediction | Forecast future prices statistically or through hybrid physical-market features | Did the forecast beat market baselines at the relevant horizon? |
| LMP reconstruction | Explain historical LMPs from published topology, constraints, prices, and market records | Can the model reproduce known historical outcomes and binding drivers? |
| LMP simulation | Compute counterfactual LMPs from dispatch, OPF, SCED, or commitment approximations | Does the counterfactual response remain physically and economically valid? |
This distinction matters because hedge funds will use the same platform for different tasks: forecasting, post-trade explanation, stress testing, and counterfactual trade construction. Each task needs separate provenance and validation metrics.
| Node Type | Description | Representative Attributes |
|---|---|---|
Bus |
Electrical bus in the transmission network | voltage level, voltage magnitude, angle, zone, ISO, LMP, net injection |
Line |
Transmission line or branch | resistance, reactance, susceptance, thermal limit, flow, outage state |
Transformer |
Transformer between voltage levels | tap ratio, phase shift, rating, availability |
Substation |
Physical aggregation point | location, voltage levels, connected assets |
Generator |
Thermal or dispatchable generator | fuel type, capacity, heat rate, ramp rate, outage probability, bid curve |
RenewableAsset |
Wind or solar asset | nameplate capacity, forecast output, weather dependency, curtailment risk |
StorageAsset |
Battery or pumped storage | state of charge, charge rate, discharge rate, efficiency, strategy |
LoadZone |
Aggregated load area | forecast load, weather sensitivity, customer mix, demand response |
WeatherCell |
Weather station or gridded weather region | temperature, humidity, wind speed, irradiance, forecast error |
FuelHub |
Gas, coal, or other fuel pricing location | price, basis, pipeline constraint, volatility |
MarketNode |
Settlement node or pricing point | LMP, congestion component, loss component, hub mapping |
TradingHub |
Aggregate trading hub | hub price, volume, associated nodes |
Constraint |
Monitored transmission or operating constraint | flow limit, shadow price, binding probability |
Contingency |
N-1 or N-k outage condition | affected assets, probability, derate magnitude |
Scenario |
Composite state assumption | probability, timestamp, shock vector, weather/fuel/topology state |
Shock |
Counterfactual perturbation | variable, target, magnitude, units, timestamp |
Sensitivity |
Modeled response to a shock | derivative, elasticity, confidence, validity region |
ModelRun |
Executed calculation | solver tier, assumptions, baseline, result, convergence status |
PortfolioPosition |
Hedge or trading exposure | instrument, quantity, location, tenor, risk factor |
| Edge Type | From → To | Description |
|---|---|---|
CONNECTED_TO |
Bus → Bus | Electrical connectivity through line or transformer |
INJECTS_AT |
Generator → Bus | Generator injection point |
DRAWS_FROM |
LoadZone → Bus | Load allocation to physical grid |
LOCATED_IN |
Asset → Zone / ISO | Geographic or market containment |
WEATHER_DRIVES |
WeatherCell → LoadZone / RenewableAsset | Weather dependency for load or renewable output |
FUEL_SUPPLIES |
FuelHub → Generator | Fuel-price dependency |
CONSTRAINS |
Constraint → Line / Interface | Constraint monitors or limits asset flow |
SETTLES_AT |
Bus / Asset → MarketNode | Settlement relationship |
AGGREGATES_TO |
MarketNode → TradingHub | Hub composition |
PART_OF |
Bus / Asset → Community | Derived partition membership |
CONTINGENCY_AFFECTS |
Contingency → Line / Generator | Outage or derate impact |
CORRELATED_WITH |
Weather / Fuel / Market nodes → Same | Statistical dependency |
AFFECTS |
Shock → Asset / Variable | Scenario perturbation target |
PRODUCES |
Shock / ModelRun → Sensitivity | Output sensitivity relationship |
MEASURED_ON |
Sensitivity → MarketNode / Constraint / Position | Target of sensitivity calculation |
VALID_FOR |
Sensitivity → Subgraph / Scenario | Validity domain |
USES_MODEL |
Sensitivity → ModelRun | Provenance and solver reference |
For each bus i:
| Variable | Description |
|---|---|
V_i |
Voltage magnitude |
theta_i |
Voltage angle |
P_load_i |
Real power demand |
Q_load_i |
Reactive power demand |
P_gen_i |
Real power generation |
Q_gen_i |
Reactive power generation |
P_net_i |
Net real-power injection |
LMP_i |
Locational marginal price |
zone_i |
Market or operational zone |
iso_i |
ISO/RTO membership |
For each branch or line (i,j):
| Variable | Description |
|---|---|
r_ij |
Resistance |
x_ij |
Reactance |
b_ij |
Susceptance |
F_ij |
Real power flow |
S_ij |
Apparent power flow |
Fmax_ij |
Thermal or operational flow limit |
outage_state_ij |
Available, unavailable, or derated |
shadow_price_ij |
Constraint value if binding |
loading_pct_ij |
Flow as percentage of limit |
contingency_set_ij |
Relevant N-1 or N-k events |
For each generator or dispatchable resource:
| Variable | Description |
|---|---|
Pmin |
Minimum stable output |
Pmax |
Maximum available output |
ramp_up |
Maximum upward ramp rate |
ramp_down |
Maximum downward ramp rate |
heat_rate |
Fuel efficiency |
fuel_price |
Fuel cost from linked fuel hub |
variable_om |
Variable operating and maintenance cost |
startup_cost |
Cost to start unit |
no_load_cost |
Cost to keep unit online |
forced_outage_rate |
Probability or rate of forced outage |
planned_outage_state |
Scheduled maintenance state |
bid_curve |
Market offer curve |
emissions_cost |
Carbon or pollutant cost where applicable |
must_run_flag |
Reliability, nuclear, CHP, or regulatory must-run state |
For renewable assets:
| Variable | Description |
|---|---|
forecast_output |
Expected generation |
forecast_error_std |
Forecast uncertainty |
wind_speed |
Wind driver |
solar_irradiance |
Solar driver |
cloud_cover |
Solar attenuation driver |
curtailment_probability |
Risk of economic or reliability curtailment |
weather_cell_id |
Linked forecast region |
For each load zone, market node, or bus-level load:
| Variable | Description |
|---|---|
base_load |
Weather-normalized demand |
forecast_load |
Expected demand at horizon |
temperature_sensitivity |
Load response to temperature |
humidity_sensitivity |
Cooling-load response |
calendar_effect |
Hour, weekday, weekend, holiday, season |
industrial_load_factor |
Industrial demand exposure |
commercial_load_factor |
Commercial demand exposure |
residential_load_factor |
Residential demand exposure |
EV_load |
Electric-vehicle charging load |
DER_response |
Distributed energy resource response |
demand_response_probability |
Curtailment or flexible-load response |
forecast_error_std |
Demand forecast uncertainty |
| Variable | Description |
|---|---|
gas_price |
Natural gas price at relevant hub |
gas_basis |
Difference between local and reference gas price |
pipeline_constraint_state |
Gas deliverability constraint |
coal_price |
Coal price where relevant |
oil_price |
Oil price where relevant for peakers or macro linkage |
emissions_price |
Carbon or environmental compliance price |
spark_spread |
Power price minus gas-implied generation cost |
dark_spread |
Power price minus coal-implied generation cost |
| Variable | Description |
|---|---|
LMP |
Locational marginal price |
LMP_energy |
Energy component of LMP |
LMP_congestion |
Congestion component of LMP |
LMP_loss |
Loss component of LMP |
reserve_price |
Ancillary or scarcity price |
constraint_shadow_price |
Marginal value of relaxing a constraint |
binding_constraint_id |
Constraint responsible for congestion |
binding_probability |
Probability of constraint binding |
hub_price |
Aggregated trading hub price |
node_to_hub_basis |
Node price minus hub price |
zone_to_hub_basis |
Zone price minus hub price |
DA_RT_spread |
Day-ahead minus real-time price spread |
FTR_value |
Financial transmission right value |
CRR_value |
Congestion revenue right value |
portfolio_PnL |
Portfolio-level profit and loss |
| Scenario Dimension | Examples |
|---|---|
| Weather | Heat dome, cold snap, wind drought, cloud cover, storm front |
| Fuel | Gas price spike, basis blowout, pipeline constraint, LNG pull |
| Supply | Generator outage, derate, ramp scarcity, planned maintenance |
| Transmission | Line outage, interface derate, transformer failure, congestion limit |
| Load | Industrial surge, demand response failure, EV charging spike |
| Market | Bid-curve shift, scarcity adder, reserve shortage, rule change |
| Portfolio | Position change, hedge ratio adjustment, basis exposure |
Unit commitment deserves explicit treatment because commitment state is often decisive for day-ahead outcomes, price spikes, reserve scarcity, and DA/RT spread behavior.
Additional generator and market fields should include:
| Variable | Description |
|---|---|
commitment_state |
On, off, starting, shutting down, unavailable |
min_up_time |
Minimum time a unit must remain online once started |
min_down_time |
Minimum time a unit must remain offline once stopped |
startup_time |
Time required to synchronize or reach minimum load |
shutdown_time |
Time required to remove unit from service |
ramp_rate_by_segment |
Ramp limits that vary by operating range |
offer_curve_segments |
Piecewise energy offer curve |
no_load_cost |
Cost incurred while online independent of dispatch level |
startup_cost_by_state |
Startup cost conditioned on hot/warm/cold status |
must_run_reason |
Nuclear, CHP, reliability, regulatory, voltage support, or local constraint |
reliability_commitment_flag |
Whether commitment was reliability-driven rather than economic |
reserve_capability |
Ancillary service capability by product and operating point |
emissions_constraint_exposure |
Whether dispatch is affected by emissions limits or compliance prices |
For hedge-relevant day-ahead and next-day modeling, a pure DC-OPF or dispatch approximation can be insufficient if it assumes all units are continuously available. The system should separate:
The property graph would enable dynamic computation over subgraphs. These values are not merely descriptive, but support screening features and control variables that determine which full or reduced model an agent might run for quick hypothesis testing as part of its research task.
Useful subgraph definitions include:
| Metric | Interpretation |
|---|---|
net_load |
Load minus renewable generation within subgraph |
dispatchable_capacity |
Available controllable generation |
renewable_share |
Renewable output as percentage of load |
reserve_margin |
Available capacity above expected demand |
import_dependency |
Share of demand requiring imports from adjacent regions |
export_capacity |
Ability to export surplus generation |
constraint_pressure |
Flow proximity to monitored limits |
binding_probability |
Probability one or more constraints bind |
marginal_fuel_exposure |
Sensitivity of price to fuel hub movement |
weather_elasticity |
Load or renewable response to weather variables |
basis_volatility |
Expected node-to-hub or zone-to-hub volatility |
hedge_exposure |
Portfolio exposure to subgraph outcomes |
A market-relevant stress score may combine physical, weather, supply, and market attributes:
SubgraphStress = f(
net_load,
reserve_margin,
import_dependency,
renewable_forecast_error,
outage_probability,
constraint_pressure,
historical_binding_frequency,
fuel_price_volatility,
basis_volatility
)
The stress score would prioritize which subgraphs and scenarios deserve more expensive analysis.
Graph analytics are used to reduce model complexity, identify high-impact components, and construct valid candidate subgraphs for deeper analysis.
They are most useful for:
cuGraph and related GPU graph analytics are appropriate for large-scale screening, partitioning, and ranking over graph representations of the grid and market dependencies.
Use cuGraph-style analytics for:
| Analytic | Purpose |
|---|---|
| Connected components | Identify islanding, disconnected regions, or separable topology |
| Weakly connected components | Identify directed dependency regions with weak coupling |
| Strongly connected components | Identify mutually reachable directed regions |
| Louvain / Leiden communities | Find coherent electrical or market communities |
| Spectral clustering | Reveal near-block-diagonal structure and weak interfaces |
| Betweenness centrality | Rank buses, lines, or interfaces mediating flows |
| PageRank / Katz centrality | Rank dependency influence in market or fuel graphs |
| Shortest path / k-hop traversal | Extract local neighborhoods around shocks |
| Minimum cut / bridge analysis | Identify vulnerable interfaces or separable regions |
| Triangle / motif analysis | Characterize redundancy versus radiality |
| Ego networks | Define localized sensitivity neighborhoods |
cuGraph would not replace the underlying solvers:
Instead, graph analytics layer answers:
Where should the expensive model run, what should it include, and what candidate constraints or sensitivities matter?
Then the numerical solver answers:
Given the model equations and constraints, what is the physically and economically valid state?
The intended pattern is:
Full temporal property graph
-> graph analytics
-> candidate communities and interfaces
-> reduced subgraphs
-> fast linear screening
-> nonlinear or OPF validation
-> persisted sensitivities
Graph analytics can help identify regions where the grid or dependency graph approximates a block-diagonal structure.
This is useful because:
However, block structure in a graph or matrix is a model-reduction cue, not proof that independent subgraph solves are valid. Boundary conditions, loop flows, contingencies, and market coupling can invalidate a naive decomposition.
Generic graph topology is not sufficient for decomposition. A visually plausible community can be electrically irrelevant if edge weights ignore the physics and price-formation mechanics.
Community detection, clustering, cut analysis, and centrality should be computed over weighted graph views, including:
| Weight Type | Interpretation |
|---|---|
admittance_weight / susceptance_weight |
Electrical coupling strength |
thermal_limit_weight |
Transfer capability and bottleneck scale |
historical_flow_weight |
Empirical usage of line or interface |
PTDF_influence_weight |
Flow sensitivity to injections at target nodes |
LODF_influence_weight |
Outage redistribution sensitivity |
congestion_frequency_weight |
How often an asset participates in congestion |
shadow_price_covariance_weight |
Market-price coupling through constraints |
contingency_participation_weight |
Asset relevance under N-1/N-k conditions |
basis_correlation_weight |
Market-node or hub co-movement |
portfolio_exposure_weight |
Relevance to actual positions |
The system should maintain multiple graph projections for different analytic tasks. A topology-weighted graph is useful for electrical screening; a shadow-price covariance graph is useful for market segmentation; a portfolio-weighted graph is useful for hedge triage.
The system should use a tiered modeling stack.
Purpose:
Outputs:
Purpose:
Representative methods:
Outputs:
Purpose:
Representative methods:
Outputs:
Purpose:
Representative methods:
Outputs:
For hedge decisions where the commitment state or ISO/RTO rules dominate outcomes, the highest-confidence tier must include market-specific rule handling and commitment realism.
Representative methods:
Outputs:
The property graph should be capable of materializing matrices used by power-flow, optimization, and graph-reduction models.
| Matrix | Description |
|---|---|
A |
Adjacency matrix |
L |
Graph Laplacian |
L_norm |
Normalized Laplacian for spectral clustering |
Y_bus |
Complex admittance matrix |
B_bus |
Bus susceptance matrix |
B_branch |
Branch susceptance mapping |
PTDF |
Power transfer distribution factor matrix |
LODF |
Line outage distribution factor matrix |
J |
AC power-flow Jacobian |
KKT |
Optimal power-flow optimality system |
AC power flow and AC-OPF are nonlinear problems. However, practical nonlinear solvers usually perform sparse linear algebra inside each iteration.
The common pattern is:
Nonlinear physical or market problem
-> iterative nonlinear solver
-> sparse linearized system per iteration
-> state update
-> convergence check
Examples:
The graph contributes by defining sparsity, locality, decomposition candidates, and dependency structure while the solver performs the numerical calculation.
A candidate subgraph might be derived from both physical and market relevance.
Inputs:
A subgraph may be centered on:
A subgraph approximation requires boundary treatment.
Boundary options include:
Boundary assumptions must be persisted with the model run.
Boundary methods should not be treated as interchangeable. Each method has a domain of validity and a failure mode.
| Boundary Method | Better For | Explicit Risk Captured |
|---|---|---|
| Fixed voltage magnitude and angle | AC feasibility studies and localized voltage/angle consistency checks | Can overconstrain the local solve and suppress external redispatch behavior |
| Fixed net injection | Quick screening, first-pass counterfactual ranking, and local stress tests where external balancing is intentionally frozen | Can suppress external balancing and redispatch response |
| Equivalent source/sink | Approximate import/export balancing when the external grid is treated as an aggregate supply or demand reservoir | Can hide actual constraint paths and interface congestion |
| Thevenin equivalent | Local electrical feasibility, voltage response, and equivalent-network studies around a boundary bus or interface | May ignore market redispatch and constraint logic |
| PTDF-derived boundary response | DC sensitivity, congestion screening, and first-order flow response across defined interfaces | Weak for voltage, reactive power, losses, and nonlinear effects |
| Historical import/export response | Empirical market behavior, recurring operating regimes, and historically observed interface response | Regime-shift risk |
| Scenario-conditioned boundary curve | Repeated scenario families where boundary behavior has been calibrated by load, weather, topology, fuel, or commitment regime | Requires calibration and validation against full solves |
The boundary object should be persisted with:
Should every reduced model should be compared against a full solve or higher-fidelity benchmark?
I imagine we might run periodic test cases and create lumped parameters to identify regimes when agents can be allowed make approximations with bounded errors so they can perform rapid hypothesis testing.
Validation metrics:
| Metric | Description |
|---|---|
flow_error |
Difference in branch flow prediction |
LMP_error |
Difference in nodal price prediction |
basis_error |
Difference in spread prediction |
binding_set_error |
Difference in predicted binding constraints |
shadow_price_error |
Difference in constraint marginal value |
PnL_error |
Difference in portfolio impact |
validity_region |
Scenario range where approximation remains acceptable |
Approximation results could then be promoted only when they have stable error bounds for the target use case.
Sensitivity modeling should be a first-class component of the system, not an ad hoc report.
A sensitivity captures the response of a target variable to a structured perturbation.
Representative fields:
| Field | Description |
|---|---|
shock_id |
Shock or perturbation being evaluated |
target_id |
Target node, constraint, market product, or portfolio position |
target_variable |
Variable being measured |
baseline_value |
Value before perturbation |
counterfactual_value |
Value after perturbation |
delta |
Absolute change |
derivative |
Local derivative or marginal response |
elasticity |
Percentage response to percentage shock |
model_tier |
Approximation or solver level used |
valid_region |
Conditions under which result is valid |
confidence |
Confidence score or uncertainty estimate |
timestamp |
Run time or scenario time |
| Sensitivity | Meaning |
|---|---|
dLoad_i / dTemp_j |
Load response to weather |
dWindOutput_i / dWindSpeed_j |
Wind generation response |
dSolarOutput_i / dIrradiance_j |
Solar generation response |
dFlow_l / dInjection_i |
Flow response to bus injection |
dFlow_l / dOutage_k |
Flow response to outage |
dLMP_i / dLoad_j |
Price response to load |
dLMP_i / dFuelHub_k |
Price response to fuel price |
dBasis_ij / dConstraint_k |
Spread response to constraint |
dReservePrice / dAvailableCapacity |
Scarcity response to capacity |
dPnL / dScenario_s |
Portfolio response to scenario |
“All else being equal” must be encoded as an explicit assumption set.
A valid sensitivity query must specify:
Example:
shock:
variable: fuel_price
target: Waha
magnitude: +20%
frozen:
- topology
- load_forecast
- renewable_forecast
- generator_outage_state
- bids_except_fuel_adjusted_units
endogenous:
- affected_generator_marginal_cost
- dispatch
- branch_flows
- congestion
- LMP
- basis
- portfolio_PnL
The model should reject or flag underspecified sensitivity requests.
A sensitivity result should carry an explicit eligibility status:
| Status | Meaning |
|---|---|
screening_only |
Useful for ranking but not for position sizing |
decision_support |
Validated enough for hedge analysis with caveats |
requires_full_solve |
Approximation error, nonlinearity, or market coupling is too high |
invalid_request |
Shock, assumptions, target, or market context is underspecified |
regime_shift_warning |
Historical calibration may not apply to current state |
Escalation to a higher-fidelity model should be triggered by:
The agent should not directly reason over the grid in unconstrained free text. Its job is to compile natural-language questions into structured model specifications and queries on the property graph. This would be a tool call that executes or requests the correct modeling tier, runs a simulation, and returns a “governed” evidence-based explanation.
Example natural-language question:
Assuming all other things are equal, what is the sensitivity of Houston-area real-time prices to a 10% derate on a north-to-Houston import constraint during a high-load evening?
question_type: sensitivity
market: ERCOT
target:
variable: real_time_lmp
region: Houston
shock:
type: transmission_derate
magnitude: -10%
asset_class: import_constraint
context:
load_condition: high
hour_type: evening_peak
assumptions:
freeze:
- fuel_prices
- renewable_forecast
- unit_availability
endogenous:
- dispatch
- branch_flows
- congestion_component
- LMP
model_tiers:
- graph_screening
- DC_OPF
- local_AC_power_flow_if_needed
outputs:
- dLMP_dConstraintLimit
- affected_nodes
- binding_probability_change
- basis_change
- hedge_PnL_sensitivity
The answer should include:
Purpose:
Data classes:
Key requirement:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
Purpose:
Responsibilities:
What is the price sensitivity in ERCOT Houston if north-to-Houston transfer capability is reduced by 10% during evening peak, assuming fuel prices and unit outages are unchanged?
question_type: sensitivity
market: ERCOT
region: Houston
time_context: evening_peak
shock:
type: transmission_limit_derate
target: north_to_houston_import_constraints
magnitude: -10%
frozen:
- fuel_prices
- unit_outage_states
- renewable_forecast
endogenous:
- dispatch
- flows
- congestion
- LMP
- basis
outputs:
- dLMP_dTransferLimit
- dBasis_dTransferLimit
- binding_probability_change
- affected_market_nodes
- portfolio_PnL_sensitivity
The graph retrieves:
The graph analytics component computes:
The solver stack runs:
The system writes back:
Shock node.ModelRun node.Sensitivity nodes.The final system should produce outputs directly tied to hedge execution and risk management.
| Output | Hedge Decision Supported |
|---|---|
| Node/hub LMP forecast | Long/short power exposure |
| Basis sensitivity | Node-to-hub or zone-to-hub hedge sizing |
| Constraint binding probability | FTR/CRR and congestion exposure |
| Fuel-price sensitivity | Gas-power spread and spark-spread trades |
| Weather sensitivity | Heat/cold and renewable volatility positioning |
| Reserve scarcity probability | Tail-risk and option-like exposure |
| DA/RT spread forecast | Virtual bidding and intraday adjustments |
| Portfolio P&L scenario | Risk limits and position sizing |
| Approximation confidence | Whether to trust reduced model or escalate |
The platform should distinguish outputs by decision maturity:
| Output Class | Meaning |
|---|---|
| Research signal | Useful for generating hypotheses and prioritizing investigation |
| Screening signal | Useful for ranking scenarios and candidate trades |
| Decision-support signal | Validated enough to support hedge sizing with caveats |
| Execution-adjacent signal | Fast enough and validated enough for intraday workflow integration |
| Audit signal | Used to explain historical outcomes, model decisions, or P&L attribution |
This prevents the system from presenting a graph-screened approximation as if it were a fully validated market-clearing result.
The graph stores state and dependencies. Graph analytics reduce complexity. Solvers calculate physically and economically valid outcomes.
Sensitivities should be persisted, versioned, queried, compared, and audited like any other market data product.
Do not run expensive full-network nonlinear models for every question. Use graph screening to prioritize the cases that matter.
Every “all else equal” question must specify frozen variables and endogenous variables.
Subgraph approximations are useful only when their error bounds are understood.
Grid state, market prices, forecasts, topology, and sensitivities are time-dependent. The graph should support temporal snapshots and historical replay.
The agent should compile questions into structured model specifications. It should not invent assumptions silently.
Forecasting future prices, reconstructing historical outcomes, and simulating counterfactual market states are different workflows with different error metrics. The graph should store them as separate model-run classes.
ISO/RTO-specific rules should be represented through adapters and versioned assumptions. The system should not hide market-rule differences behind generic labels such as LMP, reserve_price, or constraint without semantic grounding.
Graph communities, weakly connected components, low-conductance cuts, and block-diagonal structure are candidate model-reduction signals. They become trusted approximations only after validation against physical and market-solvers.
(:Bus)-[:CONNECTED_TO]->(:Bus)
(:Line)-[:CONNECTS]->(:Bus)
(:Generator)-[:INJECTS_AT]->(:Bus)
(:LoadZone)-[:DRAWS_FROM]->(:Bus)
(:Transformer)-[:CONNECTS]->(:Bus)
(:Constraint)-[:CONSTRAINS]->(:Line)
(:Contingency)-[:CONTINGENCY_AFFECTS]->(:Line)
(:Bus)-[:SETTLES_AT]->(:MarketNode)
(:MarketNode)-[:AGGREGATES_TO]->(:TradingHub)
(:FuelHub)-[:FUEL_SUPPLIES]->(:Generator)
(:Constraint)-[:AFFECTS_PRICE_AT]->(:MarketNode)
(:PortfolioPosition)-[:EXPOSED_TO]->(:MarketNode)
(:PortfolioPosition)-[:EXPOSED_TO]->(:Constraint)
(:PortfolioPosition)-[:EXPOSED_TO]->(:FuelHub)
(:Shock)-[:AFFECTS]->(:FuelHub)
(:Shock)-[:AFFECTS]->(:Line)
(:Shock)-[:AFFECTS]->(:Generator)
(:Shock)-[:AFFECTS]->(:WeatherCell)
(:Scenario)-[:INCLUDES]->(:Shock)
(:ModelRun)-[:USES_SCENARIO]->(:Scenario)
(:ModelRun)-[:USES_SUBGRAPH]->(:Subgraph)
(:ModelRun)-[:PRODUCES]->(:Sensitivity)
(:Sensitivity)-[:MEASURED_ON]->(:MarketNode)
(:Sensitivity)-[:VALID_FOR]->(:Subgraph)
(:Sensitivity)-[:IMPACTS]->(:PortfolioPosition)
(:ISO)-[:HAS_MARKET_RULESET]->(:MarketRuleSet)
(:MarketRuleSet)-[:DEFINES_PRODUCT]->(:AncillaryServiceProduct)
(:MarketRuleSet)-[:DEFINES_SCARCITY_RULE]->(:ScarcityPricingRule)
(:MarketRuleSet)-[:DEFINES_SETTLEMENT_TIMELINE]->(:SettlementTimeline)
(:MarketNode)-[:USES_MARKET_RULESET]->(:MarketRuleSet)
(:Constraint)-[:HAS_MARKET_ALIAS]->(:ConstraintAlias)
(:DataSource)-[:PUBLISHES]->(:MarketObservation)
(:MarketObservation)-[:VALID_UNDER]->(:MarketRuleSet)
(:ModelRun)-[:HAS_MODEL_CLASS]->(:ModelClass)
(:ModelRun)-[:BENCHMARKED_AGAINST]->(:ModelRun)
(:ModelRun)-[:HAS_ERROR_METRIC]->(:ErrorMetric)
(:ErrorMetric)-[:MEASURED_ON]->(:TargetVariable)
(:ModelRun)-[:VALID_FOR]->(:ScenarioRegion)
(:ModelRun)-[:REQUIRES_ESCALATION_WHEN]->(:EscalationRule)
(:Sensitivity)-[:HAS_ELIGIBILITY_STATUS]->(:EligibilityStatus)
The document intentionally avoids binding the architecture to a single programming language or database implementation. The system may use Rust, Python, C++, SQL engines, graph databases, GPU analytics, or distributed compute depending on production constraints.
The important architectural pattern is:
Raw data
-> temporal property graph
-> market-rule normalization
-> graph analytics and subgraph selection
-> forecast and scenario construction
-> fast screening models
-> nonlinear or market-valid solver execution
-> validation, backtesting, and escalation
-> sensitivity and hedge-output persistence
-> agentic query interface
The graph should be used as the market-physics operating model: a temporal, attributed, queryable representation of how weather, fuel, demand, generation, transmission, constraints, prices, and hedge exposures interact.
Graph analytics, including cuGraph-style GPU analytics, should be used to identify critical subgraphs, simplify the model, and focus expensive numerical solvers on the portions of the network that matter. The actual market and grid state must still be validated with appropriate physical and economic models.
The final product is a hedge-focused decision engine that translates network state and counterfactual shocks into:
Each is enabled using an agentic workflow such as LangGraph or LangChain and an MCP tool server that calls the graph and simulation engine for iterative planning and execution.
The tightened thesis is:
Use a temporal attributed property graph as the system-of-record for grid topology, market structure, weather, fuel, asset state, scenarios, solver runs, and hedge exposures. Use graph analytics to identify high-impact subgraphs, weak interfaces, candidate binding constraints, and portfolio-relevant neighborhoods. Then execute validated physical and market solvers — ranging from PTDF/LODF screening through OPF, SCED, and unit commitment approximations — to produce auditable LMP, basis, congestion, scarcity, and P&L sensitivities with explicit assumptions and validity bounds.