Google OR-Tools:所有路线的总时间容量

Google OR-Tools: Total Time Capacity over All Routes Combined

在 Google OR-Tools Java 中,如何设置所有路由的维度容量 combined?

我的用例是所有路线的总持续时间——整个车队只能行驶 X 小时。我在网上看到有关如何为所有车辆单独设置跨度成本系数、软上限或容量的文档。如何为所有车辆设置硬性上限?

下面的代码不是正确的解决方案,因为它单独设置了所有路线的容量:

router.addDimension(transitCallbackIndex, 0, totalSecondsForAnIndividualRoute, true, "Time");

基本上你需要使用底层求解器并添加一个约束

“所有车辆端节点的cumulVar之和小于您的硬限制”

Java 样本基于 https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/samples/VrpGlobalSpan.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));