【发布时间】:2020-10-13 10:29:12
【问题描述】:
我对变量e 和a 有一个二次问题,这两个变量都是非负数。我有一个约束,内容为
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