具有零用户提供的粗麻布的 Matlab fmincon

计算科学 优化 matlab 凸优化 约束优化
2021-12-08 09:31:14

我必须解决问题

minx1Tx+λ2Ωμx22+β2xγ¯22w.r.t.Pxc=0,  x0

为了做到这一点,我目前正在使用 Matlab fmincon

FMinValue = @(x) sum(x)            + lambda * sum((Omega*mu - x).^2) / 2 + beta * sum((x - gamma_bar).^2) / 2;
GradFMin  = @(x) ones(length(x),1) + lambda * (Omega*mu - x)             + beta * (x - gamma_bar);
Fmin = @(x) FMin(x, FMinValue, GradFMin); % merges FMinValue and GradFMin so that fmincon can handle it
HessianFPlusLagrangianPart = @(x, lagrange_multiplier) spdiags((beta-lambda)*ones(length(x),1),0,length(x),length(x));

options = optimoptions('fmincon', 'Algorithm', 'interior-point' , 'GradObj', 'on', 'Hessian', 'user-supplied', 'HessFcn', HessianFPlusLagrangianPart);
x = fmincon(Fmin, ones(length(gamma_bar), 1), [], [], P_bar, c_bar, zeros(length(gamma_bar), 1), [], [], options);

这里λβ是可以相等的固定参数。如果是这种情况,则λβ=0这意味着我的 hessian 矩阵也为零。当然,我得到了 Matlab 警告Warning: Matrix is close to singular or badly scaled,但在这种情况下,零粗麻布是正确的。

有什么建议在这种情况下该怎么做?不幸的是,我无法更改为,lsqnonlin因为我的目标函数中有线性项sum(x)而且我不能使用另一种算法来代替interior-point,因为我同时有界和线性约束。

如何克服这个问题并使其适用于的所有选择?λβ

2个回答

克服这种情况的一种方法是纠正目标函数的 Hessian 矩阵,它应该是,然后查看是否仍然存在缩放问题。(λ+β)I

问题是(可能)您的梯度和 Hessian 不正确: ,因此 Hessian 的对应部分是

(λ2Ωμx22)=λ(Ωμx)(1)=λ(xΩμ)
2(λ2Ωμx22)=λI.