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.8;Sg1(发电机1功率状态)、Sg2(发电机2功率状态)和Sg3(发电机3功率状态)初始功率都为0;' 'Sp(电价状态)、Sl(住宅负载状态)、St(温度状态)、Si(太阳辐射度状态)和Sw(风速状态)都由数据提供。' '其中Sc、Sg1、Sg2和Sg3的值都是在上一时刻基础上进行变化的,始终不小于0,Sg1、Sg2和Sg3为0代表各发动机关闭。' '二、当前动作包含5个值:' 'x表示当前时间的取值, 其范围从-1到1,电池总容量为500,初始电池容量为500*0.4=200,Ag1、Ag2和Ag3分别表示相对于各自最大瞬时功率的变化值。' 'Ac(电池充放电动作):电池容量变化100*x;Ag1(发电机1功率动作):功率变化100*x;Ag2(发电机2功率动作):功率变化100*x;Ag3(发电机3功率动作):功率变化200*x;Av(太阳能电压动作):太阳能电压变为(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*St–60.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(过剩能源)= P–Sl, 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()