The Virtual Power Plant Simulator is an open source project aiming to simulate a neighborhood-scale Virtual Power Plant (VPP) in real time.
The simulator models a local distribution feeder with a mix of flexible and inflexible devices, including:
- ☀️ Residential solar PV
- 🔋 Home battery storage systems
- 🚗 EV charging stations
- 💡 Flexible and baseline household demand
- 🧠 A coordinating aggregator (the "VPP")
- 🚨 Demand response events for temporary load reduction
- 📏 Feeder import/export capacity constraints
- 📊 End-of-run KPI reporting
The simulation advances in fast-forwarded, discrete time steps (e.g. 5-minute intervals), allowing users to explore different configurations and control strategies through terminal output.
🚧 Work in Progress – This repository is under active development and working towards MVP status.
Stay tuned!
Running the default binary triggers a demonstrative 24-step (1-hr interval) simulation with:
- Baseline load + solar generation
- Flexible EV charging demand
- Battery tracking control
- Feeder import/export limits
- A demand response event window
- Post-run KPI summary
cargo run --releaseTime (Hr) 0: BaseLoad=1.35 kW, RawBase=1.35 kW, Forecast=0.79 kW, Target=0.79 kW,
SolarPV=0.00 kW, EvCharger=0.00 kW (Req=0.00, DR=0.00, Cap=0.00),
Battery=0.56 kW (SoC=44.1%), MainFeeder=0.79 kW, Error=0.00 kW,
DR(req=0.00, done=0.00), LimitOK=true
...
# demand response event active; EV/baseload may be curtailed
Time (Hr) 18: BaseLoad=0.40 kW, RawBase=1.20 kW, Forecast=0.96 kW, Target=0.79 kW,
SolarPV=0.00 kW, EvCharger=0.70 kW (Req=1.20, DR=0.70, Cap=0.70),
Battery=0.31 kW (SoC=40.2%), MainFeeder=0.79 kW, Error=0.00 kW,
DR(req=1.50, done=1.30), LimitOK=true
...
--- KPI Report ---
RMSE tracking error: 0.084 kW
Curtailment achieved: 92.5%
Feeder peak load: 3.91 kW
Notes:
- Example values are illustrative; exact numbers depend on random seeds and configuration.
LimitOK=trueindicates the feeder stayed within configured import/export limits at that timestep.
The documentation for this project can be opened locally using:
cargo doc --openIt contains detailed information about the architecture, modules, and usage of the simulator.
This project is licensed under the MIT License. See the LICENSE file for details.