Iberian BESS Policy Challenge

A deterministic BESS dispatch policy is challenged against frozen Iberian day-ahead scenarios, commercial baselines, and a perfect-foresight upper bound with explicit risk and constraint readouts.

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.

Day-ahead BESS dispatch challenger 2024-10-15 · public_test price SOC charge discharge OMIE day-ahead price 0 63 126 EUR/MWh Accepted battery action 0 6 12 18 23 hour of day MW action SOC MWh 0 2 4 Charge is below zero; discharge is above. SOC uses the right-hand MWh scale. Replay checks terminal SOC, feasibility, simultaneous power, and downside. Relative score reduction 33.714% 72.544 → 48.087 Mean gross uplift €20.20/day vs quantile · before degradation proxy Scenario uplift €20.32 omie_20241015 Guardrails 0 breaches 0 downside days
Figure 1. Customer-facing BESS dispatch readout. Price, battery action, SOC, and commercial guardrails are separated into one auditable day-ahead benchmark view.

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.
Table 1. Buyer-facing readout for optimizer teams reviewing the Iberian BESS challenger.

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
Table 2. Frozen public contract used for the Iberian BESS result.

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.

Accepted policy readout Mean gross upliftvs quantile €20.20 before degradationproxy Cycle-adjustedmargin €206.48 after degradation cost Mean regretto oracle €27.57 remaining headroom p95 regret €55.95 tail diagnostic Downside rate 0.000% vs primary baseline Constraintbreaches 0 hard guardrail
Figure 2. Commercial and risk readout for the accepted policy. The page leads with the primary baseline uplift and keeps oracle regret and constraints in the same evidence block.
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
Table 3. Scenario-level evidence. Zero uplift cases are retained because they are part of the public benchmark contract.

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]
Listing 1. Accepted deterministic policy portfolio. The candidate evaluates checked-in dispatch builders under the same simulator and returns the highest-margin valid plan. Full executable artifact.
Frozen public score trace (lower is better) seed baseline replayed objective accepted portfolio 40 65 90 seed baseline checked-in policy accepted portfolio acceptance score 72.5 82.0 48.1
Figure 3. Score trace for the frozen public chain. The accepted policy portfolio is selected by the replayed lower-is-better objective.

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.

omie_20250115 2025-01-15 · stress_tail uplift €0.00 · regret €11.18 · clean constraints price SOC charge discharge OMIE day-ahead price 0 113 225 EUR/MWh Accepted battery action 0 6 12 18 23 0 2 4 hour of day MW action SOC MWh
Figure 4. Stress-tail dispatch trace readout for the 1 MW / 4 MWh battery. The visualization is backed by the public dispatch_trace.json artifact and keeps the weak-case row visible.
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.
Table 4. Replay and robustness checks published with the result bundle.

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.

Public proof 33.714% relative score reduction quantile baseline → accepted
Guardrail 0 breaches exact replay constraint check
Commercial readout €20.20/day mean gross uplift vs quantile · before degradation