【问题标题】:CPLEX Java Convex Quadratic Constraint (only PSD if x non-negative)CPLEX Java 凸二次约束(如果 x 非负,则仅 PSD)
【发布时间】:2020-10-13 10:29:12
【问题描述】:

我对变量ea 有一个二次问题,这两个变量都是非负数。我有一个约束,内容为

a <= e (1 - a). 

当转换时,矩阵 Q 读取 [[0,-1][0,0]] 对于任意 a 和 e 显然既不是正半定也不是负半定。但是,对于非负 e 和 a,它是半负定的(或当带到左侧时是半正定的)。因此,这应该根据https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.8.0/ilog.odms.cplex.help/refcallablelibrary/macros/CPXERR_Q_NOT_POS_DEF.html 解决。但是,我仍然收到错误5002 Q in ''q1'' is not positive semi-definite

我发现对于所有向量 x,Q 必须是半定的,无论它们的可行性如何 (https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.8.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/cont_optim/qp/02_convexity_defn.html),但我希望有办法解决这个问题...... 有什么变通方法可以让它运行吗?

一些cmets: 我按如下方式创建了 a 和 e:

e = cplex.numVar(0, Double.MAX_VALUE);
a = cplex.numVar(0, 1);

约束被添加为

 IloLQNumExpr constr = cplex.lqNumExpr();
 constr.addTerm(1.0, e, a);
 constr.addTerm(-1.0, e);
 constr.addTerm(1, a);
 cplex.addLe(constr,0);

无论我使用什么目标,我都会遇到这个问题,我尝试过 min、max、linear obj、quadratic obj ...

非常感谢您!

【问题讨论】:

  • 您是否考虑过使用分段线性函数进行逼近? a=1 是不可行的,所以你可以除以 a-1。左边的 a/(a-1) 可以用分段线性函数来近似。不过,不确定这是否足够准确。
  • 我想过,但整个事情已经是一个近似值,所以我不想“进一步近似”......它会以太多的间隔结束......我只是很好奇为什么这是不可能的,因为可以在 Gurobi 中实现相同的约束

标签: java cplex quadratic-programming


【解决方案1】:

在 cplex 中,我们进行了一些转换以将二次约束转换为标准的二阶锥。这些转换并没有涵盖所有可能性,也恰好没有涵盖这一点。

但是,如果您按以下方式对其进行建模,它将起作用:

x^2 - y*z <= 0
x = 1
y + a = 1
z - e = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多