update heat and grid part

This commit is contained in:
chenxiaodong 2025-02-13 16:01:21 +08:00
parent d318e26e25
commit fb89548c37
3 changed files with 27 additions and 13 deletions

View File

@ -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)

View File

@ -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小时的价格起始、结束索引

View File

@ -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 = {