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

时间:2013-10-09 19:42:25

标签: java drools drools-planner optaplanner

OptaPlanner专家,

我是OptaPlanner的新手,我向你求助。

据我发现this thread在OptaPlanner的CVRPTW示例(版本CR4)中,实体Vehiclehere)表示车辆行程(而不是车辆) ,我想问一下如何管理一个真实的情况,即数量有限的车辆不能重复旅行

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

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

修改

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

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

该方法正常工作(已测试),但分数不会改变(似乎规则未被触发)。有人能帮我吗?

1 个答案:

答案 0 :(得分:0)

  

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

使用平方法:

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