refactor: optimize code for better performance and readability
This commit is contained in:
parent
8d41feb855
commit
a6232f24c8
|
@ -162,7 +162,6 @@ class ESSEnv(gym.Env):
|
||||||
wind = wind_df['wind_speed'].to_numpy(dtype=float)
|
wind = wind_df['wind_speed'].to_numpy(dtype=float)
|
||||||
|
|
||||||
'''重新设计价格和发电量以及需求的大小'''
|
'''重新设计价格和发电量以及需求的大小'''
|
||||||
|
|
||||||
def process_elements(elements, transform_function, add_function):
|
def process_elements(elements, transform_function, add_function):
|
||||||
for element in elements:
|
for element in elements:
|
||||||
transformed_element = transform_function(element)
|
transformed_element = transform_function(element)
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
import pandas as pd
|
||||||
|
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
||||||
|
from langchain_openai.chat_models import ChatOpenAI
|
||||||
|
from langchain_community.chat_message_histories import ChatMessageHistory
|
||||||
|
from langchain_core.chat_history import BaseChatMessageHistory
|
||||||
|
from langchain_core.runnables.history import RunnableWithMessageHistory
|
||||||
|
|
||||||
|
|
||||||
|
def get_session_history(session_id: str) -> BaseChatMessageHistory:
|
||||||
|
if session_id not in store:
|
||||||
|
store[session_id] = ChatMessageHistory()
|
||||||
|
return store[session_id]
|
||||||
|
|
||||||
|
|
||||||
|
def read_txt_file(file_path: str) -> str:
|
||||||
|
with open(file_path, "r", encoding='ISO-8859-1') as file:
|
||||||
|
content = file.read()
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def read_csv_file(file_path: str) -> pd.DataFrame:
|
||||||
|
return pd.read_csv(file_path)
|
||||||
|
|
||||||
|
|
||||||
|
def format_csv_data(df: pd.DataFrame, start: int, end: int) -> str:
|
||||||
|
formatted_data = []
|
||||||
|
for index, row in df.iloc[start:end].iterrows():
|
||||||
|
formatted_data.append(
|
||||||
|
f"时刻{index + 1}: Sp={row['price']}, Sl={row['load']},"
|
||||||
|
f"St={row['temperature']}, Si={row['irradiance']}, Sw={row['wind_speed']}"
|
||||||
|
)
|
||||||
|
return "\n".join(formatted_data)
|
||||||
|
|
||||||
|
|
||||||
|
system_content = read_txt_file('./llm.txt')
|
||||||
|
df = read_csv_file('./data.csv')
|
||||||
|
llm = ChatOpenAI(
|
||||||
|
streaming=True,
|
||||||
|
verbose=True,
|
||||||
|
openai_api_key="none",
|
||||||
|
# openai_api_base="http://0.0.0.0:5049/v1/models",
|
||||||
|
openai_api_base="http://localhost:8000/v1",
|
||||||
|
model_name="Qwen1.5-32b-int4"
|
||||||
|
)
|
||||||
|
prompt = ChatPromptTemplate.from_messages(
|
||||||
|
[
|
||||||
|
("system", system_content,),
|
||||||
|
MessagesPlaceholder(variable_name="history"),
|
||||||
|
("human", "{input}"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
runnable = prompt | llm
|
||||||
|
store = {}
|
||||||
|
with_message_history = RunnableWithMessageHistory(
|
||||||
|
runnable,
|
||||||
|
get_session_history,
|
||||||
|
input_messages_key="input",
|
||||||
|
history_messages_key="history",
|
||||||
|
)
|
||||||
|
|
||||||
|
num_hours = len(df)
|
||||||
|
for i in range(num_hours):
|
||||||
|
start = i
|
||||||
|
end = start + 1
|
||||||
|
csv_data_chunk = format_csv_data(df, start, end)
|
||||||
|
|
||||||
|
result = with_message_history.invoke(
|
||||||
|
{"input": f"数据如下:\n{csv_data_chunk}\n只返回json格式的五个决策数据:{{[x1 x2 x3 x4 x5]}}"},
|
||||||
|
config={
|
||||||
|
"configurable": {"session_id": "cxd"}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
print(f"Hour {i + 1}:\n{result.content}\n")
|
14
module.py
14
module.py
|
@ -16,10 +16,11 @@ class DG:
|
||||||
self.ramping_down = parameters['ramping_down']
|
self.ramping_down = parameters['ramping_down']
|
||||||
|
|
||||||
def step(self, action_gen):
|
def step(self, action_gen):
|
||||||
output_change = action_gen * self.ramping_up # constrain the output_change with ramping up boundary
|
output_change = action_gen * self.ramping_up
|
||||||
output = self.current_output + output_change
|
output = self.current_output + output_change
|
||||||
if output > 0:
|
if output > 0:
|
||||||
output = max(self.power_output_min, min(self.power_output_max, output)) # meet the constraint
|
# output = max(self.power_output_min, min(self.power_output_max, output))
|
||||||
|
output = max(0, min(self.power_output_max, output))
|
||||||
else:
|
else:
|
||||||
output = 0
|
output = 0
|
||||||
self.current_output = output
|
self.current_output = output
|
||||||
|
@ -73,22 +74,23 @@ class Solar:
|
||||||
def __init__(self, parameters):
|
def __init__(self, parameters):
|
||||||
self.current_power = None
|
self.current_power = None
|
||||||
self.base_voltage = parameters['V_b']
|
self.base_voltage = parameters['V_b']
|
||||||
|
self.adjusted_voltage = self.base_voltage
|
||||||
self.sc_current = parameters['I_sc0']
|
self.sc_current = parameters['I_sc0']
|
||||||
self.oc_voltage = parameters['V_oc0']
|
self.oc_voltage = parameters['V_oc0']
|
||||||
self.s_resistance = parameters['R_s']
|
# self.s_resistance = parameters['R_s']
|
||||||
self.sh_resistance = parameters['R_sh']
|
self.sh_resistance = parameters['R_sh']
|
||||||
self.temper_coefficient = parameters['T_c']
|
self.temper_coefficient = parameters['T_c']
|
||||||
self.opex_cofficient = parameters['O_c']
|
self.opex_cofficient = parameters['O_c']
|
||||||
self.refer_irradiance = parameters['I_ref']
|
self.refer_irradiance = parameters['I_ref']
|
||||||
self.refer_temperature = parameters['T_ref']
|
self.refer_temperature = parameters['T_ref']
|
||||||
self.change_percent = parameters['C_per']
|
|
||||||
|
|
||||||
def step(self, temperature, irradiance, action_voltage=0):
|
def step(self, temperature, irradiance, action_voltage=0):
|
||||||
I_sc = self.sc_current * (irradiance / self.refer_irradiance)
|
I_sc = self.sc_current * (irradiance / self.refer_irradiance)
|
||||||
V_oc = self.oc_voltage + self.temper_coefficient * (temperature - self.refer_temperature)
|
V_oc = self.oc_voltage + self.temper_coefficient * (temperature - self.refer_temperature)
|
||||||
|
|
||||||
current = I_sc - (V_oc / self.sh_resistance)
|
current = I_sc - (V_oc / self.sh_resistance)
|
||||||
self.current_power = max((1 + self.change_percent * action_voltage) * self.base_voltage * current, 0)
|
self.adjusted_voltage = self.adjusted_voltage * (1 + action_voltage)
|
||||||
|
self.current_power = max(self.adjusted_voltage * current, 0)
|
||||||
return self.current_power
|
return self.current_power
|
||||||
|
|
||||||
def get_cost(self, current_power):
|
def get_cost(self, current_power):
|
||||||
|
@ -114,7 +116,7 @@ class Wind:
|
||||||
self.opex_cofficient = parameters['opex_cofficient']
|
self.opex_cofficient = parameters['opex_cofficient']
|
||||||
|
|
||||||
def step(self, wind_speed):
|
def step(self, wind_speed):
|
||||||
constant = 0.5 * self.air_density * self.rotor_radius ** 2 * self.power_coefficient * self.generator_efficiency
|
constant = 0.5 * self.air_density * np.pi * self.rotor_radius ** 2 * self.power_coefficient * self.generator_efficiency
|
||||||
if self.cutin_speed <= wind_speed < self.rated_speed:
|
if self.cutin_speed <= wind_speed < self.rated_speed:
|
||||||
self.current_power = constant * wind_speed ** 3 / 1e3
|
self.current_power = constant * wind_speed ** 3 / 1e3
|
||||||
elif self.rated_speed <= wind_speed < self.cutout_speed:
|
elif self.rated_speed <= wind_speed < self.cutout_speed:
|
||||||
|
|
|
@ -8,7 +8,6 @@ solar_parameters = {
|
||||||
'O_c': 0.001, # 变动成本系数 (元/千瓦时)
|
'O_c': 0.001, # 变动成本系数 (元/千瓦时)
|
||||||
'I_ref': 1000, # 参考辐照度 (W/m²)
|
'I_ref': 1000, # 参考辐照度 (W/m²)
|
||||||
'T_ref': 25, # 参考温度 (°C)
|
'T_ref': 25, # 参考温度 (°C)
|
||||||
'C_per': 0.1 # 电压改变百分比
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wind_parameters = {
|
wind_parameters = {
|
||||||
|
@ -37,13 +36,13 @@ battery_parameters = {
|
||||||
dg_parameters = {
|
dg_parameters = {
|
||||||
'gen_1': {'a': 0.0034, 'b': 3, 'c': 30,
|
'gen_1': {'a': 0.0034, 'b': 3, 'c': 30,
|
||||||
'power_output_max': 150, 'power_output_min': 10,
|
'power_output_max': 150, 'power_output_min': 10,
|
||||||
'ramping_up': 100, 'ramping_down': 100, 'min_up': 2, 'min_down': 1},
|
'ramping_up': 100, 'ramping_down': 100},
|
||||||
|
|
||||||
'gen_2': {'a': 0.001, 'b': 10, 'c': 40,
|
'gen_2': {'a': 0.001, 'b': 10, 'c': 40,
|
||||||
'power_output_max': 375, 'power_output_min': 50,
|
'power_output_max': 375, 'power_output_min': 50,
|
||||||
'ramping_up': 100, 'ramping_down': 100, 'min_up': 2, 'min_down': 1},
|
'ramping_up': 100, 'ramping_down': 100},
|
||||||
|
|
||||||
'gen_3': {'a': 0.001, 'b': 15, 'c': 70,
|
'gen_3': {'a': 0.001, 'b': 15, 'c': 70,
|
||||||
'power_output_max': 500, 'power_output_min': 100,
|
'power_output_max': 500, 'power_output_min': 100,
|
||||||
'ramping_up': 200, 'ramping_down': 200, 'min_up': 2, 'min_down': 1}
|
'ramping_up': 200, 'ramping_down': 200}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue