CPLEX Java 凸二次约束(如果 x 非负,则仅 PSD)
CPLEX Java Convex Quadratic Constraint (only PSD if x non-negative)
我有一个变量 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),但我希望有一些方法可以解决这个问题......
是否有变通方法来获得此 运行?
一些评论:
我创建了 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);
无论我使用什么objective,我都会遇到这个问题,我尝试了最小值、最大值、线性对象、二次对象...
非常感谢您!
在 cplex 中,我们进行了一些转换,将二次约束转换为标准的二阶锥。这些转换并没有涵盖所有的可能性,恰好也没有涵盖这个。
但是,如果您按如下方式建模,它将起作用:
x^2 - y*z <= 0
x = 1
y + a = 1
z - e = 1
我有一个变量 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),但我希望有一些方法可以解决这个问题...... 是否有变通方法来获得此 运行?
一些评论: 我创建了 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);
无论我使用什么objective,我都会遇到这个问题,我尝试了最小值、最大值、线性对象、二次对象...
非常感谢您!
在 cplex 中,我们进行了一些转换,将二次约束转换为标准的二阶锥。这些转换并没有涵盖所有的可能性,恰好也没有涵盖这个。
但是,如果您按如下方式建模,它将起作用:
x^2 - y*z <= 0
x = 1
y + a = 1
z - e = 1