在Google Tools Java中,如何在所有路由组合上设置维度容量?
我的用例是所有路线的总持续时间--整个车队只能有X个小时的旅行时间。我在网上看到了关于如何设置跨度成本系数、软上限或所有单独车辆的容量的文档。我如何为所有车辆设置一个硬上界?
下面的代码不是正确的解决方案,因为它为所有路由分别设置了容量:
router.addDimension(transitCallbackIndex, 0, totalSecondsForAnIndividualRoute, true, "Time");
发布于 2021-08-12 11:24:23
基本上,您需要使用底层的解决程序并添加一个约束。
“所有车辆末端节点的cumulVar之和小于您的硬限制”
基于https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/samples/VrpGlobalSpan.java的Java示例
import java.util.ArrayList; // import the ArrayList class
import com.google.ortools.constraintsolver.Solver;
import com.google.ortools.constraintsolver.IntVar;
...
// Constraint sum of all distance to be <= 5500
Solver solver = routing.solver();
ArrayList<IntVar> ends = new ArrayList<>();
for( int i=0; i < manager.getNumberOfVehicles(); ++i) {
long index = routing.end(i);
IntVar tmp = distanceDimension.cumulVar(index);
ends.add(tmp);
}
IntVar[] vars = ends.toArray(new IntVar[0]);
solver.addConstraint(solver.makeSumLessOrEqual(vars, 5500));
https://stackoverflow.com/questions/68750129
复制相似问题