OR-Tools - 车辆路线问题 - 防止从初始解决方案中删除节点

Posted

技术标签:

【中文标题】OR-Tools - 车辆路线问题 - 防止从初始解决方案中删除节点【英文标题】:OR-Tools - Vehicle routing problem - Prevent dropping nodes from initial solution 【发布时间】:2021-11-22 23:49:26 【问题描述】:

我们有一个有效的 VRP 示例,但有时间和容量限制。

我们的场景如下:

我们有 5 辆车 我们正在接受来自 A -> B 的交通请求(例如出租车) 对于每个新请求,我们都会运行 vrp 算法来确定解决方案是否可行。当解决方案可行时,我们会为车辆创建新的行驶时间表。 如果解决方案可行,我们会通知乘客他们的请求已获批准 我们使用惩罚 = max.int,因为我们不想接受尽可能多的乘客

我们的问题是,算法有时在收到新请求时会丢弃一些我们已经标记为可行并添加到车辆调度中的节点(乘客请求)。如何防止丢弃已经添加到解决方案中的节点(然后在初始解决方案中)?

我们尝试将初始解决方案中节点的惩罚设置为 int.max,并将我们当前添加的节点的惩罚设置为稍小一些。当已经确认的节点稍后被删除时,它确实减少了事件的数量,但它仍然会发生。 我们认为部分解决方案也不是正确的方法,因为如果符合容量和时间限制,车辆必须能够在运送乘客 A 的同时接受乘客 B。 锁定车辆也看起来不正确,因为它会阻止我们添加新乘客来解决的解决方案。

我们只需要一种方法来防止某些节点被丢弃。在我们的例子中 - 已经添加到解决方案中的节点。换句话说 - 我们的初始解决方案可以更改,但不能删除任何节点。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我们设法通过取消惩罚解决了这个问题。由于我们为每个请求运行算法,并且我们的目标是吸引尽可能多的客户,因此无需使用惩罚。如果不使用惩罚,或者当解决方案不可行时,工具将丢弃所有节点。在我们的例子中,这意味着如果新请求的解决方案不可行,则意味着我们必须拒绝该请求。 Or-tools 将删除所有节点,但我们只是跳过保存新解决方案的部分(在这种情况下 - 不可行)。这样我们仍然有以前保存的旧可行结果。我们将这种“旧”解决方案用于我们即将提出的请求。

【讨论】:

以上是关于OR-Tools - 车辆路线问题 - 防止从初始解决方案中删除节点的主要内容,如果未能解决你的问题,请参考以下文章

Google OR-Tools简介

Google OR-Tools简介

Google OR-Tools简介

距离约束取决于第一个访问节点的车辆路径问题

OR-tools:根据python中另一个维度的积累添加一个维度(具体是每24小时使用的车辆成本)

OR-Tools - 最小化每条路线覆盖的区域