我有一个拨号乘车问题写在Java (cplex)。现在我正试着写一首轻松的歌。在这个问题中,有一个二元变量xijk,如果汽车k从i到j,则为1,否则为0。如果我想知道每条弧线上的总流量,我必须这样写: xij = sum k∈K xijk。如何使用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);
}
}
}
发布于 2019-05-13 01:13:38
如何做到这一点取决于你是想在另一个约束中使用总和,还是只想在结果中获得这个总和。
如果您想在另一个约束中使用总和,则使用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()
的参考文档。
https://stackoverflow.com/questions/56100743
复制相似问题