How rudy-smith/gb-bess-dispatch works
This repository is a GB grid-scale battery arbitrage research and dispatch optimiser. Its main workflow obtains Elexon market prices, maps them to GB settlement periods, cleans and gates data, solves daily battery dispatch, independently replays schedules, and compares performance with a threshold baseline. The README also documents degradation and duration/efficiency studies and a NESO forecast-data client. Script-level orchestration is inferred from documented capabilities and filenames; unsampled source limits certainty about exact wiring.
Main entry points: build_dataset.py Build dataset · milp.py MILP optimiser · solve_day.py Daily solve · run_benchmark.py Benchmark run
Components 21
Market data
- Fetch prices
scripts/fetch_prices.py - Elexon client
src/fetch/elexon.py - Raw price cache
data/raw - NESO client
src/fetch/neso.py
Data preparation
- Build dataset
scripts/build_dataset.py - GB calendar
src/prep/calendar_gb.py - Price cleaning
src/prep/clean.py - Processed data
data/processed
Dispatch and validation
- Daily solve
scripts/solve_day.py - Benchmark run
scripts/run_benchmark.py - Battery model
src/model/battery.py - MILP optimiser
src/model/milp.py - Independent replay
src/model/battery.py
Strategy analysis
- Threshold baseline
src/model/baselines.py - Baseline run
scripts/run_baseline.py - Degradation sweep
scripts/run_degradation_sweep.py - Sensitivity analysis
scripts/run_sensitivity.py - Results
data/processed
Other components
- Analyst
- Elexon API
- NESO portal
Connections 29
- Analyst → Fetch prices: requests data
- Fetch prices → Elexon client: fetches prices
- Elexon client → Elexon API: queries API
- Elexon client → Raw price cache: caches rows
- Analyst → Build dataset: builds dataset
- Build dataset → Raw price cache: reads prices
- Build dataset → GB calendar: maps periods
- Build dataset → Price cleaning: cleans data
- Build dataset → Processed data: writes dataset
- Analyst → Daily solve: solves day
- Daily solve → Processed data: reads prices
- Daily solve → Battery model: uses specification
- Daily solve → MILP optimiser: solves dispatch
- MILP optimiser → Independent replay: audits schedule
- Analyst → Benchmark run: runs benchmark
- Benchmark run → Processed data: reads prices
- Benchmark run → MILP optimiser: optimises days
- Benchmark run → Results: writes results
- Analyst → Baseline run: runs comparison
- Baseline run → Processed data: reads prices
- Baseline run → Threshold baseline: runs rule
- Baseline run → Results: writes results
- Analyst → Degradation sweep: runs sweep
- Degradation sweep → MILP optimiser: varies wear cost
- Degradation sweep → Results: writes results
- Analyst → Sensitivity analysis: runs scenarios
- Sensitivity analysis → MILP optimiser: varies parameters
- Sensitivity analysis → Results: writes results
- NESO client → NESO portal: queries forecasts