资料:https://www.cnblogs.com/guxuanqing/p/9610780.html
一、基础原理
1、从起点开始,向周围八个方向扩展。测试新扩展的点的路径代价,路径代价由已走的路径和距离终点的期望加和而成。这个路径代价是选择路径的标准。
2、有两个表open、close。
close:生成并且考察过的点,存在两种点。一种是当前选择的路径,是最终想要的结果。另一种是考察但没有用到的点,是考察过但是比最终路径代价大的路线,可能父指针可以指回起点,也可能无法指回起点(曾经进入死胡同的路线)。
open:生成但是没有考察的点
·若形象的想的话,open中的点,close中的最终路线,close中的没用的路线用不同的图形画出。open在最外侧一层,close在中间,有一条线根据父指针逐层引出。
3、具体步骤
(1)最开始的时候只有起点在open中.
(2)从open中找到最小的点n。
(3)n向八个方向扩展,就获得了八个新点x1~x8,接下来判断八个点的存入的地方。
(4)如果x存在于close中,则比较close中和当前点的代价大小。若新的点小,则用新的点代替旧的。若旧的点小,则放弃新的点。
如果x存在于open中,则比较close中和当前点的代价大小。若新的点小,则用新的点代替旧的。若旧的点小,则放弃新的点。
如果都不存在,就放入open。
根据这个方法,进行八个点的判定。
(5)将n放入close。
(6)返回(2),直到open中没有点或者到达目的地。
·close和open中都是没有重复的点的。整套算法,就是生成新的点,然后每一步做局部最优解,有错的情况下纠正,积累以后获得整体的最优解。
·局部最优解+多次尝试然后纠错=全局最优解
二、代码具体细节
·上面那个原理看起来很简单,但是实施起来尤其是需要关注效率的时候就有些困难了
1、每一个点包含的信息
·用一个结构体进行封装
(1)自身坐标
(2)父指针,实际上就是当前点存储着自己是由哪一个点扩展而来的。这个方法可以减轻很多代码负担,要改变路径的时候,只要在关键位置将代价更小的点放入close,将之前路径在这一个关键点后面的close中的点放回open就可以了。
(3)代价,代价由当前路径的代价和期望组成。路径期望的算法是路径规划效果好坏的关键。每一个点都存储着独一无二的当前路径的代价,这个代价是从父指针指着的点、父指针的父指针点、父指针的父指针的父指针点······一层层累加而得的。当前路径代价和父指针共同组成了,到达目前这个点的第一无二的路径信息和代价。
2、数据类型的选用
close、open都是长度不定的数据类型,我这里的想法是用一个结构体封装
要使用vector
未完待续······
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)