包含2个变量的Cplex术语

时间:2015-09-14 16:25:18

标签: java linear-programming cplex

我想使用java在cplex中将此约束添加到我的ILP中。

u_jk> =(u_ik + d_i + t_ij)x_ijk

    IloLinearNumExpr right = cplex.linearNumExpr();
    right.addTerm(serviceDuration , x[i][j][k]);
    right.addTerm(time[i][j], x[i][j][k]);
    right.addTerm(u[i][k], x[i][j][k]);
    cplex.addGe(u[j][k], right);

在第四行我遇到了问题,因为你[i] [k]和x [i] [j] [k]是IloNumVars。任何想法,如何使这个工作?

1 个答案:

答案 0 :(得分:1)

这是因为如果u和x都是变量,则u * x不是线性的。要使用Ilog Concert创建二次表达式,您需要使用IloQuadNumExpr。但是,一旦你解决了这个问题,你就会遇到这样的问题:没有方形项的二次表达式(对角线上的零)既不是凸的也不是凹的,所以不能用cplex求解。如果u或x是二进制,则可以使用先前question中描述的转换。