57 lines
4.2 KiB
Python
57 lines
4.2 KiB
Python
|
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()
|