人工智能AI 在Unity中的实现干货

Unity GameAI 启发式搜索算法(A *算法底层)

2016-12-17  本文已影响549人  Levi_Wan

A*算法

虽然在unity给我们的提供了Navigation作为我们寻路的解决方案,但是在实际中我们同样也不得不使用到一套自己的方案来实现,这时A*就是我们最常用的一种方式。

深度优先和广度优先算法在状态空间不大的时候会很合适的,但是如果状态空间非常大并且不可预测的情况下就不可取了。它的效率会十分的低,甚至无法完成。 这时就需要用到启发式搜索。

启发式搜索算法。

启发式搜索算法:

估价函数

启发中的估价是用估价函数表示的:
             f(n)=g(n)+h(n)

其中f(n)是节点n的估价函数,g(n)是在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估价代价。在这里主要是h(n)体现了搜索的启发信息,因为g(n)是已知的。g(n)就代表了搜索的广度优先趋势。但是当h(n)>g(n)时,可以省略g(n),而提高效率

像素化地图。

我们想要进行对AI路径的控制首先我们就需要对地图进行像素化。 何为像素化地图呢? 就如unity的网格一样。将一张地图按照一定的比例尺进行网格化划分就是像素化。其中的每一个网格单元我们称之为节点(不以方格来表示示因为这些网格单元不一样是矩形的也可以是六边形,圆形等等。)。节点就称为是寻路算法的单元。

Paste_Image.png
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

曼哈顿距离

曼哈顿距离是一种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。

曼哈顿距离.jpg

例如在平面上,坐标(x1, y1)的i点与坐标(x2, y2)的j点的曼哈顿距离为:

d(i,j)=|X1-X2|+|Y1-Y2|

以上图猫的地图来说:

曼哈顿距离.png Paste_Image.png

寻路算法。

Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

使用算法进行实现。(Open列表和Close列表)

Paste_Image.png Paste_Image.png Paste_Image.png
最后感谢蛮牛的陈亚通老师,图片伪代码出处
上一篇 下一篇

猜你喜欢

热点阅读