运动规划(Motion planning)- Grassfire 算法

好的,第一篇技术博客。我们开始吧。

image.png

刷过leetcode的朋友看见这张应该会会心一笑,BFS,DFS这类词争先恐后往外跳。但是呢,太高级了,我的朋友们。让我们先用一种最文艺(傻气)的办法,来解决这个问题。

我们的目标是:找到start-end之间的最短路径,如图所示


image.png

来吧,Grassfire 算法。小时候,大家都背过一首诗:离离原上草,一岁一枯荣。 野火烧不尽,春风吹又生。说的就是这种算法。这首诗告诉我们,草,都是从旁边的草开始燃烧蔓延的!grassfire-烧草,就这么简单又有力。

首先把终点的距离设定为0,然后设定距离终点最近的格子距离为1。如图所示

image.png

然后,距离1最近的格子是2,距离2最近的格子是3,以此类推

image.png

好了,这时候每一个数字都代表这该单元格到终点的距离。我们把数字连起来,就形成了最短路径,注意了,这个路径很可能不是唯一解。


image.png

整个过程用伪代码表示就是


image.png

但是有些时候,我们会遇见走不通的情况,我们写代码的时候就要考虑好这个问题


image.png

实现过程:
1.如果start-end之间有路,找到最短路径
2.如果start-dend之间没有路,跳出循环,报错

下面谈谈这个算法计算复杂度的问题,这个算法是一种遍历搜索,火会席卷每一个角落。

计算复杂度为:
image.png

其中,V是图中格子的数量。我们假设我们有100个格子,要访问的格子数
2维棋盘:100 X100 = 1000
3维棋盘: 100X100X100 = 1000000
6维棋盘: 100X100X100X100X100X100 =1000000000000

1000000000000啊朋友们,什么概念,就差不多和天上的星星一样多了哇!grassfire的计算量随着格子的变多或者维度的上升而变得很大。

好啦,总的来说这是一个很简单的算法,一定能找到全局最优解。宛若春风吹过每一个角落,吹到我们每一个人的心中

推荐阅读更多精彩内容