- 我们如何优化 Optaplanner 以选择最快的路线?请参阅下图中突出显示的点。它正在走很长的路。
注:车辆无需返厂。我认为我不能使用 CVRPTW,因为arrivalAfterDueTimeAtDepot 是一个内置的硬约束(此外我没有任何时间限制)。
- 我们如何编写一个约束来选择容量较小的车辆?
例如,一位客户只需要 3 件商品,而我们有两辆容量为 4 和 9 的车辆。似乎 Optaplanner 默认从输入顺序中选择第一辆车。
注:车辆无需返厂。我认为我不能使用 CVRPTW,因为arrivalAfterDueTimeAtDepot 是一个内置的硬约束(此外我没有任何时间限制)。
我认为它正在将蓝色车辆带到班加罗尔市中心,因为绿色已经满负荷。
Solver.getScoreDirectorFactory()
如果您手动将该位置放入绿色行程并交换绿色和蓝色行程的车辆,请检查分数是多少(通过 计算)。如果情况更糟(或打破硬约束),那么 OptaPlanner 选择其他解决方案是正常的。在这种情况下,要么你的 score 函数有错误(或者你意识到根本不想要那个解决方案)。但如果它确实有更好的分数,OptaPlanner <localSearch>
(例如 Late Acceptance)应该会找到它(特别是在向外扩展时,因为具有讽刺意味的是,局部最优在缩小时是一个更大的问题)。您可以尝试添加<subchainSwapMoveSelector>
等以更快地逃避局部最优。
如果您想更多地引导搜索(这通常不是一个好主意),您可以定义一个规划值强度比较器,将小型车辆排在大型车辆之前,并使用构建启发式WEAKEST_FIT
( _DECREASING
)。