OptaPlanner CVRPTW - 用于优化车辆行程的规划器配置



嗨,OptaPlanner 专家,

我是OptaPlanner的新手,我请你帮忙。

据我从这个线程中发现,在OptaPlanner的CVRPTW示例(版本CR4(中,实体Vehicle(这里(代表车辆的行程(而不是车辆(,我想问一下如何管理真实情况,即有限数量的车辆不能有重叠行程

在提到的线程中,建议将实体车辆替换为 VehicleTrip,并创建一个新的车辆实体。我想新车辆有一个 VehicleTrip 对象列表(因为车辆可以在一天内进行多次旅行 - 例如(。但是如何配置计划器以尽量减少每辆车的车辆行程数量?

示例需要如何修改?(我不关心 Swing 部分,只关心模型和规划器的配置 - 监听器/DRL/XML(

编辑

我如上所述修改了模型,并在类 VrpTimeWindowedVehicleRoutingSolution 中创建了方法int getOverlappingTime(),该方法返回同一Vehicle的不同VehicleTrip的重叠时间量。然后我创建了以下规则:

rule "vehicleTripsOverlapping"
    when
        $solution : VrpTimeWindowedVehicleRoutingSolution()
    then
        scoreHolder.addHardConstraintMatch(kcontext, - $solution.getOverlappingTime());
end

该方法工作正常(经过测试(,但分数没有改变(似乎规则没有被触发(。有人可以帮助我吗?

如何配置计划器以最大程度地减少 每辆车的车辆行程?

使用平方技巧:

when
  $v : Vehicle
  $count : Number() from accumulate (VehicleTrip(vehicle == $v), count())
then
  scoreHolder.addSoftConstraintMatch(kcontext, - $count * $count);
end