fmincon:有约束的优化。局部最优。提供初始值和参数范围及其他约束条件。使用内点法、序列二次规划(SQP)等算法
options = optimoptions(‘fmincon’,‘Algorithm’,‘sqp’,‘MaxIterations’, 1000);
xk = fmincon(“fun”,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
MultiStart:调用fmincon[fminunc,lsqcurvefit,或lsqnonlin],多个初始值的局部最优,组成全局最优。在边界内使用均匀分布的起点或用户提供的起点
可以并行运行
调用fmincon:
opts = optimoptions(@fmincon,‘Algorithm’,‘sqp’, ‘MaxIterations’, 1000);
problem = createOptimProblem(‘fmincon’,‘objective’,“fun”,‘x0’,x0,‘lb’,lb,‘ub’,ub,‘options’,opts);
ms = MultiStart;
numStartPoints=20;
[xk,f] = run(ms,problem,numStartPoints);
调用fminunc
options = optimoptions(‘fminunc’, ‘Algorithm’, ‘quasi-newton’);
problem = createOptimProblem(‘fminunc’, ‘objective’, fun, ‘x0’, x0, ‘options’, options);
ms = MultiStart;
x0_ranges = [0 0; -1 1]; %多初始值(x0)的范围
[x_opt, fval, exitflag, output, solutions] = run(ms, problem, x0_ranges);
GlobalSearch:调用fmincon,多个初始值的局部最优,组成全局最优。fmincon提供初始值和参数范围
使用分散搜索机制生成起点
opts = optimoptions(@fmincon,‘Algorithm’,‘sqp’, ‘MaxIterations’, 1000);
problem = createOptimProblem(‘fmincon’,‘objective’,“fun”,‘x0’,x0,‘lb’,lb,‘ub’,ub,‘options’,opts);
gs = GlobalSearch;
numStartPoints=20;
[xk,f] = run(gs,problem,numStartPoints);
fminunc:无约束优化。提供初始值甚至初始值的范围,但不提供参数的范围及其他约束条件。默认使用拟牛顿法(BFGS)
①[x,fval] = fminunc(fun,x0)%不提供梯度(自动数值计算梯度)
②options = optimoptions(‘fminunc’,‘Algorithm’,‘quasi-newton’,‘SpecifyObjectiveGradient’,true);%提供梯度
fun = @rosenbrockwithgrad;%rosenbrockwithgrad 函数包含梯度作为第二个输出
x = fminunc(fun,x0,options);
③options = optimoptions(‘fminunc’, ‘SpecifyObjectiveGradient’, true);%提供梯度
[x_opt, fval] = fminunc(fun, x0, options, gradfun);%同时传递目标函数和梯度函数
fmincon——单起点
——MultiStart
——GlobalSearch
fminunc——单起点
——MultiStart
MultiStart——fmincon:提供初始值和参数范围及其他约束条件
——fminunc:提供初始值甚至初始值的范围,但不提供参数的范围及其他约束条件