首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google或-Tools:所有线路的总时间容量加在一起

Google或-Tools:所有线路的总时间容量加在一起
EN

Stack Overflow用户
提问于 2021-08-11 23:54:14
回答 1查看 180关注 0票数 2

在Google Tools Java中,如何在所有路由组合上设置维度容量?

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

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

代码语言:javascript
运行
复制
router.addDimension(transitCallbackIndex, 0, totalSecondsForAnIndividualRoute, true, "Time");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-12 11:24:23

基本上,您需要使用底层的解决程序并添加一个约束。

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

基于https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/samples/VrpGlobalSpan.java的Java示例

代码语言:javascript
运行
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68750129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档