我目前正在开发安卓导航系统,我正在使用dijkstra的最短路径算法 我的顶点类包含如下所示的成员:
-------------------------------------
| Vertex |
-------------------------------------
| | | | |
| id | name | longitude | latitude |
-------------------------------------
以及如下所示的成员边:
---------------------------------------------
| Edge |
---------------------------------------------
| | | | | |
| id | name | source | destination | weight |
---------------------------------------------
由于顶点和边专门基于真实数据:交点作为顶点 和一个交叉点到另一个交叉点作为边缘简单地说,我的应用程序的整个图形是我城市的道路网络。
我在这里的问题是,我仍然无法想出一种算法或算术方程来计算边的权重,该算法或算术方程基于一个十字路口到另一个十字路口的距离以及它到达一个十字路口到另一个十字路口的时间。
这取决于您要优化的内容(您可以让用户选择):
如果您想要最短的路径,则边的成本只是街道的长度。
如果您想要最快的路线,则成本将是上街的预期时间。
如果您想要在油耗方面最经济的路线,成本将是"街道长度/每加仑英里(预期速度)
燃油经济性因汽车而异,但您可以假设经济性(以每加仑英里为单位)随着速度线性增长,直到达到一定速度,然后开始下降[维基百科]。由于您始终可以比最大速度慢行驶,因此假设效率恒定。(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