The Powerlys engine

The engine behind the +14.0%.

Weather ensembles and live market data in, risk-aware dispatch out: a MILP planner for the optimal plan, a CVaR planner that prices the worst hour before it happens, recomputed every 15 minutes. Proven on real Dutch market data, built for Europe’s merchant era.

Weather ensemble51 members Market dataTenneT · ENTSO-E Asset constraints4 topologies MILP plannerglobally optimal CVaR plannerprices the tail Rule-based flooralways safe Dispatchevery 15 min
Engine at a glance

What the planner runs on.

One optimisation core, rebuilt every settlement period, tuned to the physics of each asset and the volatility of Europe’s 15-minute imbalance markets.

Cadence
Every 15 min
Optimisation
MILP + CVaR
Risk model
Worst 5% tail
Topologies
4 native
Forecast front-end
51-member ensemble
Market data
TenneT · ENTSO-E
Horizon
Day-ahead → intraday
Maturity
TRL 6 · shadow mode
The daily cycle

The night closes yesterday. The afternoon plans tomorrow.

Nothing here is interactive. Two scheduled blocks run every day without anyone present: one settles and scores the day that just ended, the other builds the plan for the day that has not started. All times UTC.

Overnight 02:05 – 03:20 UTC Yesterday is settled, costed and scored
02:05

Settlement prices land

The TSO’s settlement prices for the previous day are fetched. These are the real numbers the day is judged against, not the forecast it was planned on.

02:30

Yesterday is costed, period by period

Imbalance cost is computed for every settlement period from the live plan, the delivered volume and the settlement price. What the plan actually cost, rather than what it was expected to cost.

03:00

Actuals are assembled

The delivered side of the ledger is put together for the last three complete days, so a night the stack is down repairs itself the next night rather than leaving a hole.

Until an operator’s telemetry is connected, the plant response at this step is modelled rather than measured, and labelled as such everywhere it surfaces. Prices and decisions are real; this is the one leg a pilot supplies.
03:20

Planned against actual, per planner

Revenue captured, imbalance paid and delivery accuracy are scored separately for each planner and written to the ledger, one row per decision. This is the record an operator audits against their own settlement statements.

10 h 40 m Not idle time. The day-ahead auction clears around midday, so tomorrow’s price curve does not exist yet. The scoring of yesterday is finished long before it does.
Afternoon 13:00 – 14:15 UTC Tomorrow is forecast, then optimised
13:00

Market

The cleared day-ahead curve, plus the TSO imbalance prices already on the books.

13:10

Weather

A 51-member ensemble, carried forward as scenarios rather than collapsed into one number.

13:30 / 13:35

Generation

Solar and wind scenarios built from the ensemble through each plant’s own physics, then read out as P10 / P50 / P90.

standing

Plant & carry-over

Grid limit, battery power and energy, round-trip efficiency, cycle wear, plus the state of charge carried across midnight.

14:00 – 14:10

Optimise

Three planners, identical inputs, five minutes apart
14:00rule v1A fixed heuristic. The baseline everything else is measured against.
14:05MILPMaximise expected revenue, solving the whole day as one problem.
14:10CVaRPrice the tail of the outcome distribution, not just its average.

A fourth pass at 14:15 re-solves the expected-value plan at 15-minute resolution, and an intraday planner re-runs every four hours as fresher prices and forecasts arrive. The staggering is deliberate: each planner gets the solver and the database to itself.

96 setpoints for the day Each one stored with the full rationale that produced it.

Scored ten hours before it plans

Yesterday’s ledger closes at 03:20; tomorrow’s plan is written at 14:00. Every plan comes from a system that already knows, in settled numbers, how the last one performed.

Identical inputs, three answers

All three planners run every day on the same prices, the same scenarios and the same plant. That is what makes the comparison in the dashboard an honest one rather than a demo.

Nobody is in the loop at 14:00

The dashboard is a read-out of decisions already taken, not a cockpit. An operator reviews the reasoning afterwards; they never have to be at a desk for the run itself.

Core architecture

Three planners in parallel. Never a single blind spot.

Every 15 minutes Powerlys runs three planners and picks the best, so the system is optimal when it can be, and safe when it can't.

Optimise

MILP planner

A mixed-integer optimiser finds the globally optimal dispatch across the portfolio, given the forecast and every physical constraint, ramp limits, state-of-charge, cycle budgets.

Protect

CVaR tail-risk planner

An explicit risk dial aggressive, balanced, or conservative that prices the worst 5% of outcomes directly. Risk committees and lenders read it natively; a black box doesn't.

Fall back

Rule-based floor

A transparent rule-based planner as the safety floor, so there is always a sound decision even when data or models are degraded.

Deep dive

Pricing the worst hour, not the average one.

Operators settle imbalance every 15 minutes against prices that can swing by thousands of euros per MWh within a single day. Optimising the average outcome leaves the tail unmanaged and the tail is where portfolios bleed.

  • Conditional Value-at-Risk targets the mean of the worst-case scenarios, not just their probability.
  • Linearised via the Rockafellar–Uryasev formulation, so it stays a single, solvable MILP at settlement cadence.
  • One risk dial moves the whole portfolio from aggressive to conservative and is auditable, not a hidden hyper-parameter.
  • In a controlled simulation experiment the three planners separate exactly as designed: the CVaR planner trades a slice of planned revenue for a large cut in worst-period imbalance exposure. That is designed behaviour, not field skill.
  • On real Dutch market data the engine holds ~99.99% scheduled-delivery reliability across the backtested window.
  • In a 79-day backtest on real Dutch day-ahead and TenneT imbalance settlement prices (v2 of the paper), the expected-value optimiser captured +14.0% revenue over rule-based dispatch. The simulation’s imbalance-cost separation did not reproduce in that benign spring–summer window. The CVaR planner’s tail-insurance value is a pilot measurement, not a claim.
  • Measured on 14 September 2026 against a second baseline, a one-cycle desk heuristic on day-ahead prices alone (charge the cheapest hours, discharge the most expensive), the optimiser’s advantage over the same 79 days is one to two percent, and about three percent with perfect price foresight. The +14% is the gap between threshold rules and one disciplined daily cycle. The engine’s remaining value sits in intraday re-planning, imbalance exposure and portfolio constraints, which is where we measure next.
  • Re-cut on 12 August 2026 over the full 109-day real-price window (24 Apr – 10 Aug): the uplift held at +14.1%, the same figure as the window grew through summer volatility. The CVaR planner’s zero-imbalance profile was measured on real prices for the first time (€0.00 over 109 days, 100.0% delivery accuracy) at a measured premium of ~27% of revenue versus the expected-value planner: insurance paid for in a window whose tail never arrived. Which of the two you want is a risk decision, and it is the operator’s.
  • Where the optimiser’s edge concentrates: on the window’s worst day the rule-based baseline kept €178 of revenue while the optimisers kept ≈€1,000, and at the 5th-percentile day the advantage is +52%, against +14% on the mean day. Optimisation matters most on the days that hurt.
Whitepaper

Pricing the Worst Hour: Toward CVaR-Optimized Dispatch for Renewable Portfolios under Imbalance-Price Tail Risk

Omer Bumin · ORCID 0009-0007-3605-2127 · v3 · revised 5 September 2026 · SSRN preprint · doi:10.2139/ssrn.7147659

The method paper behind this section: the CVaR planner, its Rockafellar–Uryasev linearisation, and how it sits alongside the expected-value MILP and the rule-based fallback across four asset topologies. The evidence has three legs: a controlled simulation experiment that shows how the method behaves; a 79-day backtest on real Dutch day-ahead and TenneT imbalance settlement prices, in which the expected-value planner’s +14.0% revenue uplift reproduced, and the simulation’s imbalance-cost separation did not; and, new in v3, a 29-day standalone-battery measurement on real day-ahead prices, reported as an upper bound because it prices energy only. What the tail insurance is worth in volatile windows is what pilots settle.

Read the preprint on SSRN
Forecast front-end

Uncertainty in, not a single guess.

The planner is only as good as what it sees. Powerlys feeds it a full spread of futures, not one point forecast.

Ensemble

51-member weather

A full weather ensemble captures the range of what wind and irradiance could do. This is the raw material for honest risk, not false precision.

Physics

Physics-based generation

Each weather member is converted to power through the asset's own physics and turbine curves, panel geometry not a fitted black box.

Scenarios

Scenario generation

Generation and price scenarios feed the CVaR planner directly, so the dispatch decision already accounts for the spread of outcomes.

Asset coverage

Four topologies, one engine.

The same optimisation core handles every asset shape natively and no bolt-on models, no per-asset rewrites.

Solar

Irradiance-driven generation with curtailment and inverter limits.

Wind

Turbine power curves with ramping and availability constraints.

Hybrid

Co-located generation plus storage, co-optimised as one asset.

Standalone battery

State-of-charge, cycle budgets and degradation priced into every cycle.

Validation

Built, and validating on real data.

Where the engine is on the path from prototype to production, stated honestly.

Engine

Core built

MILP + CVaR planner and forecast front-end implemented across four topologies.

Now

Shadow mode

Running on real Dutch market data with TenneT imbalance, ENTSO-E day-ahead, weather feeds.

Evidence

Backtested

Results to date are backtests on real market data, documented in the CVaR whitepaper.

Why now

The market is moving exactly toward our edge.

Subsidies → market risk

The Dutch SDE++ era is giving way to merchant exposure (support already stops during negative-price hours, and new capacity increasingly runs fully merchant), so dispatch quality lands straight on the P&L.

Batteries scaling fast

Grid congestion and a volatile imbalance market are pulling utility-scale batteries onto the Dutch grid at record pace, and batteries are where dispatch value and tail risk concentrate.

Rising volatility

Negative-price hours and intraday spreads keep setting records. Every trend widens exactly the gap our tail-risk engine is built to close.

Positioning

Three boxes exist. We’re building the fourth.

Every renewable operator today sits in one of three boxes, and each one leaves the same gap open.

Box one

Price-forecast vendors

They sell you a better guess at tomorrow’s prices. But the decision (and the risk) stays on your desk. A forecast alone doesn’t earn; acting on it does.

Box two

Trading-as-a-service

They trade on your behalf, and your control, your data, and your decision history leave the building with them. You see the outcome, not the reasoning.

Box three

The status quo

Spreadsheets and fixed rules, tuned to the average day. The tail (the worst 15-minute periods, where portfolios actually bleed) goes unmanaged.

The fourth box

Powerlys is decision software.

Not a forecast you still have to act on. Not a desk you hand your keys to. Software that produces the dispatch decision itself (day-ahead bid, charge/discharge plan, imbalance position, every 15 minutes) while three things stay true: control stays with the operator, risk is priced explicitly on an auditable CVaR dial, and the result is measured: +14.1% revenue over rule-based dispatch across 109 days of real Dutch market prices, method published on SSRN.

Common questions

Facts about the engine.

Is the dispatch a black box?
No. The CVaR risk dial is explicit and auditable. Aggressive, balanced or conservative and the rule-based floor is fully transparent. Risk committees and lenders can read why a decision was made, which a neural black box can't offer.
What does "every 15 minutes" mean?
Dutch and German imbalance both settle per 15-minute period (PTU / Viertelstunde). Powerlys recomputes the optimal dispatch each period against the latest forecast and market signals, rather than fixing a plan once a day.
What is CVaR, in one line?
Conditional Value-at-Risk is the average outcome across the worst tail of scenarios (here, the worst 5%). Optimising it directly means the plan is chosen to limit how bad the bad hours get and not just the expected case.
Do you need our data on your servers?
Pilots run on your data with a clean exit and you keep everything. The engine ingests standard market and telemetry feeds; nothing is locked in.
How mature is it? (TRL)
TRL 6: the full engine runs on real Dutch market data in shadow mode across four topologies. Results to date are backtests on real market data; live operator pilots are the next step.
Where we are, honestly

No overclaiming.

Powerlys is TRL 6 today, running on real market data in shadow mode across four asset topologies. Results to date are backtests on real market data (validated on live Dutch market data since April 2026, the strictest 15-minute imbalance regime in Europe); live pilots with operators are the next step. The company is in formation, with headquarters planned in Zurich.

MILP + CVaR engine Real market data Pre-pilot Validating Istanbul · Zurich
Get in touch

See what Powerlys would have done
with your portfolio.

We run a no-cost pilot on your data. You keep everything, clean exit and show the dispatch value first-hand.

Book a demo