4

我采用了 OptaPlanner VRP 网络示例并根据我的需要对其进行了定制。除了以下情况外,它工作正常:

可用车辆数量:2。
每辆车容量为6。
客户需求为7。

在上述场景中,OptaPlanner 无法解决问题。我认为它应该将 2 辆车部署到同一个客户位置,但它没有按预期工作。

我无法弄清楚如何配置 OptaPlanner 规则以使其正常工作。

4

1 回答 1

3

一种解决方法是将客户与需求 7 分开:

  • 进入需求 3 和 4 的 2 个客户(都在同一个位置)。
  • 或进入需求 3、2 和 2 的 3 个客户(都在同一位置)。

您会看到,只要有可能,同一辆车就会访问同一地点的所有客户。对于更好的设计,您甚至可能希望重构CustomerCustomer(每个位置仅 1 个)和CustomerPart(每个客户的单独需求 1 个)。

请注意,在原始需求中,一个需求不能拆分为 2 辆车(不是因为约束规则,而是因为域设计)。因此,使用原始实现来解决您的需求,自然会排除一些可行且可能更优化的解决方案。

你的分裂越多,你打开新的可行的和潜在的新的最优解决方案就越多。当然,您将每个客户的需求拆分得越多,搜索空间就越大。并且大幅增加。用需求 1 的 7 个客户替换该客户(并为所有客户这样做)将是完美的,但会遇到重大的可扩展性问题。

实际上,我会将高于最小车辆容量的一半(甚至是该容量的三分之一)的所有需求分开,但仅此而已。使用 OptaPlanner Benchmarker 测量(而不是猜测)分割限制参数更改时的结果质量和数据集可扩展性,以便您对其进行调整。(哦,如果您最终进行了这些基准测试,请在此处分享您的最佳参数值。)

于 2015-12-22T07:23:38.247 回答