动物集群行为建模.docx
《动物集群行为建模.docx》由会员分享,可在线阅读,更多相关《动物集群行为建模.docx(16页珍藏版)》请在冰豆网上搜索。
动物集群行为建模
:
1.赵龙
2.霍锦云
3.曾剑臣
动物集群运动行为建模与仿真
摘要通过数学建模来模拟动物群的集群运动行为以及探索动物群中的信息传递机制一直是仿生学领域的一项重要内容。
因为这在医学上还是军事学中都是有重要意义的。
本文通过数学建模和编程仿真,解决了题目中所提到的三个问题。
对于问题一,我们通过观察附件所提供的视频资料和研究以往的研究成果,分析动物集群的行为机制,我们得出:
动物在集群行动中,个体与个体之间有在一定距离吸引,又在一定距离排斥的规律,它们之间的信息传递机制即为感知距离的机制。
我们以鱼群为研究对象,假设鱼群中有一个领航者,然后对它们不觅食和觅食两种情况进行了建模。
在鱼群的信息感知上我们建立了所有个体间吸引排斥函数,此函数通过鱼感知的距离和方向信息来决策鱼的速度大小和方向,再通过与领航鱼的相对速度合成来决定个体鱼最优路径。
在觅食情况下考虑了集群,食物及领航者三方面决策情况,对此三者分别加权来决策鱼群最优路径。
对于问题二,考虑到视频材料中黑鳍鲨被鱼群包围成圈的情况,我们假定把黑鳍鲨作为鱼群的一员,然后参考模型一建立个体鱼与黑鳍鲨的吸引排斥函数,然后通过加权来决策鱼群路径,做到鱼群与黑鳍鲨的对峙模拟。
对于问题三,考虑到鱼群中有一些信息丰富者,我们假设它们不仅对鱼群有感知能力,而且对环境也有较强的感知能力,而其他鱼只有对鱼群的感知能力,然后对它们和普通鱼分别建立模型,参考模型一,我们也引入了吸引排斥函数,最后得到鱼群运动模型。
对前两个问题,我们都进行了matlab编程仿真模拟,得到了较好的仿真效果,同时通过仿真对模型进行了验证。
问题三是前两个问题的拓展,比较符合实际情况,这对研究有较好指导意义。
问题重述
1.1问题背景
在动物界,大量集结成群进行移动或者觅食的例子并不少见,这种现象在食草动物、鸟、鱼和昆虫中都存在。
这些动物群在运动过程中具有很明显的特征:
群中的个体聚集性很强,运动方向、速度具有一致性。
通过数学模型来模拟动物群的集群运动行为以及探索动物群中的信息传递机制一直是仿生学领域的一项重要内容。
1.2目标任务
问题一:
观察附件中给出的图片和视频资料,或者在网上搜索相关资料观察,思考动物集群运动的机理,建立数学模型模拟动物的集群运动。
问题二:
建立数学模型刻画鱼群躲避黑鳍礁鲨鱼的运动行为。
问题三:
假定动物群中有一部分个体是信息丰富者(如掌握食物源位置信息,掌握迁徙路线信息),请建模分析它们对于群运动行为的影响,解释群运动方向决策如何达成。
二、模型的假设
1) 假设在问题一中有个虚拟领航者;
2) 假设食物浓度的大小变化对鱼的运动影响不大;
3)假设在问题一中所有的鱼都能探测到食物,且敏感度相同;
4) 假设在问题二中,黑鳍鲨始终是没有捕到鱼的;
5) 假设在问题二中,鱼群所处位置为一片开阔水域,且没有障碍物;
6) 假设在黑鳍鲨只有一个;
7)假设信息丰富着在问题三中充当领航者
一、符号
黑鳍鲨的欧氏位置
第i个捕食者的位置
第j个捕食者的位置
食物所在位置
信息丰富者所知信息情况
四、模型建立与求解
4.1问题一
对于问题一,我们以鱼群为研究目标,分析了鱼的行为与特征,考虑到鱼群中每个鱼有以下几个特点:
感知、运动和行为。
所谓感知,即鱼群中的每个鱼都是智能体,能够从周围环境和同伴获得信息,运动即为鱼的有速度的行动,行为指鱼可根据所感知的信息对运动做调整,也包括捕食、避害等行为。
一些研究显示,按照距离的不同,鱼群的内部作用大致可以分为吸引和排斥.对于个体A来说,如果个体B在它的感知范围内并且距离较大则A希望与B靠近,以保持自己处于队列之中不脱离队伍,此时A希望向B的方向运动.如果B在它的感知范围内并且距离很小,则A希望保持有效距离,不让自己周围太过拥挤,此时A希望向B的相反方向运动.同时,在适当的范围内,即在距离合适的范围内,鱼是随机运动的。
再假设在鱼群中有一个虚拟的领航者,在整个鱼群的运动中,每个鱼跟随领航者渐近地取得和领航者相同的运动速度和方向,保持定常的个体鱼间相对距离,避免碰撞并且最小化所有相互影响。
基于这种假设,我们建立了两个模型,分别为环境中无食物时的模型和有食物时的模型。
4.1.1模型1:
无食物模型
模型建立
无食物时,就个体鱼i而言,它的运动取决于两方面,它周围的鱼j的影响和领航鱼的影响。
在欧氏空间内,我们设鱼位置可以用向量
来表示,并且共有N+1条鱼则领航鱼,鱼i和鱼j的位置分别表示为。
假设领航鱼有速度=,第i个鱼的运动方程表示为:
式中,为正的常数,g:
一代表个体间的吸引·排斥函数。
由于它是吸引和排斥两种力共同作用的结果,将其表示为如下形式:
其中:
表示吸引项的强度,:
表示排斥项的强度,
表示欧拉范数。
可以看到,所以吸引·排斥函数是一个奇函数,关于原点对称,这是导致此函数作用下的个体具有聚集行为的重要因素表示实际的吸引作用,表示实际的排斥作用。
这两个力作用在两个个体连线方向上,但方向彼此相反。
向量决定了方向,它保证相互作用向量沿其所指的方向,而和之差指定了作用向量在方向上的正负和作用的强度。
在自然界中,正是这种个体间的吸引和排斥作用导致了群集行为的产生。
通
常吸引作用的距离比排斥作用大。
比如在鱼群中,吸引作用是通过视觉建立的,
而排斥作用是通过鱼侧身所感知到的压力而引起的,因此排斥作用的作用距离要
短得多。
而且自然观测发现,吸引和排斥往往同时作用,行为是它们综合的结果。
在生物学中有“平衡距离”之说,表示在此距离上吸引和排斥作用相互平衡。
根
据此生物学依据,我们对所定义的吸引.排斥函数(4.2)提出假设:
假设 存在一个特定的距离,有,而且,当时,
,时,,在一定距离后吸引力接近为0。
参考文[1],考虑到实际情况中当鱼远离鱼群后不再追赶,吸引力为零,我们得到
式中,a,b,c,d都为正,且b>a,d>c。
其中c表示排斥力的作用范围,d表示吸引力的作用范围。
吸引力
,在时取得最大值。
随着距离的继续增加吸引力将减小直至逼近0.因而此式给出的吸引力有上界,且只在一定距离范围内存在。
在具体操作过程中我们对a,b,c,d及给定合适的值进行计算及仿真。
则可得到鱼i的位置方程为
4.1.2模型2:
有食物模型
模型建立
在有食物的情况下,我们假定食物的浓度大小变化对鱼群的行动基本上没影响,且食物是固定的,其位置坐标为,此时鱼的速度不仅与领航鱼和其它鱼有关还与食物的位置有关,而且三者对鱼速影响的权重不同,另外鱼和食物是只有吸引而没有排斥因此我们建立了下面的模型
式中,,为权重因子,分别取值为0.3,0.4,0.3,取是为了和作区别,且函数所决定的是吸引向量,参考文[1]我们得到
上式中,为正的常数,从式中可以看出,当距离越大时,食物对鱼的吸引越小。
同模型一样,我们得到鱼的未知函数为
t
4.1.3问题的综合分析与进一步研究
对于鱼群的游动,在实际过程中无论是在觅食,还是在不觅食的过程,都有一个需要解决的问题,那就是避开障碍的问题。
在生物界,集群所表现出来的都是群体智能行为,当鱼群遇到障碍后,鱼群可以轻易地躲开,躲避方向在集群中都是大致相同的。
在这里,我们可以这样考虑,鱼群遇到障碍有个感觉范围问题,可以把模型二中食物看作是障碍,在建立吸引排斥函数时,我们使单个鱼i与障碍在一定的范围内是排斥的,而无吸引,在此范围之外鱼和障碍没有任何关系,即函数值为0。
由于考虑到鱼在躲避障碍时,一定要躲开,我们处理此问题时,采用和模型二相同的办法,即加权法,对于障碍的权值设置,可以比其他相关事物大一点。
至此,就建立了比较符合实际的的鱼群游动模型。
对于以上两个模型,我们根据步骤进行了matlab编程(见附录1),从仿真模拟图(见附录2)来看,结果较为理想。
4.2问题二
对于问题二,主要有两个问题需要解决,第一个是当鱼群遇到黑鳍鲨怎样运动,第二个问题是当黑鳍鲨遇到鱼群会怎样运动。
同时,在黑鳍鲨出现的时候是没有觅食问题的,在这里我们也假设没有避障问题,即鱼群所在位置为一片比较开阔的水域,且追捕鱼的黑鳍鲨只有一个。
针对以上问题,我们建立了下面两个模型。
4.2.1模型1:
鱼群游动模型
模型建立
从附件中的动画中我们可以看到,当黑鳍鲨刚刚接近鱼群时,鱼群就自发地陷了进去,黑鳍鲨进入鱼群之后,鱼群始终保持与黑鳍鲨一定的距离并把黑鳍鲨包围在一个圆中,而黑鳍鲨所在的位置,恰好在圆心当中。
鱼群对黑鳍鲨不仅有躲避也有跟随,所以黑鳍鲨也相当于一个领航者。
在欧氏空间内,我们假设黑鳍鲨的位置向量为,对比于问题一中的模型,我们得到鱼群中的个体鱼i的运动方程为
由于鱼群一定要躲避黑鳍鲨,所以在上式中,我们在取权值,和时,分别取权值为0.2,0.3,0.5。
对于,我们考虑到下面几点因素。
首先在鱼所围成的圆区域内,黑鳍鲨对鱼是排斥的,其次,在圆区域以外,黑鳍鲨对鱼群是吸引的,第三,在一定的距离之后,黑鳍鲨对于鱼群没有影响。
参考文[1],我们得到
式中,,,,都为正,且>,>。
其中表示排斥力的作用范围,表示吸引力的作用范围。
吸引力
,在时取得最大值。
随着距离的继续增加吸引力将减小直至逼近0.因而此式给出的吸引力有上界,且只在一定距离范围内存在。
在具体操作过程中我们对,,,及给定合适的值进行计算及仿真,同时在设置,时要将设置大一点,同时相较而言应设置小一点,则可得到鱼i的位置方程为
4.2.2模型2:
黑鳍鲨游动模型
对于黑鳍鲨,它的运动方向只由鱼群决定,鱼群始终吸引它,而且由于鱼群没有进攻性,鱼群对它始终不排斥,这与鱼群捕食基本是一致的,不同的是,鱼群时运动的,所以我们建立黑鳍鲨的运动方程如下
式中
从上式可以得出,鱼群黑鳍鲨越近,对黑鳍鲨吸引越强,可以得黑鳍鲨的位置函数为
4.2.3问题的综合分析与进一步研究
由于附件中视频显示,黑鳍鲨始终是没有追到鱼的,所以在鱼群和黑鳍鲨运动过程中,我们要设置合理的速度,保证黑鳍鲨始终围在鱼群所包围的圆当中。
此外,再进一步研究,我们可以使模型更符合实际,加上其他诸多因素,比如可以多加几条黑鳍鲨,在环境之中设置几处障碍。
对以上模型的求解,我们依然采用matlab编程(见附录3),得到以下模拟图
图上是时间步长为41和287时的截图,从模拟图可看出,鱼始终和黑鳍鲨保持一定距离,但对其有包围,与模型较为一致。
4.3问题三
本问题假定动物群中有一部分个体是信息丰富者(如掌握食物源位置信息,掌握迁徙路线信息),考虑在n维欧式空间中由M个成员组成的异构群集:
其中有N(N≤M)个成员是信息丰富者,其余(M-N)个成员只有感知其他个体位置的能力。
将其中每个成员个体看成没有尺寸的质点,第i个个体的位置表示为。
假设所有个体都同步运动且没有时间延迟,并知道所有其他个体的精确位置。
在不考虑觅食的自由环境中时,第i个个体的运动方程表示为:
这里的吸引排斥函数和问题一中模型一中的是一致的。
当考虑觅食任务时,用盯:
R8一R代表群集所处的环境函数,其数值可以代表环境中有利(如食物)或有害物质(如有毒物质或天敌)的数量。
本文假设数值最小的点为最有利的点,即群集觅食的目标。
由于考虑的群集由两类对环境感知能力不同的群体组成:
有N个个体是信息丰富者并被有利点吸引,它们被称为探测成员;而其余(M-N)个个体只能探测其他成员的位置,它们被称为普通成员,环境的存在与否对它们无直接影响。
假设前N个个体都为探测成员,第N+1到第M个个体为普通成员,将第i个个体的运动方程可分段表示为
在上式中项表示信息丰富着与它们所知道的信息之间的函数关系,根据具体情况我们定义此函数,模型与前面模型也就属于系列模型了,此模型为上面模型的推广。
五、模型的检验
本文中所建模型的检验均为编程仿真检验,对问题一和问题二中所建的模型都用matlab得以实现,从实现的结果来看,问题一中鱼群最后趋于稳定状态,形成基本保持不变的阵型,且鱼之间的距离保持较好,不拥挤也不零散,鱼的游动规则与实际较为一致,但是存在有的问题是,鱼的生成是随机的,在整个画面中不够均匀,刚开始时密疏情况不好。
领航的鱼会出现推着鱼群走的现象,所以模型需要进一步改进。
问题二中,尽管和模型描述较为一致,但存在的问题是鱼群不均匀,未能模拟出与附件图片完全相同的图形。
通过检验,说明模型还需要进一步改进,尤其是在建立吸引排斥函数方面要多考虑一些实际因素。
六、模型的评价
1.本文通过对群体智能理论的研究,建立了基于多Agent方法的鱼群集群行为模型。
通过matlab编程对集群的聚集、避险和有领航者的觅食行为进行了仿真,得到结果与实际情况相符,说明模型具有较大的合理性。
2本文在研究信息传递机制时,引入了吸引排斥函数,并加以实际考虑,在不同情况下建立不同函数。
3.本文认为动物的运动是匀速的,没有考虑捕食者、领航者对其速度的影响,考虑的不够完善,对仿真结果造成了不利影响。
4.本文只对动物的行为进行了二维仿真,代表性不强。
5.本文所建的模型还需要许多拓展的地方,比如,问题一模型二的吸引排斥函数在现实中存在一定问题。
参考文献
【1】俞声伟,一种异构觅食Swarm的集群行为研究,浙江大学硕士学位论文,2007.
【2】程代展,陈翰馥,从群集到社会行为控制,科技导报(北京),2004.
【3】冯春时,丛爽,基于感知范围的鱼群优化算法,中国科学院研究生院学报,2010.
【4】赵建,鱼群行为的建模与仿真,太原科技大学硕士学位论文,2008.
附录
1、领航编程代码
functionboid5(n,eta)
range=0.8;
speed=0.1;
TIME=2000;
density=0.5;
RUNS=1;
fieldsize=sqrt(n/density);
pos=fieldsize*rand(n,2);
header=[55];
heading=2*pi*rand(n,1);
direct=0;
relposX=zeros(n);
relposY=zeros(n);
pdx=zeros(n,1);
pdy=zeros(n,1);
neighbours=zeros(n);
neighbours2=zeros(n,1);
RelHead=zeros(n,1);
relheading=zeros(n);
newHeading=zeros(n,1);
newPos=zeros(n,2);
meanHeading=zeros(TIME,1);
deviationMean=zeros(n,TIME);
forrun=1:
RUNS
fortime=1:
TIME
fori=1:
n
pdx(i,1)=abs(pos(i,1)-header(1,1));
pdy(i,1)=abs(pos(i,2)-header(1,2));
neighbours2(i,1)=sqrt(pdx(i,1)^2+pdy(i,1)^2);
if(neighbours2(i,1)<=range)
heading(i,1)=direct;
continue;
end
forj=1:
n
relposX(i,j)=abs(pos(i,1)-pos(j,1));
relposY(i,j)=abs(pos(i,2)-pos(j,2));
if(sqrt(relposX(i,j)^2+relposY(i,j)^2)<=range)
neighbours(i,j)=1;
end
end
end
mm=min(neighbours2);
header(1,1)=header(1,1)+speed*cos(direct);
header(1,2)=header(1,2)+speed*sin(direct);
whileheader(1,1)<0
header(1,1)=header(1,1)+fieldsize;
end
whileheader(1,1)>=fieldsize
header(1,1)=header(1,1)-fieldsize;
end
whileheader(1,2)<0
header(1,2)=header(1,2)+fieldsize;
end
whileheader(1,2)>=fieldsize
header(1,2)=header(1,2)-fieldsize;
end
fori=1:
n
forj=1:
n
if(neighbours(i,j)==1)
relheading(i,j)=heading(j,1)-heading(i,1);
end
end
end
RelHead=sum(relheading,2);
fori=1:
n
whileRelHead(i,1)<(-pi)
RelHead(i,1)=RelHead(i,1)+pi;
end
whileRelHead(i,1)>pi
RelHead(i,1)=RelHead(i,1)-pi;
end
end
noise=(rand(n,1)*eta)-eta/2;
newHeading(:
1)=heading(:
1)+RelHead(:
1)./sum(neighbours,2)+noise(:
1);
newPos(:
1)=pos(:
1)+cos(newHeading(:
1))*speed;
newPos(:
2)=pos(:
2)+sin(newHeading(:
1))*speed;
fork=1:
n
whilenewPos(k,1)<0
newPos(k,1)=newPos(k,1)+fieldsize;
end
whilenewPos(k,1)>=fieldsize
newPos(k,1)=newPos(k,1)-fieldsize;
end
whilenewPos(k,2)<0
newPos(k,2)=newPos(k,2)+fieldsize;
end
whilenewPos(k,2)>=fieldsize
newPos(k,2)=newPos(k,2)-fieldsize;
end
end
heading=newHeading;
pos=newPos;
meanHeading(time,1)=mean(heading,1);
deviationMean(time,1)=mean(abs(meanHeading(time,1)-heading(:
1)));
scatter(pos(:
1),pos(:
2),'p');
holdon;
scatter(header(1,1),header(1,2),'c');
holdoff;
axis([0fieldsize0fieldsize]);xlabel(time);
M(time)=getframe;
end
runDev(:
run)=deviationMean(:
1);
end
movie2avi(M,'boidtest.avi','quality',1000);
2、领航图
3、黑鳍鲨程序代码
functionboid4(n,eta)
range=0.8;
range1=2;
range2=3;
speed=0.1;
speed2=0.1;
TIME=2000;
density=0.5;
RUNS=1;
fieldsize=sqrt(n/density);
pos=fieldsize*rand(n,2);
danger=fieldsize*rand(1,2);
heading=2*pi*rand(n,1);
direct=2*pi*rand
(1);
relposX=zeros(n);
relposY=zeros(n);
pdx=zeros(n,1);
pdy=zeros(n,1);
neighbours=zeros(n);
neighbours2=zeros(n,1);
mm=0;
RelHead=zeros(n,1);
relheading=zeros(n);
newHeading=zeros(n,1);
newPos=zeros(n,2);
meanHeading=zeros(TIME,1);
deviationMean=zeros(n,TIME);
forrun=1:
RUNS
fortime=1:
TIME
fori=1:
n
pdx(i,1)=abs(pos(i,1)-danger(1,1));
pdy(i,1)=abs(pos(i,2)-danger(1,2));
neighbours2(i,1)=sqrt(pdx(i,1)^2+pdy(i,1)^2);
if(sqrt(pdx(i,1)^2+pdy(i,1)^2)<=range2)
ifpos(i,1)>danger(1,1)
heading(i,1)=atan((pos(i,2)-danger(1,2))/(pos(i,1)-danger(1,1)));
else
heading(i,1)=atan((pos(i,2)-danger(1,2))/(pos(i,1)-danger(1,1)))+pi;
end
continue;
end
forj=1:
n
relposX(i,j)=abs(pos(i,1)-pos(j,1));
relposY(i,j)=abs(pos(i,2)-pos(j,2));
if(sqrt(relposX(i,j)^2+relposY(i,j)^2)<=range)
neighbours(i,j)=1;
end
end
end
mm=min(neighbours2);
if(mm[row,column]=find(neighbours2==mm);
ifpos(row,1)>danger(1,1)
direct=atan((pos(row,2)-danger(1,2))/(pos(row,1)-danger(1,1)));
else
direct=atan((pos(row,2)-danger(1,2))/(pos(row,1)-danger(1,1)))+pi;
end
end
danger(1,1)=danger(1,1)+speed2*cos(direct);
danger(1,2)=danger(1,2)+speed2*sin(direct);
whiledanger(1,1)<0
danger(1,1)=danger(1,1)+fieldsize;
end
whiledanger(1,1)>=fieldsize
danger(1,1)=danger(1,1)-fieldsize;
end
whiledanger(1,2)<0
danger(1,2)=d