energy-py-linear is a library for optimizing energy systems using mixed integer linear programming. Linear programming can guarantee convergence to the optimal solution of convex linear equations.
Battery storage and combined heat and power are two examples of energy systems that can be optimized as linear programs.
import energypylinear as epl model = epl.Battery(power=2, capacity=4, efficiency=1.0) prices = [10, 50, 10, 50, 10] # returns a list of ordered dictionaries info = model.optimize(prices, timestep='30min') # pandas can be used to make the output human readable import pandas as pd pd.DataFrame().from_dict(info) Import [MW] Export [MW] Power [MW] Charge [MWh] 0 2.0 0.0 2.0 0.000000 1 0.0 2.0 -2.0 0.066667 2 2.0 0.0 2.0 0.000000 3 0.0 2.0 -2.0 0.066667 4 NaN NaN NaN 0.000000
Note that the last row is all
NaN except for the
Charge - this is because the
Charge indicates the battery position at the start of each interval. The last row is included so we can see the battery level at the end of the optimization run.
It is also possible to send in forecast prices along with actual prices, and to change the initial charge. The model optimizes for the forecasts - this allows measurement of forecast quality by comparing actual with forecast costs.
# a forecast that is the inverse of the prices we used above >>> forecasts = [50, 10, 50, 10, 50] >>> info = model.optimize(prices, forecasts=forecasts, timestep='30min')
$ git clone https://github.com/ADGEfficiency/energy-py-linear $ python setup.py install
The main dependency of this project is PuLP. For further reading on PuLP:
- the white paper - An Introduction to pulp for Python Programmers
- the blog post series Introduction to Linear Programming with Python and PuLP - especially Part 6 which covers how to formulate more complex conditional constraints.