java - 具有 2 个变量的 CPLEX 项

标签 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);

在第四行我遇到了问题,因为 u[i][k] 和 x[i][j][k] 是 IloNumVar。任何想法,如何让它发挥作用?

最佳答案

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

关于java - 具有 2 个变量的 CPLEX 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32569523/

相关文章:

java - 安卓 BigInteger ArithmeticException

python - MATLAB 和 Python 中线性规划的冲突解决方案

python - PyInstaller .exe 文件什么都不做

netbeans - 使用 AMPL 的明显优势是什么?

java - 如何共享使用 ImageView 功能的数组中的图像?

java - 将编码字符串转换为 Base64 格式时出现未知字符

c++ - 为什么我的 LP 只能得到整数解?

c++ - 绘制复杂优化的进度

java - 为什么 Sun 的 Arrays.sort 实现创建输入数组的克隆?

python - 在python-Gurobi接口(interface)中添加惰性约束