0

我正在尝试使用 Jsprit 解决容量多车问题,容量表示为从出发到返回的总时间......包括过境。我发现虽然服务可以有容量维度,但运输仅以距离和时间表示,但从来没有容量维度的大小,因此永远不会与容量约束进行比较。我最终分配了太多的服务,任何运输时间都超出了容量。

我尝试了几种使用 StateUpdater 的方法,例如以更新后的路线的通过时间作为“大小”动态添加中断,并尝试动态更新车辆的容量......由于不同的原因,这两种方法都不起作用。

有没有办法强制执行我缺少的这种约束?我能想出的唯一可行的方法并不完美。那就是使用运输成本矩阵来找到所需的最小运输并提前将其从车辆的容量中删除。任何想法将不胜感激。

4

1 回答 1

0

似乎有几种方法可以解决这个问题。

  1. 当你建造你的车辆/车队时,设置车辆的最新到达时间:
VehicleTypeImpl vehicleType = VehicleTypeImpl.Builder.newInstance("vehicle").build();
vehicle = VehicleImpl.Builder.newInstance("Instance Name")
                        .setEarliestStart(start).setLatestArrival(end)
                        .setReturnToDepot(true)
                        .build();

此设置应防止车辆运行超过其允许的服务时间。您还可以将 a 添加hardRouteConstraint到 algorithmBuilder 中,就像您之前提到的那样。此外,将setCostPerTransportTime&&设置setCostPerDistance为您的VehicleImpl应该会改善结果。

  1. 为车辆分配容量限制,然后每个工作都会有容量限制。在您的情况下,它与时间更相关,如果车辆每天只能运行 4 小时,则限制可能是 4,每个工作的容量维度可能是 1。

    他们在文档中有一个很好的例子,即出租车路线,它使用座位数来表示它可以在前往每个目的地的途中接送的人数。查看TransportOfDisabledPeople 示例

希望这些信息有所帮助。干杯!

于 2020-06-30T21:44:13.187 回答