Coordinating generation, storage and grid assets as one fleet usually means a combinatorial optimisation that explodes with scale. We asked a different question: can the structure of the demand signal itself tell each asset what to do — fast enough, and cheap enough, to run on a Raspberry Pi?
Full Stack Energy developed and evaluated a novel control approach for coordinating mixed energy systems — generation, storage and grid-connected assets operating as a single fleet. Instead of solving a unit-commitment and economic-dispatch problem (a combinatorial explosion that scales badly and needs commercial solvers), the method uses the Discrete Wavelet Transform to decompose the demand signal by timescale and map each band to the asset class best suited to serve it. It reaches within 2.3% of the mathematically optimal solution, dispatches a 72-generator fleet in 0.2 milliseconds, and runs as a 90KB dependency-free binary on a Raspberry Pi.
Mixed energy systems share a common failure mode. Individual assets work fine in isolation, but system-level behaviour is poor: batteries cycle inefficiently, grid import is mistimed, backup generators fire when they shouldn’t, and operational decisions bear no relation to the cost signals that determine whether a site makes or loses money.
The standard engineering response is to formulate this as a unit-commitment and economic-dispatch problem, solved with mixed-integer linear programming (MILP) or dynamic programming. These find near-optimal solutions, but they scale badly, require commercial solver licences, and assume infrastructure many real-world sites simply don’t have. A 72-generator fleet has 2⁷² possible on/off states per time interval — more than the number of grains of sand on Earth.
So this project asked a different question: rather than solving a combinatorial explosion at every timestep, can the structure of the demand signal itself be used to derive dispatch decisions?


Electricity demand isn’t a flat number to be met — it’s a layered signal. The Discrete Wavelet Transform separates those layers, and each layer maps cleanly onto the asset built to serve it.
Electricity demand isn't a number to be met — it's a signal with layers. Split it the way an equalizer splits music, and each asset already knows which part it should play.
Lead Engineer, Full Stack Energy
The method was evaluated across synthetic benchmarks, IEEE standard test systems and real Irish grid data from EirGrid. On a microgrid fleet (8 assets, 4 classes) it came within 2.3% of the mathematically optimal solution on 7-day profiles — a result that would otherwise require exhaustive dynamic programming — and outperformed conventional merit-order scheduling by 36–42% on total cost. On the IEEE RTS-GMLC benchmark (72 generators, 48 hours), where the optimal is computationally intractable, it dispatched the entire fleet in 0.2 milliseconds.
The EirGrid results were more nuanced — and that nuance is a central finding, not a caveat. After subtracting volatile wind, the residual load loses its multi-scale structure (96% of variance sits in the baseload band), so the wavelet decomposition stays correct but adds less over simpler methods; on gross demand profiles, which retain their diurnal structure, it showed 18–20% improvement pathways. In short: the method’s effectiveness correlates with the spectral richness of the signal.
A companion case study applied it to a real 60-lodge Irish holiday park — micro-hydro, wind, distributed solar, seven independently-owned batteries, diesel backup and a metered grid connection. The wavelet dispatch coordinated all of it as a single system, kept the diesel generator off throughout normal operation, and identified which asset class would hit capacity first as the park grows — feeding directly into capital-planning decisions.
The honest headline of this work is the EirGrid result. It would have been easy to bury the fact that the method adds less value once you strip out wind and the signal flattens into baseload — but that finding, that effectiveness tracks the spectral richness of the demand, is genuinely useful. It tells you exactly which sites the technique is right for, which is worth more than a flattering benchmark.
The part that excites us commercially is the footprint. A 90KB binary with sub-millisecond execution on a Raspberry Pi means you can put genuine real-time coordination on sites that could never justify a commercial solver licence or guarantee cloud connectivity. That’s the difference between a clever paper and something you can actually deploy.
It's a control method that decomposes the electricity demand signal by timescale using the Discrete Wavelet Transform, then maps each frequency band to the asset class best suited to serve it — baseload generation for slow demand, flexible plant for daily variation, fast storage for transients. Dispatch emerges from the signal's structure instead of solving a combinatorial unit-commitment problem.
Because it scales badly. A 72-generator fleet has more possible on/off states per interval than there are grains of sand on Earth, and MILP or dynamic-programming solvers need commercial licences and infrastructure many sites lack. The wavelet method is O(N log N) in signal length, so there's no exponential blow-up — it runs as a 90KB dependency-free binary on a Raspberry Pi and dispatches 72 generators in 0.2 milliseconds.
On a 7-day microgrid it came within 2.3% of the mathematically optimal solution and beat conventional merit-order scheduling by 36–42% on cost. Crucially, its effectiveness tracks the spectral richness of the demand signal — on EirGrid residual load dominated by baseload it adds less, while signals that retain diurnal structure show 18–20% improvement pathways.
When MILP won't scale or won't fit on-site, a signal-structure approach can. We bring research-grade methods to real dispatch problems. Let's talk.