building-agents/Qwen_max.py

57 lines
4.2 KiB
Python
Raw Normal View History

2024-07-30 09:05:32 +08:00
from openai import OpenAI
import os
def get_response():
client = OpenAI(
api_key="sk-f01744b2801344b1a72f89ec7e290cad",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填写DashScope服务的base_url
)
completion = client.chat.completions.create(
model="qwen-turbo",
messages=[
{'role': 'system',
'content':
'你是一名擅长调试和控制智慧住宅能源系统的专家,需要根据当前环境状态给出最优的动作决策。'
'能源系统结构包括太阳能发电站、风能发电站、发电机、电池模块和住宅电网连接。'},
{'role': 'user',
'content':
'一、当前状态包含9个值'
'Sc(电池荷电状态)初始为0.4范围0.2到0.8Sg1(发电机1功率状态)、Sg2(发电机2功率状态)和Sg3(发电机3功率状态)初始功率都为0'
'Sp(电价状态)、Sl(住宅负载状态)、St(温度状态)、Si(太阳辐射度状态)和Sw(风速状态)都由数据提供。'
'其中Sc、Sg1、Sg2和Sg3的值都是在上一时刻基础上进行变化的始终不小于0Sg1、Sg2和Sg3为0代表各发动机关闭。'
'二、当前动作包含5个值'
'x表示当前时间的取值, 其范围从-1到1电池总容量为500初始电池容量为500*0.4=200Ag1、Ag2和Ag3分别表示相对于各自最大瞬时功率的变化值。'
'Ac(电池充放电动作)电池容量变化100*xAg1(发电机1功率动作)功率变化100*xAg2(发电机2功率动作)功率变化100*xAg3(发电机3功率动作)功率变化200*xAv(太阳能电压动作):太阳能电压变为(1+x)倍。'
'三、功率计算公式'
'1.Pc(电池充放电功率)= max(0.2,min(0.8,Sc+0.18*Ac))2.Pg1(发电机1功率)= max(0,min(150,100*Ag1+Sg1))'
'3.Pg2(发电机2功率)= max(0,min(375,100*Ag2+Sg2))4.Pg3(发电机3功率)= max(0,min(500,200*Ag3+Sg3))'
'5.Pso(太阳能功率)= max(0,(0.45*Si+0.015*St60.3)*(1+Av))'
'6.Pw(风能功率) if 3<=Sw<8, Pw=Sw^3*172.2625/1000 elif 8<=Sw<12, Pw=64*172.2625/125 else Pw=0'
'四、成本和能源惩罚计算公式'
'P(总功率)=Pc+Pg1+Pg2+Pg3+Pso+Pw'
'if P>=Sl, Ee(过剩能源)= PSl, else Es(短缺能源)=Sl-P'
'Cb(电池成本)=0.01*Ac+0.1*Sc;Cg1(发电机1成本)=0.0034*Pg1^2+3*Pg1+30'
'Cg2(发电机2成本)=0.001*Pg2^2+10*Pg2+40;Cg3(发电机3成本)=0.001*Pg3^2+15*Pg3+70'
'Cs(太阳能成本)=0.01*Pso;Cw(风能成本)=0.01*Pw'
'Rs(销售收入)=0.5*Sp*Ee;Cp(购买成本)=Sp*Es'
'Pe(过剩惩罚)=(Ee-100)*50;Ps(短缺惩罚)=(Es-100)*50'
'Rs、Pe和Cp、Ps对应能源过剩和能源短缺情况不能同时存在。'
'五、目标函数 Goal=- (Cb+Cg1+Cg2+Cg3+Cs+Cw+Pe+Ps-Rs+Cp)/1000'
'六、控制方案和目标:'
'1.优先使用太阳能和风能发电,当无法满足负荷时,使用发电机和电池供电;'
'2.供电时综合考虑各发电模块的成本,通常前一台发电机的最大功率不足以满足负荷时,才开启后续发电机;'
'3.减少超过公网交易限额的交易,避免公共电网波动影响住宅用电稳定性;'
'4.满足下一时刻住宅用电负载,最大化奖励函数且使供需差异最小化(Ee、Es尽可能小),提升训练效果和策略质量。'
'请你读取每小时的Sp、Sl、St、Si和Sw数据并计算每个时刻的状态然后使用最合适的优化方法给出每小时的动作决策'
'其长度为5分别表示Ac、Ag1、Ag2、Ag3和Av每小时计算一次。'
'结果应为Json格式[{{x1, x2, x3, x4, x5}}, {{x1, x2, x3, x4, x5}}, ...],如果计算量太大,可以分批回答。'}],
temperature=0.8,
top_p=0.8
)
print(completion.model_dump_json())
if __name__ == '__main__':
get_response()