OptaPlanner VRP边缘权重需要使用实际GPS数据而不是欧几里德距离

时间:2013-10-16 18:27:14

标签: optaplanner edge

我是optaplanner的新手。我试图修改vrp示例[无论是CVRP还是VRPTW]以支持不仅仅是欧几里德距离作为节点之间的边缘权重。我使用的是最新发布的optaplanner 6.0.0.CR5。关于如何更改节点之间边缘权重的任何建议都将非常受欢迎。

由于

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。所有人都认为你有一个GPS系统(如谷歌地图)可以很容易地返回2点A和B之间的距离。

请注意,GPS的系统责任是决定从A到B的实际道路(这不是NP完全问题,GPS系统已经针对它进行了优化)。 OptaPlanner决定做A,B,C,D ......的顺序(这是NP完全的)。

A)计算距离(不推荐)

只需通过拨打GPS系统替换get Location.get...Distance(Location)方法。

缺点:通常这种方法每秒被调用数千次,而你的GPS系统不会快速返回答案,大大降低了你的平均分数。

B)预先计算距离并将其存储在内存中

在课程Location中,添加Map<Location, int> dinstanceMap以保持与其他Location的距离。在致电Map之前填写solve(),并get...Distance()实施return distanceMap.get(otherLocation)

缺点:内存扩展:如果客户太多,您将获得OutOfMemory异常。

解决方法:对于每个Location,仅在该地图中添加1000个最近的位置。过滤移动选择器,使其永远不会尝试连接不在彼此的地图中的2个位置。这可能会影响结果的质量。

C)预先计算距离并将其存储在磁盘上并将其缓存在内存中

与B)相同,但由于距离矩阵太大,请将其存储在磁盘上。如果最近没有询问过,请使用缓存仅从磁盘中获取值。