Abstract
This result presents a replayable offline challenger for Iberian BESS dispatch. A deterministic policy portfolio is evaluated against frozen OMIE day-ahead scenarios, a commercial quantile baseline, and a perfect-foresight upper bound under one explicit battery contract.
The accepted policy reduces the published weighted euro-like score from a 72.544043 quantile-dispatch baseline to 48.086813 while preserving zero constraint breaches. That is an absolute delta of 24.457230 score units and a 33.71363% relative reduction. The claim is intentionally bounded: this is evidence that Göther Labs can produce auditable improvement candidates and stress-case readouts for optimizer teams, not evidence of live trading readiness.
1. Problem formulation
This result evaluates a single 1 MW / 4 MWh battery trading frozen OMIE day-ahead price scenarios. The policy decides hourly charge and discharge while respecting power, state-of-charge, efficiency, and terminal SOC constraints.
The pre-sell question is deliberately narrow: can a replayable challenger discover an auditable improvement candidate against a commercial dispatch baseline, while keeping every constraint and weak case visible? The result should be read as a professional offline benchmark, not as a claim about live bidding or a replacement for a client optimizer.
2. Optimizer team readout
This result is designed to answer the questions a battery optimizer team will ask before trusting a challenger: whether the baseline is explicit, whether the improvement survives replay, whether weak cases remain visible, and whether the evidence is tied to public artifacts.
| Buyer question | Published evidence | Why it matters |
|---|---|---|
| Can it improve a named commercial baseline? | 72.544 → 48.087 score, 33.714% relative reduction, €20.20/day mean gross uplift | The claim is anchored to the quantile dispatch baseline, not to the perfect-foresight oracle. |
| Does the candidate stay feasible? | 0 constraint breaches, exact replay status, terminal SOC and simultaneous-power checks | A challenger is only useful if it cannot win by breaking dispatch or battery constraints. |
| Are weak cases still visible? | 8 frozen scenarios across 3 splits, including stress-tail rows and zero-uplift cases | The aggregate result does not hide flat or weaker days that an optimizer team will want to inspect. |
| Can the result be replayed from artifacts? | accepted_candidate.py, comparison rows, dispatch trace, score trace, and replay checks | The pre-sell asset is an auditable benchmark surface, not a slide-only performance claim. |
3. Evaluation contract
The public benchmark is the Iberian BESS Policy Challenge v0.1. It compares the accepted policy against commercial baselines and a perfect-foresight LP upper bound. The oracle is not a sales baseline; it is the remaining headroom under the same simplified physical model.
| Field | Public contract |
|---|---|
| Market scope | OMIE day-ahead · Iberia · 24 hourly decisions |
| Asset | single 1 MW / 4 MWh battery |
| Scenario coverage | 8 frozen scenarios across development, public-test, and stress-tail splits |
| Primary comparison | quantile_dispatch_baseline |
| Oracle role | perfect_foresight_lp_upper_bound is an upper-bound diagnostic, not the commercial baseline |
| Guardrails | terminal SOC, feasibility, simultaneous power, split coverage, and zero constraint breaches |
4. Commercial baseline result
The seed quantile baseline scored 72.544043. The accepted policy portfolio scored 48.086813, a reduction of 24.45723 score units (33.71363%).
Across the eight frozen scenarios for the single 1 MW / 4 MWh battery, the accepted policy produced 20.197299 EUR/day mean gross simulated dispatch-profit uplift against the quantile comparison baseline, with 0.0 constraint breaches and a downside rate of 0.0. This uplift is before the degradation-cost proxy; the cycle-adjusted margin reports that proxy separately. The benchmark excludes intraday and reserve revenues, imbalance settlement, taxes, grid and portfolio effects, and production bidding constraints.
| Scenario | Split | Shape | Uplift | Regret | Oracle capture | Health |
|---|---|---|---|---|---|---|
omie_20240115 |
development | winter, medium_spread | €43.10 | €27.75 | 74.930% | clean |
omie_20240415 |
development | spring, near_zero_or_negative_prices, low_spread | €17.72 | €6.33 | 90.708% | clean |
omie_20240715 |
development | summer, high_spread | €0.00 | €61.55 | 83.919% | clean |
omie_20241015 |
public_test | autumn, medium_spread | €20.32 | €20.96 | 87.600% | clean |
omie_20250115 |
stress_tail | winter, extreme_price_spike, high_spread | €0.00 | €11.18 | 95.843% | clean |
omie_20250415 |
public_test | spring, near_zero_or_negative_prices, low_spread | €28.27 | €25.47 | 84.965% | clean |
omie_20250715 |
public_test | summer, high_spread | €17.19 | €45.55 | 86.833% | clean |
omie_20250915 |
stress_tail | late_summer, high_spread | €34.99 | €21.78 | 94.959% | clean |
5. Accepted policy
The accepted policy is a small deterministic portfolio. It evaluates several valid dispatch heuristics on the same daily price horizon and selects the highest-margin valid plan. This is intentionally simple: the pre-sell point is not to replace a client optimizer, but to show that an offline policy challenger can find auditable improvement candidates under a fixed contract.
1"""Accepted storage_arbitrage_es policy used for the public pre-sell proof."""2 3from __future__ import annotations4 5from domains.storage_arbitrage_es.evaluator import (6 build_conservative_cycle_baseline,7 build_quantile_baseline,8 build_spread_tb4_baseline,9 simulate_dispatch,10)11from domains.storage_arbitrage_es.program import DispatchContext, DispatchPlan12from domains.storage_arbitrage_es.program import dispatch_policy as checked_in_policy13 14 15def dispatch_policy(ctx: DispatchContext) -> DispatchPlan:16 """Choose the highest-margin valid plan from a small deterministic policy portfolio."""17 candidates: list[tuple[float, str, DispatchPlan]] = []18 for label, builder in (19 ("quantile", build_quantile_baseline),20 ("spread_tb4", build_spread_tb4_baseline),21 ("conservative", build_conservative_cycle_baseline),22 ):23 plan = builder(ctx.prices_eur_per_mwh, ctx.spec)24 simulation = simulate_dispatch(ctx.prices_eur_per_mwh, plan, ctx.spec)25 if simulation.valid:26 candidates.append((float(simulation.profit_eur), label, plan))27 28 checked_plan = checked_in_policy(ctx)29 checked_simulation = simulate_dispatch(ctx.prices_eur_per_mwh, checked_plan, ctx.spec)30 if checked_simulation.valid:31 candidates.append((float(checked_simulation.profit_eur), "checked_in", checked_plan))32 33 if not candidates:34 return build_quantile_baseline(ctx.prices_eur_per_mwh, ctx.spec)35 36 candidates.sort(key=lambda item: (item[0], item[1]), reverse=True)37 return candidates[0][2]
6. Tail behavior
The comparison bundle keeps every scenario visible, including stress-tail days and weaker cases. The public claim uses aggregate uplift together with p5/p95 uplift, regret, cycle-adjusted margin, and constraint health.
| Check | Result | Why it matters |
|---|---|---|
| Exact replay | pass | The accepted candidate reproduces the published score from the checked-in artifact. |
| Constraint breaches | 0 | No scenario is allowed to win by violating battery or dispatch constraints. |
| Baseline shortfall | €0.00 | The public aggregate does not hide a penalty against the primary comparison baseline. |
| Forecast-error smoke | valid | A deterministic 8% perturbation suite is included as a realism smoke, separate from the perfect-foresight claim. |
| Worst smoke cost | €12.67 | Largest positive cost observed in the small forecast-error smoke subset. |
7. Limitations
This is an offline day-ahead benchmark over frozen scenarios. It is not production trading, not a live bidding system, not an official market benchmark, and does not model intraday, reserves, imbalance settlement, taxes, grid constraints, or portfolio effects.
8. Reproducibility
The bundle includes the accepted candidate, evaluation contract, comparison rows, dispatch trace, replay data, forecast-error smoke output, metrics, score trace, and provenance. These checked-in artifacts provide the public reproducibility surface while excluding non-public operational material.
The source bundle is available in the Göther Labs results repository.
9. Private challenge
The natural next step is not a generic demo. It is a small private policy challenge using the client's current baseline, approved scenarios, battery contract, and operational guardrails.
Next commercial step
Turn this public replay into a private baseline challenge.
Bring the battery spec, current dispatch policy or comparison baseline, approved scenarios, and hard constraints. We return a replayable decision pack: aggregate uplift, weak-case rows, dispatch traces, replay checks, limitations, and a recommendation on whether there is enough signal to continue.