当客户需求超出车辆容量时,如何建模车辆路径问题

时间:2020-02-05 14:08:59

标签: optaplanner

对于optaplanner来说,我是一个全新的人,正在寻找有关如何在客户需求超过任何一辆单车数量的情况下对车辆路线问题建模的建议。一个简单的例子是1个仓库,1个卡车(容量50)和1个客户(需求100)。在这种情况下,卡车显然必须与客户进行两次往返行程,每次要捡拾50件物品。在我看来,行车路线示例无法处理这些情况。

更一般地说,我有一个仓库,一个车队,每辆车都有一个物品可运载的能力,还有一个场地集合,每辆车都有一些物品。车辆需要将所有物品从现场集中运送到仓库。这几乎与车辆路径问题示例相同,但是除非我遗漏了一些东西,否则该示例似乎并不能说明卡车可能需要多次旅行并多次访问同一客户地点的可能性。还有另一个更合适的例子吗?

在旁注中,我认为如果可以列出计划变量(每辆车都可以有一个航点列表作为计划变量),则可以对此建模。看来还不支持吗?

1 个答案:

答案 0 :(得分:0)

optaplanner-example中的现成的VRP示例确实没有涵盖此内容。

我经常看到的一种典型方法是弄清楚“需求粒度”。例如,假设您的最小车辆类型具有容量50,那么我可能首先尝试使用10的demandGranularity。因此,需求90的单个客户被分成10次的9次访问。需求23的单个客户被分为1010和{{1 }}。 然后,只需像optaplanner-examples的vrp示例中那样分配对车辆的访问(Visit将Customer替换为@PlanningEntity)。一些提示:

  • 也使用subChainSwap和subChainChange移动(请参阅文档章节移动选择)。
  • 如果每次访问都有服务时间,并且在同一位置进行多次访问只会产生一次,请使用“崩溃”设计模式(不确定是否已记录)在arrivalTimeUpdatingVariableListener中处理。

一旦实现了这一点并使用optaplanner-benchmark来估计其价值,然后尝试需求粒度15,然后尝试需求粒度20或5。此时,您要在潜在的解决方案质量,性能与求解器花费的时间之间进行权衡点。查看BEST_SCORE图以比较那些需求粒度的影响。