在研究遗传算法的时候,随带看到了蚁群算法,发现了很有意思。
进而一细想,发现还在游戏的寻路中有一定应用的可能,首先,我们很头大的一个问题有时候在于,对于一大群AI,在同一帧来了一个请求,要求他们进行实时的寻路,这样我们还要不影响帧率的话,就要保证这些AI的寻路计算在1/FPS的时间内算完,但是对于A*那样的启发式算法来说,还是很有压力的。很大概率程序会直接崩掉。
蚁群算法就具备这样的好处——即使数据规模变大,计算规模的增大也是有限的,每一步的决策都在线性内完成。并且还有一个好处,他并不需要确定的知道目标点在哪。当然这个算法是基于概率的进化型的算法——最大的通病在于,没法保证什么时候完成迭代。
接着我们先来介绍一下这个算法:
首先我们会初始化一些蚂蚁。
这些蚂蚁的目标是找到食物搬回家,回家后再出来找食物回家..........
并且这些蚂蚁具有一定的感知力,会感知到家和食物,一旦感知到周围有食物和家,就开始携带信息素,并开始边走边释放信息素,其他蚂蚁依靠信息素逐渐迭代到家和食物的路径上,我们就完成了寻路。
具体的寻路规则是:
蚂蚁在八近邻中如果没有找到含有信息素的,就进行随机寻路,该寻路具有一定的惯性,即在没有遇到墙的时候,会有更高概率保证走原方向的倾向。
如果在周围发现了信息素,则对八近邻的信息素浓度进行轮盘赌,来进行决定走哪个方向,当然在发现信息素的情况下,也有小概率选择随机寻路,这是为了保证不陷入局部的迭代。
具体的信息素释放是:
在找到了家的时候,携带家的信息素,清空食物