动物集群运动行为模型-10【优秀】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动物集群运动行为模型-10【优秀】(文档可以直接使用,也可根据实际需要修订后使用,可编辑推荐下载)
鱼类集群运动行为的研究与模拟
摘要
在动物界中,动物的集群运动现象十分普遍。
许多个体行为简单的动物,集群后却能表现出复杂的群体行为。
对动物群体的集群运动进行研究和模拟对我们进一步了解动物界中的生物运动情况产生进一步的了解。
在本文中,我们基于鱼群算法着重对鱼群的集群运动进行分析。
在问题一中,我们建立了鱼类集群运动的初级模型,考虑鱼类聚群运动和随机运动等最一般的情况,利用分隔规则,内聚规则以及步长和方向的随机性进行限制。
运用MATLAB进行分析模拟,得出不同迭代次数下的鱼群分布及鱼群运动路线图。
在问题二中,引入了鱼群的逃逸行为,分别对捕食者和被捕食者设定捕食规则和逃逸规则,通过MATLAB仿真对模型进行进一步的模拟,得出了符合现实中捕食行为和逃逸行为的结果。
在问题三中,我们假设一部分鱼是信息源丰富者,定义适应度函数,考虑鱼群的追尾行为,按照所定义的最优运动方向算法运用MATLAB进行模拟仿真,更好地展现了信息丰富的鱼群对鱼群整体的集群运动所造成的影响。
本模型在聚群行为,逃逸行为,觅食行为,追尾行为等方面都给出了很好的模拟,与实际情况较为相符。
并且我们通过动画演示非常直观地展现了鱼群聚群行为,逃逸行为,觅食行为,追尾行为。
对进一步了解和研究鱼类集群运动行为具有很重要的意义。
关键字:集群运动,鱼群算法,计算机仿真。
目录
一、问题重述 (4)
1.1问题背景 (4)
1.2目标任务 (4)
二、问题分析 (4)
三、基本假设 (4)
四、符号说明 (5)
五、模型建立与求解 (7)
5.1问题一:鱼类集群运动的初级模型 (7)
问题分析及模型准备 (7)
模型的假设 (7)
模型的建立与求解 (7)
5.2问题二:引入逃逸行为的鱼类集群运动模型 (10)
模型假设 (10)
模型的建立与求解 (10)
5.3问题三:具有信息丰富者条件下的集群运动 (12)
模型假设 (12)
模型的建立与求解 (12)
六、模型的评价 (14)
6.1模型的优点 (14)
6.2模型的缺点 (14)
参考文献 (14)
附录 (14)
一、问题重述
1.1问题背景
在生态系统中,动物个体的行为相对简单,集群后却能表现出复杂的群体行为。
例如鱼群,鸟群,蝗虫等动物成群结队的进行运动或觅食的现象十分常见。
这些动物群在运动过程中具有很明显的特征:群中的个体聚集性很强,运动方向、速度具有一致性。
通过数学模型来模拟动物群的集群运动行为以及探索动物群中的信息传递机制一直是仿生学领域的一项重要内容。
1.2目标任务
1.建立数学模型模拟动物的集群运动。
2.建立数学模型刻画鱼群躲避黑鳍礁鲨鱼的运动行为。
3.假定动物群中有一部分个体是信息丰富者(如掌握食物源位置信息,掌握迁
徙路线信息),请建模分析它们对于群运动行为的影响,解释群运动方向决策如何达成。
二、问题分析
问题一要求建立数学模型模拟动物的集群运动,为了简化模型,我们忽略鱼群的觅食行为,追尾行为,逃逸行为,避障行为等,仅考虑鱼群的聚群行为和随机行为并且在二维空间内进行讨论。
问题二中,在对最一般情况运动的分析的基础上,我们可以引入鱼群逃逸行为对问题进一步分析,对海洋生态环境中的捕食与被捕食情况进行研究与模拟。
问题三中,我们在一部分小鱼的信息丰富者(即了解食物源的位置)的情况下,研究其对整个群体觅食行为的影响,以此模拟更逼真的海洋生物环境。
三、基本假设
1)鱼群生活在一个有限的空间内;
2)每个鱼的个体可以视作一个质点;
3)不考虑由于觅食行为,追尾行为和逃逸行为造成鱼群速度的剧烈变化;
4)捕食者仅有一个;
5)只考虑捕食者与被捕食者两个种群,不考虑与其它种群间的相互影响;
6)食物浓度和分布情况不随时间而变化;
7)在任意给定的时刻,鱼类的行为系统中受到刺激被驱动的行动有一个或多个,
但所选出的目标行为只有一个;
8)鱼类可视范围设为一个以鱼个体为中心360度的圆;
9)只在二维的情况下对鱼类集群运动进行分析。
四、符号说明
五、模型建立与求解
5.1问题一:鱼类集群运动的初级模型
5.1.1问题分析及模型准备
该题要求建立数学模型模拟动物的集群运动,在本文中我们以鱼类的集群运动为例进行分析。
鱼类的集群运动包括:聚群行为、觅食行为、追尾行为、随机行为、避障行为、逃逸行为等。
为了简化模型,我们先对集群运动的简单形式进行分析,即仅考虑鱼类的聚群行为和随机行为,在此基础上对鱼类基础性集群运动进行分析,建立鱼类集群运动的初级模型。
聚群行为是鱼类进化过程中的一种生存方式,由于鱼在行进过程中为了保证自身的生存和躲避危害会自然地聚集成群。
鱼聚群时所遵守的规则有以下三条:
1)分隔规则,尽量避免与临近伙伴过于拥挤;
2)对准规则,尽量与临近伙伴的平均方向一致;
3)内聚规则,尽量朝着临近伙伴的中心移动。
在该模型中,我们利用分隔规则和内聚规则对鱼类的聚群行为进行限制。
随机行为是指鱼在水中悠闲的自由游动,基本上是随机的,是一种为了更大范围的寻觅食物或同伴的行为。
随机性包括步长的随机性和方向的随机性,在模型中,步长的随机性存在于任何一个过程,而方向的随机性仅存在于随机行为中。
5.1.2模型的假设
1)不考虑鱼群觅食行为和追尾行为,假设食物浓度在各处均匀分布;
2)不考虑鱼群的避障行为和逃逸行为,假设鱼群在一个空旷无威胁的空间
内活动;
3)假设鱼群生活在一个20×20单位的二维区域内。
5.1.3模型的建立与求解
首先进行分隔规则的设定。
我们通过拥挤度因子来限制鱼群聚集的规模,在较优状态的邻域内希望聚集较多的鱼,而次优状态的邻域内希望聚集较少的鱼或不聚集鱼,并且以控制邻域内聚集的最大数目来做到尽量避免与临近伙伴过于拥挤。
其选取规则如下:
δ=
1
α∙n max
(0<α<1)
式中,δ:拥挤度因子
α:极值接近水平
n max:期望在该邻域内聚集鱼的最大数目
因此,衡量鱼群邻域内是否过于拥挤的标准为:若Y c
Y i n f
<δ,则认为鱼类处于过于拥挤的状态。
式中Y c为鱼所感知的某状态的值,Y i为鱼自身状态的值,n f为可视范围内伙伴的数目。
设小鱼当前状态为X i,设其可见域内的伙伴数目为n f,形成集合J i,且
J i={X j|||X j−X i||≤Visual}
式中,X i:小鱼的当前状态向量;
X j:周围第j条小鱼的当前状态向量;
Visual:小鱼的视野半径。
若J i≠∅(∅为空集),表明其可见域内存在其它伙伴,即n f≥1,则按式(5-1)探索伙伴的中心位置X c。
x ck=(∑x jk
n f
j=1
)
n f
(5−1)
式中,x ck:中心位置状态向量X c的第k个元素;
x jk:第j(j=1,2,⋯,n f)个伙伴X j的第k个元素。
由于食物浓度均匀,根据分隔规则的限制,若满足限制条件:Y c
Y i n f =1
n f
≥δ,,
则执行聚群行为(5-2),否则执行随机行为(5-3)。
x inextk=x ik+Random(step)(x ck−x ik)
‖X c−X i‖
(5−2)
x inextk=x ik+Random(step)∙e⃑ (5−3)
式中,k=1,2,⋯,K;
x ck:伙伴中间位置状态向量X c的第k个元素;
x ik:小鱼当前状态向量X i的第k个元素;
x inextk:下一步状态向量X inextk的第k个元素;
Random(step):[0,step]之间的随机数;
e⃑:单位随机向量。
若J i=∅,表明可见域内不存在其它伙伴,则执行随机行为(5-3)。
将所得状态变量设定为下一次循环的初始状态变量,进行多次迭代以模拟鱼群的聚群行为和随机行为。
在此我们设定:
1)小鱼个数N为30只;
2)小鱼集群运动的步长step设为在0到0.3范围内变化的随机变量,最大
步长为0.3;
3)小鱼可视范围设为一个以小鱼个体为中心半径为V=5的圆;
4)活动区域为一个20×20的二维区域。
运用MATLAB对小鱼集群运动的初级模型进行模拟实现,我们得出了多次迭代后的鱼群变化图(图1)以及迭代50次时鱼群位置的变化过程图(图2)。
图1 不同迭代次数下的鱼群变化图
图2 迭代50次时鱼群位置变化过程图
由此可见,随着迭代次数的增加,收敛现象越来越明显,展现出了鱼群随着时间变化而不断聚群的过程,但经过50次迭代后,并非所有的点都聚集到同一区域,我们分析这可能是因为拥挤度的引入、小鱼视野设定较小以及迭代次数较少等因素造成的结果,与实际情况较为相符。
可见该初级模型很好地展现了鱼类集群运动的最一般情况。
5.2问题二:引入逃逸行为的鱼类集群运动模型
在建立鱼类集群运动的初级模型对鱼类集群运动的一般形态进行分析后,我们在模型二中,将鱼群的逃逸行为引入模型进行深入分析。
逃逸行为是指鱼类个体或群体活动时遇到天敌,由本能驱动产生的逃避捕食者的行为。
本模型中我们研究鱼群群体遇到捕食者(黑鳍礁鲨鱼)后的反应情况。
5.2.1模型假设
1)小鱼正在进行群体性活动;
2)鲨鱼的捕食无记忆性,时刻捕食与其相距最近的小鱼。
5.2.2模型的建立与求解
首先对捕食规则和逃逸规则进行设定。
捕食规则:
鲨鱼在海洋活动过程中的任一时刻,都对其可视范围内的情况进行判断。
当在其可视范围内存在小鱼时,鲨鱼发起攻击。
攻击阶段在每一时刻(每次迭代)都对可视范围内的小鱼相对其的距离进行判断,选取与其距离最小的小鱼方向进行攻击(5-4);当在其可视范围内不存在小鱼时,鲨鱼进行随机运动(5-5)。
x snextk=x sk+Random(step)(x pk−x sk)
‖X p−X i‖
(5−4)
x snextk=x sk+Random(step)∙e⃑ (5−5)
式中,X snext:鲨鱼下一时刻的状态变量;
x snextk:鲨鱼下一时刻状态变量X snext的第k个元素;
x sk:鲨鱼当前状态向量X s的第k个元素;
X p:第p次迭代离鲨鱼最近的小鱼的状态向量;
x pk:第p次迭代离鲨鱼最近的小鱼的状态向量X p中的第k个元素。
逃逸规则:
小鱼在海洋活动过程的任一时刻,都对其可视范围内的情况进行判断。
当在其可视范围内存在鲨鱼时,小鱼开始逃逸。
逃逸阶段每一时刻(每次迭代)都对可视范围内的鲨鱼与其的相对方向进行判断,并沿着与鲨鱼连线方向的反方向实施逃逸行为(5-6);当在其可视范围内不存在鲨鱼时,小鱼继续进行聚群运动。
x inextk=x ik−Random(step)(x sk−x ik)
‖X s−X i‖
(5−6)
式中,X s:表示鲨鱼当前状态向量;
x sk:表示鲨鱼当前状态向量X s的第k个元素;
在此我们设定:
1)鲨鱼的可视范围为以鲨鱼为中心,半径为kV=6的圆;
2)小鱼的可视范围为以小鱼为中心,半径为V=5的圆;
3)鲨鱼运动的步长kstep和小鱼运动的步长step均为在0至0.5之间的随机
变量;
运用MATLAB进行分析,得出不同迭代次数下引入逃逸行为的鱼类集群运动模拟图(图3)及迭代100次时鱼群位置变化过程图(图4)
图3 引入逃逸行为条件下不同迭代次数时的鱼类集群运动变化图
图4 100次迭代过程中鱼群与鲨鱼行动路线图
从图4可以看出,随着捕食者的逐渐靠近,鱼群开始逐渐向四周扩散,对鲨鱼成包围状,但在捕食者距离足够远时,鱼群表现出聚集的趋势;而捕食者则是按着最邻近捕食的策略来追逐猎物。
这些现象与现实是高度相似的,说明我们的模型能较好地反映捕食者—被捕食者之间的运动关系。
5.3问题三:具有信息丰富者条件下的集群运动
在鱼类集群运动初级模型的基础上,我们假定有若干条小鱼为信息丰富者,即它们知道食物源的位置信息,可以直接进行觅食行为,并分析在这种条件下,对整个鱼群运动行为的影响。
5.3.1模型假设
1)食物源的位置在所设区域内有且只有一个;
2)有m条小鱼是信息丰富者;
3)小鱼之间存在特定的信息交流
5.3.2模型的建立与求解
按照如下最优运动方向算法对问题进行处理
定义食物源位置坐标向量F i。
定义信息源丰富者(知道食物源位置信息的小鱼)的位置坐标向量K i(i= 1,2,⋯,m)。
定义非信息源丰富者(不知道食物源位置信息的小鱼)的位置坐标向量uK i(i=1,2,⋯,N−m)。
定义适应度函数:
L i=
1 D i+1
式中,D i为食物源与小鱼的距离对于信息源丰富者,
K inext=K i+Random(step)(f sk−k ik)
‖F i−K i‖
式中,K inext:信息源丰富者下一时刻状态向量;
f sk:食物源坐标向量F i中的第k个元素;
k ik:信息源丰富者的位置坐标向量K i中的第k个元素。
对于非信息源丰富者,首先对可视范围内的小鱼进行搜索,评价视野内所有小鱼及自己的适应度,记录适应度最大的小鱼坐标向量X maxLi,向适应度最大的小鱼运动。
uK inext=uK i+Random(step)(x maxLik−uk ik)
‖X maxLi−uK i‖
式中:uK inext:非信息源丰富者下一时刻状态向量;
x maxLik: 适应度最大的小鱼坐标向量X maxLi中的第k个元素;
uk ik:非信息源丰富者的位置坐标向量uK i中的第k个元素。
如果最大适应度为小鱼本身,则进行随机运动(5-3)。
通过以上算法,运用MATLAB进行多次迭代,得出在具有信息源丰富者的条件下,鱼类集群运动的模拟图(图5)以及100次迭代过程中的鱼群运动图(图6)。
图5 具有信息源丰富者的条件下不同迭代次数对应鱼群模拟图
图6 具有信息源丰富者的条件下100次迭代下鱼群运动过程图由图6可知在鱼群中信息丰富者处在鱼群的最前方,充当着引路人的身份,而其他的鱼则通过追尾行为最终到达食物源,这与现实中鱼群寻找食物的过程很相似,说明模型具有较高的合理性。
另一方面,信息丰富者和其他鱼在行进中有过一段分离的过程,这可能是因为视域V和步长step选取较大所致。
六、模型的评价
6.1模型的优点
1.集群运动分析全面,渐近性较强;
2.模型简单易懂,且与实际情况较相符;
3.不固定鲨鱼的捕食目标,最近捕食原则符合实际情况;
4.模型中鱼群每一个体间均有对外界环境的判断,并能通过判断选择相应的行
为,具有极强的现实性。
6.2模型的缺点
1.捕食者被设定为一个,应继续考虑多个捕食的情况;
2.在二维空间内分析鱼类集群运动,应适当推广至三维空间;
3.没有考虑鱼群避障行为;
4.在觅食行为建模中没有进一步考虑多食物源的情况。
参考文献
[1] 赵光俊,鱼群动画的行为建模与行为规划的研究,上海大学,硕士学位论文:P2-P79,2007年。
[2] 刘耀年,李迎红,张冰冰,李春亮,基于人工鱼群算法的最优潮流计算,《电工电能新技术》,2006年第4期:P2-P3,2006年。
[3] 李会,张天丽,陶佰睿,王新红,动态分组方案的自适应人工鱼群算法,《计算机工程与应用》,2021-06-12:P2-P4,2021年。
[4] 李晓磊,邵之江,钱积新,一种基于动物自治体的寻优模式:鱼群算法,系统工程理论与实践,2002,22(11):P32-P38,2002。
[5] Li Xiao-lei. A new intelligent optimization method-Artificial Fish School Algorithm[D]. Zhejiang University, 1003.01.
[6] 涂晓媛,人工鱼——计算机动画的人工生命方法,北京:清华大学出版社,2001。
附录
以下为问题求解的部分源程序
%%源程序
%随机行为
function xx=AF_rand(x,st)
M=size(x,1);
a=2*(rand(M,1)-[0.5;0.5;0.5]);
b=sqrt(a(1)^2+a(2)^2+a(3)^2);
xx=x+st*a./b;
%聚群行为
function xx=AF_swarm1(x,st,Xnb,LB,UB) nf=size(Xnb,2);
xc=x;
if nf>0
for i=1:nf
xc=xc+Xnb(:,i);
end
xc=xc./nf;
end
xx=x+rand*st*d(x,xc);
if xx(1)<LB(1)
xx(1)=LB(1);
end
if xx(1)>UB(1)
xx(1)=UB(1);
end
if xx(2)<LB(2)
xx(2)=LB(2);
end
if xx(2)>UB(2)
xx(2)=UB(2);
end
end
%觅食行为
function xx=AF_prey(x,V,L,LB,UB,st)
M=length(x);
xx=zeros(M,1);
counter=0;
Xnb=zeros(M,0);
dx=ones(1,0);
while 1
a=2*(rand(2,1)-[0.5;0.5]);
b=sqrt(a(1)^2+a(2)^2);
xnext=x+V*a./b;
counter=counter+1;
Fx=FIT(x);
Fxx=FIT(xnext);
if Fxx<Fx
return
end
if Fxx>=Fx
xx=x+rand*st*d(x,xx);
break;
end
end
%追尾行为
function xx=AF_follow(x,V,st,Xnb,Delta,LB,UB) N=size(Xnb,2);
maxX=x;
maxY=FIT(x);
for n=1:N
xn=Xnb(:,n);
if FIT(xn)>FIT(x)
maxX=xn;
maxY=FIT(xn);
end
end
if maxY>Delta*FIT(x)
xx=x+rand*st*d(x,maxX);
if xx(1)<LB(1)
xx(1)=LB(1);
end
if xx(1)>UB(1)
xx(1)=UB(1);
end
if xx(2)<LB(2)
xx(2)=LB(2);
end
if xx(2)>UB(2)
xx(2)=UB(2);
end
else xx=AF_swarm1(x,st,Xnb,LB,UB);
end
%第s条鱼感知可视域内同类的位置
function Xnb=AF_feel(s,X,V)
M=size(X,1);N=size(X,2);
sx=X(:,s);
Xnb=zeros(M,0);
for n=1:N
if n~=s
xn=X(:,n);
dx=xn-sx;
m=0;
for i=1:M
m=m+dx(i)^2;
end
m=sqrt(m);
if m<V
Xnb=[Xnb,xn];
end
end
end
%捕食者的捕食行为
function yy=KL_prey(kl,X,kV,kst,LB,UB) M=size(X,1);N=size(X,2);
Xnb=zeros(M,0);
dx=ones(1,0);
for n=1:N
xn=X(:,n);
cd=dist(kl,xn);
if cd<kV&&cd>0
Xnb=[Xnb,xn];
dx=[dx,cd];
end
end
if size(Xnb)>0
mindx=min(dx);
pos=find(dx==mindx);
bestx=Xnb(:,pos(1));
yy=kl+rand*kst*d(kl,bestx);
else
yy=AF_rand(kl,kst);
end
if yy(1)<LB(1)
yy(1)=LB(1);
end
if yy(1)>UB(1)
yy(1)=UB(1);
end
if yy(2)<LB(2)
yy(2)=LB(2);
end
if yy(2)>UB(2)
yy(2)=UB(2);
end
%被捕食者的逃逸行为
function xx=AF_escape(s,x,X,st,V,Killer,LB,UB) Xnb=AF_feel(s,X,V);
if dist(Killer,x)<V&&dist(Killer,x)>0
xx=x+rand*st*d(Killer,x);
elseif size(Xnb,2)>0
xx=AF_swarm1(x,st,Xnb,LB,UB); else xx=AF_rand(x,st);
end
if xx(1)<LB(1)
xx(1)=LB(1);
end
if xx(1)>UB(1)
xx(1)=UB(1);
end
if xx(2)<LB(2)
xx(2)=LB(2);
end
if xx(2)>UB(2)
xx(2)=UB(2);
end
%求两点间的单位方向向量
function N=d(x,xx)
c=size(x,1);
dx=xx-x;
m=0;
for i=1:c
m=m+dx(i)^2;
end
m=sqrt(m);
N=dx./m;
%两点间距离
function d=dist(A,B)
M=size(A,1);
c=0;
dx=B-A;
for i=1:M
c=c+dx(i)^2;
end
d=sqrt(c);
%获取第n条鱼K代历史位置
function A=getKloc(n,K,ALLX)
A=zeros(3,K);
for i=1:K
B=ALLX{i};
A(:,i)=B(:,n);
end
%%问题一源程序
function ALLX=FSOUCP_test(K,N,V,Delta,L,LB,UB,st) M=length(LB);
X=zeros(M,N);
for i=1:N
X(:,i)=20*(rand(3,1)-[0.5;0.5;0.5]);
end
ALLX=cell(K,1);
ALLY=zeros(K,N);
BESTX=cell(K,1);
BESTY=zeros(K,1);
k=1;¯
while k<=K
NewX=zeros(M,N);
NewY=zeros(1,N);
for n=1:N
x=X(:,n);
Xnb=AF_feel(n,X,V);
NN=size(Xnb,2);
if NN>0
xx=AF_swarm1(x,st,Xnb,LB,UB);
else
xx=AF_rand(x,st);
end
NewX(:,n)=xx;
end
X=NewX;
ALLX{k}=X;
k=k+1;
end
%作图
figure
for i=1:6
if i==1
A=ALLX{1};
elseif i==6
A=ALLX{K};
else
A=ALLX{round(0.2*(i-1)*K)};
end
aaa=A(1,:);
bbb=A(2,:);
ccc=A(3,:);
subplot(3,2,i);
plot3(aaa,bbb,ccc,'*');
axis([LB(1),UB(1),LB(2),UB(2),LB(3),UB(3)]);
end
figure
for n=1:N
AA=getKloc(n,K,ALLX);
x=AA(1,:);
y=AA(2,:);
z=AA(3,:);
hold on
plot3(x,y,z,'-*');
axis([LB(1),UB(1),LB(2),UB(2),LB(3),UB(3)]);
end
%%问题二源程序
function [ALLX,ALLK]=FSOUCP_test2(K,N,V,Delta,L,LB,UB,st,kV,kst) M=length(LB);
X=zeros(M,N);
for i=1:N
X(:,i)=5*(rand(3,1)-[0.5;0.5;0.5]);
end
KL=[6;0;0];
ALLX=cell(K,1);
ALLK=zeros(M,K);
k=1;
while k<=K
NewX=zeros(M,N);
kl=KL;
yy=KL_prey(kl,X,kV,kst,LB,UB);
KL=yy;
ALLK(:,k)=KL;
for s=1:N
x=X(:,s);
xx=AF_escape(s,x,X,st,V,kl,LB,UB);
NewX(:,s)=xx;
end
X=NewX;
ALLX{k}=X;
k=k+1;
end
%作图
figure
for i=1:6
if i==1
A=ALLX{1};
B=ALLK(:,1);
elseif i==6
A=ALLX{K};
B=ALLK(:,K);
else
A=ALLX{round(0.2*(i-1)*K)};
B=ALLK(:,round(0.2*(i-1)*K));
end
aaa=A(1,:);
bbb=A(2,:);
aab=A(3,:);
ccc=B(1,:);
ddd=B(2,:);
ccd=B(3,:);
subplot(3,2,i);
hold on;
plot3(aaa,bbb,aab,'*');
plot3(ccc,ddd,ccd,'r*');
axis([LB(1),UB(1),LB(2),UB(2),LB(3),UB(3)]); end
figure
for n=1:N
AA=getKloc(n,K,ALLX);
x=AA(1,:);
y=AA(2,:);
z=AA(3,:);
hold on
plot3(x,y,z,'-*');
axis([LB(1),UB(1),LB(2),UB(2),LB(3),UB(3)]); end
hold on
a=ALLK(1,:);
b=ALLK(2,:);
c=ALLK(3,:);
plot3(a,b,c,'r-*');
axis([LB(1),UB(1),LB(2),UB(2),LB(3),UB(3)]);
%%问题三源程序
function ALLX=FSOUCP_test4(K,m,N,V,LB,UB,st,F,Delta) M=length(LB);
X=zeros(M,N);
for i=1:N
X(:,i)=1*(rand(2,1)-[0.5;0.5]);
end
ALLX=cell(K,1);
k=1;
while k<=K
NewX=zeros(M,N);
PartX=zeros(M,m);
for s=1:m
x=X(:,s);
xx=x+rand*st*d(x,F);
NewX(:,s)=xx;
PartX(:,s)=xx;
end
for s=m+1:N
x=X(:,s);
Xnb=AF_feel(s,X,V);
Xnc=AF_fe(s,X,PartX,V);
if size(Xnc)>0
xx=AF_swarm1(x,st,Xnc,LB,UB);
else
xx=AF_follow(x,V,st,Xnb,Delta,LB,UB);
end
NewX(:,s)=xx;
end
X=NewX;
ALLX{k}=X;
k=k+1;
end
figure
for i=1:6
if i==1
A=ALLX{1};
elseif i==6
A=ALLX{K};
else
A=ALLX{round(0.2*(i-1)*K)};
end
aaa=A(1,:);
bbb=A(2,:);
ccc=F(1,:);
ddd=F(2,:);
subplot(3,2,i);
hold on;
plot(aaa,bbb,'*');
plot(ccc,ddd,'r*');
axis([LB(1),UB(1),LB(2),UB(2)]); end
figure
for n=1:N
AA=getKloc(n,K,ALLX);
x=AA(1,:);
y=AA(2,:);
ccc=F(1,:);
ddd=F(2,:);
hold on
plot(x,y,'-*');
plot(ccc,ddd,'r*');
axis([LB(1),UB(1),LB(2),UB(2)]);
end
hold on
%%主程序。