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

时间:2017-01-23 17:35:38

标签: matlab optimization constraints linear quadprog

我正在使用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,它们应该全部严格小于或等于零。怎么能改写呢?

1 个答案:

答案 0 :(得分:2)

请注意,您可以将任何“大于”不等式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) == -1A*w <= 0与所有 i w(i) <= 0相同。