嗨,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