From c0a7b5beff18893b46d2f3e5ce910c29d45821a9 Mon Sep 17 00:00:00 2001 From: mhrooz Date: Sat, 4 May 2024 09:58:05 +0200 Subject: [PATCH] update comment --- EnergySystem.py | 22 +++++++++----- config.py | 4 +-- main.py | 76 ++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 80 insertions(+), 22 deletions(-) diff --git a/EnergySystem.py b/EnergySystem.py index 5bfec55..97df1c7 100644 --- a/EnergySystem.py +++ b/EnergySystem.py @@ -15,11 +15,12 @@ class EnergySystem: time = row['time'] sunlight_intensity = row['sunlight'] 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_energy = generated_pv_power * time_interval * self.pv.loss # 生成的能量,单位 kWh - + # pv生成的能量如果比工厂的需求要大 if generated_pv_energy >= factory_demand * time_interval: # 剩余的能量(kwh) = pv生成的能量 - 工厂需求的功率 * 时间间隔 surplus_energy = generated_pv_energy - factory_demand * time_interval @@ -34,21 +35,28 @@ class EnergySystem: total_benefit += sell_income # 节省的能量 = 工厂需求的能量 * 时间段 total_energy = factory_demand * time_interval + # pv比工厂的需求小 else: + # 从ess中需要的电量 = 工厂需要的电量 - pv中的电量 needed_from_ess = factory_demand * time_interval - generated_pv_energy + # 如果ess中村的电量比需要的多 if self.ess.storage >= needed_from_ess: + # 取出电量 discharging_power = min(self.ess.discharge_power * time_interval, needed_from_ess) self.ess.storage -= discharging_power + # 生下来的能量 = pv的能量 + 放出来的能量 total_energy = generated_pv_energy + discharging_power else: total_energy = generated_pv_energy + self.ess.storage self.ess.storage = 0 needed_from_grid = factory_demand * time_interval - total_energy - net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * (1 - self.grid.loss) - total_energy += net_grid - print(total_energy) - unmet_demand = max(0, factory_demand * time_interval - total_energy) - benefit = (total_energy - unmet_demand) * electricity_price + net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * self.grid.loss + # total_energy += net_grid + # print(total_energy) + # 工厂需求量-总能量 + # 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 return total_benefit \ No newline at end of file diff --git a/config.py b/config.py index 69fdd2d..b9907a7 100644 --- a/config.py +++ b/config.py @@ -16,8 +16,8 @@ class ess_config: self.discharge_power = discharge_power class grid_config: - def __init__(self, capacity, price_schedule, grid_loss, sell_price): - self.price_schedule = price_schedule + def __init__(self, capacity, grid_loss, sell_price): + # self.price_schedule = price_schedule self.loss = grid_loss self.sell_price = sell_price self.capacity = capacity diff --git a/main.py b/main.py index be32c73..9c95c8d 100644 --- a/main.py +++ b/main.py @@ -1,21 +1,71 @@ -import matplotlib +import matplotlib.pyplot as plt +import seaborn as sns +import numpy as np import pandas as pd from EnergySystem import EnergySystem from config import pv_config, grid_config, ess_config if __name__ == '__main__': - price_schedule = pd.read_csv('price_schedule.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) - + data = pd.read_csv('combined_data.csv') time_interval = 15 / 60 - benefit = energy_system.simulate(data=data, time_interval=time_interval) - print(benefit) \ No newline at end of file + 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) \ No newline at end of file