0

嗨 OptaPlanner 专家,

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

据我从这个帖子中了解到,在OptaPlanner的CVRPTW示例(版本CR4)中,实体Vehiclehere)代表车辆的行程(而不是车辆),我想问一下如何管理一个真实的情况,即车辆数量有限,不能重叠行程

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

应该如何修改示例?(我不关心 Swing 部分,只关心模型和规划器的配置 - listeners/DRL/XML)

编辑

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

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

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

4

1 回答 1

0

如何配置规划器以最小化每辆车的 VehicleTrip 数量?

使用平方技巧:

when
  $v : Vehicle
  $count : Number() from accumulate (VehicleTrip(vehicle == $v), count())
then
  scoreHolder.addSoftConstraintMatch(kcontext, - $count * $count);
end
于 2013-10-16T13:19:33.597 回答