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