close all;
clear all; %用来清除workspace中已有的变量
clc; %用来擦除命令窗中的内容
k=10;
d0=1;
sita=2;
iterative=1;
agent=rand(k,3)*5;
agentv=rand(k,3)*5;
tempagent=agent;
H=1;
beta=0.4;
step=0.05;
for intnum1=1:k
for intnum2=1:k
A(intnum1,intnum2)=H/(1+(agent(intnum1,1)-agent(intnum2,1))^2+(agent(intnum1,2)-agent(intnum2,2))^2)^beta;
end
end
for i=0:step:4
for intnumi=1:k
agent(intnumi,1)=agent(intnumi,1)+step*agentv(intnumi,1);
agent(intnumi,2)=agent(intnumi,2)+step*agentv(intnumi,2);
vtempx=0;
vtempy=0;
tempx1=0;
tempx2=0;
lamadax=lamad(agentv,k);
for intnumj=1:k
if intnumi~=intnumj
tampx1=tempx1+((agent(intnumi,1)-agent(intnumj,1))^2+(agent(intnumi,2)-agent(intnumj,2))^2-d0)^(-sita)*(-agent(intnumi,1)+agent(intnumj,1));
tampx2=tempx2+((agent(intnumi,2)-agent(intnumj,2))^2+(agent(intnumi,1)-agent(intnumj,1))^2-d0)^(-sita)*(-agent(intnumi,2)+agent(intnumj,2));
end
vtempx=vtempx+step*A(intnumi,intnumj)*(agentv(intnumj,1)-agentv(intnumi,1));
vtempy=vtempy+step*A(intnumi,intnumj)*(agentv(intnumj,2)-agentv(intnumi,2));
end
agentv(intnumi,1)=vtempx+tempx1*lamadax*step+agentv(intnumi,1);
agentv(intnumi,2)=vtempy+tempx2*lamadax*step+agentv(intnumi,2);
end
figure(1);
for intnum2=1:k
tempx=[tempagent(intnum2,1);agent(intnum2,1)];tempy=[tempagent(intnum2,2);agent(intnum2,2)];
plot(agent(intnum2,1),agent(intnum2,2),'b');grid on;axis square;xlabel('x'),ylabel('y');title([num2str(iterative*step) 's'])
line(tempx,tempy,'Color','r','LineWidth',2);hold on;
end
tempagent=agent;
dmin=distancePointToPoint(agent(1,:),agent(2,:));
for intd=1:k %找寻两agent之间最短距离
for jntd=1:k
if intd~=jntd
d=distancePointToPoint(agent(intd,:),agent(jntd,:));
if d<=dmin
dmin=d;
end
end
end
end
ddmin(1,iterative)=dmin;
for tempvi=1:k
tempagentvx(tempvi,iterative)=agentv(tempvi,1);
tempagentvy(tempvi,iterative)=agentv(tempvi,2);
end
iterative=iterative+1;
end
figure(2);
for intv=1: k
plot(tempagentvx(intv,:),'k');hold on;axis on;xlabel('t'),ylabel('x方向速度');
end
figure(3);
for intv=1: k
plot(tempagentvy(intv,:),'k');hold on;axis on;xlabel('t'),ylabel('y方向速度');
end
figure(5);
plot(ddmin(1,:),'k');hold on;axis on;xlabel('t'),ylabel('agent之间的最近距离');
评论0