All Projects → ADGEfficiency → energy-py-linear

ADGEfficiency / energy-py-linear

Licence: other
Optimize battery storage using mixed integer linear programming

Programming Languages

Jupyter Notebook
11667 projects
python
139335 projects - #7 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to energy-py-linear

NumDiff
Modern Fortran Numerical Differentiation Library
Stars: ✭ 48 (+45.45%)
Mutual labels:  optimization
Teg
A differentiable programming language with an integration primitive that soundly handles interactions among the derivative, integral, and discontinuities.
Stars: ✭ 25 (-24.24%)
Mutual labels:  optimization
utf8
Fast UTF-8 validation with range algorithm (NEON+SSE4+AVX2)
Stars: ✭ 60 (+81.82%)
Mutual labels:  optimization
REopt Lite API
The model for the REopt API, which is used as the back-end for the REopt Webtool (reopt.nrel.gov/tool), and can be accessed directly via the NREL Developer Network (https://developer.nrel.gov/docs/energy-optimization/reopt/v1)
Stars: ✭ 53 (+60.61%)
Mutual labels:  optimization
falcon
A WordPress cleanup and performance optimization plugin.
Stars: ✭ 17 (-48.48%)
Mutual labels:  optimization
Coluna.jl
Branch-and-Price-and-Cut in Julia
Stars: ✭ 128 (+287.88%)
Mutual labels:  optimization
yask
YASK--Yet Another Stencil Kit: a domain-specific language and framework to create high-performance stencil code for implementing finite-difference methods and similar applications.
Stars: ✭ 81 (+145.45%)
Mutual labels:  optimization
nuxt-prune-html
🔌⚡ Nuxt module to prune html before sending it to the browser (it removes elements matching CSS selector(s)), useful for boosting performance showing a different HTML for bots/audits by removing all the scripts with dynamic rendering
Stars: ✭ 69 (+109.09%)
Mutual labels:  optimization
PyOptSamples
Optimization sample codes on Python
Stars: ✭ 20 (-39.39%)
Mutual labels:  optimization
Hyperopt.jl
Hyperparameter optimization in Julia.
Stars: ✭ 144 (+336.36%)
Mutual labels:  optimization
energy-use-case-trading-client
Energy Use Case Web UI for Lition Trading Platform
Stars: ✭ 23 (-30.3%)
Mutual labels:  energy
Fake-Interior-Shader-for-GodotEngine
Interior Mapping shader for the Godot Game Engine 3.x that works with both GLES3 and GLES2.
Stars: ✭ 40 (+21.21%)
Mutual labels:  optimization
pikaia
Modern Fortran Edition of the Pikaia Genetic Algorithm
Stars: ✭ 29 (-12.12%)
Mutual labels:  optimization
web-performance-optimization
Web 性能优化
Stars: ✭ 23 (-30.3%)
Mutual labels:  optimization
kafka-assignment-optimizer
Kafka Partitions Assignment Optimizer
Stars: ✭ 16 (-51.52%)
Mutual labels:  optimization
pareto
Spatial Containers, Pareto Fronts, and Pareto Archives
Stars: ✭ 69 (+109.09%)
Mutual labels:  optimization
cortana-intelligence-energy-demand-forecasting
Energy industry solutions using the Cortana Intelligence Suite with end-to-end walkthrough.
Stars: ✭ 24 (-27.27%)
Mutual labels:  energy
photometric optimization
Photometric optimization code for creating the FLAME texture space and other applications
Stars: ✭ 271 (+721.21%)
Mutual labels:  optimization
windows10-debloat
Collection of various scripts and apps to debloat Windows 10 for better privacy, performance and optimization.
Stars: ✭ 52 (+57.58%)
Mutual labels:  optimization
eAnalytics
Dynamic Web-based Analytics for the Energy Industry
Stars: ✭ 28 (-15.15%)
Mutual labels:  energy

energy-py-linear

A library for optimizing energy systems using mixed integer linear programming.

Currently the library has two models:

  • electric battery operating in price arbitrage,
  • a combined heat & power plant.

Use

The battery model is optimized against a set of prices, and returns a list of dictionaries - one per interval:

import energypylinear as epl
model = epl.Battery(power=2, capacity=4, efficiency=1.0)
prices = [10, 50, 10, 50, 10]
results = model.optimize(prices, freq="60T")

pandas can be used to transform the results into a dataframe:

import pandas as pd
pd.DataFrame().from_dict(results)

   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

The last row is all NaN except for Charge - 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.

If the model receives forecasts it will optimize for them - 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]
results = model.optimize(prices, forecasts=forecasts, timestep='60T', objective='forecasts')

The battery model also accounts for carbon. If no carbon profile is passed in, a constant value of 0.5 tC/MWh is assumed.

We can switch the optimization to focus on carbon:

results = model.optimize(prices, forecasts=forecasts, carbon=carbon, timestep="60T", objective='carbon')

Setup

Install as an editable package:

$ make setup

The main dependency of this project is PuLP. For further reading on PuLP:

Test

$ make test
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].