我想使用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。任何想法,如何使这个工作?
答案 0 :(得分:1)
这是因为如果u和x都是变量,则u * x不是线性的。要使用Ilog Concert创建二次表达式,您需要使用IloQuadNumExpr。但是,一旦你解决了这个问题,你就会遇到这样的问题:没有方形项的二次表达式(对角线上的零)既不是凸的也不是凹的,所以不能用cplex求解。如果u或x是二进制,则可以使用先前question中描述的转换。