📅  最后修改于: 2023-12-03 14:41:17.593000             🧑  作者: Mango
fmincon
vs fminsearch
当我们需要求解无约束多元函数最小值的问题时,fminsearch
和 fmincon
是 Matlab 中两种常用的优化工具。它们的区别在于,fminsearch
是一种无约束优化方法,而 fmincon
则可以用于求解有约束最小化问题。
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);
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);
虽然 fminsearch
比较容易被操作,但是在一些非凸问题上可能会出现问题。而 fmincon
更加的稳定,且能够支持不同类型的约束条件。因此,当我们知道我们所定位的问题可以收到约束的限制时,更推荐使用 fmincon
进行最优化问题的求解。