Energy optimization with pulp - MartinRK80 - Nov-21-2023
I'm trying to create my first LP simulation but I have some problem with it.
This is my code:
import pulp
# Define the optimization problem
prob = pulp.LpProblem("Energy_Cost_Minimization", pulp.LpMinimize)
# Time horizon
T = 24
# Battery parameters
B_max = 10 # Maximum battery capacity
B_init = 0 # Initial battery level
# Grid energy cost per unit for each hour
grid_cost = [0.15, 0.15, 0.14, 0.13, 0.12, 0.12, 0.12, 0.12, 0.14, 0.16,
0.18, 0.20, 0.20, 0.20, 0.18, 0.16, 0.14, 0.18, 0.20, 0.20,
0.20, 0.18, 0.16, 0.15]
# Renewable energy supply for each hour
S = [1, 1, 0.5, 0.5, 1, 2, 3, 4, 5, 5, 5, 4, 4, 3, 2, 3, 4, 5, 5, 4, 3, 2, 1, 1]
# Predicted energy demand for each hour
#D = [1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 6, 5, 5, 5, 6, 7, 7, 6, 4, 3, 2]
D = [0.5, 0.5, 0.5, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 3.5, 3.5, 3, 3, 2.5, 2.5,
2.5, 3, 3.5, 3.5, 3, 2, 1.5, 1]
# Create decision variables
G = pulp.LpVariable.dicts("Grid Energy", range(T), lowBound=0)
B = pulp.LpVariable.dicts("Battery Level", range(T+1), lowBound=0, upBound=B_max)
Surplus = pulp.LpVariable.dicts("Renewable Surplus", range(T), lowBound=0)
# Objective function
prob += pulp.lpSum([grid_cost[t] * G[t] for t in range(T)])
# Constraints
for t in range(T):
if t > 0:
# Battery can only charge from renewable surplus
#Surplus[t] = max(0, S[t] - D[t])
prob += Surplus[t] <= S[t] - D[t] # Calculate renewable surplus
prob += B[t] <= B[t-1] + Surplus[t-1] # Battery charges from surplus
# Meet demand from renewables, battery and grid
prob += D[t] <= S[t] + B[t] + G[t]
# Battery initialization
if t == 0:
prob += B[t] == B_init # Start battery empty
# Solve optimization
prob.solve()
# Print results
for t in range(T):
print(f"Hour {t}: Grid Energy = {G[t].varValue} kWh, Battery Level = {B[t].varValue} kWh, Power Consumption = {D[t]} kWh, Renewable Energy Supply = {S[t]} kWh") This is the result in colab:
Output: Hour 0: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 0.5 kWh, Renewable Energy Supply = 1 kWh
Hour 1: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 0.5 kWh, Renewable Energy Supply = 1 kWh
Hour 2: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 0.5 kWh, Renewable Energy Supply = 0.5 kWh
Hour 3: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 0.5 kWh, Renewable Energy Supply = 0.5 kWh
Hour 4: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 1 kWh, Renewable Energy Supply = 1 kWh
Hour 5: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 1.5 kWh, Renewable Energy Supply = 2 kWh
Hour 6: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 2 kWh, Renewable Energy Supply = 3 kWh
Hour 7: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 2.5 kWh, Renewable Energy Supply = 4 kWh
Hour 8: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3 kWh, Renewable Energy Supply = 5 kWh
Hour 9: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3.5 kWh, Renewable Energy Supply = 5 kWh
Hour 10: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3.5 kWh, Renewable Energy Supply = 5 kWh
Hour 11: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3.5 kWh, Renewable Energy Supply = 4 kWh
Hour 12: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3 kWh, Renewable Energy Supply = 4 kWh
Hour 13: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3 kWh, Renewable Energy Supply = 3 kWh
Hour 14: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 2.5 kWh, Renewable Energy Supply = 2 kWh
Hour 15: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 2.5 kWh, Renewable Energy Supply = 3 kWh
Hour 16: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 2.5 kWh, Renewable Energy Supply = 4 kWh
Hour 17: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3 kWh, Renewable Energy Supply = 5 kWh
Hour 18: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3.5 kWh, Renewable Energy Supply = 5 kWh
Hour 19: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3.5 kWh, Renewable Energy Supply = 4 kWh
Hour 20: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 3 kWh, Renewable Energy Supply = 3 kWh
Hour 21: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 2 kWh, Renewable Energy Supply = 2 kWh
Hour 22: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 1.5 kWh, Renewable Energy Supply = 1 kWh
Hour 23: Grid Energy = 0.0 kWh, Battery Level = 0.0 kWh, Power Consumption = 1 kWh, Renewable Energy Supply = 1 kWh
Grid Energy should be positive when renewable energy and battery aren't enough but it is 0.0 at all hours. Also Battery level should charge only if there is a surplus of renewable energy.
|