鱼群算法


鱼群算法

文章插图
中国人有句老话叫,群体的力量是无穷的 。这句话不仅来自于我们日日夜夜与天斗地斗其乐无穷 , 更经过了科学的研究 。
1999年,牛津大学出版社出版了《群体智能:从自然到人工系统》,正式开启了对于“群体智能”的研究 。
群体智能 , 研究的对象大多是低智动物,探究他们在集体行动时体现出的超过自身智力范围的行为 。这也就导致,群体智能的研究成果总与“禽兽”脱不开关系 。比如说……蚁群算法、蝙蝠搜索、萤火虫算法,甚至还有蛙跳算法、人工鱼群算法和…蟑螂算法???
下面可以给大家介绍几个典型的群体智能算法 。
蚁群算法如果仔细观察蚁群就会发现,不论在什么环境中 , 蚂蚁总会组成蚁群,通过最快路径一起搬运食物 。蚂蚁究竟是怎么做到的?显然不是口耳相传告诉彼此走哪一条路需要多长时间 , 而是蚂蚁会在搬运食物的路上留下一种叫“信息素”的物质,所行走路径较短的蚂蚁留下的信息更浓 。蚂蚁对于信息素有识别性 , 很快整个蚁群就一起走在较短路径之上 。
蚁群算法的核心在于信息素的“正向反馈”,以此应用于动态路径规划问题中会有更大优势 。动态路径规划问题的特殊性是,相比静态路径,很多时候我们对于全局状态是未知的,而路径中又很有可能出现一些随机情况 。这就类似让我们去规划一个陌生城市的行车路线——既不熟悉城市的大小,也不知道哪里容易堵车、哪里容易出事故 。这时蚁群算法这种全局搜索、逐渐逼近最优解的方式就可以提高效率,而个体实时感知环境变化、并行计算的方式又提高了应变能力 。在很多智能制造的车间工厂,也都是由蚁群算法来设定作业流程 。
蝙蝠搜索算法蝙蝠是一种视力堪忧的动物 , 靠耳朵判断周遭环境 。蝙蝠通过听觉判断环境的具体方式是,自己发出声音,然后靠周围物体反射来的回音判断其位置 。探索周遭环境时,蝙蝠发出的脉冲音强更强,这样可以让声音传播的更远,探索更广的区域 。发现猎物时,蝙蝠发出脉冲的频度更高 , 可以不断掌握猎物位置的变化 。
蝙蝠算法既是把不同蝙蝠看做不同的可行解,通过蝙蝠当前位置判断解的优劣,再让蝙蝠随机飞行——即对当前解进行越界出理 。蝙蝠优胜劣汰的过程 , 就是寻找最优解的过程 。当某一解超出了约束条件 , 我们并非简单粗暴的舍去它,而是在其基础上进行下一步处理 。这样一来就极大的提高了算法的收敛效率,也可以尽快从全局搜索进入局部搜索 。参数少、效率高的蝙蝠算法经常被应用于一些计算量较大的项目中 , 比如神经网络的训练,可以说是优化算法中的“性价比之王” 。
蛙跳算法一群青蛙散落在池塘中,只能通过在石块间跳跃寻找食物,最后一定会发现所有青蛙都聚集在了食物最多的地方 。因为青蛙在不断跳跃的过程中会不断组成群组、不断共享信息,告诉他蛙自己原来所处的位置有多少食物,直到最后找到充足的食物 。
其中的逻辑是:先执行局部搜索,再局部信息交换得到全局答案 。青蛙们分成几个群组,每个群组中较差的青蛙向聪明的青蛙学习 。经过跳跃后,青蛙的组群被打散重组 , 直到所有青蛙都找到了最优位置 。
鱼群算法

文章插图
(青蛙群组进化过程,离散的青蛙经过几次跳跃交换信息,最终聚集在一个位置)
在蛙跳算法中,我们把一个解空间中的随机解看做几个群组的“青蛙”,各个群组的青蛙分别进行局部搜索 , 并不断产生随机解替换群组中较差的解(如图b中的圆圈位置) 。蛙跳算法常常被应用于多目标优化中,在较多约束的前提下 , 这样多次进化、从局部到全局的方式更容易找到适应多条件的较优解 , 而非偏向某一条件的解 。最典型的是时间表安排,比如我们安排会议时间时,要考虑发言人顺序、用餐时间包括交通情况等等,这时蛙跳算法就能给出一个最为平衡的答案 。
以上几个案例只是群体智能算法中的冰山一角,可以看出群体智能算法大多属于较底层的优化算法,通过多个智能体在寻找共同目标时体现的宏观智能建立算法逻辑 。虽然平时机器学习、神经网络等等名词听起来更加人工智能,可群体智能这种多单元并行运算、通过多单元间交换信息进行进化的方式恰恰符合人工智能的概念范畴 。
近些年还有一种声音表示,群体智能正在形成“学术泡沫”——只是在前人的算法上进行极小的修改 , 冠上另外一种动物的名字就可以发布论文、拿研究基金 。对于这一点 , 我想说的是我们当然鼓励创新,不管创新的程度有多少 , 怕的是最后出现空对空的情况——不知所云的算法,找不到应用价值 。人工智能的“风口”在市场吹吹就可以了,如果学术界也学会了跟风的恶习 , 恐怕有一天真的会“千里之堤毁于蚁穴” 。
【鱼群算法】更多精彩内容,关注钛媒体微信号(ID:taimeiti) , 或者下载钛媒体App