MATLAB 优化算法 SQP 中心搜索设置
要将 MATLAB 中的优化算法 SQP 设置为中心搜索,可以使用以下代码:
options = optimoptions('fmincon','Algorithm','sqp','Display','iter','TolFun',1e-8,'TolCon',1e-8,'TolX',1e-8,'MaxIter',1000,'MaxFunEvals',10000,'SubproblemAlgorithm','cg','Hessian','bfgs','InitBarrierParam',1,'InitTrustRegionRadius',1);
options = optimoptions(options,'SubproblemAlgorithm','cg','Hessian','bfgs','InitBarrierParam',1,'InitTrustRegionRadius',1,'HessFcn',@hessfunc);
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options);
function [H, HessPattern] = hessfunc(x,lambda)
n = length(x);
H = eye(n);
HessPattern = ones(n);
end
function [c,ceq,gradc,gradceq] = confun(x)
c = [];
ceq = [];
gradc = [];
gradceq = [];
end
function [f,gradf] = objfun(x)
f = (x(1)-1)^2 + (x(2)-2.5)^2;
gradf = [2*(x(1)-1); 2*(x(2)-2.5)];
end
在上面的示例代码中,我们使用 optimoptions 函数来设置 SQP 算法的参数。我们将 SubproblemAlgorithm 设置为 cg,Hessian 设置为 bfgs,InitBarrierParam 设置为 1,InitTrustRegionRadius 设置为 1,以便进行中心搜索。我们还使用 HessFcn 来指定我们自己的 Hessian 函数。在这个函数中,我们简单地返回一个单位矩阵作为 Hessian 矩阵,这只是为了让 MATLAB 知道我们希望使用 BFGS 方法来计算 Hessian 矩阵。
在这个示例中,我们的优化函数是一个简单的二次函数,我们的约束函数为空。您可以将这些函数替换为自己的优化和约束函数。
最后,我们调用 fmincon 函数来执行优化,将我们的参数选项传递给它。输出将是优化变量 x,函数值 fval,退出标志 exitflag,输出结构体 output,拉格朗日乘数 lambda,梯度 grad 和 Hessian 矩阵 hessian。
原文地址: https://www.cveoy.top/t/topic/nlKS 著作权归作者所有。请勿转载和采集!