为什么fminsearch和fminunc在做优化时给出不同的答案



这个问题可能与数学理论有关,也可能与数学理论无关,但我还是想问一下。我有一个TESTCase.m如下:

function ret=TESTCase(Input,k)
if k==1
    if Input(2)~=1
        Input(2)=1;
        ret=(Input(1)-2).^2+5.*Input(2).^2;
    end
else if k~=1
        ret=(Input(1)-2).^2+(Input(2)-Input(1)).^2;
    end
end

然后,我尝试使用fminunc和fminsearch如下:

TEST=@(x)TESTCase(x,1); fminsearch(TEST,[5,3]); fminunc(TEST,[5,3]);

我分别得到两个答案:2.0000 3.9000(使用fminsearch)和2.0000 3.0000(使用fminunc)

我知道这两个答案是正确的下我的函数定义,但我想知道为什么它改变第二个值时使用fminsearch,但显示没有变化时使用fminunc。这对我来说很奇怪。同样,当使用fminsearch时,不显示任何消息,但使用fminunc时,显示以下消息:

Warning: Gradient must be provided for trust-region algorithm;
  using line-search algorithm instead. 
 In fminunc at 382 
Local minimum found.
Optimization completed because the size of the gradient is less than
the default value of the function tolerance.

<stopping criteria details>。有什么不同?我知道fminsearch是无衍生的,fminunc不是,但如果消息输出,这应该意味着fminunc在这种情况下也是无衍生的;在这种情况下,它们应该是等价的。

fminsearchfminunc使用不同的无导数算法:fminsearch使用某种单纯形搜索方法,fminunc使用线搜索方法。由于正确选择下降方向,fminunc在两次迭代中找到最小值:

Iteration  Func-count       f(x)        Step-size       optimality
 0           3               14                             6
 1           6                9       0.166667              4  
 2           9                5              1              0  
在这种情况下,单纯形法并不是最优的。fminsearch的优化细节如下:
Iteration   Func-count     min f(x)         Procedure
 0            1               14         
 1            3               14         initial simplex
 2            5            11.25         expand
 3            6            11.25         reflect
 4            8             7.25         expand
 5            9             7.25         reflect
 6           11             5.25         reflect
 7           12             5.25         reflect
 8           14                5         contract outside
 9           15                5         reflect
10           17                5         contract inside
11           19                5         contract inside
12           21                5         contract inside
13           23                5         contract inside
14           25                5         contract inside
15           27                5         contract inside
16           29                5         contract inside
17           31                5         contract inside
18           33                5         contract inside
19           35                5         contract inside
20           37                5         contract inside
21           39                5         contract inside
22           41                5         contract inside
23           43                5         contract inside
24           45                5         contract inside
25           47                5         contract inside
26           49                5         contract inside
27           51                5         contract inside
28           53                5         contract inside
29           55                5         contract inside
30           57                5         contract inside
31           59                5         contract inside
32           61                5         contract inside
33           63                5         contract inside
34           65                5         contract inside
35           69                5         shrink
36           73                5         shrink
37           77                5         shrink
38           81                5         shrink
39           85                5         shrink
40           89                5         shrink
41           93                5         shrink
42           97                5         shrink
43          101                5         shrink
44          105                5         shrink
45          109                5         shrink

很难说为什么fminsearch的结果恰好是2.0000 3.9000

最新更新