我必须使用什么cplex函数来编写此变量?

时间:2019-05-12 15:31:31

标签: java cplex

我有一个用Java(复杂)编写的“乘车”问题。 现在我正在尝试写放松。 在问题中存在一个二进制变量xijk,如果汽车k从i到j则为1,否则为0。 如果我想知道每个弧上的总流量,我必须写: xij =总和k∈Kxijk。 如何使用Cplex正确书写?

enter code here IloIntVar[][][] x = new IloIntVar[P][P][];
                       for (int i = 0; i < P; i++) {
                           for (int j = 0; j < P; j++) {
                               x[i][j] = cplex.boolVarArray(V);
                               for (int k = 0; k < V; k++) {
                                   x[i][j][k].setName("x." + i + "." + j + "." + k);
                               }
                           }
                       }

1 个答案:

答案 0 :(得分:2)

如何执行此操作取决于您是要在另一个约束中使用总和,还是只想在结果中获取该总和。

如果要在另一个约束中使用总和,请使用cplex.sum(x[i][j])。得出的结果是x[i][j]中所有变量的和。

如果要在解决方案中计算此和的值(调用cplex.solve()之后),请执行如下循环:

double sum = 0.0;
for (double d : cplex.getValues(x[i][j])) sum += d;

我不确定您为什么在问题中提到“放松”。但是,如果要创建模型松弛,则可能需要查看IloCplex.conversion()的参考文档。