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));
在 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));