首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为重新加载节点限制断开的VehicleVar域?

如何为重新加载节点限制断开的VehicleVar域?
EN

Stack Overflow用户
提问于 2020-11-15 14:02:54
回答 1查看 128关注 0票数 1

我想对非仓库节点和重新加载节点限制车辆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)。(编辑)

代码语言:javascript
复制
#[routing.AddDisjunction([manager.NodeToIndex(i)], 0)
#for i in data['reloadNodes']]  # without penalty

附加限制

代码语言:javascript
复制
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没有任何限制。

请帮帮我,我觉得我在断续上做错了什么:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-15 17:18:55

node_i车辆变量的指标不是node_i,而是index_manager.NodeToIndex(node_i)

其余的代码似乎是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64845275

复制
相关文章

相似问题

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