如何仅在 Aeq * X <= Beq 中定义负约束

How to define a negative constraint only in Aeq * X <= Beq

我正在使用 quadprog link 来寻找最佳权重的投资组合。

到目前为止,我已经设法实现了一个长约束(即权重不能小于零w >= 0 and w1 + w2 + ... wN = 1),如下所示:

FirstDegree             = zeros(NumAssets,1);
SecondDegree            = Covariance;
Aeq                     = ones(1,NumAssets);
beq                     = 1;
A                       = -eye(NumAssets);
b                       = zeros(NumAssets,1);

x0                      = 1/NumAssets*ones(NumAssets,1);
MinVol_Weights          = quadprog(SecondDegree,FirstDegree,A,b,Aeq,beq,[],[],x0, options);

我现在正在尝试设置一个仅做空的约束,即所有权重需要加起来为 -1,并且它们应该都严格小于或等于零。这怎么改写?

请注意,您可以将任何 “大于” 不等式 a ≥ b 重写为 “小于” 不等式 -a ≤ -b 通过翻转符号。在您的示例中,选择

Aeq = ones(1,NumAssets);
beq = -1;
A   = eye(NumAssets);
b   = zeros(NumAssets,1);

这意味着 Aeq*w == w(1) + w(2) + … + w(NumAssets) == -1,而 A*w <= 0 等同于对所有 i.

w(i) <= 0