我目前正在Android中开发导航系统,我正在使用dijkstra的最短路径算法My Vertex类包含如下所示的成员:
-------------------------------------
| Vertex |
-------------------------------------
| | | | |
| id | name | longitude | latitude |
-------------------------------------
以及如下所示成员的边缘:
---------------------------------------------
| Edge |
---------------------------------------------
| | | | | |
| id | name | source | destination | weight |
---------------------------------------------
由于顶点和边缘特别基于实际数据:交点作为顶点 和Edges之间的一个交汇点就是我的应用程序的整个图形就是我所在城市的道路网络。
我的问题是,我仍然无法根据一个交叉点到另一个交叉点的距离以及它到一个交叉点到另一个交叉点的时间来计算边缘的权重时算出算法或算术等式。 / p>
答案 0 :(得分:1)
这取决于您想要优化的内容(您可以让用户选择):
如果你想要最短的路线,边缘的费用就是街道的长度。
如果您想要最快的路线,费用将是预计到达街道的时间。
如果您想要在燃油消耗方面最经济的路线,成本将是“街道长度/每加仑英里数(预期速度)”
燃油经济性因汽车而异,但您可以假设经济(以每加仑英里数计)随着加速直线增长直至达到一定速度,然后开始下降 [Wikipedia] 。因为你总是可以比最大速度慢。速度,假设效率不变。 (miles/gallon) / (miles/hour) = (hours/gallon)
,因此成本大致与时间成正比,并以汽车最有效的速度(可由用户输入)应用速度限制。
如果您有准备好的拥堵数据来源,请使用它来确定预期的车速。
通过观察汽车来衡量预计出行时间的一种方法是对过去离开街道的所有汽车的平均值进行{间隔}(小时?分钟?只有最后一辆车?最后十辆车? )。但是,这并没有太快地解决拥堵问题。您可以采用速度中仍然存在的所有汽车的平均速度。但是,这会高估红绿灯的影响。
您可以在过去一小时内获取输入街道的所有车辆的平均速度。 average(distance traveled/time spent)
或average(distance traveled)/average(time spent)
。如果街道没有生命,只需采取速度限制或使用更长的测量间隔。
请记住,预期速度在两个方向上可能不同(取决于您的数据来源),因此请始终使用成对的有向边并分别在每个方向上进行测量。
[1] http://en.wikipedia.org/wiki/File:Fuel_economy_vs_speed_1997.png