write alpha verison energy system
This commit is contained in:
		
							
								
								
									
										51
									
								
								EnergySystem.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								EnergySystem.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| from config import pv_config, ess_config, grid_config | ||||
| import pandas as pd | ||||
| class EnergySystem: | ||||
|     def __init__(self, pv_type: pv_config, ess_type: ess_config, grid_type: grid_config): | ||||
|         self.pv = pv_type | ||||
|         self.ess = ess_type | ||||
|         self.grid = grid_type | ||||
|  | ||||
|     # 优先使用PV供电给工厂 - 如果PV输出能满足工厂的需求,则直接供电,多余的电能用来给ESS充电。 | ||||
|     # PV不足时使用ESS补充 - 如果PV输出不足以满足工厂需求,首先从ESS获取所需电量。 | ||||
|     # 如果ESS也不足以满足需求,再从电网获取 - 当ESS中的存储电量也不足以补充时,再从电网购买剩余所需电量。 | ||||
|     def simulate(self, data): | ||||
|         total_benefit = 0 | ||||
|         time_interval = 10 / 60  # 时间间隔,单位小时(10分钟) | ||||
|         for index, row in data.iterrows(): | ||||
|             time = row['time'] | ||||
|             sunlight_intensity = row['sunlight'] | ||||
|             factory_demand = row['demand'] | ||||
|             electricity_price = self.grid.get_price_for_time(time) | ||||
|  | ||||
|             generated_pv_power = self.pv.capacity * sunlight_intensity  # 生成的功率,单位 kW | ||||
|             generated_pv_energy = generated_pv_power * time_interval * self.pv.loss  # 生成的能量,单位 kWh | ||||
|  | ||||
|             if generated_pv_energy >= factory_demand * time_interval: | ||||
|                 surplus_energy = generated_pv_energy - factory_demand * time_interval | ||||
|                 charge_to_ess = min(surplus_energy, self.ess.charge_power * time_interval, self.ess.capacity - self.ess.storage) | ||||
|                 self.ess_storage += charge_to_ess | ||||
|                 surplus_after_ess = surplus_energy - charge_to_ess | ||||
|                 if surplus_after_ess > 0 and generated_pv_power > self.ess.charge_power + factory_demand: | ||||
|                     sold_to_grid = surplus_after_ess | ||||
|                     sell_income = sold_to_grid * self.grid.sell_price | ||||
|                     total_benefit += sell_income | ||||
|                 total_energy = factory_demand * time_interval | ||||
|             else: | ||||
|                 needed_from_ess = factory_demand * time_interval - generated_pv_energy | ||||
|                 if self.ess.storage >= needed_from_ess: | ||||
|                     discharging_power = min(self.ess.discharge_power * time_interval, needed_from_ess) | ||||
|                     self.ess.storage -= discharging_power | ||||
|                     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 | ||||
|  | ||||
|             unmet_demand = max(0, factory_demand * time_interval - total_energy) | ||||
|             benefit = (total_energy - unmet_demand) * electricity_price | ||||
|             total_benefit += benefit | ||||
|  | ||||
|         return total_benefit | ||||
		Reference in New Issue
	
	Block a user