wgz_decision/models/module.py

105 lines
3.8 KiB
Python
Raw Normal View History

2025-02-11 14:38:52 +08:00
class EC:
def __init__(self, params):
2025-02-11 19:12:33 +08:00
self.current_power = None
2025-02-11 14:38:52 +08:00
self.hydrogen_produce = params['hydrogen_produce']
self.power_max = params['power_max']
self.power_min = params['power_min']
self.ramp = params['ramp']
self.lifetime = params['lifetime']
self.equipment_cost = params['equipment_cost']
2025-02-17 10:18:29 +08:00
self.electrolysis_efficiency = params['electrolysis_efficiency']
2025-02-11 14:38:52 +08:00
self.carbon_reduce = params['carbon_reduce']
def step(self, action_ec):
2025-02-11 19:12:33 +08:00
output = self.current_power + action_ec * self.ramp
2025-02-11 14:38:52 +08:00
output = max(self.power_min, min(self.power_max, output)) if output > 0 else 0
2025-02-11 19:12:33 +08:00
self.current_power = output
2025-02-11 14:38:52 +08:00
def get_cost(self, price):
2025-02-11 19:12:33 +08:00
# 成本 = 设备费用 / 生命周期 * 电价 * (用电量 / 最大用电量)
return self.equipment_cost / self.lifetime * price * self.current_power / self.power_max
2025-02-11 14:38:52 +08:00
def get_hydrogen(self):
2025-02-17 10:18:29 +08:00
return self.current_power * self.electrolysis_efficiency * self.hydrogen_produce
2025-02-11 19:12:33 +08:00
2025-02-13 15:05:12 +08:00
def get_heat(self):
2025-02-17 10:18:29 +08:00
return self.current_power * (1 - self.electrolysis_efficiency)
2025-02-13 15:05:12 +08:00
2025-02-13 16:01:21 +08:00
def less_carbon(self):
2025-02-11 19:12:33 +08:00
return self.current_power * self.carbon_reduce
2025-02-11 14:38:52 +08:00
def reset(self):
2025-02-11 19:12:33 +08:00
self.current_power = 0
2025-02-11 14:38:52 +08:00
class HST:
def __init__(self, params):
2025-02-11 19:12:33 +08:00
self.current_soc = None
2025-02-13 14:06:41 +08:00
self.hydrogen_charge = None
2025-02-11 14:38:52 +08:00
self.capacity = params['capacity']
self.min_soc = params['min_soc']
self.max_soc = params['max_soc']
2025-02-11 19:12:33 +08:00
self.lifetime = params['lifetime']
self.equipment_cost = params['equipment_cost']
2025-02-13 14:06:41 +08:00
self.charge_efficiency = params['charge_efficiency']
self.generate_efficiency = params['generate_efficiency']
self.lower_heating_value = params['lower_heating_value']
2025-02-11 14:38:52 +08:00
'''
2025-02-11 19:12:33 +08:00
储氢罐的充气速率 = 电解水制氢速率 电解水制氢放的热会满足热水需求?
2025-02-17 10:18:29 +08:00
如何控制上述待补充
2025-02-11 19:12:33 +08:00
储氢罐的放气速率 = 供电 电价低时多电解电价高时释放
2025-02-11 14:38:52 +08:00
'''
2025-02-13 15:05:12 +08:00
2025-02-11 14:38:52 +08:00
def step(self, action_hst):
2025-02-17 10:18:29 +08:00
energy = action_hst * self.capacity
2025-02-11 19:12:33 +08:00
updated_soc = max(self.min_soc, min(self.max_soc, (self.current_soc * self.capacity + energy) / self.capacity))
2025-02-13 14:06:41 +08:00
self.hydrogen_charge = (updated_soc - self.current_soc) * self.capacity
2025-02-11 19:12:33 +08:00
self.current_soc = updated_soc
2025-02-11 14:38:52 +08:00
2025-02-13 14:06:41 +08:00
def get_power(self):
if self.hydrogen_charge > 0:
2025-02-13 15:05:12 +08:00
return self.hydrogen_charge * self.charge_efficiency * self.lower_heating_value * self.generate_efficiency
else:
return 0
def get_heat(self):
if self.hydrogen_charge < 0:
return self.hydrogen_charge * self.charge_efficiency * (1 - self.generate_efficiency)
2025-02-13 14:06:41 +08:00
else:
return 0
2025-02-11 19:12:33 +08:00
def get_cost(self):
2025-02-13 14:06:41 +08:00
cost = self.equipment_cost / self.lifetime * abs(self.hydrogen_charge)
2025-02-11 14:38:52 +08:00
return cost
def reset(self):
2025-02-11 19:12:33 +08:00
self.current_soc = 0.1
2025-02-11 14:38:52 +08:00
class Grid:
def __init__(self):
self.delta = 1
2025-02-13 16:01:21 +08:00
self.carbon_increace = 0.9
2025-02-17 10:18:29 +08:00
# self.trade_energy = None
2025-02-11 14:38:52 +08:00
2025-02-17 10:18:29 +08:00
def get_cost(self, price, trade_energy):
return price * trade_energy * self.delta
2025-02-11 14:38:52 +08:00
2025-02-17 10:18:29 +08:00
def get_carbon(self, trade_energy):
return trade_energy * self.carbon_increace
2025-02-13 16:01:21 +08:00
2025-02-18 08:49:32 +08:00
# def step(self, action_grid, ec_power_max):
# self.trade_energy = (action_grid + 1) / 2 * ec_power_max # 反标准化
2025-02-11 14:38:52 +08:00
def retrieve_past_price(self):
result = []
# 过去24小时的价格起始、结束索引
start_index = max(0, 24 * (self.day - 1) + self.time - 24)
end_index = 24 * (self.day - 1) + self.time
past_price = self.price[start_index:end_index]
result.extend(past_price)
# current_day_price = self.price[24 * self.day:24 * self.day + self.time]
# result.extend(current_day_price)
return result