我采用了 OptaPlanner VRP 网络示例并根据我的需要对其进行了定制。除了以下情况外,它工作正常:
可用车辆数量:2。
每辆车容量为6。
客户需求为7。
在上述场景中,OptaPlanner 无法解决问题。我认为它应该将 2 辆车部署到同一个客户位置,但它没有按预期工作。
我无法弄清楚如何配置 OptaPlanner 规则以使其正常工作。
我采用了 OptaPlanner VRP 网络示例并根据我的需要对其进行了定制。除了以下情况外,它工作正常:
可用车辆数量:2。
每辆车容量为6。
客户需求为7。
在上述场景中,OptaPlanner 无法解决问题。我认为它应该将 2 辆车部署到同一个客户位置,但它没有按预期工作。
我无法弄清楚如何配置 OptaPlanner 规则以使其正常工作。
一种解决方法是将客户与需求 7 分开:
您会看到,只要有可能,同一辆车就会访问同一地点的所有客户。对于更好的设计,您甚至可能希望重构Customer
为Customer
(每个位置仅 1 个)和CustomerPart
(每个客户的单独需求 1 个)。
请注意,在原始需求中,一个需求不能拆分为 2 辆车(不是因为约束规则,而是因为域设计)。因此,使用原始实现来解决您的需求,自然会排除一些可行且可能更优化的解决方案。
你的分裂越多,你打开新的可行的和潜在的新的最优解决方案就越多。当然,您将每个客户的需求拆分得越多,搜索空间就越大。并且大幅增加。用需求 1 的 7 个客户替换该客户(并为所有客户这样做)将是完美的,但会遇到重大的可扩展性问题。
实际上,我会将高于最小车辆容量的一半(甚至是该容量的三分之一)的所有需求分开,但仅此而已。使用 OptaPlanner Benchmarker 测量(而不是猜测)分割限制参数更改时的结果质量和数据集可扩展性,以便您对其进行调整。(哦,如果您最终进行了这些基准测试,请在此处分享您的最佳参数值。)