From fb89548c3766cfe865dd318a8b5574f016c7fe9c Mon Sep 17 00:00:00 2001 From: chenxiaodong Date: Thu, 13 Feb 2025 16:01:21 +0800 Subject: [PATCH] update heat and grid part --- models/env.py | 32 +++++++++++++++++++++----------- models/module.py | 6 +++++- models/parameters.py | 2 +- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/models/env.py b/models/env.py index ac3c554..5530686 100644 --- a/models/env.py +++ b/models/env.py @@ -20,7 +20,7 @@ class WgzGym(gym.Env): self.TRAIN = True self.current_time = None self.episode_length = 24 - self.penalty_coefficient = 50 # 约束惩罚系数 + self.penalty_coefficient = 10 # 约束惩罚系数 self.sell_coefficient = 0.5 # 售出利润系数 self.a = 0.5 self.b = 0.3 @@ -67,7 +67,8 @@ class WgzGym(gym.Env): obs = np.concatenate((np.float32(time_step), np.float32(price), np.float32(temper), np.float32(solar), np.float32(load), np.float32(heat), - np.float32(people), np.float32(ec_out), np.float32(hst_soc), np.float32(grid_ex)), axis=None) + np.float32(people), np.float32(ec_out), np.float32(hst_soc), np.float32(grid_ex)), + axis=None) return obs def step(self, action): @@ -82,17 +83,26 @@ class WgzGym(gym.Env): load = current_obs[4] heat = current_obs[5] - gym_to_grid = solar + self.HST.get_power() - self.EC.current_power - load - heat_penalty = 0 + power_gap = solar + self.HST.get_power() - self.EC.current_power - load + heat_gap = self.HST.get_heat() + self.EC.get_heat() - heat # reward = 0.0 sell_benefit, buy_cost = 0, 0 - # power_penalty = 0 - if gym_to_grid >= 0: # 过剩 - sell_benefit = self.grid.get_cost(price, gym_to_grid) * self.sell_coefficient + if power_gap >= 0: # 过剩 + sell_benefit = self.grid.get_cost(price, power_gap) * self.sell_coefficient + power_gap = 0 + power_penalty = 0 else: # 缺少 - buy_cost = self.grid.get_cost(price, abs(gym_to_grid)) - power_penalty = abs(gym_to_grid) * self.penalty_coefficient + power_gap = abs(power_gap) + buy_cost = self.grid.get_cost(price, power_gap) + power_penalty = power_gap * self.penalty_coefficient + + if heat_gap >= 0: + heat_gap = 0 + heat_penalty = 0 + else: + heat_gap = abs(heat_gap) + heat_penalty = heat_gap * self.penalty_coefficient hst_cost = self.HST.get_cost() ec_cost = self.EC.get_cost(price) @@ -100,10 +110,10 @@ class WgzGym(gym.Env): economic_cost = hst_cost + ec_cost + solar_cost - sell_benefit + buy_cost demand_cost = self.heat_a * heat_penalty + self.power_a * power_penalty - eco_benifit = 0 + eco_benifit = self.EC.less_carbon() - self.grid.get_carbon() reward = - self.a * demand_cost - self.b * economic_cost + self.c * eco_benifit - self.unbalance = gym_to_grid + self.unbalance = power_gap + heat_gap final_step_outputs = [self.HST.current_soc, self.EC.current_power, self.grid.current_power] self.current_time += 1 finish = (self.current_time == self.episode_length) diff --git a/models/module.py b/models/module.py index e3293f2..638dcc2 100644 --- a/models/module.py +++ b/models/module.py @@ -25,7 +25,7 @@ class EC: def get_heat(self): return self.current_power * (1 - self.electricity_efficiency) - def get_carbon(self): + def less_carbon(self): return self.current_power * self.carbon_reduce def get_power_max(self): @@ -84,6 +84,7 @@ class HST: class Grid: def __init__(self): self.delta = 1 + self.carbon_increace = 0.9 self.trade_energy = None def step(self, action_grid): @@ -92,6 +93,9 @@ class Grid: def get_cost(self, price): return price * self.trade_energy * self.delta + def get_carbon(self): + return self.trade_energy * self.carbon_increace + def retrieve_past_price(self): result = [] # 过去24小时的价格起始、结束索引 diff --git a/models/parameters.py b/models/parameters.py index 1c1bde8..7321124 100644 --- a/models/parameters.py +++ b/models/parameters.py @@ -6,7 +6,7 @@ EC_parameters = { 'lifetime': 6000, # hour 'equipment_cost': 10000, # yuan 'electrolysis_efficiency': 0.8, - 'carbon_reduce': 1, + 'carbon_reduce': 0.9, } HST_parameters = {