基于SNOPT的非线性离散约束优化问题求解及结果偏差咨询
带非线性约束的非线性离散优化问题求解求助
我是优化领域新手,目前需要解决一类带非线性约束的非线性离散优化问题:以给定预测时域内绝缘系统的总成本最小化为目标,求解其最优温度,计划采用SNOPT非线性求解器。用常规MATLAB编码验证结果后,所得曲线与预期不符,无法确定自身分析逻辑是否正确。
问题概述
目标函数用于求解预测时域内使绝缘系统总成本最小的最优温度,目标函数与约束有对应的数学描述,预期得到呈U型的成本-温度曲线,但我通过编码得到的曲线不符合该趋势。
问题数据
- 基础参数:
- A=1.07×10^8
- h=1
- T_ref=87.5
- N=20
- p1=0.001;p2=0.0037;
- 优化变量:$u_t$
- 模型类型:带非线性约束的非线性成本函数,拟采用SNOPT非线性求解器求解
- 符号含义:
- N:预测时域(年)
- T_ref:参考温度
- X_DP:第k年绝缘系统的温度
- h:离散时间模型的时间步长(1年)
- R:额定负载下负载损耗与空载损耗的比值
- E:活化能
- A:指前因子
- beta:温度降低带来的成本线性系数
验证代码(MATLAB)
close all; clear all; h=1; N=20; a=250; R=8.314; A=1.07*10^8; E=111000; Tref=87.5; p1=0.0019; p2=0.0037; p3=0.0037; Utt=[80,80.7894736842105,81.5789473684211,82.3684210526316,83.1578947368421,... % The value of Utt given here represent the temperature increment over a predictive horizon. 83.9473684210526,84.7368421052632,85.5263157894737,86.3157894736842,... 87.1052631578947,87.8947368421053,88.6842105263158,89.4736842105263,... 90.2631578947369,91.0526315789474,91.8421052631579,92.6315789473684,... 93.4210526315790,94.2105263157895,95]; Utt1 = [95,94.2105263157895,93.4210526315790,92.6315789473684,91.8421052631579,... % The value of Utt1 given here represent the temperature decrement over a predictive horizon. 91.0526315789474,90.2631578947369,89.4736842105263,88.6842105263158,... 87.8947368421053,87.1052631578947,86.3157894736842,85.5263157894737,... 84.7368421052632,83.9473684210526,83.1578947368421,82.3684210526316,... 81.5789473684211,80.7894736842105,80]; Ut1=zeros(1,N); Ut2=zeros(1,N); Xdp =zeros(N,N); Xdp(1,1)=1000; Xdp1 =zeros(N,N); Xdp1(1,1)=1000; for L=1:N-1 for k=1:N-1 %vt(k+L)=Ut(k-L+1); Xdq(k+1,L) =(1/Xdp(k,L))+A*exp((-1*E)/(R*(Utt(k)+273)))*24*365*h; Xdp(k+1,L)=1/(Xdq(k+1,L)); Xdp(k,L+1)=1/(Xdq(k+1,L)); Xdq1(k+1,L) =(1/Xdp1(k,L))+A*exp((-1*E)/(R*(Utt1(k)+273)))*24*365*h; Xdp1(k+1,L)=1/(Xdq1(k+1,L)); Xdp1(k,L+1)=1/(Xdq1(k+1,L)); end end % MATLAB code for j =1:N-1 Ut1(j)= -p1*(Utt(j)-Tref); Ut2(j)= -p2*(Utt1(j)-Tref); end sum00=sum(Ut1); sum01=sum(Ut2); X1=1./Xdp(:,1); Xf=1./Xdp(:,20); Total= table(X1,Xf); Tdiff =a*(Total.Xf-Total.X1); X22=1./Xdp1(:,1); X2f=1./Xdp1(:,20); Total22= table(X22,X2f); Tdiff22 =a*(Total22.X2f-Total22.X22); obj=(sum00+(Tdiff)); ob1 = min(obj); obj2=sum01+Tdiff22; ob2 = min(obj2); plot(Utt,obj,'-o'); hold on plot(Utt1,obj)
求助需求
请帮忙确认我的分析逻辑是否正确,并解决结果曲线与预期不符的问题。
内容的提问来源于stack exchange,提问作者Ali Noman
相关产品推荐
相关产品推荐

