文档库 最新最全的文档下载
当前位置:文档库 › 基本人工鱼群算法

基本人工鱼群算法

基本人工鱼群算法
基本人工鱼群算法

基本人工鱼群算法

摘要人工鱼群算法(Artificial Fish-Swarm Algorithm,AFSA)是由李晓磊等在2002年提出的,源于对鱼群运动行为的研究,是一种新型的智能仿生优化算法。它具有较强的鲁棒性、优良的分布式计算机制易于和其他方法结合等优点。目前对该算法的研究、应用已经渗透到多个应用领域,并由解决一维静态优化问题发展到解决多维动态组合优化问题。人工鱼群算法已经成为交叉学科中一个非常活跃的前沿性学科。本文主要对鱼群算法进行了概述,引入鱼群模式的概念,然后给出了人工鱼的结构,接下来总结出了人工鱼的寻优原理,并对人工鱼群算法的寻优过程进行仿真,通过四个标准函数选取不同的拥挤度因子进行仿真实验,证实了利用人工鱼群算法进行全局寻优确实是有效的。

关键词:人工鱼群算法;拥挤度因子;寻优

0 引言

动物在进化过程中,经过漫长的优胜劣汰,形成了形形色色的觅食和生存方式,这些方式为人类解决生产生活中的问题带来了不少启发和灵感。动物不具备复杂逻辑推理能力和综合判断等高级智能,但他们通过个体的简单行为和相互影响,实现了群体的生存和进化。动物行为具有以下几个特点。

(1)适应性:动物通过感觉器官来感知外界环境,并应激性的做出各种反应,从而影响环境,表现出与环境交互的能力。

(2)自治性:在不同的时刻和不同的环境中能够自主的选取某种行为,而无需外界的控制或指导。

(3)盲目性:单个个体的行为是独立的,与总目标之间没有直接的关系。

(4)突现性:总目标的完成是在个体行为的运动过程中突现出来的。

(5)并行性:各个个体的行为是并行进行的。

人工鱼群算法是根据鱼类的活动特点提出的一种基于动物行为的自治体寻优模式。

1 鱼群模式描述

1.1 鱼群模式的提出

20世纪90年代以来,群智能(swarm intelligence,SI)的研究引起了众多学者的极大关注,并出现了蚁群优化、粒子群优化等一些著名的群智能方法。

集群是生物界中常见的一种现象,如昆虫、鸟类、鱼类、微生物乃至人类等等。生物的这种特性是在漫长的进化过程中逐渐形成的,对其生存和进化有着重

要的影响,同时这些方式也为人类解决问题的思路带来不少启发和鼓舞。因此,近年来有不少科学家对生物行为进行了广泛研究,并逐渐形成了一种基于生物行为的人工智能模式。这种基于生物行为的人工智能模式与经典的人工智能模式是不同的,它不是采取自上而下的设计方法,而是采取自下而上的设计方法:首先设计单个实体的感知、行为机制,然后将一个或一群实体放置于环境中,让它们在与环境的交互作用中解决问题。它是内嵌的、物化的、自治的、突现的。

一个集群通常定义为一群自治体的集合,他们利用相互直接或间接的通信,从而通过全体的活动来解决一些分布式难题。在这里,自治体是指在一个环境中具备自身活动能力的一个实体,其自身力求简单,通常不必具有高级智能。但是,它们的集群活动所表现出来的则是一种高级智能才能达到的活动,这种活动可以称为集群智能。

动物自治体通常指自主机器人或动物模拟实体,它主要用来展示动物在复杂多变的环境中能够自主产生自适应的智能行为的一种方式。自治体的行为受到环境的影响同时每一个自治体又是环境的构成因素。环境的下一个状态是当前状态和自治体活动的函数,自治体的下一个刺激是在环境的当前状态和其自身活动的函数,自治体的合理架构就是能在环境的刺激下做出最好的应激活动。

将动物自治体的概念引入鱼群优化算法中,采用自下而上的设计思路,应用基于行为的人工智能方法,形成一种新的解决问题的模式,因为是从分析鱼类活动而出发的,所以称为鱼群模式。该模式用于寻优中,形成人工鱼群算法。

在一片水域中,鱼生存数目最多的地方一般就是该水域中富含营养物质最多的地方,依据这一点来模仿鱼群的觅食、群聚、追尾等行为,从而实现全局寻优,这就是人工鱼群算法的基本思想。

1.2 人工鱼的结构模型

人工鱼(artificial fish,AF)是真实鱼的一个虚拟实体,用来进行问题的分析和说明。人工鱼的结构模型和行为描述可以借助面向对象的分析方法,如图1.1所示。可以认为人工鱼就是封装了自身数据和一系列行为的实体,可以通过感官来接收环境的刺激信息,并通过控制尾鳍来做出相应的应激活动。

图1.1 人工鱼的结构

人工鱼所在的环境主要是问题的解空间和其人工鱼的状态,它在下一刻的行为取决于目前自身状态和目前环境状态,并且它还通过自身活动来影响环境,进而影响其他同伴的活动。人工鱼对外界的感知是靠视觉来实现的。生物的视觉是极其复杂的,为了实施的简单有效,在人工鱼的模型中应用如下方法实现虚拟人工鱼的视觉。

如图1.2所示,一条虚拟人工鱼当前状态为X ,Visual 为其视野范围状态v

X 为其某时刻视点所在的位置,若该位置的状态由于当前状态,则考虑向当前位置方向前进一步,即到达状态next X ;若状态v X 不比当前状态更优,则继续巡视视野内的其他位置。巡视的次数越多,对视野的状态了解的越全面,从而对周围的环境有一个全方位立体的认知,这有助于做出相应的判断和决策。当然,对于状态多状态无限的环境也不必全部遍历,允许人工鱼具有一定的不确定性的局部寻优,从而对寻找全局最优是有帮助的。

Step Visual

X Xnext X2X1

Xv

图1.2 人工鱼视觉的概念

其中,状态()n x x x X ...,,,21=,状态()nv v v V x x x X ...,,,21=,则该过程可以表示如下:

()Rand Visual X X v ?+=

()

X X X X v v next Rand Step X

X

??+++

=

式中,Rand()函数为产生0到1之间的随机数;Step 为移动步长。

由于环境中同伴的数目是有限的,因此在视野中感知同伴(如图1.2中X1,X2等)的状态,并相应的调整自身状态,方法与上式类似。

通过模拟鱼类的四种行为——觅食行为、聚群行为、追尾行为和随机行为,来使鱼类活动在周围的环境。这些行为在不同的条件下会相互转换。鱼类通过对行为的评价,选择一种当前最优的行为进行执行,以达到食物浓度更高的位置,这是与鱼类生存有着密切关系的。

算法采用面向对象的技术重构人工鱼的模型,将人工鱼封装成变量和函数两部分。

变量部分包括人工鱼的总数N 、人工鱼个体的状态()n x x x X ...,,,21=(其中

()n i x i ,...,2,1=为欲寻优的变量)、人工鱼移动的最大步长Step 、人工鱼的视野

Visual 、尝试次数Try_number 、拥挤度因子δ、人工鱼个体i,j 之间的距离

j i ij X X d -=。

函数部分包括人工鱼当前所在位置的食物浓度)(Y X f =(Y 为目标函数值)、人工鱼的各种行为函数(觅食行为Prey()、聚群行为Swarm()、追尾行为Follow()、随机行为Move()以及行为评价函数Evaluate())。通过这种封装,人工鱼的状态可以被其他同伴所感知。

2 人工鱼的四种基本行为算法描述

鱼类不具备人类所具有的复杂逻辑推理能力和综合判断能力等高级智能,它们的目的是通过个体的简单行为或通过简单行为而达到或突现出来的。这里,对人工鱼定义了四种基本行为。

1.觅食行为

这是人工鱼的一种基本行为,也就是趋向食物的一种活动,一般可以认为它是通过视觉或味觉来感知水中的食物量或浓度进而来选择趋向的,因此前面讲到的视觉概念可以应用于该行为。

行为描述:设人工鱼i 当前状态为i X ,在其感知范围内随机选择一个状态j X ()Rand V isual i ?+=X X j (2.1) 式中,Rand()是一个介于0和1之间的随机数,如果在求极大值问题中,j Y

()1

Rand Step X

X X X X X

t

i

j t

i j t

t i

i ??--+

=+()

(2.2)

反之,再重新随机选择状态j X ,判断是否满足前进条件,反复尝试Try_number 次后,若仍不满足前进条件,则随机移动一步

()X 1Rand Visual X t i t i ?+=+ (2.3)

伪代码描述如下:

Float Artificial_fish::AF_prey() {

For(i=0;i

Xj=Xi+Rand()*Visual; if(Yi

i

j j i i next X X X X Step Rand X +-?

?+=()X /i ;

Else

Step

Rand X i next ?+=()X /i

}

Return AF_fooodconsistence(next i /X ); }

2 聚群行为

鱼在游动过程中会自然的聚集成群,这也是为了保证群体的生存和躲避危害而形成的一种生活习性。鱼群的形成也是一种突现的生动实例,一般认为鸟类和鱼类聚群的形成并不需要一个领头者,只需每只鸟或每条鱼遵循一些局部的相互作用规则,然后集群现象作为整体模式从个体的局部相互作用中突现出来。

行为描述:自然界中鱼在游动过程中为保证群体的生存和躲避危害,会自然的聚集成群。在人工鱼群算法中对每条人工鱼做如下规定:一是尽量向邻近伙伴的中心移动;二是避免过分拥挤,

设人工鱼当前状态为i X ,探索当前领域内Visual d ij <的伙伴数目f n 及中心位置o X 。若i f Y n δ>/Y c ,表明伙伴中心有较多食物且不太拥挤,则朝伙伴中心位置方向前进一步 ()X

1

Rand Step X X X X X t

i

c t

i c t i

t i

??--+=+ (2.4) 否则执行觅食行为。

伪代码描述如下:

Float Artificial_fish::AF_swarm() {

;0;0==c f X n

for(j=0;j

If(Visual d j i <,) {f n ++;j c X =+X }

f

n

n X =

c X ; If(

i f

Y n δ>c

Y ); i

c i i next X X X X Step Ran

d X +-?

?+=c /i ()X ; else AF_prey(); }

Return AF_foodconsistence(next i /X ); }

3. 追尾行为

鱼群在游动过程中,当其中一条鱼或几条鱼发现食物时,其邻近的伙伴会尾随其快速达到食物点。

行为描述:追尾行为是一种向邻近的有着最高适应度的人工鱼追逐的行为,在寻优算法中可以理解为是向附近的最优伙伴前进的过程。设人工鱼i 当前状态为i X ,探索当前邻域内Visual d ij <的伙伴中j Y 为最大值的伙伴j X 。若

i f Y n δ>/Y j ,表明伙伴j X 的状态具有较高的食物浓度并且其周围不太拥挤,则

朝j X 的方向前进一步 ()X

j 1

Rand Step X

X X X X t i

j t i t i

t i

??--+

=+ (2.5)

否则执行觅食行为。

伪代码描述如下:

Float Artificial_fish::AF_follow() {

-∞=max Y ;

for(j=0;j

If(Visual d j i <,&&m ax j Y Y >) {j j X X Y ==max max ;Y }

f n =0;

For (j=0;j

i f

Y n δ>max

Y ); i

i i next X X X X Step Rand X +-?

?+=max max /i ()X ; else AF_prey(); }

Return AF_foodconsistence(next i /X ); }

4. 随机行为

平时会看到鱼在水中自由地游来游去,表面看是随机的,其实它们也是为了在更大范围内寻觅食物或同伴。

行为描述:随机行为的描述比较简单,就是在视野中随机选择一个整体,然后向该方向移动,其实它是觅食行为的一个缺省行为。

这四种行为在不同的条件下会相互转换,鱼类通过对行为的评价选择一种当前最优的行为进行执行,以达到食物浓度更高的位置,这是鱼类生存习惯。

对行为的评价是用来反应鱼自主行为的一种方式。咋解决优化问题中,可以选用两种简单的评价方式:一种是选择最优行为进行执行,也就是在当前状态下,哪一种行为向最优的方向前进最大,就选择哪一行为;另一种是选择较优方向前进,也就是任选一种行为,只要能向优的方向前进即可。

3 人工鱼群算法的寻优原理

通过以上人工鱼的行为描述可知,在人工鱼群算法中,觅食行为奠定了算法收敛的的基础,群聚行为增强了算法收敛的稳定性,追尾行为则增强了算法收敛的快速性和全局性,行为分析为算法收敛的速度和稳定性提供了保障。

人工鱼群算法寻优过程中,人工鱼可能会集结在几个局部极值域的周围。使人工鱼逃出局部极值域,实现全局寻优的因素主要有以下几点:

(1)觅食行为中重试次数较少时,为人工鱼提供了随机游动的机会,从而能跳出局部极值的邻域;

(2)随机步长使得人工鱼在前往局部极值途中,有可能转而游向全局极值;

(3)算法中拥挤度因子限制了聚群的规模,只有较优的地方才能聚集更多的人工鱼,使得人工鱼能够更广泛的寻优;

(4)聚群行为能够使少数陷于局部极值的人工鱼向多数趋向全局极值的人工鱼方向聚集,从而逃离局部极值;

(5)追尾行为加快了人工鱼向更优状态游动,同时也能促使陷于局部极值的人工鱼向处于更优的全局极值的人工鱼方向追随并逃离局部极值。

每条人工鱼根据它当前所处的环境情况进行行为选择而执行一种行为,最终人工鱼集结在几个局部极值的周围,一般情况下适应度值高的人工鱼一般处在较优的局部极值周围,这有助于获得全局极值。

人工鱼群算法是集群智能思想的一个具体应用,它不需要了解问题的特殊信息,只需要对问题进行优劣比较,并且有较快的收敛速度。每条人工鱼探索它当前所述的环境状况,从而选择一种行为,最终人工鱼集结在几个局部极值的周围。一般情况下,在讨论求极大值问题时,拥有较大的食物浓度值的人工鱼一般处于值较大的极值域周围,这有助于判断并获取全局极值。如图3.1所示,,G1为全局极值点,G2为局部极值点,满意解域S就是所获取的全局极值域,再根据该域的特性获取较精确的极值,通常情况下可以选择域内各人工鱼的重心作为极值。

G1

G2

G2

G1

S

AF

X Visual Step Prey Follow Swarm Move

图3.1 解域确定

根据所要解决问题的性质,对人工鱼所处的环境进行评价,从而选择一种行

为。对于求解极大值的问题,可以使用试探比较法,就是人工鱼模拟执行聚群、追尾、觅食等行为,然后对行为后的值进行评价,选择其中的最优行为来执行。

人工鱼群算法利用C++语言实现的伪代码描述如下:

Procedure Artificial_fish_Algorithm::AF_init();

While the result is satisfied do

Switch(::AF_evaluate())

Case value1

::AF_follow();

Case value2

::AF_swarm();

Default

::AF_prey();

End switch

::AF_move();

Get_result();

End while

End Artificial_Fish_Algorithm

通常,由AF_init()来初始化人工鱼使其随机分布在变量域内,鱼群算法对初始条件不高,算法的终止条件啊可以根据实际情况设定,如通常的方法是判断连续多次所得值的均方差小于允许的误差,或判断聚集于某个区域的人工鱼的数目达到某个比率,或限制迭代次数等。为了记录最优人工鱼的状态,算法中引入一个公告牌。人工鱼在寻优过程中,每次迭代完成后就对自身的状态与公告牌的状态进行比较,如果自身状态优于公告牌状态,就将自身这个状态写入并更新公告牌,这样公告牌就记录下了历史最优的状态。最终公告牌记录的值就是系统的最优值,其状态就是系统的最优解。

1)公告牌

公告牌用来记录最优人工鱼个体状态及该人工鱼位置的食物浓度值。各人工鱼在寻优过程中,每次行动完毕就检查自身状态与公告牌的状态,若自身状态优于公告牌状态,则将公告牌状态改写为自身状态,这样就使公告牌记录下历史最优状态。

2)行为评价

对于行为的评价是用来反应鱼自主行为的一种方式,在解决优化问题时,可以选用简单的评价方式,也就是在当前状态下,哪一种行为向最优方向前进最大,就选择这一行为。

3)迭代终止条件

算法终止条件可以根据问题的性质或要求而定,如通常的方法是判断连续多次所得最小值的均方差小于允许的误差,或判断聚集于某个区域的人工鱼的数目达到某个比率,或连续多次所获取的值均不超过已寻找的极值,或限制最大迭代次数等。若满足终止条件,则输出公告牌的最优记录;否则继续迭代。

人工鱼算法步骤如下。

(1)首先初始化设置,包括人工鱼群的个体数N,每条人工鱼的初始位置、人工鱼移动最大步长Step、人工鱼的视野Visual、重试次数Try_number和拥挤度因子 。

(2)计算每条人工鱼适应度值,并记录全局最优的人工鱼的状态。

(3)对每条人工鱼进行评价,对其要执行的行为进行选择,包括觅食行为、聚群行为、追尾行为和随机行为。

(4)执行人工鱼选择的行为,更新每条人工鱼的位置信息。

(5)更新全局最优人工鱼状态。

(6)若满足循环结束条件,则输出结果,否则跳转到步骤(2)。

4 人工鱼群算法的仿真及结果分析

4.1 人工鱼群算法仿真

在Matlab2012a环境下对人工鱼群算法进行仿真研究。程序目录安排如下:主程序main.m和foo.m欲寻优目标函数放在主目录,建立名为@af子目录,@af 目录是人工鱼类的实现,包含了人工鱼类的结构和各个功能函数,如图4.1所示。

图4.1 程序目录结构

各文件功能如下:

af.m是人工鱼类的构造器。

set.m是人工鱼的属性设置函数。

get.m是人工鱼的属性获取函数。

display.m是人工鱼的显示打印函数。

move.m是人工鱼的随机行为函数。

prey.m是人工鱼的觅食行为函数。

follow.m是人工鱼的追尾行为函数。

swarm.m是人工鱼的聚群行为函数。

evaluate.m是人工鱼的行为评估函数和执行函数。

foodconsistence.m用于返回人工鱼所在位置食物密度。

dstc.m用于返回任意两条人工鱼之间的距离。

源程序见附录。

运行结果:

打印函数将人工鱼的信息打印输出,如图4.2所示

图4.2 人工鱼信息打印输出

图4.3 寻优过程优化曲线

寻优过程优化曲线如图4.3所示,在仿真实验中,人工鱼数量为5个,令它

们的初始值位于距极值最远的[-10,10]处,其视野Visual=10,每次移动最大步长Step=1.3,拥挤度因子δ=0.11.随着迭代次数的增加,人工鱼不断地向最优值和局部极值移动,算法后期大部分人工鱼聚集到最优值附近由图4.3的寻优曲线可以看出,随着迭代次数的不断增加,优化结果可以逼近到最优极值点。

4.2 结果分析

人工鱼群算法共有5个基本参数:视野Visual、步长Step、人工鱼总数N、尝试次数Try_number及拥挤度因子δ。

人工鱼的各个行为都是在视野范围内进行的,因此视野的选取对算法收敛性能影响比较大。视野越大,越容易使人工鱼发现全局极值并收敛。

选择大步长,有利于人工鱼快速向极值点收敛,收敛的速度得到了一定的提高。选择小步长,易造成人工鱼收敛速度慢,但精度会有所提高。

人工鱼数目越多,鱼群的群体智能越突出,收敛速度越快,精度越高,跳出局部极值能力也越强。但是算法每次迭代的计算量也越大。

尝试次数越多,人工鱼执行觅食能力越强,收敛效率也越高,但在局部极值突出的情况下,人工鱼易在局部极值点聚集,而错过全局极值点。

拥挤度因子δ的引入避免了人工鱼过度拥挤而陷入局部极值。

综上所述,如何合理的配置人工鱼各个参数并不是一成不变的,而需要根据不同的寻优函数和寻优精度来选择。

5 结论

本文主要对基本鱼群算法进行了概述,首先引入了鱼群模式的概念,然后给出了人工鱼的结构,描述了人工鱼四种基本行为,接下来总结出了人工鱼的寻优原理,对基本人工鱼群算法的理论基础、设计原理、行为模式、各个参数对寻优过程和寻优结果的影响,通过四个标准函数选取不同的拥挤度因子进行仿真实验。结果表明拥挤度因子在优化过程中的作用是有限的,但对于不同的优化函数,聚群的思想对算法的收敛行为和性能有影响。最后通过仿真实验,证实了利用人工鱼群算法进行全局寻优确实是有效的。

参考文献

[l] 余俊,周济.优化方法程序库OPB-l-原理及使用说明.北京:机械工业出版社,1989.

[2] 陈立周等._l;程离散变量优化设计方法原理及应用.北京:机械工业出版

社,1989.

[3] 方良周.智能优化方法与软件包的研究:(博士学位论文),辽宁沈阳:东北大

学,1999.

[4] 王翼飞,史定华.生物信息学:智能化算法及其应用.化学工业出版社,2006.

[5] 褚蕾蕾,陈矮阳,周梦.计算智能的数学基础.北京:科学出版社,2002.

[6] 李晓磊,邵之江,钱积新.一种基于动物自治体的寻优模式:鱼群算法.系统工

程理论与实践,2002,22(11):32-38.

附录

源程序

Main.m:

tic;

global afs;

global af_total;

global afs_x;

global afs_y;

global afs_value;

global b_x;

global b_y;

global b_value;

global iterate_times;

global passed_times;

afs=[];

af_total=20;

afs_value=0;

b_value=-10;

passed_times=0;

iterate_times=50;

for i=1:1:af_total

afs{i}=af();

afs_x(i)=get(afs{i},'x');

x(i)=afs_x(i);

afs_y(i)=get(afs{i},'y');

y(i)=afs_y(i);

end

tic;

for j=1:1:iterate_times

passed_times=passed_times+1;

if passed_times>1

b_value(passed_times)=b_value(passed_times-1);

else

b_x=0;

b_y=0;

b_value(1)=-1;

end

best_af=af();

best_x=0;

best_y=0;

best_num=0;

for i=1:1:af_total

afs{i}=evaluate(afs{i});

if foodconsistence(afs{i})>foodconsistence(best_af) best_af=afs{i};

end

afs_x(i)=get(afs{i},'x');

afs_y(i)=get(afs{i},'y');

if foodconsistence(afs{i})>b_value(passed_times)

b_x=get(afs{i},'x');

b_y=get(afs{i},'y');

b_value(passed_times)=foodconsistence(afs{i});

end

end

for i=1:1:af_total

if dstc(afs{i},best_af)<2

best_x=best_x+get(afs{i},'x');

best_y=best_y+get(afs{i},'y');

best_num=best_num+1;

end

end

best_x=best_x/best_num;

best_y=best_y/best_num;

afs_value(passed_times)=foo(best_x,best_y);

for i=1:1:af_total

afs_x(i)=get(afs{i},'x');

xa(i)=afs_x(i);

afs_y(i)=get(afs{i},'y');

ya(i)=afs_y(i);

end

end

et=toc;

fprintf('\n执行时间:%f\n',et);

x_axes=1:1:passed_times;

plot(x_axes,abs(b_value),'r');

hold on;

plot(x_axes,abs(afs_value),'k');

axis([0,iterate_times,0,1.2]);

xlabel('迭代次数')

ylabel('f(x,y)')

title('鱼群算法')

toc

Foo.m :

function out =foo(x,y)

out=(sin(x)/x)*(sin(y)/y);

Af.m :

function af=af()

af.x=-10+20*rand();

af.y=-10+20*rand();

af.step=0.7;

af.visual=10;

af.try_number=5;

af.delta=0.2;

af=class(af,'af');

Display.m :

function display(af)

fprintf('这是一条人工鱼:\n');

fprintf(' 位置: x=%d\n',af.x);

fprintf(' y=%d\n',af.y);

fprintf(' 步长: step=%d\n',af.step);

fprintf(' 视野: visual=%d\n',af.visual);

fprintf(' 尝试次数: try_number=%d\n',af.try_number); fprintf(' 拥挤度因子: delta=%d\n',af.delta);

Dstc.m

function out=dstc(af1,af2)

out=((af1.x-af2.x)^2+(af1.y-af2.y)^2)^0.5;

Evaluate.m

function af=evaluate(af)

af_follow=follow(af)

af_swarm=swarm(af);

af_prey=prey(af);

af_best=af_follow;

if foodconsistence(af_swarm)>foodconsistence(af_best)

af_best=af_swarm;

end

if foodconsistence(af_prey)>foodconsistence(af_best)

af_best=af_prey;

end

if foodconsistence(af_best)>foodconsistence(af)

af=af_best;

else af=move(af);

end

Follow.m

function af=follow(af)

global afs;

global af_total;

n=0;

f_max=-Inf;

max_i=1;

xo=af.x;

yo=af.y;

for i=1:1:af_total

if(dstc(af,afs{i})

n=n+1;

if(foodconsistence(afs{i})>f_max)

f_max=foodconsistence(afs{i});

max_i=i;

end

end

end

if((f_max/n)>(af.delta*foodconsistence(af)))&(afs{max_i}.x~=af.x) r_step=abs(1-(foodconsistence(af)/f_max))*af.step;

angle2max=atan((afs{max_i}.y-af.y)/(afs{max_i}.x-af.x));

af.x=af.x+r_step*cos(angle2max);

af.y=af.y+r_step*sin(angle2max);

if(af.x>10|af.x<-10)

af.x=xo;

end

if(af.y>10|af.y<-10)

af.y=yo;

end

else

af=prey(af);

End

Foodconsistence.m

function out=foodconsistence(af)

out=foo(af.x,af.y);

Get.m

function out=get(af,argin)

switch argin

case'x'

out=af.x;

case'y'

out=af.y;

case'visual'

out=af.visual;

case'step'

out=af.step;

case'try_number'

out=af.try_number;

case'delta'

out=af.delta;

otherwise

fprintf('参数错误!\n');

end

Move.m

function af=move(af)

r_angle=rand()*2*pi;

r_step=rand()*af.step;

af.x=af.x+r_step*cos(r_angle);

af.y=af.y+r_step*sin(r_angle);

Prey.m

function af=prey(af)

xo=af.x;

yo=af.y;

for i=1:1:af.try_number

r_angle=rand()*2*pi;

r_visual=rand()*af.visual;

x_interval=r_visual*cos(r_angle);

y_interval=r_visual*sin(r_angle);

x_next=af.x+x_interval;

y_next=af.y+y_interval;

if(foodconsistence(af)

r_step=abs(1-(foodconsistence(af)/foo(x_next,y_next)))*af.step; af.x=af.x+r_step*cos(r_angle);

af.y=af.y+r_step*sin(r_angle);

if(af.x>10|af.x<-10)

af.x=xo;

end

if(af.y>10|af.y<-10)

af.y=yo;

end

return;

end

end

af=move(af);

Set.m

function af=set(af,argin1,argin2)

switch argin1

case'x'

af.x=argin2;

case'y'

af.y=argin2;

case'step'

af.step=argin2;

case'visual'

af.visual=argin2;

case'try_number'

af.try_number=argin2;

case'delta'

af.delta=argin2;

otherwise

fprintf('参数错误!\n'); end

Swarm.m

function af=swarm(af)

global afs;

global af_total;

n=0;

x_center=0;

y_center=0;

xo=af.x;

yo=af.y;

for i=1:1:af_total

if dstc(af,afs{i})

n=n+1;

x_center=x_center+afs{i}.x;

y_center=y_center+afs{i}.y; end end if n~=0

x_center=x_center/n; y_center=y_center/n;

if (foo(x_center,y_center)>foodconsistence(af)*af.delta*n)&(x_center~=af.x) r_step=abs(1-(foodconsistence(af)/foo(x_center,y_center)))*af.step; angle2center=atan((y_center-af.y)/(x_center-af.x)); af.x=af.x+r_step*cos(angle2center); af.y=af.y+r_step*sin(angle2center);

if (af.x>10|af.x<-10) af.x=xo; end

if (af.y>10|af.y<-10) af.y=yo; end return ; end end

af=prey(af);

仿真结果:

05101520

253035404550

0.2

0.4

0.6

0.8

1

迭代次数

f (x ,y )

鱼群算法

人工鱼群算法的仿真程序-matlab

tic figure(1);hold on ezplot('x*sin(10*pi*x)+2',[-1,2]); %% 参数设置 fishnum=50; %生成50只人工鱼 MAXGEN=50; %最多迭代次数 try_number=100;%最多试探次数 visual=1; %感知距离 delta=0.618; %拥挤度因子 step=0.1; %步长 %% 初始化鱼群 lb_ub=[-1,2,1]; X=AF_init(fishnum,lb_ub); LBUB=[]; fori=1:size(lb_ub,1) LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)]; end gen=1; BestY=-1*ones(1,MAXGEN); %每步中最优的函数值 BestX=-1*ones(1,MAXGEN); %每步中最优的自变量 besty=-100; %最优函数值 Y=AF_foodconsistence(X); while gen<=MAXGEN fprintf(1,'%d\n',gen) fori=1:fishnum %% 聚群行为 [Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y); %% 追尾行为 [Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y); if Yi1>Yi2 X(:,i)=Xi1; Y(1,i)=Yi1; else X(:,i)=Xi2; Y(1,i)=Yi2; end end [Ymax,index]=max(Y); figure(1); plot(X(1,index),Ymax,'.','color',[gen/MAXGEN,0,0]) ifYmax>besty besty=Ymax; bestx=X(:,index); BestY(gen)=Ymax;

人工鱼群算法matlab实现

functionlhl_AF clc;clear all; close all; format long Visual = 2.5; %人工鱼的感知距离 Step = 0.3; %人工鱼的移动最大步长 N = 10; %人工鱼的数量 Try_number = 50;%迭代的最大次数 delta=0.618; %拥挤度因子 a1 = -10; b1 = 10; a2 = -10; b2 = 10; d = [];%存储50个状态下的目标函数值; k = 0; m = 50;%迭代次数 X1 = rand(N,1)*(b1-a1)+a1; %在-10~10之间,随机生成50个数; X2 = rand(N,1)*(b2-a2)+a2; X = [X1 X2]; %X = ones(N,2); %for i = 1:N % X(i,1)=-10; % X(i,2)=10; %end % 人工鱼数量,两个状态变量X1和X2; %计算50个初始状态下的; for i = 1:N www = [X(i,1),X(i,2)]; d(i) = maxf(www); end %公告牌用于记录人工鱼个体的历史最好状态 [w,i] = max(d); % 求出初始状态下的最大值w和最大值的位置i; maxX = [X(i,1),X(i,2)]; % 初始公告板记录,最大值位置; maxY = w; % 初始化公告板记录,最大值; figurex = []; figurey = []; figurez = []; figurex(numel(figurex)+1) = maxX(1); % 将maxX(1)放入figurex中, figurey(numel(figurey)+1) = maxX(2); % numel返回数组或者向量中所含元素的总数,matlab数组下标默认是从1开始的 figurez(numel(figurez)+1) = maxY; while(k

改进的人工鱼群算法(1)

改进的人工鱼群算法 江铭炎、袁东风、程永明著 山东大学信息科学与工程学院 Email:jiangmingyan@https://www.wendangku.net/doc/1517286686.html,

摘要: 人工鱼群算法(AFSA)是一种新型的智能优化算法。它有许多优点,比如鲁棒性好、全局搜索能力强、参数公差的设定,而且它也被证明对初始值不敏感。然而,它有一些弱点,表现为在后期优化的优化精度和收敛速度比较差。在本文中,提出了一种改进AFSA(IAFSA),在更新的过程中它将全局信息添加到人工鱼的位置。这实验结果表明,该优化精度和收敛速度的方法与原AFSA相比有明显地改善。 1.简介 人工鱼群算法(AFSA)[1]是(SAS)鱼群优化算法的一种。近年来,如蚁群优化(ACO)的算法的SA [2],粒子群优化(PSO)[3]算法,蜂群算法(BA)[4]越来越多的应用到工程应用中,由此他们在研究领域成为了热点。 这是一种把鱼群行为寻找食物比为社会行为的基础上智能优化算法AFSA。在鱼群行为包括觅食,聚群行为,尾随行为[1],随机行为[5]和觅食行为[6]。与其他(SAS)相似,和它工作在一起的每个种群的个体被称为一个人工鱼(AF),每个人工鱼在“游”的搜索空间根据自己的经验及附近的伙伴来寻找有食物的地区。结果, 随着共享的社会信息、来自于之前人工鱼附近搜索的经验和发现的食物浓度, AFSA可以像其他SA有能力在很宽的空间找到更好的解决方案,有效地搜索全局最优的自适应。 仿照AFSA动物行为的过程,并通过个人的局部优化找出全局最优。在这种算法中,有时人工鱼个体的行为很难避免个体为时过早的

寻找局部最优[1][5]。在这种情况下,许多人工鱼陷入局部最优,只有少数的鱼能达到全局最优的区域。因此,AFSA的优化精度和收敛速度的往往不是十分令人满意。为了提高AFSA的性能, 在IAFSA更新过程中全区域最好的AFSA数据被加到了这个位置。三个基准函数是用来检测新算法的性能;实验结果表明,该IAFSA提高了AFSA的性能,并保留其很多优点,如鲁棒性、公差的参数的设置,寻找适应性等。2.人工鱼群算法 在自然界中,鱼能通过个体独立的搜索还有跟随其它鱼找到更有营养的区域,这个地区的鱼所在的地方通常是营养最丰富的。AFSA 的基本思想是模仿鱼类行为,如觅食,聚群和追尾使鱼个体局部搜索并达到全局最优[1][5]。人工鱼所在环境主要包括解的空间和其它人工鱼的状态。它的下一个行为取决于它现在的状态和地方环境状况(包括解决目前问题的特性和周围同伴的状态)。一人工鱼将会通过其自己的活动影响环境和它的同伴的活动。 从算数角度来讲,把一群人工鱼的N popsize,AF i 和位置向量X i相联系,(D是最优参数)在一个最优的问题中是一种可行的解决方案。让X i(t)表示一个人工鱼现在的位置,X i(t+1)是下一个选择的位置。每次迭代步长t+1, 人工鱼的行为的执行和位置矢量X i(t+1)的更新是通过增加一个增量更新向量△X i(t+1),仅包括局部最优信息。向量的增加是通过当前状态X i(t)和更好的状态X better (t+1),方程如下:

基本人工鱼群算法

基本人工鱼群算法 摘要人工鱼群算法(Artificial Fish-Swarm Algorithm,AFSA)是由李晓磊等在2002年提出的,源于对鱼群运动行为的研究,是一种新型的智能仿生优化算法。它具有较强的鲁棒性、优良的分布式计算机制易于和其他方法结合等优点。目前对该算法的研究、应用已经渗透到多个应用领域,并由解决一维静态优化问题发展到解决多维动态组合优化问题。人工鱼群算法已经成为交叉学科中一个非常活跃的前沿性学科。本文主要对鱼群算法进行了概述,引入鱼群模式的概念,然后给出了人工鱼的结构,接下来总结出了人工鱼的寻优原理,并对人工鱼群算法的寻优过程进行仿真,通过四个标准函数选取不同的拥挤度因子进行仿真实验,证实了利用人工鱼群算法进行全局寻优确实是有效的。 关键词:人工鱼群算法;拥挤度因子;寻优 0 引言 动物在进化过程中,经过漫长的优胜劣汰,形成了形形色色的觅食和生存方式,这些方式为人类解决生产生活中的问题带来了不少启发和灵感。动物不具备复杂逻辑推理能力和综合判断等高级智能,但他们通过个体的简单行为和相互影响,实现了群体的生存和进化。动物行为具有以下几个特点。 (1)适应性:动物通过感觉器官来感知外界环境,并应激性的做出各种反应,从而影响环境,表现出与环境交互的能力。 (2)自治性:在不同的时刻和不同的环境中能够自主的选取某种行为,而无需外界的控制或指导。 (3)盲目性:单个个体的行为是独立的,与总目标之间没有直接的关系。 (4)突现性:总目标的完成是在个体行为的运动过程中突现出来的。 (5)并行性:各个个体的行为是并行进行的。 人工鱼群算法是根据鱼类的活动特点提出的一种基于动物行为的自治体寻优模式。 1 鱼群模式描述 1.1 鱼群模式的提出 20世纪90年代以来,群智能(swarm intelligence,SI)的研究引起了众多学者的极大关注,并出现了蚁群优化、粒子群优化等一些著名的群智能方法。 集群是生物界中常见的一种现象,如昆虫、鸟类、鱼类、微生物乃至人类等等。生物的这种特性是在漫长的进化过程中逐渐形成的,对其生存和进化有着重

基于全局最优的快速人工鱼群算法及其应用研究

基于全局最优的快速人工鱼群算法及其应用研究 人工鱼群算法是一种有关动物行为的算法,这种算法 具有一定的智能性,是最近几年国内学者提出来的。这种人工鱼群算法是从行为方面进行的主要研究,并对原来存在的问题进行解决。 关键词】人工鱼群算法优化方法群体智能 众多实验能够证明,群体智能优化的相关算法在很多问 题的解决上都发挥了至关重要的作用,也得到了十分广泛的应用。 1人工鱼群算法 1.1鱼群及其算法的基本思想人工鱼群算法主要依据的是鱼群的行为启 发,在2002 年被提出的一种有关动物行为的比较优化的算法。一般情况 个范围之内,鱼群中的鱼会跟随群体中的其它成员 起找到食物比较多的地方。而通常情况下,一片水域范围内食物最多的地方往往会有最多的鱼群数目。根据这个特点,使用人工制作的鱼对鱼群的各种行为进行模拟,进而完成直线寻优的目的。 1.2人工鱼模型有关人工鱼模型的算法使用的是基于animats 的模 式,

设计采用的顺序是从上到下的,因此先进行的步骤就是人工 鱼模型的建造。通常情况下使用的是面向对象的技术方式, 并用会用C++语言的伪代码形式来加以说明。人工鱼一般的 模型描述方式如下: Various : float AF_swarm (); //the behavior of swarm float AF_evaluate (); //evaluate and select the behavior float AF_init (); //to initialize the AF Aritificial_fish (); float AF_X[n] ; //AF 's position step float AF_step ; //the distance that AF can moue for each float AF_visual ; //the visual diatance of AF float try_number ; //attempt time in the behavior of prey float AF_delta ; //the condition of jamming Functions : float AF_foodconsistence (); //the food consistence of AF ' s current position float AF_move (); //AF move to the next position float AF_follow (); //the behavior of follow float AF_prey (); //the behavior of prey

人工鱼群算法源代码

人工鱼群算法源代码 %人工鱼群算法;formatlong;Visual=2.5;;Step=0.3;;N=50;;Try_numb er=50;;a1=-10;;b1=10;;a2=-10;;b2=10;;d=[];;h=1e-1;;Friend_numb er=50;;k=0;;m=50;;X1=rand(N,1)*(b1-a1)+a1;;X2=rand(N,1)*(b2-a2) %人工鱼群算法 format long Visual=2.5; Step=0.3; N=50; Try_number=50; a1=-10; b1=10; a2=-10; b2=10; d=[]; h=1e-1; Friend_number=50; k=0; m=50; X1=rand(N,1)*(b1-a1)+a1; X2=rand(N,1)*(b2-a2)+a2; X=[X1 X2];%人工鱼数量 for i=1:N wwww=[X(i,1),X(i,2)]; d(i)=maxf(wwww); end [w,i]=max(d); maxX=[X(i,1),X(i,2)];%初始公告板记录 maxY=w;%初始公告板记录

figurex=[]; figurey=[]; figurez=[]; figurex(numel(figurex)+1)=maxX(1); figurey(numel(figurey)+1)=maxX(2); figurez(numel(figurez)+1)=maxY; kkk=0; while(kmaxf(XX)) XXnext1=XX+rand*Step*(Xc-XX)/norm(Xc-XX); if(XXnext1(1)>b1) XXnext1(1)=b1; end if(XXnext1(1)b2) XXnext1(2)=b2; end if(XXnext1(2)

人工鱼群算法matlab实现

function lhl_AF clc;clear all; close all; format long Visual = 2、5; %人工鱼的感知距离 Step = 0、3; %人工鱼的移动最大步长 N = 10; %人工鱼的数量 Try_number = 50;%迭代的最大次数 delta=0、618; %拥挤度因子 a1 = -10; b1 = 10; a2 = -10; b2 = 10; d = [];%存储50个状态下的目标函数值; k = 0; m = 50;%迭代次数 X1 = rand(N,1)*(b1-a1)+a1; %在-10~10之间,随机生成50个数; X2 = rand(N,1)*(b2-a2)+a2; X = [X1 X2]; %X = ones(N,2); %for i = 1:N % X(i,1)=-10; % X(i,2)=10; %end % 人工鱼数量,两个状态变量X1与X2; %计算50个初始状态下的; for i = 1:N www = [X(i,1),X(i,2)]; d(i) = maxf(www); end %公告牌用于记录人工鱼个体的历史最好状态 [w,i] = max(d); % 求出初始状态下的最大值w与最大值的位置i; maxX = [X(i,1),X(i,2)]; % 初始公告板记录,最大值位置; maxY = w; % 初始化公告板记录,最大值; figurex = []; figurey = []; figurez = []; figurex(numel(figurex)+1) = maxX(1); % 将maxX(1)放入figurex中, figurey(numel(figurey)+1) = maxX(2); % numel返回数组或者向量中所含元素的总数,matlab数组下标默认就是从1开始的 figurez(numel(figurez)+1) = maxY; while(k

人工鱼群算法综述

人工鱼群改进算法研究综述 摘要:人工鱼群算法源于对鱼群运动行为的研究,是一种新型的群体智能随机全局优化算法,人工鱼群算法(AFSA)起步较晚,还存在着许多不足之处。因此本文主要通过阐述鱼群算法的基本理论的同时,对人工鱼群算法的改进方法进行文献综述,并根据这些改进方法指出了人工鱼群算法未来的改进与研究方向。 关键词:人工鱼群算法算法改进综述 1.引言 1.1 人工鱼群算法的基本概念 人工鱼群算法是李晓磊等[1]人于2002年提出的一种基于动物自治体[2-3]的优化方法,是集群智能思想[4]的一个具体应用,该算法根据水域中鱼生存数目最多的地方就是本水域中富含营养物质最多的地方这一特点来模拟鱼群的觅食行为而实现寻优。它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各人工鱼个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着较快的收敛速度[5]。 人工鱼群算法主要利用鱼的三大基本行为:觅食、聚群和追尾行为,采用自上而下的寻优模式从构造个体的底层行为开始,通过鱼群中各个体的局部寻优,达到全局最优值在群体中凸显出来的目的[6]。 (1)觅食行为:这是鱼趋向食物的一种活动,一般认为它是通过视觉或味觉来感知水中的食物两或食物浓度来选择行动的方向[6]。 (2)聚群行为:大量或少量的鱼聚集成群,进行集体觅食和躲避敌害,这是它们在进化过程中形成的一种生存方式[6]。 (3)追尾行为:当某一条鱼或几条鱼发现食物时,它们附近的鱼会尾随而来,导致更远处的鱼也会尾随过来[6]。

人工鱼群算法就是通过模拟鱼类的觅食、聚群、追尾等行为在搜索域中进行寻优的。 1.2 人工鱼群算法的行为描述 觅食行为:设置人工鱼当前状态,并在其感知范围内随机选择另一个状态,如果得到的状态的目标函数大于当前的状态,则向新选择得到的状态靠近一步,反之,重新选取新状态,判断是否满足条件,选择次数达到一定数量后,如果仍然不满足条件,则随机移动一步[6]。 聚群行为:人工鱼探索当前邻居内的伙伴数量,并计算伙伴的中心位置,然后把新得到的中心位置的目标函数与当前位置的目标函数相比较,如果中心位置的目标函数优于当前位置的目标函数并且不是很拥挤,则当前位置向中心位置移动一步,否则执行觅食行为[6]。 追尾行为:人工鱼探索周围邻居鱼的最优位置,当最优位置的目标函数值大于当前位置的目标函数值并且不是很拥挤,则当前位置向最优邻居鱼移动一步,否则执行觅食[6]。 根据所要解决的问题性质,对人工鱼当前所处的环境进行评价,从而选择一种行为。较常用的评估方法是:选择各行为中使得向最优方向前进最大的方向,也就是各行为中使得人工鱼的下一步状态最优的行为,如果没有能使下一个状态优于当前状态的行为,则采用随机行为。 1.3 人工鱼群算法步骤[6] Step1:设定鱼群的参数,包括鱼群的规模m, 最大迭代次数gen,人工鱼的感知范围Visual,最大移动步长step,拥挤度因子d等; Step2:在参数区间内随机生成m条人工鱼个体作为初始鱼群; Step3:计算每条鱼的食物浓度函数(目标函数),把最优的值放入公告板[7]中; Step4:对于每条人工鱼执行以下操作 (1)计算出追尾行为、聚群行为的值,采用行为选择策略,选择最优的行为作为鱼的移动方向,缺省行为是觅食行为。 (2)计算出每条鱼的食物浓度函数(目标函数),其最优值与公告板中的值

一种新型的智能优化方法—人工鱼群算法

浙江大学 博士学位论文 一种新型的智能优化方法—人工鱼群算法 姓名:李晓磊 申请学位级别:博士 专业:控制科学与工程 指导教师:钱积新 2003.1.1

加,,Z掌博士学位论文一III- 摘要 (优化命题的解决存在于许多领域,对于国民经济的发展也有着巨大的应用前景。随着优化对象在复杂化和规模化等方面的提高,基于严格机理模型的传统优化方法在实施方面变得越来越困难。厂吖 本文将基于行为的人工智能思想通过动物自治体的模式引入优化命题的解决中,构造了一种解决问题的架构一鱼群模式,并由此产生了一种高效的智能优化算法一人工鱼群算法。 文中给出了人工鱼群算法的原理和详细描述,并对算法的收敛性能和算法中各参数对收敛性的影响等因素进行了分析;针对组合优化问题,给出了人工鱼群算法在其中的距离、邻域和中心等概念,并给出了算法在组合优化问题中的描述;针对大规模系统的优化问题,给出了基于分解协调思想的人工鱼群算法;给出了人工鱼群算法中常用的一些改进方法;给出了人工鱼群算法在时变系统的在线辨识和鲁棒PID的参数整定中两个应用实例j最后指出了鱼群模式和算法的发展方向。 f在应用中发现,人工鱼群算法具有以下主要特点: ?算法只需要比较目标函数值,对目标函数的性质要求不高; ?算法对初值的要求不高,初值随机产生或设定为固定值均可以; ?算法对参数设定的要求不高,有较大的容许范围; ?算法具备并行处理的能力,寻优速度较快; ?算法具备全局寻优的能力; 鱼群模式和鱼群算法从具体的实施算法到总体的设计理念,都不同于传统的设计和解决方法,同时它又具有与传统方法相融合的基础,相信鱼群模式和鱼群算法有着良好的应用前景。∥ / 关键词人工智能,集群智能,动物自治体,人工鱼群算法,f优∥ ,l/。7

人工鱼群算法源代码

%人工鱼群算法 format long Visual=2.5; Step=0.3; N=50; Try_number=50; a1=-10; b1=10; a2=-10; b2=10; d=[]; h=1e-1; Friend_number=50; k=0; m=50; X1=rand(N,1)*(b1-a1)+a1; X2=rand(N,1)*(b2-a2)+a2; X=[X1 X2];% 人工鱼数量 for i=1:N wwww=[X(i,1),X(i,2)]; d(i)=maxf(wwww); end [w,i]=max(d); maxX=[X(i,1),X(i,2)];% 初始公告板记录 maxY=w;% 初始公告板记录 figurex=[]; figurey=[]; figurez=[]; figurex(numel(figurex)+1)=maxX(1); figurey(numel(figurey)+1)=maxX(2); figurez(numel(figurez)+1)=maxY; kkk=0; while(k

nf=0; Xc=0; for j=1:N %聚群行为开始 XXX=[X(j,1),X(j,2)]; if(norm(XXX-XX)maxf(XX)) XXnext1=XX+rand*Step*(Xc-XX)/norm(Xc-XX); if(XXnext1(1)>b1) XXnext1(1)=b1; end if(XXnext1(1)b2) XXnext1(2)=b2; end if(XXnext1(2)b1) XXnext1(1)=b1; end if(XXnext1(1)

人工鱼群算法实现最佳路径选择源码

无约束连续函数优化的人工鱼群算法通用MATLAB源码(2008-11-15 09:49:29)标签:杂谈 题目:无约束连续函数优化的人工鱼群算法通用MATLAB源码 此源码是对人工鱼群算法的一种实现,用于无约束连续函数的优化求解,对于含有约束的情况,可以先使用罚函数等方法,把问题处理成无约束的模型,再使用本源码进行求解,本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页.cn/greensim)。 function [BESTX,BESTY,ALLX,ALLY]=FSOUCP(K,N,V,Delta,L,LB,UB) %% Fish Swarm Optimization for Unconstrained Continuous Problem %% FSOUCP.m %% 无约束连续函数的人工鱼群优化算法 % GreenSim团队原创作品,转载请注明 % Email: % GreenSim团队主页:.cn/greensim % [color=red]欢迎访问GreenSim——算法仿真团队→ [url=.cn/greensim].cn/greensim[/url][/color] %% 此函数实现人工鱼群算法,用于求解无约束连续函数最小化问题 %% 对于最大化问题,请先将其加负号转化为最小化问题 %% 输入参数列表 % K 迭代次数 % N 鱼群规模 % V 人工鱼的感知范围 % Delta 拥挤程度的判决门限,取值0~1之间 % L 觅食行为的试探次数 % LB 决策变量的下界,M×1的向量 % UB 决策变量的上界,M×1的向量 %% 输出参数列表 % BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优人工鱼的状态% BESTY K×1矩阵,记录每一代的最优人工鱼的评价函数值 % ALLX K×1细胞结构,每一个元素是M×N矩阵,记录每一代人工鱼的位置 % ALLY K×N矩阵,记录每一代人工鱼的评价函数值 %% 测试函数设置 % 测试函数用单独的子函数编写好,在子函数FIT.m中修改要调用的测试函数名即可 % 注意:决策变量的下界LB和上界UB,要与测试函数保持一致 %% 参考设置 %[BESTX,BESTY,ALLX,ALLY]=FSOUCP(50,30,0.5,0.3,20,LB,UB)

人工鱼群算法matlab实现

人工鱼群算法m a t l a b 实现 集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

function lhl_AF clc;clear all; close all; format long Visual = ; %人工鱼的感知距离 Step = ; %人工鱼的移动最大步长 N = 10; %人工鱼的数量 Try_number = 50;%迭代的最大次数 delta=; %拥挤度因子 a1 = -10; b1 = 10; a2 = -10; b2 = 10; d = [];%存储50个状态下的目标函数值; k = 0; m = 50;%迭代次数 X1 = rand(N,1)*(b1-a1)+a1; %在-10~10之间,随机生成50个数; X2 = rand(N,1)*(b2-a2)+a2; X = [X1 X2]; %X = ones(N,2); %for i = 1:N % X(i,1)=-10; % X(i,2)=10; %end % 人工鱼数量,两个状态变量X1和X2; %计算50个初始状态下的; for i = 1:N www = [X(i,1),X(i,2)]; d(i) = maxf(www); end %公告牌用于记录人工鱼个体的历史最好状态 [w,i] = max(d); % 求出初始状态下的最大值w和最大值的位置i; maxX = [X(i,1),X(i,2)]; % 初始公告板记录,最大值位置; maxY = w; % 初始化公告板记录,最大值; figurex = []; figurey = []; figurez = []; figurex(numel(figurex)+1) = maxX(1); % 将maxX(1)放入figurex中,figurey(numel(figurey)+1) = maxX(2); % numel返回数组或者向量中所含元素的总数,matlab数组下标默认是从1开始的 figurez(numel(figurez)+1) = maxY; while(k

人工鱼群算法matlab实现

人工鱼群算法m a t l a b实 现 Revised by Jack on December 14,2020

function lhl_AF clc;clear all; close all; format long Visual = ; %人工鱼的感知距离 Step = ; %人工鱼的移动最大步长 N = 10; %人工鱼的数量 Try_number = 50;%迭代的最大次数 delta=; %拥挤度因子 a1 = -10; b1 = 10; a2 = -10; b2 = 10; d = [];%存储50个状态下的目标函数值; k = 0; m = 50;%迭代次数 X1 = rand(N,1)*(b1-a1)+a1; %在-10~10之间,随机生成50个数; X2 = rand(N,1)*(b2-a2)+a2; X = [X1 X2]; %X = ones(N,2); %for i = 1:N % X(i,1)=-10; % X(i,2)=10; %end % 人工鱼数量,两个状态变量X1和X2; %计算50个初始状态下的; for i = 1:N www = [X(i,1),X(i,2)]; d(i) = maxf(www); end %公告牌用于记录人工鱼个体的历史最好状态 [w,i] = max(d); % 求出初始状态下的最大值w和最大值的位置i; maxX = [X(i,1),X(i,2)]; % 初始公告板记录,最大值位置; maxY = w; % 初始化公告板记录,最大值; figurex = []; figurey = []; figurez = []; figurex(numel(figurex)+1) = maxX(1); % 将maxX(1)放入figurex中,figurey(numel(figurey)+1) = maxX(2); % numel返回数组或者向量中所含元素的总数,matlab数组下标默认是从1开始的 figurez(numel(figurez)+1) = maxY; while(k

人工鱼群算法的现状与改进分析

人工鱼群算法的现状与改进分析 王闯,薛婷,孙林燕 大连海事大学,辽宁大连 (116026) E-mail: wch-7408549@https://www.wendangku.net/doc/1517286686.html, 摘要:本文首先对人工鱼群算法目前的发展情况进行了简单的综述。然后,通过分析人工鱼群算法的优点和缺点,提出了四种改进思路-改进参数、改进鱼群行为、高阶行为模式、与其它优化算法相融合,并用已有的改进算法加以论证。进而为人工鱼群算法的改进研究提供了新的便利。 关键词:人工鱼群算法,优化算法,算法改进 1. 引言 优化命题的解决存在于许多领域,对于国民经济的发展也有着巨大的应用前景。随着优化对象在复杂化和规模化等方面的提高,基于严格机理模型的传统优化方法在实施方面变得越来越困难。 人工鱼群算法(Artificial Fish-swarm Algorithm,AFSA)是一种基于模拟鱼群行为的优化算法,是由李晓磊等[1]于2002年提出的一种新型的寻优算法。AFSA是一种新型的思路,从具体的实施算法到总体的设计理念,都不同于传统的设计和解决方法,但同时它又能与传统方法相融合。因此,AFSA自提出以来,得到了国内外学者的广泛关注,对算法的研究应用已经渗透到多个应用领域,并由解决一维静态优化问题发展到解决多维动态组合优化问题。AFSA己经成为交叉学科中一个非常活跃的前沿性研究问题。 2. 研究现状 在基本AFSA中,主要是利用了鱼群的觅食、聚群和追尾行为,从构造单条鱼的底层行为做起,通过鱼群中各个体的局部寻优,达到全局最优值在群体中突现出来的目的。通过研究发现,AFSA具有以下特点[1]: l)算法只需要比较目标函数值,对目标函数的性质要求不高; 2)算法对初值的要求不高,初值随机产生或设定为固定值均可以; 3)算法对参数设定的要求不高,有较大的容许范围; 4)算法具备并行处理的能力,寻优速度较快; 5)算法具备全局寻优的能力,能够快速跳出局部极值点。 从目前对AFSA的研究来看,绝大部分集中在如何应用AFSA解决实际问题,对于算法本身的研究和优化,见到的还不多。 通过深入研究和实践发现,AFSA虽然具有很多优良的特性,但它本身也还是存在一些问题,如随着人工鱼数目的增多,将会需求更多的存储空间,也会造成计算量的增长;对精确解的获取能力不够,只能得到系统的满意解域;当寻优的区域较大,或处于变化平坦的区域时,收敛到全局最优解的速度变慢,搜索效率劣化;算法一般在优化初期具有较快的收敛性,而后期却往往收敛较慢。这些算法本身存在的问题,在一定程度上也影响了算法的实际应用。 因此,针对以上缺点,研究如何对人工鱼群算法进行优化、改进,解决算法本身存在的问题,提高算法求解各类优化问题的适应性,提高算法的搜索效率,具有比实际应用研究更重要的意义。

人工鱼群算法的简介及应用

德州律师https://www.wendangku.net/doc/1517286686.html, 人工鱼群算法是根据鱼在水中寻找食物的行为演化而来。我们知道,在鱼塘里对着某一区域撒下食物,不一会儿就会有大量的鱼儿集中过来,鱼儿在水中一般有觅食,聚群,追尾三种行为,以下是这些行为的描述:(1)觅食行为:鱼一般会呆在食物较多的地方。一般在水里游的鱼,当它发现食物时,会向其游去。(2)聚 群行为:鱼在水中大多是群聚在一起,这样是为了能够更好的在水中生存,观察鱼群不难发现,鱼群中每条鱼之间都保持有一定的距离,而且它们会尽量保持方向一致,而外围的鱼也 都是不断像中心的位置靠近。 (3) 追尾行为:在鱼群中,当一条鱼或者几条鱼发现食物时,其它的鱼也会尾随其快速 的游到食物分布较多的地方。 1.人工鱼群算法原理 1.1人工鱼群算法具的特点 (1)收敛速度较快,可以用来解决有实时性要求的问题; (2)针对一些精度要求不高的情况,可以用来快速的得到一个可行解; (3)不需要问题的严格机理模型,甚至不需要问题的精确描述,这使得它的应用范围得 以扩展。 1.2人工鱼群算法常用终止条件 (1) 判断连续多次所得的均方差小于允许的误差。 (2)判断一些区域的人工鱼群的数量达到某个比率。 (3)连续多次所获取的值均不得超过已寻找的极值。 (4)迭代次数到达设定的最大次数 1.3人工鱼群算法的基本流程 人工鱼群算法演化到具体计算技术,具体流程如下:为两个体之间的距离,xp(v1,v2……vn)个体的当前位置,visual一只鱼的感知距离。 @拥挤度因子。 (1)觅食人工鱼当前位置为Xi,在可见域内随机选择一个位置Xj(d(ij) <=visual),如xj优于xi向xj前进一步,否则随机移动一步。如出现不满足约束则剪去。不变,else =随 机(0,1)}。 (2)聚群:xi可见域内共有nf1条鱼。形成集和KJi,,if KJi不为空, then (xjk属于kji) , 若:(FCc为中心食物浓度,FCi为Xi点食物浓度) 则:向中心移动:X(i+1,k)=不变, 当Xik=X(center,k)时,Xik=随机(0,1), 当Xik!=X(center,k)时,若:FCc/n - [论文网https://www.wendangku.net/doc/1517286686.html,]f1<@FCi则:进行觅食。 (3)追尾在visual范围内,某一个体食物浓度最大则称为Xmax,若:FCmax>@FCi,则向其移动:X(i+1,k)=当X(i,k)=X(max,k)时,X(i,k)不变,当X(i,k)!=X(max,k)时, X(i,k)=随机(0,1)。 (4)公告板在运算过程中,用于记录下最优Fci 2.人工鱼群算法在各领域的应用 (1)电力系统规划中的应用。电力系统规划的重要组成部分是输电网规划,其目的是

相关文档