📜  fmincon vs fminsearch (1)

📅  最后修改于: 2023-12-03 14:41:17.593000             🧑  作者: Mango

fmincon vs fminsearch

当我们需要求解无约束多元函数最小值的问题时,fminsearchfmincon 是 Matlab 中两种常用的优化工具。它们的区别在于,fminsearch 是一种无约束优化方法,而 fmincon 则可以用于求解有约束最小化问题。

1. fminsearch

fminsearch 采用单纯形搜索算法(Nelder-Mead 算法)求解无约束问题的最小值。这种算法操作容易,但是它并不保证收敛到全局最小值。当目标函数存在多个局部最小值,并且初始值选择不当时,可能会导致结果陷入局部最小值而不是全局最小值。

% function handle
fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

% initial point 
x0 = [-1.2, 1];

% optimization options
options = optimset('Display', 'iter');

% optimization using fminsearch
[x, fval, exitflag] = fminsearch(fun, x0, options);
2. fmincon

fmincon 是一个通用型非线性规划求解器,可以用于解决多种类型的最优化问题。fmincon 支持无等式约束和等式约束条件的优化问题,也支持线性或非线性约束。fmincon 使用的算法通常采用牛顿方法或拟牛顿方法,在稳定性方面比 fminsearch 更具优势。

% function handle
fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

% initial point 
x0 = [-1.2, 1];

% lower and upper bound constraints
lb = [-10, -10];
ub = [10, 10];

% optimization options
options = optimoptions(@fmincon, 'Algorithm', 'interior-point');

% optimization using fmincon
[x, fval, exitflag] = fmincon(fun, x0, [], [], [], [], lb, ub, [], options);
Conclusion

虽然 fminsearch 比较容易被操作,但是在一些非凸问题上可能会出现问题。而 fmincon 更加的稳定,且能够支持不同类型的约束条件。因此,当我们知道我们所定位的问题可以收到约束的限制时,更推荐使用 fmincon 进行最优化问题的求解。