OR 工具限制两个节点之间的访问

OR Tools limit visits between two nodes

例如,假设我有这样的东西:

solver().Add(this.solver.ActiveVar(start) == this.solver.ActiveVar(end));

针对特定路线。这意味着开始索引必须结束于结束索引。 如果我想限制在此期间可能发生的访问次数怎么办?

例如,如果限制为 2,则只有具有类似内容的解决方案才有效

start-> n1 -> n2 -> end
start -> n1 -> end
start -> end

通常我会尝试一些涉及车辆限制的东西,但在这种情况下,一辆车可以有多个起点和终点

几件事:

1.

solver().Add(this.solver.ActiveVar(start) == this.solver.ActiveVar(end));

只是意味着两个位置都必须处于活动状态(即已访问)或未访问(又名 0)(即是析取的一部分)。

  1. 如何创建一个反维度然后限制两个节点之间的差异? 在Python中应该多多少少:
routing.AddConstantDimension(
1, # increase by one at each visit
42, # max count
True, # Force Start at zero
'Counter')
counter_dim = routing.GetDimensionOrDie('Counter')

start = manager.NodeToIndex(start_node)
end = manager.NodeToIndex(end_node)

solver = routing.solver()

# start must be visited at most two nodes before end node
solver.Add(count_dim.CumulVar(start) + 3 >= count_dim.CumulVar(end))

# start must be visited before end
solver.Add(count_dim.CumulVar(start) <= count_dim.CumulVar(end))
  1. 不要让你的“车辆多次启动”,每辆车只有一个启动。节点....