我有一个用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);
}
}
}
答案 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()
的参考文档。