CoolFace
Datasetpublic

mrvictoru/AEMO_simulated_trade_sdp

AEMO SDP-Teacher Trajectories Offline trajectories for Decision Transformer training, generated by replaying the honest SDP/MPC executor on historical Australian NEM (AEMO) market data. These are the teacher trajectories from the energydecision research codebase. Each row is a single 5-minute market interval with a self-consistent (normalized observation, 9-dim action, reward) triple: the action is what the honest optimal planner dispatched, the reward is what it earned, and the… See the full description on the dataset page: https://huggingface.co/datasets/mrvictoru/AEMO_simulated_trade_sdp.

sourceHugging Facemitupdated 12d agoView on Hugging Face
0likes59downloads
Dataset Card

AEMO SDP-Teacher Trajectories

Offline trajectories for Decision Transformer training, generated by replaying the honest SDP/MPC executor on historical Australian NEM (AEMO) market data. These are the teacher trajectories from the energydecision research codebase.

Each row is a single 5-minute market interval with a self-consistent (normalized observation, 9-dim action, reward) triple: the action is what the honest optimal planner dispatched, the reward is what it earned, and the observation is the environment state under that action.

2026-09 update (physics-v2): the shipped corpus was regenerated with the corrected degradation/efficiency physics and a wear-calibrated teacher (planner per-step wear matched to the environment's realized per-cycle wear; --deg-calibration 0.12). It supersedes dt_trajectories_jtsoc_combined.parquet.

Files

FileEpisodesRowsRTGStatus
`dt_trajectories_jtsoc_v2cal_conservative.parquet`3203.13M`rtg_value` = J_t(soc) cost-to-go✅ Training data of the shipped physics-v2 model
dt_trajectories_jtsoc_combined.parquet6406.27Mrtg_value = J_t(soc)Historical (v1 Stage C training data; pre-physics-fix)

(Removed 2026-09: the Stage B discounted-return corpora dt_trajectories_full.parquet and dt_trajectories_aggressive.parquet, which paired with the deleted Stage B model weights.)

What is different about the physics-v2 corpus?

  1. 1.Wear-calibrated teacher. The planner's per-step wear estimate previously over-counted the environment's realized (per-closed-cycle) wear by ~8.4× on identical actions, making the distilled policy over-conservative. A deg_calibration factor was added and the corpus regenerated with --deg-calibration 0.12, so the teacher's planned wear matches the environment's accounting. Net effect vs the pre-fix corpus: energy dispatch ≈ −27%, FCAS bidding ≈ +14%, and the retrained standalone DT beats the previous shipped checkpoint on 3/4 identity surfaces.
  2. 2.Corrected shared physics. Round-trip efficiency (0.80), calendar aging, and corrected rainflow C-rate units are active in both the teacher and the environment.

The shipped model trained on this corpus is `energydecision-dt-v2-sdp` (aemo_dt_sdp_jtsoc_v2cal.pt). Train on it with --rtg-source j_t_soc (consumed via the rtg_value column).

Schema

ColumnTypeDescription
stepintStep index within the episode
norm_observationlist[float] (18)Normalized observation: time (hour/day sin/cos), is_peak, RRP, TOTALDEMAND, 8× FCAS prices, solar/wind fraction, SOC fraction
raw_observationlist[float] (18)Raw (unnormalized) observation, same layout
actionlist[float] (9)full_fcas action: [energy_dispatch, 8× FCAS bids]; energy ∈ [-1,1] (charge +, discharge −), FCAS ∈ [0,1]
rewardfloatPer-step env reward (profit in $, divided by 1000)
infodictEnv step info (revenue/degradation breakdown)
episode_idstr{REGION}__{horizon}__{battery}__epNNN
source_policystrAlways sdp_teacher
regionstrNSW1, QLD1, SA1, TAS1, or VIC1
batterystrmedium_1c (10 MWh), fast_375c (8 MWh), large_07c (50 MWh), or small_05c (2 MWh)
rtg_valuefloatjtsoc_* files only — J_t(soc) cost-to-go at this step (state-dependent remaining value under the seasonal forecast)

Dataset composition

  • —Shipped physics-v2 corpus: 320 episodes / 3.13M rows
  • —5 regions × 2 horizons (short ≈ 14-day, medium ≈ 8-week) × 4 battery sizes × 8 episodes each — balanced
  • —Time range: 2021–2023 (training-era, pre-eval)

How it was generated

Each episode is a random window sliced from the region's cached preprocessed 5-minute AEMO data (processed_{REGION}_2021-2023.parquet), replayed through the honest SDP/MPC executor:

  1. 1.A seasonal time-of-day RRP forecast built from training-era data only (the predictable diurnal/monthly structure; spikes excluded).
  2. 2.A stochastic dynamic program (AEMOSDPSolver) plans energy dispatch (backward induction over the forecast, degradation-aware via a corrected per-step wear estimate scaled by deg_calibration).
  3. 3.A greedy current-price FCAS bidder allocates residual headroom to the highest-priced raise/lower service each step.
  4. 4.The free-terminal recursion yields the Jt(soc) cost-to-go table, sampled per step into `rtgvalue`.

No future (realized) prices are used — the teacher is honest (non-clairvoyant). See src/aemo_sdp_executor.py and scripts/generate_sdp_dt_trajectories.py in the energydecision repo.

Usage

python
import polars as pl

df = pl.read_parquet("hf://datasets/mrvictoru/AEMO_simulated_trade_sdp/dt_trajectories_jtsoc_v2cal_conservative.parquet")
print(df.height)  # 3,133,440

Decision Transformer training

The schema matches the TrajectoryDataset used by scripts/pretrain_decision_transformer.py. Train a 9-dim full_fcas Decision Transformer (8×768, mixed Tanh/Sigmoid action head) on the physics-v2 corpus with --rtg-source j_t_soc → the shipped configuration.

Related