Matlab提示 Optimization terminated:magnitude of search direction less than 2*options.T第一个M文件function [c,ceq]=opt_con1(x)ceq=[x(1)-0.0548*x(4)/1.205;x(2)-2.84*50*x(5)/1028/0.6/1;x(6)-0.00153*x(5)*(x(7)-x(8));x(4)-x(6)/((1-0.82)*(1-0.82));x

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 19:35:34

Matlab提示 Optimization terminated:magnitude of search direction less than 2*options.T第一个M文件function [c,ceq]=opt_con1(x)ceq=[x(1)-0.0548*x(4)/1.205;x(2)-2.84*50*x(5)/1028/0.6/1;x(6)-0.00153*x(5)*(x(7)-x(8));x(4)-x(6)/((1-0.82)*(1-0.82));x
Matlab提示 Optimization terminated:magnitude of search direction less than 2*options.T
第一个M文件
function [c,ceq]=opt_con1(x)
ceq=[x(1)-0.0548*x(4)/1.205;
x(2)-2.84*50*x(5)/1028/0.6/1;
x(6)-0.00153*x(5)*(x(7)-x(8));
x(4)-x(6)/((1-0.82)*(1-0.82));
x(3)-x(6)*4/(4-1);
x(7)-x(9);
x(8)-x(10);
x(11)-1000/4.3/1000/(80+60-2*x(10)-2*1000/700/45);
x(5)-x(6)];
c=[];
第二个M文件
y=@(x)((x(1)+x(2))*1.2+6*x(3))*7500;
ff=optimset;
ff.LargeScale='off';
%ff.Algorithm='off';
ff=optimset('largescale','off','Algorithm','active-set');
ff.TolFun=1e-30;
ff.TolX=1e-15;
ff.TolCon=1e-20;
A=[];
B=[];
Aeq=[];
Beq=[];
x0=[10;10;10;10;10;10;10;10;10;10;10];
xm=[0;0;0;0;0;0;0;19.9;0;0];
xM=[];
[x,f_opt,c,d]=fmincon(y,x0,A,B,Aeq,Beq,xm,xM,@opt_con1,ff);
错误提示:
Optimization terminated:magnitude of search direction less than 2*options.TolX
and maximum constraint violation is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-020):
lower upper ineqlin ineqnonlin
1
2
3
4
5
6

Matlab提示 Optimization terminated:magnitude of search direction less than 2*options.T第一个M文件function [c,ceq]=opt_con1(x)ceq=[x(1)-0.0548*x(4)/1.205;x(2)-2.84*50*x(5)/1028/0.6/1;x(6)-0.00153*x(5)*(x(7)-x(8));x(4)-x(6)/((1-0.82)*(1-0.82));x
这个提示并不意味着出错.
 
你可以查看fmincon的退出代码(一般用符号exitflag,你用的是c),值为4.只有有效集算法(active-set )算法才可能得到代码4和5.该代码的常见数值及含义如下(抄来的,由MATLAB官方文档翻译的,但译得不算好,不过我也不能译得更好>___<):
1、一阶最优性条件满足容许范围
2、X的变化小于容许范围
3、目标函数的变化小于容许范围
4、重要搜索方向小于规定的容许范围,并且约束违背小于options.TolCon
5、重要方向导数小于规定的容许范围,并且约束违背小于options.TolCon
0、到达最大迭代次数或到达函数评价
-1、算法由输出函数终止
-2、无可行点
 
看起来有点晕,但大致上可以总结如下(这段是自己总结的,不保证正确):
正数代表可能是一个最优点(如果值为1可以确定,其他值表示虽然不能确定,但该算法无法进一步找到更好的点);
负数代表优化失败或被终止;
0代表算法还可以进一步运行,但受迭代次数限制而终止.
 
也就是说,你现在得到的退出代码为4,应该很可能是一个最优点——注意,这里说到的所谓“最优点”,都是局部意义的.fmincon任何情况下都不不能保证找到的是全局最优点.所以,通过优化函数求解之后,一般还要对结果进行分析.
 
例如,对于你现在的这个问题而言,很容易看出,在满足约束条件的情况下,x1-x3应该取尽量小的值,而从优化结果看,的确在你要求的精度意义上是满足的,而约束条件也都满足,所以,实际上优化是成功的.