绿色节点对应于被放入开放集/优先队列中的节点,由于数量巨大(整个地图大约有100-200万个节点),要找到如图所示的路径需要约5秒钟左右。但很遗憾,每条路线的最长计算时间只能是100毫秒左右。
目前,节点既存储在邻接列表中,也存储在一个空间100x100二维数组中。
我正在寻找可以在预处理时间、空间和必要时权衡路径优化程度的方法,以加快查询速度。根据分析器,启发式代价的直线Haversine公式是最昂贵的函数 - 我已经尽可能地优化了我的基本A*算法。
例如,我想如果我从2D数组的每个象限中选择一个任意节点X,并在每个节点对之间运行A*搜索,则可以将路线存储到磁盘上供后续模拟使用。在查询时,我只需要在象限内运行A*搜索,以便在预计算的路径与X之间获取路径。
是否有更精确的版本或者我应该追求不同的方法。非常感谢!
以下是对于任意加权启发式代价和计算10对随机选定节点之间的路径的基准测试结果:
Weight // AvgDist% // Time (ms)
1 1 1461.2
1.05 1 1327.2
1.1 1 900.7
1.2 1.019658848 196.4
1.3 1.027619169 53.6
1.4 1.044714394 33.6
1.5 1.063963413 25.5
1.6 1.071694171 24.1
1.7 1.084093229 24.3
1.8 1.092208509 22
1.9 1.109188175 22.5
2 1.122856792 18.2
2.2 1.131574742 16.9
2.4 1.139104895 15.4
2.6 1.140021962 16
2.8 1.14088128 15.5
3 1.156303676 16
4 1.20256964 13
5 1.19610861 12.9
令人惊讶的是,将系数增加到1.1几乎将执行时间减半,同时保持相同的路线。