update comment

This commit is contained in:
mhrooz 2024-05-04 09:58:05 +02:00
parent ed58e34e7e
commit c0a7b5beff
3 changed files with 80 additions and 22 deletions

View File

@ -15,11 +15,12 @@ class EnergySystem:
time = row['time'] time = row['time']
sunlight_intensity = row['sunlight'] sunlight_intensity = row['sunlight']
factory_demand = row['demand'] factory_demand = row['demand']
electricity_price = self.grid.get_price_for_time(time) # electricity_price = self.grid.get_price_for_time(time)
electricity_price = row['price']
generated_pv_power = self.pv.capacity * sunlight_intensity # 生成的功率,单位 kW generated_pv_power = self.pv.capacity * sunlight_intensity # 生成的功率,单位 kW
generated_pv_energy = generated_pv_power * time_interval * self.pv.loss # 生成的能量,单位 kWh generated_pv_energy = generated_pv_power * time_interval * self.pv.loss # 生成的能量,单位 kWh
# pv生成的能量如果比工厂的需求要大
if generated_pv_energy >= factory_demand * time_interval: if generated_pv_energy >= factory_demand * time_interval:
# 剩余的能量(kwh) = pv生成的能量 - 工厂需求的功率 * 时间间隔 # 剩余的能量(kwh) = pv生成的能量 - 工厂需求的功率 * 时间间隔
surplus_energy = generated_pv_energy - factory_demand * time_interval surplus_energy = generated_pv_energy - factory_demand * time_interval
@ -34,21 +35,28 @@ class EnergySystem:
total_benefit += sell_income total_benefit += sell_income
# 节省的能量 = 工厂需求的能量 * 时间段 # 节省的能量 = 工厂需求的能量 * 时间段
total_energy = factory_demand * time_interval total_energy = factory_demand * time_interval
# pv比工厂的需求小
else: else:
# 从ess中需要的电量 = 工厂需要的电量 - pv中的电量
needed_from_ess = factory_demand * time_interval - generated_pv_energy needed_from_ess = factory_demand * time_interval - generated_pv_energy
# 如果ess中村的电量比需要的多
if self.ess.storage >= needed_from_ess: if self.ess.storage >= needed_from_ess:
# 取出电量
discharging_power = min(self.ess.discharge_power * time_interval, needed_from_ess) discharging_power = min(self.ess.discharge_power * time_interval, needed_from_ess)
self.ess.storage -= discharging_power self.ess.storage -= discharging_power
# 生下来的能量 = pv的能量 + 放出来的能量
total_energy = generated_pv_energy + discharging_power total_energy = generated_pv_energy + discharging_power
else: else:
total_energy = generated_pv_energy + self.ess.storage total_energy = generated_pv_energy + self.ess.storage
self.ess.storage = 0 self.ess.storage = 0
needed_from_grid = factory_demand * time_interval - total_energy needed_from_grid = factory_demand * time_interval - total_energy
net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * (1 - self.grid.loss) net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * self.grid.loss
total_energy += net_grid # total_energy += net_grid
print(total_energy) # print(total_energy)
unmet_demand = max(0, factory_demand * time_interval - total_energy) # 工厂需求量-总能量
benefit = (total_energy - unmet_demand) * electricity_price # unmet_demand = max(0, factory_demand * time_interval - total_energy)
# benefit = (total_energy - unmet_demand) * electricity_price
benefit = (total_energy) * electricity_price
total_benefit += benefit total_benefit += benefit
return total_benefit return total_benefit

View File

@ -16,8 +16,8 @@ class ess_config:
self.discharge_power = discharge_power self.discharge_power = discharge_power
class grid_config: class grid_config:
def __init__(self, capacity, price_schedule, grid_loss, sell_price): def __init__(self, capacity, grid_loss, sell_price):
self.price_schedule = price_schedule # self.price_schedule = price_schedule
self.loss = grid_loss self.loss = grid_loss
self.sell_price = sell_price self.sell_price = sell_price
self.capacity = capacity self.capacity = capacity

76
main.py
View File

@ -1,21 +1,71 @@
import matplotlib import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd import pandas as pd
from EnergySystem import EnergySystem from EnergySystem import EnergySystem
from config import pv_config, grid_config, ess_config from config import pv_config, grid_config, ess_config
if __name__ == '__main__': if __name__ == '__main__':
price_schedule = pd.read_csv('price_schedule.csv') data = pd.read_csv('combined_data.csv')
data = pd.read_csv('simulation_data.csv')
pv = pv_config(capacity=100000,cost_per_kW=200,lifetime=25,loss=0.95)
ess = ess_config(capacity=100000,cost_per_kW=300,lifetime=25,loss=0.95,charge_power=100000,discharge_power=100000)
grid = grid_config(price_schedule=price_schedule, capacity=5000, grid_loss=0.95, sell_price=0.4)
energy_system = EnergySystem(pv_type=pv, ess_type=ess, grid_type=grid)
time_interval = 15 / 60 time_interval = 15 / 60
benefit = energy_system.simulate(data=data, time_interval=time_interval)
print(benefit) pv_loss = 0.95
pv_cost_per_kW = 200
pv_base = 50000
pv_lifetime = 25
ess_loss = 0.95
ess_cost_per_kW = 300
ess_base = 50000
ess_lifetime = 25
grid_loss = 0.95
sell_price = 0.4 #kWh
grid_capacity = 5000 #kWh
pv_step=10000
ess_step=10000
pv_capacities = np.linspace(50000, 150000, 11)
ess_capacities = np.linspace(50000, 150000, 11)
results = pd.DataFrame(index=pv_capacities, columns = ess_capacities)
for pv_capacity in pv_capacities:
print(f"pv_capacity:{pv_capacity}")
for ess_capacity in ess_capacities:
print(f"ess_capacity:{ess_capacity}")
pv = pv_config(capacity=pv_capacity,
cost_per_kW=pv_cost_per_kW,
lifetime=pv_lifetime,
loss=pv_loss)
ess = ess_config(capacity=ess_capacity,
cost_per_kW=ess_cost_per_kW,
lifetime=ess_lifetime,
loss=ess_loss,
charge_power=ess_capacity,
discharge_power=ess_capacity)
grid = grid_config(capacity=grid_capacity,
grid_loss=grid_loss,
sell_price= sell_price)
energySystem = EnergySystem(pv_type=pv,
ess_type=ess,
grid_type= grid)
benefit = energySystem.simulate(data, time_interval)
results.loc[pv_capacity,ess_capacity] = benefit
results = results.astype(float)
plt.figure(figsize=(10, 8)) # 设置图形大小
sns.heatmap(results, annot=True, fmt=".1f", cmap='viridis')
plt.title('Benefit Heatmap Based on PV and ESS Capacities')
plt.xlabel('ESS Capacity (kWh)')
plt.ylabel('PV Capacity (kW)')
plt.show()
# pv = pv_config(capacity=100000,cost_per_kW=200,lifetime=25,loss=0.95)
# ess = ess_config(capacity=100000,cost_per_kW=300,lifetime=25,loss=0.95,charge_power=100000,discharge_power=100000)
# grid = grid_config(price_schedule=price_schedule, capacity=5000, grid_loss=0.95, sell_price=0.4)
# grid = grid_config(capacity=50000, grid_loss=0.95, sell_price=0.4)
# print(benefit)