Interactive dashboard walkthrough · iems-dashboard.pages.dev
A factory pays for electricity from the grid at a price that changes every hour (German day-ahead prices — they can even go negative).
It has three things it cannot control:
…and one thing it can: a 1600 kWh battery. Charge it when power is cheap, discharge when expensive → shift demand in time → lower the bill. That decision is the agent's whole job.
Buy low, store it,
use it when prices are high.
"Price arbitrage" with a battery
P_grid = P_load − P_PV + P_battery · the agent commands only the
green flow; the grid draw is whatever balances the bus.
No labelled data — the agent learns by trial and error from a reward signal, in a loop:
DQN = a neural net that scores every action; a "Double + Dueling" design plus experience replay make it stable. Train 5 seeds, report the average.
One interactive page per agent. It replays the trained policy over the held-out Oct–Dec test set and draws everything from the real step-by-step results:
The 5-seed validated headline: saving, gap to optimum, preserved peak.
Animate any test day step-by-step with a live "what's happening now" narration.
The grid · the agent's decisions · the context · the cumulative cost. (Next slides →)
The next four slides explain each chart and, importantly, what its X-axis and Y-axis mean.
Read it as: the agent (blue) drops during expensive hours and rises when cheap — hugging the LP optimum (purple dashed).
Read it as: the widening gap between the two lines is the money the agent saves over the quarter.
The factory with solar but no battery, no control. The bill to beat — the upper bound on cost.
A solver told the whole day in advance → the cheapest schedule physically possible. The target no controller can beat.
The agent sits between them: 32.9% below the baseline, only 8.0% above the optimum — with no future knowledge beyond published day-ahead prices.
On days it had never seen, the agent learned to cut the electricity bill by about a third — landing within single digits of the perfect-foresight optimum, without making the grid peak worse.
Open a day · press ▶ Play · watch the agent run the battery, minute by minute.
Built with PyTorch · SciPy (LP) · Plotly · Cloudflare Pages