求助:不同机器运行MATLAB结果不同
我调用MATLAB优化工具箱的库函数fmincon,使用相同的初始解(可行解),对同一个问题进行局部搜索(算法为序列二次规划,即SQP),但在不同机器上得到的结果不同。
一共有五台机器 (为了方便,简称为A1,A2,A3, B1,B2), B1-B2配置相同,均为新买的机器,A1-A3为以前的机器。A1-A3上运行结果相同, B1-B2上结果相同。
在A1-A3以及B1-B2上均安装了MATLAB2014b和MATLAB2015a,说明MATLAB版本对结果没有影响。
A1-A3的系统分别为Windows 7, Windows Server 2008, Windows Server 2003;
B1-B2的系统分别为Windows 7, Windows 10;
都有win7,说明系统对结果应该没有影响。
但A1-A3与B1-B2的结果不同,说明机器对结果有影响?
调用fmincon的核心代码如下:
options=optimset('Algorithm','sqp','GradObj','off','GradConstr','off','TolCon',0,'Display','iter','TolFun',1e-4,'MaxFunEvals',50);
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]=fmincon(@myFun,x0,[],[],[],[],lb,ub,@mycon,options);
其中,@myFun为所求解函数的目标函数,@mycon为所求解函数的约束函数;lb,ub分别为自变量的下界和上届(lb=[0,0] ,ub=[3,4]).
初始解均为:[2.32952 3.17849]
两种结果如下
1)A1-A3上的运行结果如下:
Norm of First-order
Iter F-count f(x) Feasibility Steplength step optimality
0 3 -5.508010e+00 2.000e+00 1.000e+00
1 6 -3.508006e+00 2.685e-08 1.000e+00 2.000e+00 2.000e+00
2 9 -3.508013e+00 2.927e-12 1.000e+00 6.319e-06 1.000e+00
3 12 -3.508013e+00 0.000e+00 1.000e+00 1.946e-12 1.279e-08
得到的解为:2.329520197477608 1.178493074117684
目标函数值是:-3.508013271595291
2)B1-B2的运行结果如下:
Norm of First-order
Iter F-count f(x) Feasibility Steplength step optimality
0 3 -5.508010e+00 2.000e+00 1.000e+00
1 6 -3.508006e+00 2.685e-08 1.000e+00 2.000e+00 2.000e+00
2 9 -3.508013e+00 2.984e-12 1.000e+00 6.319e-06 1.694e+00
3 12 -3.508013e+00 0.000e+00 1.000e+00 1.972e-12 1.179e-06
得到的解为:2.329520197477604 1.178493074117646
目标函数值是:-3.508013271595249。
求教大神,是否可能因为不同机器的浮点数运算部件不同导致会有最终结果有精度的差异?