阳光算法(改进版):面向密集小障碍物复杂环境的路径规划方法与严谨的O(n)时间复杂度证明
阳光算法是一种全新的基于采样的平面路径规划方法,该方法的主要思路是通过模仿阳光照射的自然现象搜索到采集地形或障碍物边缘的切点从而快速构建出可行性路径,非常适合于解决迷宫等复杂地形下的全局路径规划问题。该方法在简洁的同时拥有极高的搜索效率,其计算复杂度经证明也比现有的RRT系列算法更低,关于该方法的详细介绍可以参考https://blog.ZEEKLOG.net/seabiscuit1993/article/details/147731476, 本文不再赘述。尽管阳光算法相较于传统路径规划方法具备显著优势,但其在部分环节仍存在严谨性与完备性方面的不足。本文针对传统的阳光算法中存在的问题做出了两个关键性改进,并通过进一步的分析和仿真实验对比,验证了所提改进方案的优越性和有效性。该改进算法已发表在如下期刊。
Yingjie Deng et al 2026 Meas. Sci. Technol. 37 096303,doi:10.1088/1361-6501/ae49b1
首先是地图搜索完备性的问题。阳光算法对于地图的探索主要通过
寻找地形或者障碍图的边缘切点,具体是通过模拟阳光照射的现象,以路径节点
为中心发射等角度间隔的太阳光线的方式来进行采样,之后对采样点进行筛选就可以获得符合条件的路径切点,如图1所示。这种采样方法对于连续不间断的地形或者障碍物边缘效果很好,但是对于密集小障碍物环境却很不理想,这是因为用于搜索的射线间的角度间隔固定,随着射线的逐渐延长,两条射线间的弧长也在逐渐增大,最终两个切点间的距离也会逐渐增加,如图2所示。这会直接导致密集环境中障碍物边缘切点的大量丢失,从而影响算法对于最短可行性路径的搜索。

图1 左图为360°照射采样,右图为切点采样
针对等角度间隔采样不足的问题,改进后的阳光算法提出了一种自适应采样补偿机制,可以有效解决采样点丢失。改进后的
函数的伪代码如图3所示。当阳光射线由点
以等角度间隔射出后,首先寻找两条射线间的最短弧长并将其设为
,以最短弧长
为基准,对于其他任意两条射线所对应的弧长
,如果存在关系
,那么就在这两条射线间的区域额外插入
条射线来将该区域平均划分为
份,如图4所示,其中
的定义式为

图2 密集小障碍物环境中的切点采样图
有些读者可能会有这样的问题,难道不可以通过减小太阳射线间的角度间隔来提高在小障碍物密集区域的采样点数量吗?这种思路其实是可行的,然而一般的搜索地图中不仅存在小障碍物密集区域,还存在具有连续不间断边缘的大型障碍物,在这种情况下较小的角度间隔反而会生成大量的冗余节点,降低采样进行的效率,因此自适应采样补偿机制本质上是一种角度间隔的自适应调整。

图3
函数伪代码
除了采样点丢失的问题外,传统的阳光算法还存在时间复杂度的证明不严谨的问题。由证明的过程可知,阳光算法的时间复杂度为
的前提是数据集
为有限集合。但是传统的阳光算法并不存在
筛选机制,因此实际上
是无上限的,这不仅导致了时间复杂度验证的严谨性问题,无上限也意味着集合中存在冗余节点,这将降低算法的运行速度。为了提高算法的搜索速度,同时确保计算复杂度验证的严谨性,改进后的阳光算法提出了一种新型的滤波筛选机制用来保证集合
的有限性。这种滤波机制建立在之前的
的基础上,在筛选切点之前,首先对已经保存在
中的节点进行筛选。如图5所示,首先选取任意一个切点
,对于
中的任意一个节点
,
表示从出发点
到达该点的原始路径的长度,
表示由出发点
经过点
和切点
到达该点的长度,如果存在关系
,那么说明到达该点的原始路径不是最优的,并将该点和其对应的连接关系从相应的集合中去除,重复上述操作直到所有的切点都将
中的节点遍历完成。相应的对于切点
,如果连接
和
的总路径长度比连接
和
中任何一个点的总路径长度都要长,那么说明
应该是其他点的子节点而不是
的。通过上述过滤机制进一步限制了
的大小使其存在有限边界,保证了时间复杂度证明的严谨性。

图4 自适应采样补偿机制演示图
首先需要找到在算法运行过程中重复出现次数最多的函数,即
函数,选择此函数的原因是它需要逐个像素的检查占用率,并且在每次迭代循环中都会被调用。如图6所示为改进的阳关算法的伪代码,假设闭集
中存在
个点,由第五行可知
函数在
函数中被调用
次;对于第十行的每次
函数调用,可以参考图3中的伪代码,假设阳光射线的长度存在上界
,设
在
函数中的总调用次数为
,在第五行中的调用次数为
次,在第十六行的调用次数为
次,存在关系
,由
函数的伪代码可知
其中
为向上取整函数。由第十行可知,while循环将会执行
次。由
的定义式和阳光射线长度的上界
可知,
的上界可以定义为
由此可以得到
的边界为
由上述不等式可知
和
均存在有限上界,那么一定存在关系
,并且
是一个正常数。由此可知在图6第十行处
函数最多执行
次。又由于数据集
存在有限边界
,切点集合
存在有限边界
,在第十四行
最多执行
次,在第二十三行最多执行
次。设
函数的最大执行次数为
,那么存在关系
由上式可以得出关系
,所以改进后的算法的计算复杂度为
。

图5
数据集筛选演示图

图6 改进后的阳光算法伪代码图