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)
|
||||
|
||||
'''重新设计价格和发电量以及需求的大小'''
|
||||
|
||||
def process_elements(elements, transform_function, add_function):
|
||||
for element in elements:
|
||||
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']
|
||||
|
||||
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
|
||||
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:
|
||||
output = 0
|
||||
self.current_output = output
|
||||
|
@ -73,22 +74,23 @@ class Solar:
|
|||
def __init__(self, parameters):
|
||||
self.current_power = None
|
||||
self.base_voltage = parameters['V_b']
|
||||
self.adjusted_voltage = self.base_voltage
|
||||
self.sc_current = parameters['I_sc0']
|
||||
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.temper_coefficient = parameters['T_c']
|
||||
self.opex_cofficient = parameters['O_c']
|
||||
self.refer_irradiance = parameters['I_ref']
|
||||
self.refer_temperature = parameters['T_ref']
|
||||
self.change_percent = parameters['C_per']
|
||||
|
||||
def step(self, temperature, irradiance, action_voltage=0):
|
||||
I_sc = self.sc_current * (irradiance / self.refer_irradiance)
|
||||
V_oc = self.oc_voltage + self.temper_coefficient * (temperature - self.refer_temperature)
|
||||
|
||||
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
|
||||
|
||||
def get_cost(self, current_power):
|
||||
|
@ -114,7 +116,7 @@ class Wind:
|
|||
self.opex_cofficient = parameters['opex_cofficient']
|
||||
|
||||
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:
|
||||
self.current_power = constant * wind_speed ** 3 / 1e3
|
||||
elif self.rated_speed <= wind_speed < self.cutout_speed:
|
||||
|
|
|
@ -8,7 +8,6 @@ solar_parameters = {
|
|||
'O_c': 0.001, # 变动成本系数 (元/千瓦时)
|
||||
'I_ref': 1000, # 参考辐照度 (W/m²)
|
||||
'T_ref': 25, # 参考温度 (°C)
|
||||
'C_per': 0.1 # 电压改变百分比
|
||||
}
|
||||
|
||||
wind_parameters = {
|
||||
|
@ -37,13 +36,13 @@ battery_parameters = {
|
|||
dg_parameters = {
|
||||
'gen_1': {'a': 0.0034, 'b': 3, 'c': 30,
|
||||
'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,
|
||||
'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,
|
||||
'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