处理链式计划变量中的多个移动

时间:2017-04-10 08:04:36

标签: optaplanner

我正在尝试实施车辆路线示例的变体,而不是客户,我有“接送”和“下车”。我的硬约束是:

  • 每个相关的上下车对必须由同一车辆执行(例如,如果车辆A拿起物品,该物品不能被车辆B掉落)。
  • 必须在相关联之前进行接送(例如,除非您已将其取下,否则不能放下任何东西)。
  • 车辆不能超过它的最大容量。

除了这些严格限制之外,我的解决方案与车辆路线示例非常相似,其中每辆车都有一系列位置(PickUp或DropOff)。

我遇到的问题是使用默认移动它不能轻易地将PickUp和DropOff移动到不同的车辆。例如,以下更改移动会导致无效状态,因此将被拒绝:

Change move results in invalid state

为了正确完成移动,我需要做一个额外的移动,以便下拉属于与拾取器相同的链:

Second change move fixes the state

执行某种复合移动同时执行两个移动感觉是正确的做法,但是我不确定解决此问题的最佳方法。有没有人遇到类似的问题?

1 个答案:

答案 0 :(得分:0)

我以前见过用户这样做过。 optaplanner-examples本身还没有VRPPD示例(PD代表拾取和交付),因此您不能只复制粘贴。

重新使用 CompositieMove ,看一下构建它的静态方法。

通常有用:构建自定义MoveListFactory(稍后将其重构为MoveIteratorFactory以向外扩展)并使其生成CompositeMove和/或ChainedChangeMove的{​​{1}}。< / p>