我想对非仓库节点和重新加载节点限制车辆var的域。另外,重新加载也是可选的。例如,假设我有8个节点和2个车辆,
车辆1:容量(3)
车辆2:容量(4)
0 ->仓库(所有车辆在这里开始和结束)
1 ->重装(允许车辆-> {1,2})
2 ->重装(允许车辆-> {1,2})
3 ->落点(需求= 1) (允许车辆-> 1)
4 ->落点(需求= 1) (允许车辆-> 1)
5 ->落点(需求= 2) (允许车辆-> 1)
6 ->落点(需求= 1) (允许车辆-> 2)
7 ->落点(需求= 2) (允许车辆-> 2)
预期访问顺序:
车辆1 -> 0,3,4,1,5,0
车辆2 -> 0,6,7,0
我努力做到这一点的方式:
不分离重新加载节点(1)。(编辑)
#[routing.AddDisjunction([manager.NodeToIndex(i)], 0)
#for i in data['reloadNodes']] # without penalty附加限制
for node_i in range(routing.nodes()):
index_i = manager.NodeToIndex(node_i) # internal index
if node_i is depot_node: continue # Leave depot node
allowed_vehicles = list(data['vehiclesAllowed'][node_i]) # Vehicles allowed to visit `node_i`
if node_i in data['reloadNodes']:
allowed_vehicles.insert(0, -1) # because reload nodes are optional.
routing.VehicleVar(index_i).SetValues(allowed_vehicles)但通过这种方式,我得到了所有重载节点都被访问的结果(在本例中,Vehice2访问了重载节点2,就在其最后一个仓库节点之前,比如这个0、6、7、2、0)。我尝试过使用更多的重新加载节点,但每次都有相同的行为。
这很好,因为没有分离,所以每个节点都会被访问。(编辑)
然后,我尝试断开(去掉点1st的代码片段)
在此更改之后,在运行50秒后,状态ROUTING_FAIL_TIMEOUT没有结果。
注意:在尝试此操作时,对trip max_time和max_length没有任何限制。
请帮帮我,我觉得我在断续上做错了什么:
发布于 2020-11-15 17:18:55
node_i车辆变量的指标不是node_i,而是index_manager.NodeToIndex(node_i)。
其余的代码似乎是正确的。
https://stackoverflow.com/questions/64845275
复制相似问题