求助:不同機器運行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。
求教大神,是否可能因為不同機器的浮點數運算部件不同導致會有最終結果有精度的差異?