如何仅在 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
我正在使用 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