快速可见性图解算器?

时间:2014-07-03 13:29:13

标签: algorithm performance graph-algorithm path-finding

我正在尝试在世界海洋上编制探路者。我之前在包含陆地和水细胞的细胞网格上使用了A *算法。但我认为更好的解决方案是拥有大陆,岛屿和多边形;计算两者之间空间的可见性网格(仅一次);然后在可见性图表中包含原点和目的地;然后在结果图上求解A *。环顾四周,我找到了一本名为计算几何的书,它描述了一种计算可见性图的算法。但是,在尝试用C ++实现它之前 - 这听起来像个好主意吗?

据我所知,已经提出了许多不同的算法来计算可见性图,具有不同的数值复杂性。在我看来,这是一个活跃的领域,而不是已经解决的好东西。所以在我看来这是一个真正的问题。如果您不这么认为,请告诉我原因!

编辑: 我现在已经实现了一种算法,该算法首先在包含多边形的世界地图上计算可见性图,其中包含大约5,000个顶点。在第二步中,A *在可见性图上运行。 在运行时间和内存方面,可能存在对地图详细程度的限制。目前,可见性图表在我的笔记本电脑上计算大约需要10分钟(我相信该算法非常有效;但我也相信我的代码效率不高,可能会显着加速)。计算可见性图后,A *非常快。 非常感谢你给出的答案和评论!

4 个答案:

答案 0 :(得分:4)

规划图形而不是细胞分解是提高路径和运动规划算法性能的绝佳方法。然而,许多处理计算几何的算法都充满了挑战(特别是当你不能犯错误时),并且通常最好依赖于该领域专家开发的可靠的计算几何库。

过去15年的路径规划研究很多都集中在概率运动规划技术上,而不是使您的解决方案过于复杂化。这些技术的两个最着名的例子是快速探索随机树(RRT)和概率路线图(PRM)。这些算法易于实现,有大量示例可供使用,并且几乎不需要深入的几何知识即可开始。

    LaValle的“规划算法”中的
  • Chapter 5 - Sampling Algorithms涵盖了开始使用概率运动规划时需要了解的大部分内容
  • 来自同样的
  • Chapter 6 - Combinatorial Algorithms遍及大多数经典可见性,例如分解,并以警告开头。警告:某些方法不切实际。在研究算法时,请注意不要做出错误的假设其中一些是高效且易于实现的,但很多可能都不是“

答案 1 :(得分:0)

我有完全相同的用例,最终实现了Lee的可见性图算法,该算法在O(n ^ 2 log n)时间内运行。如果有人使用类似的话,我会把它变成Python包:https://github.com/TaipanRex/pyvisgraph/

我还写了一些解释算法的博客文章:

https://taipanrex.github.io/2016/09/17/Distance-Tables-Part-1-Defining-the-Problem.html

https://taipanrex.github.io/2016/10/19/Distance-Tables-Part-2-Lees-Visibility-Graph-Algorithm.html

为了以交互方式使用可见性图表,我做了:https://github.com/TaipanRex/visgraph_simulator

答案 2 :(得分:0)

为了使路径规划的可见性图算法具有时间和内存效率,可以利用某些几何属性来减少可见性图,而又不会失去最优性(=总是找到真正最短的路径)。本文对此进行了很好的解释:A thesis describing the general procedure and a few tweaks in chapter 4.4

还可以检出:

My python package for visibility based path planning

Open source C++ library for 2D floating-point visibility algorithms, path planning

C implementation of Lee's algorithm

答案 3 :(得分:0)

我有和你一样的用例。偶然发现TaipanRex的pyvisgraph,发现速度不够快,不再维护,经络处理不好。

因此,我编写了一个带有 C++ 后端的 Python 库来解决这个问题,称为 capi。

https://github.com/Balajanovski/capi
https://pypi.org/project/capi-vis/

希望这可以在未来帮助一些人。