diff --git a/models/env.py b/models/env.py index 93b3db3..c33707b 100644 --- a/models/env.py +++ b/models/env.py @@ -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] diff --git a/models/module.py b/models/module.py index 03a6f00..fdf284d 100644 --- a/models/module.py +++ b/models/module.py @@ -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 = [] diff --git a/models/parameters.py b/models/parameters.py index e715a3b..1c1bde8 100644 --- a/models/parameters.py +++ b/models/parameters.py @@ -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, }