一.寻路问题
寻路问题一直以来都是十分经典和有趣的问题,在我们生活中以及人工智能方面有着及其重要的研究价值。简而言之,寻路问题就是在给定起点和终点的情况下,找出一条可到达的最短路径,一路上可能有墙,坑,湖等不可经过的地段。
表现在数据结构里面就是一张图,如下所示。
我们可以对模型进行一下简化,便于我们分析问题。我们将寻路问题简化成一张方格表,类似于棋盘一样:
图中,空五角星为起点,红五角星为终点,图上有河流,山峰等无法穿越的地区,需要从空五角星走到红五角星。
二.寻路问题的几种解法
寻路问题很古老也很经典,目前比较常见的算法有广度优先,Dijkstra算法,A*算法以及“万能的”遗传算法等等。
1.深度优先搜索也是遍历图的一种方法,但是对于求最短路径作用不大。广度优先算法比较适合用来求最短路径,因为它本质上是从起点遍历所有相邻点,继而往外扩散直到找到终点。
广度优先的基本步骤如下:
a.将根节点加入队列
b.从队列取出节点,判断是否是目标节点,是则输出,否则遍历所有相邻节点,并加入队列
c.如果队列为空,则输出无法找到目标节点
可以看出来,BFS算法存在盲目搜索的感觉,简单的遍历所有节点而不考虑可能性大的节点。
2.遗传算法也可用于寻路问题,之所以说遗传算法是“万能”的,因为只要是演化计算求最优解的案例都可以采用遗传算法。基本步骤如下:
a.对基因进行编码,每个基因代表一条路径
b.对基