【问题标题】:How to define a negative constraint only in Aeq * X <= Beq如何仅在 Aeq * X <= Beq 中定义负约束
【发布时间】:2017-06-08 07:30:21
【问题描述】:

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

到目前为止,我已经设法实现了一个 long only 约束(即权重不能小于零w &gt;= 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,并且它们都应该严格小于或等于零。这个怎么改?

【问题讨论】:

    标签: matlab optimization constraints linear-programming quadprog


    【解决方案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) == -1A*w &lt;= 0,这与为所有iw(i) &lt;= 0 相同。

    【讨论】:

    • 工作得很好!
    • 可能会要求跟进。您将如何重写它以允许正面和负面?这是我的想法: Aeq = one(1,NumAssets); beq = 1; A = []; b = [];
    • A = []; b = []; 部分绝对正确。但是,您不能让权重同时加起来为 1 和 –1。您的 Aeq = ones(1,NumAssets); beq = 1; 表示它们应该加起来为 1。如果这是您的意图,那么就做对了。
    • 嗯.. 它们本身不需要加起来。如果它们加起来是-1,那也很好。所以我想我留下它 [] 那么呢?
    • 不幸的是,绝对值不是线性函数。因此,您不能使用 “总和应该等于 –1 或 +1” 的约束。 A = [eye(NumAssets); ones(1, NumAssets); -ones(1, NumAssets);b = [zeros(NumAssets, 1); 1; 1]; 可以说 –1 ≤ Σ w_i ≤ 1Aeq = []beq = []
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 2020-10-13
    • 1970-01-01
    • 2015-08-31
    • 2012-07-15
    • 2019-04-24
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多