zoukankan      html  css  js  c++  java
  • 部门内部培训时的一份备讲稿——人工鱼群算法

    每周一次培训,内容和工作挂钩,这次培训的主要内容就是向大家简单讲讲人工鱼群算法。可能没有什么借鉴的价值,但是对快速入门理解鱼群算法有很大帮助,以下是原稿:

    1、起源: 人工鱼群算法是李晓磊等人于2002年在动物群体智能行为研究的基础上提出的一种新型方盛优化算法,该算法根据水域中鱼生存数目最多的地方就是本水域中富含营养物质最多的地方这一特点来模拟鱼群的觅食行为而实现寻优。算法主要利用鱼的三大基本行为:觅食、聚群和追尾行为,采用自上而下的寻优模式从构造个体的底层行为开始,通过鱼群中各个体的局部寻优,达到全局最优值在群体中凸显出来的目的。

    鱼类活动中,觅食行为、群聚行为、追尾行为和随机行为与寻优命题的解决有较为密切的关系,如何利用简单有效的方式来构造和实现这些行为将是算法实现的主要问题。

    2、人工鱼的结构模型:人工鱼是真实鱼抽象化、虚拟化的一个实体,其中封装了自身数据和一系列行为,可以接受环境的刺激信息,做出相应的活动。其所在的环境由问题的解空间和其他人工鱼的状态,它在下一时刻的行为取决于自身的状态和环境的状态,并且它还通过自身的活动来影响环境,进而影响其他人工鱼的活动。

    人工鱼-》鱼群-》总数 N

    人工鱼对外的感知是依靠视觉来实现的:视觉Visual

    动物嘛 总有个对自身状态的感知,比如吃饱了吗,睡好了吗?人工鱼个体的状态:X=(x1,x2,...,xn)(其中xi(i=1,2,...,n)为寻优的变量)

    既然鱼没吃饱,又看到食物了,那么它一定要向食物游过去,对吧,那它的速度怎么形容呢?用一个拟人化的说法就是:步长——Step

    Trynumber:打个比方,发霉的馒头、馒头、肉包子————trynumber就是我的一个尝试次数,如果在次数内,我发现更好的,我就替换成更好的,如果没有更好的,我就用原来的。

    δ:还是刚才的比方,我看到一家店外面排了老长的队,人山人海我根本挤不进去,纵使我想吃他家的东西,但是进不去,这里就又引出一个变量——δ,拥挤因子,超出某个限定的值,就换一个队列或行为操作。

    bestfish:起到一个公告板的作用,公告板用来记录最优人工鱼个体的状态。各人工鱼个体在寻优过程中,每次行动完毕就检验自身状态与公告板的状态,如果自身状态优于公告板状态,就将公告板的状态改写为自身状态,这样就使公告板记录下历史最优的状态。Bulletin

    接下来是人工鱼的四种基本行为的描述:

    1、 觅食行为Pray(),这是鱼趋向食物的一种活动,一般认为它是通过视觉或味觉来感知水中的食物量或食物浓度来选择行动的方向。设置人工鱼当前状态Xi,并在其感知范围内(距离dis<视野visual)随机选择另一个状态,如果得到的状态的目标函数大于当前的状态,则向新选择得到的状态靠近一步,反之,重新选取新状态,判断是否满足条件,选择次数达到一定数量后,如果仍然不满足条件,则随机移动一步。 

    2、 聚群行为 Swarm()大量或少量的鱼聚集成群,进行集体觅食和躲避敌害,这是它们在进化过程中形成的一种生存方式。人工鱼探索当前范围内(距离dis<视野visual)的伙伴数量nf,并计算伙伴的中心位置Xc,然后把新得到的中心位置的目标函数与当前位置的目标函数相比较,如果中心位置的目标函数优于当前位置的目标函数并且不是很拥挤(食物浓度Yc/伙伴数量nf>拥挤因子),则当前位置向中心位置移动一步,否则执行觅食行为。鱼聚群时会遵守两条规则:一是尽量向邻近伙伴的中心移动,二是避免过分拥挤。 

    3、 追尾行为 Follow()当某一条鱼或几条鱼发现食物时,它们附近的鱼会尾随而来,导致更远处的鱼也会尾随过来。人工鱼探索周围最优状态Yj的邻居鱼Xj,当最优状态的目标函数值大于当前位置的目标函数值并且不太拥挤,则当前位置向最优邻居鱼Xj移动一步,否则执行觅食行为。 

    4、 随机行为 Move()它是觅食行为的一个缺省行为,指人工鱼在视野内随机移动。当发现食物时,会向食物逐渐增多的方向快速的移动。 

    Step1:设定鱼群的参数,包括鱼群的规模m, 最大迭代次数gen,人工鱼的感知范围Visual,最大移动步长step,拥挤度因子d等;

    Step2:在参数区间内随机生成m条人工鱼个体作为初始鱼群;

    Step3:计算每条鱼的食物浓度函数(目标函数),把最优的值放入公告板中;

    Step4:对于每条人工鱼执行以下操作

           (1)计算出追尾行为、聚群行为的值,采用行为选择策略,选择最优的行为作为鱼的移动方向,缺省行为是觅食行为。

          (2)计算出每条鱼的食物浓度函数(目标函数),其最优值与公告板中的值进行比较,最终公告板中始终保持最优的值。

    Step5:判断是否满足结束条件,如果满足结束,否则转Step4。

    最终公告板中的值就是最优值。

  • 相关阅读:
    补习系列(4)-springboot 参数校验详解
    华为鲁勇:5G+云+AI三大核心引擎将驱动广州数字经济发展
    selenium firefox
    徐翔之后新生代“敢死队”浮出水面:八年一万倍
    ActiveMQ讯息传送机制以及ACK机制
    一元线性回归分析及java实现
    jsoup -- xml文档解析
    HDU 1020 Encoding 字符串
    PHP缓存之文件缓存
    Eclipse PHPEclipse 配置
  • 原文地址:https://www.cnblogs.com/bo-liang/p/9797925.html
Copyright © 2011-2022 走看看