交通堵塞的车辆路线

时间:2015-05-20 10:49:19

标签: java optaplanner

我正在使用谷歌地图和optaplanner构建车辆路由应用程序的原型。我将基于距离的评分改为基于持续时间的评分,其中使用车辆的距离/平均速度计算持续时间值。

现在我想在我的应用程序中添加交通堵塞变量。交通堵塞变量被实现为从当前位置到另一个位置的附加持续时间值(我使用位置地图和双倍就像RoadLocation类中的距离变量一样)。当我尝试运行它时,结果总是与前一个相同。这是第一次运行的结果: enter image description here

我绘制一条红线代表交通堵塞,然后尝试重新运行解决阶段。这是第二个结果:

enter image description here

结果与前一个相同。我的问题是,将交通堵塞变量应用于车辆路径问题的最佳方法是什么?有没有人有添加这个变量的经验?任何评论和建议将不胜感激。 谢谢和问候。

1 个答案:

答案 0 :(得分:1)

这一段只是一个介绍。如果你想跳过它,那就去做吧。 ;-) 我已经实施了类似的交通堵塞方法,但它不是一个实时系统。解决方案每X分钟运行一次,这绝对没问题。 在实际的optaPlanner计算开始之前,这给了我预先计算完整道路网络的方式和路线的好处。 这节省了实际计算optaPlanner的时间。 网络由顶点和弧组成。对于每个弧线,你都有一个重量。

这里为您开始真正的交易。 假设您为所有地点的预算计算步骤实施A-StarDOUBLE.MAX_VALUE算法以及如何到达那里。这些寻找算法的方法是选择具有最低“行进”成本的弧。对于每个将被阻挡的弧/道路,我们假设距离为distance。这个值可以解释为“不可驱动”或者说是:这两个顶点之间的连接甚至不存在于当前的解决方案查找过程中。因此寻找算法的方式将简单地跳过这条道路。对于每条可驾驶道路,我们计算实际成本,例如:距离或接近经验。

optaplanner过程本身只使用预先计算的寻路机制,例如:比较从地点A到地点B的计算距离。

要将DOUBLE.MAX_VALUE变量设置为{{1}},您可以决定基于用户的信息,其他提供商的信息,如Google或基于管理员的规则。根据我的经验,基于用户的内容与基于管理的操作,我可以推荐两种方式。

让我们讨论基于用户的操作:用户可以使用与管理员相同的一组GUI操作来标记“卡住”的方式。对于下一个optaPlanner迭代,将涉及该标志。如果您拥有用户的GPS数据,则可以获得近似的速度。对于GPS测量的每个间隔,您可以计算该速度。如果速度在道路上(不是交叉口),并且低于规定的最小速度(比如说1mph或2kmh),那么你可以通过弹出窗口询问用户是否有交通拥堵或者在没有询问的情况下自动阻止该道路用户。如果您选择弹出对话框,那么很多不同的用户必须在定义的时间段内投票“是”,例如半个小时,然后道路被堵住了。当很多用户再次开车并发送该路的GPS坐标时,您可以解决交通拥堵问题。 自动方法的主要优点是,您将拥有一个基于系统的方法,错误率很低。

如果您通过管理员采用手动方法,那么您必须注意实施GUI以显示道路并启用/禁用道路的阻止属性。