java - 如何在 Google OR 工具的 VRP 中强制执行硬约束,某些节点不应首先和最后访问

标签 java or-tools vehicle-routing

我试图强制执行一个约束,即在行程开始时或行程因 VRP 问题结束时不应访问某些节点。有没有办法在 Google OR 工具中强制执行此类约束? 仅供引用,我使用的语言是java。

最佳答案

您可以尝试修改nextVar变量的范围。

例如禁止每辆车的弧 start -> index

Java:

long toIndex = manager.nodeToIndex(index); 
for(int i = 0; i < vehicleNumber; ++i) {
  long fromIndex = routing.start(i);
  logger.info("Forbidding connection " + fromIndex + " -> " + toIndex);
  routing.nextVar(fromIndex).removeValue(toIndex);
}

.Net

long toIndex = manager.NodeToIndex(index); 
for (int i = 0; i < vehicleNumber; ++i) {
  long fromIndex = routing.Start(i);
  Console.WriteLine($"Forbidding connection {fromIndex} -> {toIndex}");
  routing.NextVar(fromIndex).RemoveValue(toIndex);
}

Python

to_index = manager.NodeToIndex(index);
for i in range(vehicle_number):
  from_index = routing.Start(i)
  print(f"Forbidding connection {from_index} -> {to_index}")
  routing.NextVar(from_index).RemoveValue(to_index)

index -> end 节点基本相同。

Java:

long fromIndex = manager.nodeToIndex(index); 
for(int i = 0; i < vehicleNumber; ++i) {
  long toIndex = routing.end(i);
  logger.info("Forbidding connection " + fromIndex + " -> " + toIndex);
  routing.nextVar(fromIndex).removeValue(toIndex);
}

.Net

long fromIndex = manager.NodeToIndex(index); 
for (int i = 0; i < vehicleNumber; ++i) {
  long toIndex = routing.End(i);
  Console.WriteLine($"Forbidding connection {fromIndex} -> {toIndex}");
  routing.NextVar(fromIndex).RemoveValue(toIndex);
}

Python

from_index = manager.NodeToIndex(index);
for i in range(vehicle_number):
  to_index = routing.End(i)
  print(f"Forbidding connection {from_index} -> {to_index}")
  routing.NextVar(from_index).RemoveValue(to_index)

关于java - 如何在 Google OR 工具的 VRP 中强制执行硬约束,某些节点不应首先和最后访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60427019/

相关文章:

python - 寻找最短路径中 osm 节点列表的路径 ID

python - 在 Python 中重定向外部库的 stdout 和 stderr

java - 在 raytracer 中使用 SVG 文件作为纹理

java - 无法更改 netbeans 日志记录级别

python - 属性错误 : 'module' object has no attribute 'DefaultRoutingSearchParameters'

python - 是否可以仅使用一个整数变量使用 or-tools 来计算 argmax?

python - 如何在 Google OR-Tools 中设置每条路线的最小位置?

java - 使用 Spring oauth2 身份验证访问 Blizzard Dev API

Java 2D "tank"游戏 : Shooting 'missile' from rotated sprite doesn't work

python - 具有聚合点的取货和送货 VSP