动物集群运动行为模型-19

更新时间:2024-05-14 23:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

鱼群行为的建模与仿真

摘 要

本文主要对人工鱼的集群行为,对天敌的有效躲避,和在集群中部分个体获得食物信息的情况下,整个鱼类集群的运动行为进行了研究。并利用MATLAB 工具进行了模拟仿真。

针对问题一,我们对鱼类的集群运动主要提出了聚集、和邻居速度匹配、避免碰撞三个原则。基于这三个原则建立了鱼类单个个体的自治模型,每个个体通过相互作用,使集群形成。本文对三个原则的具体实现进行了分析和假设。得到了计算机模拟仿真下的鱼类集群图形。

针对问题二,在模型一的基础上,我们增加了鱼群有效逃避天敌的规则。并利用MATLAB进行在天敌存在的情况下,鱼类集群行为的运动特征,并且得出了较好的仿真结果。

针对问题三,我们建立了鱼群觅食过程中的信息交流机制,得出了在部分人工鱼知悉食物信息的情况下,整个鱼群的运动状态的仿真结果。

关键词:集群运动 模拟仿真 个体自治

一、问题的提出

在动物界,大量集结成群进行移动或者觅食的例子并不少见,这种现象在食草动物、鸟、鱼和昆虫中都存在。这些动物群在运动过程中具有很明显的特征:群中的个体聚集性很强,运动方向、速度具有一致性。通过数学模型来模拟动物群的集群运动行为以及探索动物群中的信息传递机制一直是仿生学领域的一项重要内容。

根据相关资料,建立数学模型刻画动物集群运动、躲避威胁等行为,解决如下问题:

问题一:建立数学模型模拟动物的集群运动。

问题二:建立数学模型刻画鱼群躲避黑鳍礁鲨鱼的运动行为。 问题三:假定动物群中有一部分个体是信息丰富者(如掌握食物源位置信息,掌握迁徙路线信息),请建模分析它们对于群运动行为的影响,解释群运动方向决策如何达成。

二、基本假设

1、假设除视觉外其他感官在第一问中的影响忽略,如嗅觉,听觉; 2、假设每条鱼体型、感知能力相同; 3、假设鱼群在集群运动中没有死亡;

4、假设鱼的反应速度很快,改变速度所需时间非常短; 5、假设鱼遇到边界,以反射的方向反弹。

1

三、定义符号说明

符号 (x,y) 说明 二维体系中人工鱼的初始坐标 人工鱼的速度 二维体系中人工鱼速度方向与横轴的夹角 人工鱼聚集的中心坐标 在感知范围内邻居的个数 三维体系中人工鱼的初始坐标 三维体系中人工鱼游动的方向 人工鱼的能量状态 人工鱼的饥饿系数 v ? Q n (x,y,z) (?,?,?) E ?

四、问题的分析及模型的建立、求解

4.1 对于问题一 4.1.1 问题的分析

关于集群行为的研究,大致可以分为三个阶段:第一阶段是生物学家做了大量研究,发现了许多生物群体特有的动态行为;第二阶段是实验物理学家和计算机专家做了许多实验和仿真,用模拟仿生的方法证明这种生物群体现象可以由个体的简单行为规律获得;第三阶段就是利用数学对群集行为进行严格建模及分析。

动物的群体行为是相当于个体行为而言的。群体行为决定着个体行为的方向,个体行为是群体行为的体现。群体是由个体构成的,因此,群体行为离不开个体行为但群体行为并不是个体行为的简单相加。所以我们在研究鱼群集体行为的过程中,首先对群体中单个鱼的行为做出研究,然后再从内部影响和外部作用两方面入手,分析鱼群的群集行为。

对群集行为的研究主要有三种方法。第一种是欧拉法,在欧拉法中,一个群体的模型中的每个个体成员不作为单个实体进行研究,而是通过密度概念将整个群体作为一个连续集描述,欧拉法有一个明显的缺点就是忽略了个体的特性。第二种是拉格朗日法,拉格朗日法基本的描述就是每个个体各自的运动方程。第三类方法就是基于仿真的建模方法,基于仿真的群集模型无需建立像描述群体分布

2

的费克方程或描述各种吸引力/排斥力作用的牛顿运动方程,而是通过群体中的个体建立模拟实际生物个体动态行为的行为规则来研究群集行为。 4.1.2 基于个体自治的鱼类集群模型

我们所进行的鱼群集群行为的仿真模型由三部分构成: (1)环境。 (2)个体。 (3)行为规则。

环境是个体生存的空间,个体在环境中活动,利用环境中的资源来进行生存。个体的综合构成了研究的群体对象。个体的演化过程由其行为规则控制,行为规则则是决定了个体与个体之间、个体与环境之间相互作用的方式。任意时刻个体在环境中都有一个确定的位置并且由其所占据的方位来确定。

(一)环境的描述

首先对二维的鱼群世界进行仿真,环境应为一个二维的有限平面区域,使用反射型边界,当鱼游到边界以后按照镜子反射的方式反弹回来。我们可以把环境描述成为一个宽为width,长为length的二维世界,如下图

图1:个体及其所处环境

因为计算机仅仅能处理离散的信息,所以环境也是一个离散的世界。我们用计算机屏幕上一系列运动的点代替鱼个体,给它们设置坐标、速度等参数,就可以把现实中的鱼映射到虚拟环境中来。所有个体在该环境中游动。描述个体的位置和方向如下:

vx?v?cos?,vy?v?sin? (1)

其中?为速度方向和横轴方向的夹角。

x'?x?vxdt,y'?y?vydt (2)

??其中,(x,y)为鱼的初始坐标位置,(x',y')为一段时间后,鱼的坐标位置。

(二)个体描述

对个体鱼的建模是仿真的核心与关键。把每条鱼看成一个人能够自主决策的Agent,他们会根据自己的观察来感知周围的环境,并按照一定的规则决策。鱼

3

类个体之间的交互是由其视觉范围的大小决定的。个体的视觉范围是半径为r角度为300度的一个扇形。

图2:鱼类的视觉范围

主体之间的交互作用是局部的,只能发生在所定义的邻域内。个体具有以下属性:

(1)位置:个体位置由一组坐标(x,y)表示;

(2)感知范围:个体所能感知的范围。个体的感知范围取决于所定义邻域半径的大小,感知范围越大,表明该个体与环境和其他个体的作用越强。

(3)碰撞距离:个体之间的最短距离。当个体之间的距离小于该值时,个体将朝着远离的方向游动。

(4)初速度:仿真开始时,赋予每个个体的速度值,大小相等,方向相同。 (5)最大速度:鱼类在游动时所能达到的极限速度。

(6)加速度:个体受到外界干扰时,对个体行为的改变,表现为的速度的改变。

(7)反弹速度:个体到边界时反弹回来的速度。 (三)规则描述

人工鱼的基本行为主要包括:(1)避开障碍物。(2)游向目标。(3)追逐目标。(4)离开。(5)闲逛。(6)逃逸。(7)集群。

个体的行为规则主要表现为群体游动时的游动规则,游动规则主要包括: [1]聚集规则(尽量靠近邻居)

[2]速度匹配(尽量与邻居的运动方向一致)

[3]避免碰撞(尽量避免与群体内部和群体外部的障碍发生碰撞)

在这里我们定义邻居为如果两个个体之间的距离小于某个给定的值r,则它

们互为邻居。

每条人工鱼下一刻游动的方向都要受这三个因素和当前鱼的游动方向的影响,将这四个方向的平均作为人工鱼下一刻游动的方向如下图。

4

图3:人工鱼下一刻的游动方向

然而四个因素对鱼群的影响力的大小不同,根据它们对人工鱼下一刻运动方向影响的大小进行赋权,则人工鱼下一刻的运动方向(与二维区域横轴的夹角)

?t?1??1?1?? ?t??2?t2??3?t34 t (3) ?1??2??3??4?1 (4)

下面分别对四条游动准则分别进行描述:

(1)聚集性。

每个个体都有向邻居中心靠拢的特性,邻居中心为感知范围内所有个体所在位置的平均值。

Q??Q(i?n) (5)

in当前状态下的人工鱼相对中心位置的方向为

??arctany?y (6) x?x其中,Q?(x,y)为鱼群靠拢的中心,(x,y)为人工鱼当前所在位置。 (2)速度匹配

人工鱼要与邻域内的鱼保持游动时速度大小和方向一致,速度和方向为邻域内的均值,则

v??vni (7)

?2?

?arctannx?xiy?yi (8)

5

(xi,yi)为邻域内第i条鱼的位置,vi为邻域内第i条鱼的速度。

(3)避免碰撞

为了避免鱼群之间的碰撞。在人工鱼进入危险距离后,若即将与一条鱼碰撞,设为f1 ,那么人工鱼就以与f1运动的方向垂直的方向进行规避。若是即将与两条鱼碰撞,分别设为

f1,f2。则人工鱼就以与f1,f2运动的合成方向相垂直的方

向进行规避。当有n条时,同样以与n条鱼运动合成方向的垂直方向进行规避。如下图:

f1 f2 规避方向 人工鱼的运动 合成方向 图4:避免碰撞的规避图

在三维状态下,我们采取相同的准则,进行模拟仿真。环境应为一块有限的

(x,y,z)作为人工鱼的位置,用它游动方向和x轴,y轴和z三维区域,我们选定

轴的夹角聚集性的方向为人工鱼和鱼群中心的(?,?,?)作为人工鱼游动的方向。方向向量。速度匹配的方向为邻居所有鱼的夹角避免碰撞仍然(?,?,?)的均值。采用合成的方法。

4.1.3 模型的求解

通过MATLAB仿真模拟,得到在二维条件下,初始状态的鱼群,如下图:

6

10008006004002000-200-400-600-800-1000-1000-800-600-400-20002004006008001000

图5:鱼群初始状态

在模型一的规则下,鱼群的聚群行为

10008006004002000-200-400-600-800-1000-1000-800-600-400-20002004006008001000

图6:二维鱼群集群

应用二维的规则,同样可以得到在三维状态下的模拟成果

7

10005000-500-100010005000-500-1000-1000-50050001000

图7:鱼群三维初始状态

三维集群之后的状态,如下图

10005000-500-100010005000-500-1000-1000-50050001000

图8:三维鱼群的集群

4.2 对于问题二 4.2.1 问题的分析

8

在问题一的分析和模型的建立求解过程中,我们并没有考虑人工鱼群在食物链中受到天敌威胁的情况。鱼类在海洋中有效的躲避天敌也是鱼类运动中的一项规则。所以我们在第一问的基础之上建立鱼类的躲避规则,重新仿真鱼类集群运动。

4.2.2 模型的建立

在游动规则的基础上加入躲避天敌这项规则,进一步完善模型。人工鱼下一刻的运动状态和方向也要受到天敌的影响。

[4] 躲避天敌

人工鱼在遭遇黑鳍礁鲨鱼时,迅速以与相对黑鳍礁鲨鱼相反的方向逃离。

?3?arctanx?x1 (9) y?y1其中,(x,y)为人工鱼所在的位置,(x1,y1)为天敌所在的位置,?3为人工鱼遭遇天敌时逃离的方向与横轴的夹角。

在三维的状态中,人工鱼相对黑鳍礁鲨鱼的向量??(x?x1,y?y1,z?z1)。求出?和x轴,y轴,z轴的夹角??1,?1,?1?,从而确定人工鱼的逃离方向。

4.2.3 模型的求解

利用MATLAB 编程模拟仿真在二维状态下人工鱼在黑鳍礁鲨鱼进入的初始状态下的运动情况,如下图:

10008006004002000-200-400-600-800-1000-1000-800-600-400-20002004006008001000

图9:黑鳍礁鲨鱼进入的初始状态 (注:·表示人工鱼,o表示黑鳍礁鲨鱼)

9

黑鳍礁鲨鱼游动T时刻,人工鱼对它的躲避行为,如下图:

10008006004002000-200-400-600-800-1000-1000-800-600-400-20002004006008001000

图10:鱼群对黑鳍礁鲨鱼的躲避行为 (注:·表示人工鱼,o表示黑鳍礁鲨鱼)

利用MATLAB 编程模拟仿真在三维状态下人工鱼在黑鳍礁鲨鱼进入的初始状态下的运动情况,如下图:

x 10140.50-0.5-110.5x 10410-0.5-1-1-0.50.50x 104

图11:加入黑鳍礁鲨鱼的初始状态 (注:·表示人工鱼,o表示黑鳍礁鲨鱼)

10

黑鳍礁鲨鱼游动T时刻,人工鱼对它的躲避行为,如下图:

x 10140.50-0.5-110.5x 10410-0.5-1-1-0.50.50x 104

图12:鱼群对黑鳍礁鲨鱼的躲避行为 (注:·表示人工鱼,o表示黑鳍礁鲨鱼)

4.3 对于问题三 4.3.1 问题的分析

在问题一和问题二的解决过程中,我们并未考虑人工鱼的能量系统,都是在假设人工鱼不会在能量消耗下自然死亡的情况下进行模拟仿真的。

在问题三中,由于要解决对于寻求食物状态下,集群的决策形成。因此我们考虑引入人工鱼的能量消耗系统,综合人工鱼的能量状态来形成对于食物信息的合理决策。

4.3.2 模型的建立

首先定义个体在能量系统中的各个要素: (a)能量值 个体能量的多少由获得的资源量来衡量, 每个仿真周期内个体都要消耗一定的能量,能量值的变化由新陈代谢率决定。当个体的能量值小于或等于0时,该个体死亡。

(b)新陈代谢率

一个仿真周期个体所消耗的能量值。能量是维持个体在虚拟世界中生存的基本因素。

(c)最大能量:

个体所能拥有能量的最大值。当个体的能量值达到该值时,停止觅食。 (d)初始能量

仿真开始时,个体所拥有的能量值。

在获得食物信息的情况下,在集群中知道食物信息的个体行为发生改变,表

11

现为朝着食物的方向加速游动,

vt?v0?a(T?t) (10)

v0为初始速度,vt为T时刻的速度,t为获知食物信息的时刻,T为当前时刻。

影响人工鱼的运动状态的因素除了食物信息之外还有人工鱼自身的能量状态。我们用饥饿系数?来表示人工鱼当前的能量状态。

??E?e(T?t) (11)

Emax其中E表示人工鱼的初始状态能量,即t时刻的能量。T表示发现食物信息的时刻。e表示人工鱼单位时间消耗的能量。Emax表示人工鱼能量的满值状态。

表示人工鱼的吃饱状态0)?(0.8,1.?)表示人工鱼的正常状态8 ???(0.4,0. (12)

?0,0.4)表示人工鱼处于饥饿状态(?所以如果人工鱼处于饥饿状态,并且接收到食物信息,就会以尾追的状态去

寻求食物。

[5]尾追

鱼群中的单个人工鱼会向拥有食物信息的人工靠近,去寻找食物,则鱼群运动的方向是:

?1?arctanx?x0 (13) y?y0其中,(x,y)为人工鱼当前所在位置。(x0,y0)为知道食物信息的人工鱼的位置。

如果人工鱼没有处于饥饿状态,就会按照问题一和问题二中的规则进行游动。

在三维状态下,人工鱼相对知悉食物信息的鱼的向量坐标是

?'?(x?x0,y?y0,z?z0),求出?'相对于x轴,y轴,z轴的夹角??0,?0,?0?,从

而确定人工鱼的逃离方向。

4.3.3 模型的求解

利用MATLAB编程模拟仿真在获得食物位置时,人工鱼群运动的初始状,如下图 :

12

x 10140.50-0.5-110.5x 10410-0.5-1-1-0.50.50x 104

图13:知悉食物初始状态的运动情况

+表示食物的位置) (注:·点表示人工鱼,○

在T时刻,人工鱼相对食物的运动状态,如下图:

x 10140.50-0.5-110.5x 10410-0.5-1-1-0.50.50x 104

图14:T时刻运动情况

+表示食物的位置) (注:·点表示人工鱼,○

13

五、结果分析

本文通过建立鱼群行为仿真模型, 基于集群规则,对鱼群集群,躲避天敌以及觅食行为进行了二维图像仿真,通过模型的进一步分析,又将模型推广至三维,通过设置不同的仿真参数,利用计算机的仿真模拟鱼类个体之间的相互作用,最终达到集群形成的效果,较为真实的模拟了自然环境中鱼类的集群行为。

六、模型的评价与改进

模型的优点:

(1)基于仿真的群集模型可以为个体如何完成群集行为提供一个明确的视觉过程。

(2)我们在解决问题的过程中同时对二维和三维进行了仿真,并且得出了合理的结果。

模型的缺点:

(1)个体可能存在有很多不同的行为规则,都能够使得群体实现相同的集结行为,也就是说并不能从群体仿真实验中的涌现结果推论出确切的个体行为。 (2)实际智能个体的行为可能是非常复杂的,在仿真中也难以复制。个体的简单规则可以使得群体涌现与实际生物界中相似的群体行为,但缺乏理论分析的手段,而且也不能保证现实生物系统就是遵循这样的简单规则。 (3)我们对于鱼类活动的原则考虑比较少,行为准则略显粗糙。

参考文献:

[1]江道平 尹怡欣等,群体中Agent基于内部状态的行为选择,系统仿真学报,2009年01月;

[2]赵建 曾建朝,鱼群集群行为的建模与仿真,太远科技大学学报,2009年02月;

[3]班晓娟 宁淑荣等,人工鱼高级自组织行为研究,自动化学报,2008年10月;

[4]陈世明,群集行为的建模与控制方法综述,华东交通大学电气与电子工程学院,2006年09月

14

附 录

第一问程序:

%实现功能:模拟鱼群的集群,避敌,觅食行为,进行动画演示 clear;clc;

N=50; %鱼的数量50, Rn=1500; %领域半径

VV=30; %初始速度3.0, %a=3; %加速度0.3, Vsi=18; %反弹速度0.8, %鱼的活动范围

XRange=[-10000,10000]; YRange=[-10000,10000]; ZRange=[-10000,10000]; VRan=[-5*pi/6,5*pi/6];

%(1)随机产生鱼的位置PF(x,y)为位置集 for i=1:N

PZ(i,1)=XRange(1)+(XRange(2)-XRange(1))*rand; %X坐标 PZ(i,2)=YRange(1)+(YRange(2)-YRange(1))*rand; %Y坐标 PZ(i,3)=ZRange(1)+(ZRange(2)-ZRange(1))*rand; %Z坐标 PF(i,1)=PZ(i,1); PF(i,2)=PZ(i,2); PF(i,3)=PZ(i,3);

VZ(i,1)=2*pi*rand; %alpha X速度方向 VZ(i,2)=2*pi*rand; ?ta Y速度方向 VZ(i,3)=2*pi*rand; %gama Z速度方向 VF(i,1)=VZ(i,1); VF(i,2)=VZ(i,2); VF(i,3)=VZ(i,3);

VZ(i,4)=VV; %gama Z速度大小 VF(i,4)=VZ(i,4); end

lam=[0.1 0.3 0.3 0.3];

%(2)判断一条鱼和其他鱼之间的距离

%如果Rmin,Rmax,

%(2)搜索视野范围内的鱼,并统计个数 while 1 for i=1:N cn=0; alsum=0; besum=0; gasum=0;

15

for j=1:N

if(i~=j)&&sqrt((PZ(i,1)-PZ(j,1))^2+(PZ(i,2)-PZ(j,2))^2+(PZ(i,3)-PZ(j,3))^2)<=Rn cn=cn+1;

alsum=alsum+VZ(i,1); besum=besum+VZ(i,2); gasum=gasum+VZ(i,3); end end if cn~=0

alsum=alsum/cn; besum=besum/cn; gasum=gasum/cn; VF(i,1)=alsum; VF(i,2)=besum; VF(i,3)=gasum; end

PF(i,1)=PZ(i,1)+VF(i,4)*cos(VF(i,1)); PF(i,2)=PZ(i,2)+VF(i,4)*cos(VF(i,2)); PF(i,3)=PZ(i,3)+VF(i,4)*cos(VF(i,3)); %是否越界

if PF(i,1)XRange(2) VF(i,1)=VF(i,1)+pi; end

if PF(i,2)YRange(2) VF(i,2)=VF(i,2)+pi; end

if PF(i,3)ZRange(2) VF(i,3)=VF(i,3)+pi; end

PF(i,1)=PZ(i,1)+VF(i,4)*cos(VF(i,1)); PF(i,2)=PZ(i,2)+VF(i,4)*cos(VF(i,2)); PF(i,3)=PZ(i,3)+VF(i,4)*cos(VF(i,3)); end

TU1=plot3(PZ(:,1),PZ(:,2),PZ(:,3),'.'); %更新鱼的状态 for i=1:N

PZ(i,1)=PF(i,1); PZ(i,2)=PF(i,2); PZ(i,3)=PF(i,3); VZ(i,1)=VF(i,1); VZ(i,2)=VF(i,2); VZ(i,3)=VF(i,3); end

16

set(TU1,'xdata',PZ(:,1),'ydata',PZ(:,2),'zdata',PZ(:,3)); drawnow;

axis([XRange,YRange,ZRange]);grid on; pause(0.01); end

第二问程序:

%实现功能:模拟鱼群的集群,避敌,觅食行为,进行动画演示 clear;clc;

N=50; %鱼的数量, Rn=1500; %领域半径 VV=30; %初始速度, a=3; %加速度, Vsi=18; %反弹速度, %鱼的活动范围

XRange=[-10000,10000]; YRange=[-10000,10000]; ZRange=[-10000,10000]; VRan=[-5*pi/6,5*pi/6];

%(1)随机产生鱼的位置PF(x,y)为位置集 for i=1:N

PZ(i,1)=XRange(1)+(XRange(2)-XRange(1))*rand; %X坐标 PZ(i,2)=YRange(1)+(YRange(2)-YRange(1))*rand; %Y坐标 PZ(i,3)=ZRange(1)+(ZRange(2)-ZRange(1))*rand; %Z坐标 PF(i,1)=PZ(i,1); PF(i,2)=PZ(i,2); PF(i,3)=PZ(i,3);

VZ(i,1)=2*pi*rand; %alpha X速度方向 VZ(i,2)=2*pi*rand; ?ta Y速度方向 VZ(i,3)=2*pi*rand; %gama Z速度方向 VF(i,1)=VZ(i,1); VF(i,2)=VZ(i,2); VF(i,3)=VZ(i,3);

VZ(i,4)=VV; %gama Z速度大小 VF(i,4)=VZ(i,4); end

for i=1:4

%鲨鱼初状态;

SZ(1)=XRange(1)+(XRange(2)-XRange(1))*rand; %X坐标 SZ(2)=YRange(1)+(YRange(2)-YRange(1))*rand; %Y坐标 SZ(3)=ZRange(1)+(ZRange(2)-ZRange(1))*rand; %Z坐标 SF(1)=SZ(1); SF(2)=SZ(2);

17

SF(3)=SZ(3);

SVZ(1)=2*pi*rand; %alpha X速度方向 SVZ(2)=2*pi*rand; ?ta Y速度方向 SVZ(3)=2*pi*rand; %gama Z速度方向 SVF(1)=SVZ(1); SVF(2)=SVZ(2); SVF(3)=SVZ(3); SVZ(4)=VV; SVF(4)=SVZ(4); end

lam=[0.1 0.3 0.3 0.3];

%(2)判断一条鱼和其他鱼之间的距离

%如果Rmin,Rmax,

%(2)搜索视野范围内的鱼,并统计个数 while 1 for i=1:N cn=0; alsum=0; besum=0; gasum=0; for j=1:N

if(i~=j)&&sqrt((PZ(i,1)-PZ(j,1))^2+(PZ(i,2)-PZ(j,2))^2+(PZ(i,3)-PZ(j,3))^2)<=Rn cn=cn+1;

alsum=alsum+VZ(i,1); besum=besum+VZ(i,2); gasum=gasum+VZ(i,3); end end

if cn~=0&&sqrt((SZ(1)-PZ(i,1))^2+(SZ(2)-PZ(i,2))^2+(SZ(3)-PZ(i,3))^2)>=Rn alsum=alsum/cn; besum=besum/cn; gasum=gasum/cn; VF(i,1)=alsum; VF(i,2)=besum; VF(i,3)=gasum; end

ddd=sqrt((SZ(1)-PZ(i,1))^2+(SZ(2)-PZ(i,2))^2+(SZ(3)-PZ(i,3))^2); if ddd<=Rn

VF(i,1)=pi+acos((SZ(1)-PZ(i,1))/ddd); VF(i,2)=pi+acos((SZ(2)-PZ(i,2))/ddd);

18

VF(i,3)=pi+acos((SZ(3)-PZ(i,3))/ddd); VF(i,4)=VZ(i,4)+a; if VF(i,4)>Vmax VF(i,4)=Vmax; end end

PF(i,1)=PZ(i,1)+VF(i,4)*cos(VF(i,1)); PF(i,2)=PZ(i,2)+VF(i,4)*cos(VF(i,2)); PF(i,3)=PZ(i,3)+VF(i,4)*cos(VF(i,3)); %是否越界

if PF(i,1)XRange(2) VF(i,1)=VF(i,1)+pi; end

if PF(i,2)YRange(2) VF(i,2)=VF(i,2)+pi; end

if PF(i,3)ZRange(2) VF(i,3)=VF(i,3)+pi; end

PF(i,1)=PZ(i,1)+VF(i,4)*cos(VF(i,1)); PF(i,2)=PZ(i,2)+VF(i,4)*cos(VF(i,2)); PF(i,3)=PZ(i,3)+VF(i,4)*cos(VF(i,3)); end

%鲨鱼下一时刻状态

SF(1)=SZ(1)+SVF(4)*cos(SVF(1)); SF(2)=SZ(2)+SVF(4)*cos(SVF(2)); SF(3)=SZ(3)+SVF(4)*cos(SVF(3)); if SF(1)XRange(2) SVF(1)=SVF(1)+pi; end

if SF(2)YRange(2) SVF(2)=SVF(2)+pi; end

if SF(3)ZRange(2) SVF(3)=SVF(3)+pi; end

SF(1)=SZ(1)+SVF(4)*cos(SVF(1)); SF(2)=SZ(2)+SVF(4)*cos(SVF(2)); SF(3)=SZ(3)+SVF(4)*cos(SVF(3)); TU1=plot3(PZ(:,1),PZ(:,2),PZ(:,3),'.'); T2=plot3(SZ(1),SZ(2),SZ(3),'ro'); %更新鱼的状态 for i=1:N

PZ(i,1)=PF(i,1);

19

PZ(i,2)=PF(i,2); PZ(i,3)=PF(i,3); VZ(i,1)=VF(i,1); VZ(i,2)=VF(i,2); VZ(i,3)=VF(i,3); VZ(i,4)=VF(i,4); end

SZ(1)=SF(1);SZ(2)=SF(2);SZ(3)=SF(3);

SVZ(1)=SVF(1);SVZ(2)=SVF(2);SVZ(3)=SVF(3); set(T2,'xdata',SZ(1),'ydata',SZ(2),'zdata',SZ(3));

set(TU1,'xdata',PZ(:,1),'ydata',PZ(:,2),'zdata',PZ(:,3)); drawnow;

axis([XRange,YRange,ZRange]);grid on; pause(0.01); end

第三问程序:

%实现功能:模拟鱼群的集群,避敌,觅食行为,进行动画演示 clear;clc;

N=100; %鱼的数量, Rn=30000; %领域半径 VV=1100; %初始速度, a=10; %加速度, Vsi=100; %反弹速度, Vmax=VV+60; %鱼的活动范围

XRange=[-10000,10000]; YRange=[-10000,10000]; ZRange=[-10000,10000]; VRan=[-5*pi/6,5*pi/6];

%(1)随机产生鱼的位置PF(x,y)为位置集 for i=1:N

PZ(i,1)=XRange(1)+(XRange(2)-XRange(1))*rand; %X坐标 PZ(i,2)=YRange(1)+(YRange(2)-YRange(1))*rand; %Y坐标 PZ(i,3)=ZRange(1)+(ZRange(2)-ZRange(1))*rand; %Z坐标 PF(i,1)=PZ(i,1); PF(i,2)=PZ(i,2); PF(i,3)=PZ(i,3);

VZ(i,1)=2*pi*rand; %alpha X速度方向 VZ(i,2)=2*pi*rand; ?ta Y速度方向 VZ(i,3)=2*pi*rand; %gama Z速度方向 VF(i,1)=VZ(i,1); VF(i,2)=VZ(i,2); VF(i,3)=VZ(i,3);

20

VZ(i,4)=VV; %gama Z速度大小 VF(i,4)=VZ(i,4); end

for i=1:4

%食物位置;

SZ(1)=XRange(1)+(XRange(2)-XRange(1))*0.82; %X坐标 SZ(2)=YRange(1)+(YRange(2)-YRange(1))*0.455; %Y坐标 SZ(3)=ZRange(1)+(ZRange(2)-ZRange(1))*0.5421; %Z坐标 end

lam=[0.1 0.3 0.3 0.3];

%(2)判断一条鱼和其他鱼之间的距离

%如果Rmin,Rmax,

%(2)搜索视野范围内的鱼,并统计个数 while 1

T2=plot3(SZ(1),SZ(2),SZ(3),'r+');hold on; T3=plot3(SZ(1),SZ(2),SZ(3),'ro');hold on; for i=1:N cn=0; alsum=0; besum=0; gasum=0; for j=1:N

if(i~=j)&&sqrt((PZ(i,1)-PZ(j,1))^2+(PZ(i,2)-PZ(j,2))^2+(PZ(i,3)-PZ(j,3))^2)<=Rn cn=cn+1;

alsum=alsum+VZ(i,1); besum=besum+VZ(i,2); gasum=gasum+VZ(i,3); end end if cn~=0

alsum=alsum/cn; besum=besum/cn; gasum=gasum/cn; VF(i,1)=alsum; VF(i,2)=besum; VF(i,3)=gasum; end

ddd=sqrt((SZ(1)-PZ(i,1))^2+(SZ(2)-PZ(i,2))^2+(SZ(3)-PZ(i,3))^2); if ddd<=Rn&&ddd>Rmin

VF(i,1)=acos((SZ(1)-PZ(i,1))/ddd);

21

VF(i,2)=acos((SZ(2)-PZ(i,2))/ddd); VF(i,3)=acos((SZ(3)-PZ(i,3))/ddd); VF(i,4)=VZ(i,4)+a; if VF(i,4)>Vmax VF(i,4)=Vmax; end end

PF(i,1)=PZ(i,1)+VF(i,4)*cos(VF(i,1)); PF(i,2)=PZ(i,2)+VF(i,4)*cos(VF(i,2)); PF(i,3)=PZ(i,3)+VF(i,4)*cos(VF(i,3)); %是否越界

if PF(i,1)XRange(2) VF(i,1)=VF(i,1)+pi; end

if PF(i,2)YRange(2) VF(i,2)=VF(i,2)+pi; end

if PF(i,3)ZRange(2) VF(i,3)=VF(i,3)+pi; end

PF(i,1)=PZ(i,1)+VF(i,4)*cos(VF(i,1)); PF(i,2)=PZ(i,2)+VF(i,4)*cos(VF(i,2)); PF(i,3)=PZ(i,3)+VF(i,4)*cos(VF(i,3)); end

TU1=plot3(PZ(:,1),PZ(:,2),PZ(:,3),'.');hold off; %更新鱼的状态 for i=1:N

PZ(i,1)=PF(i,1); PZ(i,2)=PF(i,2); PZ(i,3)=PF(i,3); VZ(i,1)=VF(i,1); VZ(i,2)=VF(i,2); VZ(i,3)=VF(i,3); VZ(i,4)=VF(i,4); end

set(TU1,'xdata',PZ(:,1),'ydata',PZ(:,2),'zdata',PZ(:,3)); drawnow;

axis([XRange,YRange,ZRange]);grid on; pause(0.8); end

22

本文来源:https://www.bwwdw.com/article/igz7.html

Top