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
)(即是析取的一部分)。
- 如何创建一个反维度然后限制两个节点之间的差异?
在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))
- 不要让你的“车辆多次启动”,每辆车只有一个启动。节点....
例如,假设我有这样的东西:
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
)(即是析取的一部分)。
- 如何创建一个反维度然后限制两个节点之间的差异? 在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))
- 不要让你的“车辆多次启动”,每辆车只有一个启动。节点....