之前写博客,笔者写的都是介绍Java一些基本知识,感觉比较low,今天,咱就来点看起来有逼格的东西——蚁群算法。
相信大家都听过这么一句话,“大自然是人类最好的导师”。事实上,我们人类很多的发明设计,其实灵感都来自于大自然。从鱼到船,从蝙蝠到雷达,从萤火虫到人工冷光,从电鳗电鱼到福特电池......有感于大自然的教诲,我们开设一门名为仿生学的学科。事实上,除去我们身边这些看得见、摸得着的发明创造,哪怕是在计算机界,也有着类似的启发。恰如今天我们要谈论的内容,蚁群算法,它的灵感就来自于大自然中小小的蚂蚁。
蚂蚁?算法?你确定不是开玩笑吗?
事实就是如此。
蚁群系统(Ant Colony System)是由意大利学者Dorigo、Maniezzo等人于20世纪90年代首先提出的。他们在研究蚂蚁觅食的过程中,发现单个蚂蚁的行为比较简单,可是整个蚁群整体,却表现出具有智能的行为。比如,蚁群可以在不同环境下,寻找到到食物源最短的路径。
事实上,这是因为蚂蚁在觅食的过程当中,会分泌一种叫做信息素的东西。蚂蚁与蚂蚁之间通过信息素的方式传递消息。蚂蚁都具备对信息素的感知能力,它们会沿着信息素浓度较高的路径行走,而而每只路过的蚂蚁都会在路上留下信息素,这就形成一种类似正反馈的机制,这样经过一段时间后,整个蚁群就会沿着最短路径到达食物源了。于是,通过模拟这种蚂蚁觅食的方式,Dorigo等人提出了一种新的用来寻找优化路径的概率型算法。
事实上,了解了原理,大家就可以动手开写了。不过如果还是不懂的话,那么请听笔者继续絮叨两句。
实际设计一个蚁群系统,需要注意这么几点:
1、感知范围:每一只蚂蚁应该有一个感知信息素的范围。
2、环境信息:蚂蚁所在环境中有障碍物、其他蚂蚁、信息素,其中信息素包括食物信息素(找到食物的蚂蚁留下的)、窝信息素(找到窝的蚂蚁留下的),信息素以一定速率消失。
3、觅食规则:若在感知范围内有食物,则向食物移动,否则朝信息素多的地方走。每只蚂蚁会以小概率犯错误,并非都往信息素最多的方向移动。蚂蚁找窝时仅对窝信息素有反应。
4、移动规则:蚂蚁朝信息素最多的方向移动,当周围没有信息素指引时,会按照原来运动方向惯性移动。而且会记住最近走过的点,防止原地转圈。
5、避障规则:当蚂蚁待移动方向有障碍物时,将随机选择其他方向;当有信息素指引时,将按照觅食规则移动。
6、散发信息素规则:在刚找到食物或者窝时,蚂蚁散发的信息素最多;当随着走远时,散发的信息素将逐渐减少。