使用 optaplanner 解决 VRPMT 问题的最佳实践是什么?
What is the best practice for solving VRPMT problem with optaplanner?
我们目前的方法是运行求解器很多次。我想知道是否有更好的方法。
一些解释:
多次行程的车辆路径问题 (VRPMT):车辆可以走不止一条路线。
以VRP为例,将Vehicle
重命名为VehiclePerDay
,然后在其上引入2个字段:vehicle和LocalDate。这是假设每天一趟。
如果您在同一天进行多次旅行,有两种方法:
1) 如上所述将Vehicle 拆分为VehicleTrip,并让它们指向前一个。所以第二趟离开的时候同一辆车的第一趟returns回到站点(加上装载时间)
2) 在每次访问之前使用影子变量和容量使用情况,并引入 "automatic" return 回车厂时刻。
基本上,如果一辆车的容量为 10,并运送到 5 个地点,每个地点有 3 件物品,它看起来像这样:
- 车辆A
- 访问 1:总容量需要 3,@ShadowVariable goBackToDepotFirst=false
- 访问 2:总容量需要 6,@ShadowVariable goBackToDepotFirst=false
- 访问 3:总容量需要 9,@ShadowVariable goBackToDepotFirst=false
- 访问 4:总容量需要 3,@ShadowVariable goBackToDepotFirst=true
- 访问 5:总容量需要 6,@ShadowVariable goBackToDepotFirst=false
我们目前的方法是运行求解器很多次。我想知道是否有更好的方法。
一些解释:
多次行程的车辆路径问题 (VRPMT):车辆可以走不止一条路线。
以VRP为例,将Vehicle
重命名为VehiclePerDay
,然后在其上引入2个字段:vehicle和LocalDate。这是假设每天一趟。
如果您在同一天进行多次旅行,有两种方法:
1) 如上所述将Vehicle 拆分为VehicleTrip,并让它们指向前一个。所以第二趟离开的时候同一辆车的第一趟returns回到站点(加上装载时间)
2) 在每次访问之前使用影子变量和容量使用情况,并引入 "automatic" return 回车厂时刻。 基本上,如果一辆车的容量为 10,并运送到 5 个地点,每个地点有 3 件物品,它看起来像这样:
- 车辆A
- 访问 1:总容量需要 3,@ShadowVariable goBackToDepotFirst=false
- 访问 2:总容量需要 6,@ShadowVariable goBackToDepotFirst=false
- 访问 3:总容量需要 9,@ShadowVariable goBackToDepotFirst=false
- 访问 4:总容量需要 3,@ShadowVariable goBackToDepotFirst=true
- 访问 5:总容量需要 6,@ShadowVariable goBackToDepotFirst=false