Open-source energy modelling. Unified.
Open-source energy modelling. Unified.
The framework that enables energy data scientists, modellers and researchers to create more resuable, reproducible and benchmarkable energy models.
The framework that enables energy data scientists, modellers and researchers to create more resuable, reproducible and benchmarkable energy models.
Input
dataset = load_dataset("pv-battery") # Dataset
env = SolarBatteryEnv(dataset=dataset) # Environment
agent = BatteryAgent(dataset=dataset) # Agent
obj = EnergyCost(dataset=dataset) # Objective

state = env.reset()
done = False
while done is not True:
    action = agent.act(state)
    state, exogeneous, done, info = env.step(action)
    cost = cost.calculate(state, action, exogeneous)

env.close()
Output

Step 1 - Time interval: 2025-01-20 11-12, Cost: 0.43.

Step 2 - Time interval: 2025-01-20 12-13, Cost: 0.34.

Step 3 - Time interval: 2025-01-20 14-15, Cost: 0.30.

Step 4 - Time interval: 2025-01-20 15-16, Cost: 0.39.

Step 5 - Time interval: 2025-01-20 16-17, Cost: 0.44.

Step 6 - Time interval: 2025-01-20 16-17, Cost: 0.44.

Input
Output
dataset = load_dataset("pv-battery") # Dataset
env = SolarBatteryEnv(dataset=dataset) # Environment
agent = BatteryAgent(dataset=dataset) # Agent
obj = EnergyCost(dataset=dataset) # Objective

state = env.reset()
done = False
while done is not True:
    action = agent.act(state)
    state, exogeneous, done, info = env.step(action)
    cost = cost.calculate(state, action, exogeneous)

env.close()
Input
Output
dataset = load_dataset("pv-battery") # Dataset
env = SolarBatteryEnv(dataset=dataset) # Environment
agent = BatteryAgent(dataset=dataset) # Agent
obj = EnergyCost(dataset=dataset) # Objective

state = env.reset()
done = False
while done is not True:
    action = agent.act(state)
    state, exogeneous, done, info = env.step(action)
    cost = cost.calculate(state, action, exogeneous)

env.close()

Unifying all energy models

Different models for different purposes. enflow enables all different model types to be run and evaluated under one single framework.

Simulation

Models that simulates physical processes and systems. Typically anwers "what-if questions".

Forecasting

Models to forecast future energy supply, demand or market prices.

Optimisation

Models for optimisation of planning or operations given certain constraints.

Agents

Models that take actions to achieve a pre-specified objective.

The sequential decision problem

Any energy simulation, forecasting or optimisation problem can be represented universally as a sequential decision problem.

Agent
Contribution / Cost
Find policy of the agent
Action
New state
Exogenous information
Environment
Find policy of the agent
Agent
Contribution / Cost
Action
New state
Exogenous information
Environment

Energy modelling use cases

The potential use cases for energy modelling are endless. Here are some examples to get you started.

Solar power forecasting

Create machine learning algorithms that forecasts solar power one day ahead.

Hybrid power plant trading

Maximise the revenue of trading in the dayahead electricity market for a wind and solar hybrid power plant.

PV and battery optimisation

Optimise the operation of a battery an solar PV installation to minimise the electricity bill.

Streamlining energy modelling

enflow enables users to adopt sound software engineering principles to improve code modularity and reproducibility. With reusable and composable components, running parametric sweeps becomes a breeze.

Modularity

Modularity through object-oriented code separation enables readability and reusability.

Modularity

Modularity through object-oriented code separation enables readability and reusability.

Modularity

Modularity through object-oriented code separation enables readability and reusability.

Reproducibility

Enable others (and your future self) to easily reproduce results and model artifacts.

Reproducibility

Enable others (and your future self) to easily reproduce results and model artifacts.

Reproducibility

Enable others (and your future self) to easily reproduce results and model artifacts.

Sweeps

Run sweeps for benchmarking, scenario analysis and parameter tuning.

Sweeps

Run sweeps for benchmarking, scenario analysis and parameter tuning.

Sweeps

Run sweeps for benchmarking, scenario analysis and parameter tuning.

Modules and components

enflow consists of a set of components that serve as building blocks to create modular and reusable energy models. One of the main dependencies is EnergyDataModel that provides functionality to represent energy systems.

Energy system

All energy asset and concept components defined by EnergyDataModel.

Problems

A problem is uniquely defined by an environment, a dataset and an objective.

Spaces

Spaces defines input/output interfaces to ensure compatibility across models and environments.

Models

All the different types of energy models for solving specific problems.

Experiment

The experiment is a packaging of components into a fully reproducible unit.

Reproducible results

enflow enables to create reproducible experiments by packaging all the necessary components the dataset, environment, objective, model and parameters.

params.json
Experiment
Problem

Dataset()

Environment()

Objective()

Model

Simulator()

Predictor()

Optimizer()

Agent()

Reproducible results
params.json
Experiment
Problem

Dataset()

Environment()

Objective()

Model

Simulator()

Predictor()

Optimizer()

Agent()

Reproducible results

Sweep over permutations

enflow is built with sweeps in mind, letting you perform evaluations over possible experiment permutations to evaluate robustness, generalisation and perform benchmarking.

Dataset

A

()

Dataset

B

()

Dataset

C

()

Dataset

D

()

Data robustness

Sweep over datasets to assess the robustness of results over different datasets.

Environment

()

Environment

()

Environment

()

Environment

()

Model generalisation

Sweep over experiments to evalutate how generalisable your model is to new environment.

Model

()

Model

()

Model

()

Model

()

Model benchmarking

Sweep over different models to benchmark them and find out which one is best for your problem.

Objective

()

Objective

()

Objective

()

Objective

()

Objective robustness

Sweep over objectives to assess how robust your results are to changing objective functions.

Dataset

A

()

Dataset

B

()

Dataset

C

()

Dataset

D

()

Data robustness

Sweep over datasets to assess the robustness of results over different datasets.

Environment

()

Environment

()

Environment

()

Environment

()

Model generalisation

Sweep over experiments to evalutate how generalisable your model is to new environment.

Model

()

Model

()

Model

()

Model

()

Model benchmarking

Sweep over different models to benchmark them and find out which one is best for your problem.

Objective

()

Objective

()

Objective

()

Objective

()

Objective robustness

Sweep over objectives to assess how robust your results are to changing objective functions.

Become a pioneer

We are looking for a handful of motivated energy data scientists, modellers and researchers who want to work closely together with us to create the future of open-source energy modelling tools. Are you interested in becoming a Pioneer? Let us know!

Developed with

❤️

and

by

© 2025 rebase.energy. All rights reserved.

Developed with

❤️

and

by

© 2025 rebase.energy. All rights reserved.

Developed with

❤️

and

by

© 2025 rebase.energy. All rights reserved.