?????Ft?F1?F2?F3?F4
??当力F4相比其他几个力较大时,力Ft?的方向就趋向于力F4的方向。个体运
动具体表现为,个体趋向于信息丰富者运动。在群体运动过程中,表现为一些信息丰富者运动在群体的前方,“领导”着群体运动。
当一些单位获取到信息后,它们一方面向目标运动,另一方面向周围同伴传递信息,同伴接收到信息后,向信息丰富者和目标运动,同时发送信息,让更多的个体得知信息。通过信息的传递与趋向运动,进而形成了群体的运动。
五、模型评价
5.1模型优点
(1)从分析受力的角度,建立了矢量模型。定量的计算了鱼的运动状态,结果准确可靠。
(2)将鱼群中鱼当做有前后端的粒子,简化了问题,减少了计算量。
(3)引入了空间坐标,利用坐标进行运算,使得运算更加便捷,结果更加准确。 (3)分析鱼群运动较为细致全面,仿真结果较为准确。 5.2模型缺点
(1)方程数量较多,使仿真程序较复杂。
(2)查找的数据有限,结果可能会存在一定的误差。
参考文献
[1] 柳玲飞,周应祺.红鼻鱼群体结构的数学建模与仿真可视化,上海海洋大学海洋科学学院,2012.12.
[2] 程代展,胨翰馥.从群集到社会行为控制[J],科技导报, 2004.8. [3] 赵建,曾建潮.鱼群集群行为的建模与仿真[J],太原科技大学学报. [4] 肖人彬,陶振武.群集智能研究进展[J].管理科学学报, 2007.10
[5] 郑毅,吴斌.由鸟群和蚂蚁想到的—基于主体的仿真与群集智能的研究[J].微电脑世界,2001.1.
16
附录
程序
问题一: %仿真
clear;clc t=0.5;n=100;
x(1,:)=40*rand(1,n);y(1,:)=40*rand(1,n); draction(1,:)=(rand(1,n)-0.5)*2*pi; d=[];
for k=1:100 %%距离 for i=1:n
for j=1:n
d(i,j)=sqrt((x(k,i)-x(k,j))^2+(y(k,i)-y(k,j))^2); end end
for i=1:n
d(i,i)=inf; end
%%速度方向 for i=1:n
A=0;B=0.1; for j=1:n
if d(i,j)<0.3
A=A-draction(k,j)/d(i,j); B=B-1/d(i,j); if A~=0
draction(k+1,i)=(1-t)*draction(k,i)-t*A/B; else draction(k+1,i)=draction(k,i); end
elseif d(i,j)<5
A=A-draction(k,j)/d(i,j); B=B-1/d(i,j);
if A~=0
draction(k+1,i)=(1-t)*draction(k,i)+t*A/B; else draction(k+1,i)=draction(k,i); end end end
17
v(k+1,i)=0.5;%速度大小的更新 end
%%坐标的更新 for i=1:n
x(k+1,i)=x(k,i)+v(k+1,i)*cos(draction(k+1,i))*1; y(k+1,i)=y(k,i)+v(k+1,i)*sin(draction(k+1,i))*1; if x(k+1,i)>40
x(k+1,i)=x(k+1,i)-40; elseif x(k+1,i)<0
x(k+1,i)=x(k+1,i)+40; end
if y(k+1,i)>40
y(k+1,i)=y(k+1,i)-40; elseif y(k+1,i)<0
y(k+1,i)=y(k+1,i)+40; end end end
for i=1:k pause(0.2)
plot(x(i,:),y(i,:),'*') axis([0 40 0 40]) getframe; end
问题二: clear clc
t=0.5;n=300;
x=[];y=[];xs=[];
x(1,:)=40*rand(1,n);y(1,:)=40*rand(1,n); draction(1,:)=(rand(1,n)-0.5)*2*pi; d=[];
%初始化鲨鱼坐标
xs(1,:)=40*rand(1,1);ys(1,:)=40*rand(1,1); dractions(1,1)=(rand(1,1)-0.5)*2*pi; for k=1:200
dractions(k+1,1)=dractions(k,1)+(rand(1,1)-0.5); vs(k+1,1)=0.7;
xs(k+1,1)=xs(k,1)+vs(k+1,1)*cos(dractions(k+1,1))*1; ys(k+1,1)=ys(k,1)+vs(k+1,1)*sin(dractions(k+1,1))*1; if xs(k+1,1)>40
xs(k+1,1)=xs(k+1,1)-40;
18
elseif xs(k+1,1)<0
xs(k+1,1)=xs(k+1,1)+40; end
if ys(k+1,1)>40
ys(k+1,1)=ys(k+1,1)-40; elseif ys(k+1,1)<0
ys(k+1,1)=ys(k+1,1)+40; end
for i=1:n
ds(i)=sqrt((x(k,i)-xs(k,1))^2+(y(k,i)-ys(k,1))^2); for j=1:n
d(i,j)=sqrt((x(k,i)-x(k,j))^2+(y(k,i)-y(k,j))^2); end end
for i=1:n
d(i,i)=inf; end %%方向 for i=1:n
A=0;B=0.1; for j=1:n
if d(i,j)<0.2
A=A-draction(k,j)/3; B=B-1/d(i,j); if A~=0
draction(k+1,i)=(1-t)*draction(k,i)-t*A/B; else draction(k+1,i)=draction(k,i); end
elseif d(i,j)<5
A=A-draction(k,j)/d(i,j); B=B-1/d(i,j); if A~=0
draction(k+1,i)=(1-t)*draction(k,i)+t*A/B; else draction(k+1,i)=draction(k,i); end end end
if ds(i)<5
if x(k,i)>xs(k,1);
draction(k+1,i)=atan((y(k,i)-ys(k,1))./(x(k,i)-xs(k,1))); end
if x(k,i) draction(k+1,i)=atan((y(k,i)-ys(k,1))./(x(k,i)-xs(k,1)))+pi; 19 end end v(k+1,i)=0.5; end %%坐标的更新 for i=1:n x(k+1,i)=x(k,i)+v(k+1,i)*cos(draction(k+1,i))*1; y(k+1,i)=y(k,i)+v(k+1,i)*sin(draction(k+1,i))*1; if x(k+1,i)>40 x(k+1,i)=x(k+1,i)-40; elseif x(k+1,i)<0 x(k+1,i)=x(k+1,i)+40; end if y(k+1,i)>40 y(k+1,i)=y(k+1,i)-40; elseif y(k+1,i)<0 y(k+1,i)=y(k+1,i)+40; end end end for i=1:k pause(0.2) plot(x(i,:),y(i,:),'.',xs(i,:),ys(i,:),'ro') axis([0 40 0 40]) getframe; end 20