update env logic

This commit is contained in:
chenxiaodong 2025-02-13 14:06:41 +08:00
parent 0192a10874
commit 406f86c7dd
3 changed files with 34 additions and 12 deletions

View File

@ -22,6 +22,9 @@ class WgzGym(gym.Env):
self.episode_length = 24
self.penalty_coefficient = 50 # 约束惩罚系数
self.sell_coefficient = 0.5 # 售出利润系数
self.a = 0.5
self.b = 0.3
self.c = 0.2
self.EC_parameters = kwargs.get('EC_parameters', EC_parameters) # 电解水制氢器
self.HST_parameters = kwargs.get('dg_parameters', dg_parameters) # 储氢罐
@ -69,13 +72,13 @@ class WgzGym(gym.Env):
current_obs = self._build_state()
self.EC.step(action[0]) # 执行状态转换,电池当前容量也改变
self.HST.step(action[1])
self.dg2.step(action[2])
self.grid.step(action[2])
price = current_obs[1]
temper = current_obs[2]
solar = current_obs[3]
load = current_obs[4]
heat = current_obs[5]
gym_to_grid = solar + self.EC.get_hydrogen() - load
gym_to_grid = solar + self.HST.get_power() - self.EC.current_power - load
# reward = 0.0
sell_benefit, buy_cost = 0, 0
@ -90,8 +93,11 @@ class WgzGym(gym.Env):
hst_cost = self.HST.get_cost()
ec_cost = self.EC.get_cost(price)
solar_cost = solar # 待补充
reward = - (hst_cost + ec_cost + solar_cost
+ excess_penalty + deficient_penalty - sell_benefit + buy_cost)
economic_cost = hst_cost + ec_cost + solar_cost - sell_benefit + buy_cost
demand_cost = excess_penalty + deficient_penalty
eco_benifit = 0
reward = - self.a * economic_cost - self.b * demand_cost + self.c * eco_benifit
self.unbalance = gym_to_grid
final_step_outputs = [self.HST.current_soc, self.EC.current_power, self.grid.current_power]

View File

@ -25,6 +25,9 @@ class EC:
def get_carbon(self):
return self.current_power * self.carbon_reduce
def get_power_max(self):
return self.power_max
def reset(self):
self.current_power = 0
@ -32,14 +35,16 @@ class EC:
class HST:
def __init__(self, params):
self.current_soc = None
self.hydrogen_change = None
self.hydrogen_charge = None
self.capacity = params['capacity']
self.min_soc = params['min_soc']
self.max_soc = params['max_soc']
self.ramp = params['ramp']
self.lifetime = params['lifetime']
self.equipment_cost = params['equipment_cost']
self.efficiency = params['efficiency']
self.charge_efficiency = params['charge_efficiency']
self.generate_efficiency = params['generate_efficiency']
self.lower_heating_value = params['lower_heating_value']
'''
储氢罐的充气速率 = 电解水制氢速率 电解水制氢放的热会满足热水需求?
@ -49,11 +54,17 @@ class HST:
def step(self, action_hst):
energy = action_hst * self.ramp
updated_soc = max(self.min_soc, min(self.max_soc, (self.current_soc * self.capacity + energy) / self.capacity))
self.hydrogen_change = (updated_capacity - self.current_soc) * self.capacity
self.hydrogen_charge = (updated_soc - self.current_soc) * self.capacity
self.current_soc = updated_soc
def get_power(self):
if self.hydrogen_charge > 0:
return self.hydrogen_charge * self.lower_heating_value * self.charge_efficiency * self.generate_efficiency
else:
return 0
def get_cost(self):
cost = self.equipment_cost / self.lifetime * abs(self.hydrogen_change)
cost = self.equipment_cost / self.lifetime * abs(self.hydrogen_charge)
return cost
def reset(self):
@ -63,10 +74,13 @@ class HST:
class Grid:
def __init__(self):
self.delta = 1
self.exchange_ability = 100
self.trade_energy = None
def get_cost(self, current_price, energy_exchange):
return current_price * energy_exchange * self.delta
def step(self, action_grid):
self.trade_energy = (action_grid + 1) / 2 * EC.get_power_max() # 反标准化
def get_cost(self, price):
return price * self.trade_energy * self.delta
def retrieve_past_price(self):
result = []

View File

@ -15,5 +15,7 @@ HST_parameters = {
'max_soc': 0.9,
'lifetime': 6000, # hour
'equipment_cost': 10000, # yuan
'efficiency': 0.95,
'charge_efficiency': 0.95,
'generate_efficiency': 0.6,
'lower_heating_value': 33.33,
}