This repository contains Summer 2026 REU work on forecast-aware dispatch for a hybrid wind farm with compressed-air-energy-storage-like constraints. The clean paper-facing reproduction package is organized here:
The project is now organized around one primary benchmark:
100-MW Constant-Output Baseload Benchmark
Wind-only/no-storage output is still reported, but only as secondary reference information. The 100 MW benchmark uses the same 100 MW / 10 h / 1,000 MWh CAES configuration as the dispatch experiments.
Run one command in each folder:
| Step | Folder | What it proves |
|---|---|---|
| 0 | Summer 2026 REU/100 MW baseload |
Builds the 100 MW benchmark and QA checks |
| 1 | Summer 2026 REU/causal ridge regression |
Chooses the best power forecast by RMSE |
| 2 | Summer 2026 REU/rolling horizon |
Tests deterministic Gurobi planning horizons |
| 3 | Summer 2026 REU/different scenarios |
Tests 1/3/5/7/10 forecast scenarios |
| 4 | Summer 2026 REU/oracle upper bound |
Reports daily and hourly perfect-information oracle references |
Every folder has:
EXPERIMENT_KNOBS.py
RUN_*.py
code/
results/
figures/
Change the knobs file, run the RUN_*.py command, then read
results/current_run_from_knobs/.
| Result | Current value |
|---|---|
| Best forecast model | causal lag/ridge forecast |
| Best forecast RMSE | 21.24 MW |
| Best deterministic rolling-horizon case | 48 h |
| Deterministic COVE reduction vs 100 MW benchmark | 20.63% |
| Best scenario case | 3 scenarios |
| Scenario COVE reduction vs 100 MW benchmark | 40.18% |
| Scenario revenue gain vs 100 MW benchmark | 67.16% |
| Daily-replan oracle reference | 168 h, 40.87% COVE reduction |
| Hourly-replan oracle reference | 168 h, 40.85% COVE reduction |
These are intentionally different rows, so their percentages should not match.
| Value | Source | Meaning |
|---|---|---|
| 20.63% | Summer 2026 REU/rolling horizon/results/current_run_from_knobs/forecast_dispatch_summary.csv |
Step 2 deterministic horizon sweep: one causal forecast path, 48 h planning horizon, 24 h execution/replanning, and the 75 MW direct-reserve policy |
| 37.23% | Summer 2026 REU/different scenarios/results/current_run_from_knobs/uncertainty_aware_summary.csv |
Step 3 one-forecast reference inside the scenario runner: current-hour nowcast plus causal ridge future, nowcast-gated recourse, and first-action execution |
Use Step 2 to compare planning horizons. Use Step 3 to compare one forecast against 3, 5, 7, and 10 scenarios.
| Setting | Value |
|---|---|
| Storage power | 100 MW |
| Duration | 10 h |
| Capacity | 1,000 MWh |
| SoC bounds | 200-1,000 MWh |
| Initial SoC | 600 MWh |
| RTE | 55%, discharge-side |
| Grid export cap | 249 MW |
| Grid charging | Not allowed |
cd "/Users/davidvalenta/deep-wind-model-dispatch/Summer 2026 REU/100 MW baseload"
../../venv/bin/python RUN_0_100MW_BASELOAD.py
cd "/Users/davidvalenta/deep-wind-model-dispatch/Summer 2026 REU/causal ridge regression"
../../venv/bin/python RUN_1_FORECAST_RMSE.py
cd "/Users/davidvalenta/deep-wind-model-dispatch/Summer 2026 REU/rolling horizon"
../../venv/bin/python RUN_2_ROLLING_HORIZON.py
cd "/Users/davidvalenta/deep-wind-model-dispatch/Summer 2026 REU/different scenarios"
../../venv/bin/python RUN_3_SCENARIO_COMPARISON.py
cd "/Users/davidvalenta/deep-wind-model-dispatch/Summer 2026 REU/oracle upper bound"
../../venv/bin/python RUN_4_ORACLE_UPPER_BOUND.pyRun the audit:
cd "/Users/davidvalenta/deep-wind-model-dispatch/Summer 2026 REU"
../venv/bin/python AUDIT_DATA_CONFIG.pyCurrent audit result: 16/16 active hourly CSV files pass the common 100 MW /
10 h CAES checks.