?? choice.m
字號:
%------------------------------------------------------------------------
% SWARM SIMULATION PROGRAM
% DESIGNED BY Jun Lu
% Intelligent and Complex Systems Lab
% HuaZhong University of Science and Technology
%------------------------------------------------------------------------
function [Probability_Matrix,Left,left,Right,right]=Choice(First,fl,Probability_Matrix,Dis_Mat,x)
%First包含id和相應x軸距離的值,2×n的矩陣,fl為first leader
Left=[];
Right=[];
left=0;
right=0;
L1=[];
R1=[];
if length(First(1,:))>1
%劃分為Left,Right兩個區域
lid=1;
rid=1;
for i=1:length(First)
%if First(2,i)~=0
if x(First(1,i),2)>x(fl,2)|(x(First(1,i),2)==x(fl,2)&x(First(1,i),1)~=x(fl,1))%判斷fl的左子樹
Left(1,lid)=First(1,i);
Left(2,lid)=Dis_Mat(fl,First(1,i));
lid=lid+1;
elseif x(First(1,i),2)<x(fl,2) %判斷fl的右子樹
Right(1,rid)=First(1,i);
Right(2,rid)=Dis_Mat(fl,First(1,i));
rid=rid+1;
end
% end
end
num_LL=0;%和leader相連的左區間agent數
num_LR=0;%和leader相連的左區間agent數
%-------------------------在新劃分的區域中確定fl是否有與其相連的agent區域
if length(Left)~=0
for i=1:length(Left(1,:))
if Left(2,i)~=0
num_LL=num_LL+1;
break
end
end
end
if length(Right)~=0
for i=1:length(Right(1,:))
if Right(2,i)~=0
num_LR=num_LR+1;
break
end
end
end
%----------leader沒有左右區域
if(num_LL==0&num_LR==0)
Temp=[];
Reset=[];
k=1;
rfl=0;
rFirst=[];
for i=1:length(First(1,:))
if First(1,i)~=fl;
Temp(1,k)=First(1,i);
Temp(2,k)=x(First(1,i),1);
k=k+1;
end
end
temp=max(Temp(2,:)); %確定rfl
for j=1:length(Temp(1,:))
if temp==Temp(2,j)
rfl=Temp(1,j);
break
end
end
for j=1:length(Temp(1,:))
Reset(1,j)=Temp(1,j);
Reset(2,j)=0;
end
for j=1:length(Reset(1,:))
rFirst(1,j)=Reset(1,j);
rFirst(2,j)=Dis_Mat(rfl,Reset(1,j));
end
Left=[];
Right=[];
left=0;
right=0;
[Probability_Matrix,Left,left,Right,right]=Choice(rFirst,rfl,Probability_Matrix,Dis_Mat,x);
%%--------------------------------------------------------leader和左區域agent相連的情況,確定left
else
if(num_LL~=0)
l1id=1;
for i=1:length(Left(1,:))
if Left(2,i)~=0
L1(1,l1id)=Left(1,i);
L1(2,l1id)=Dis_Mat(fl,Left(1,i));
l1id=l1id+1;
end
end
%確定leader的左節點
ltemp=min(L1(2,:));
for j=1:length(L1(1,:))%最小值對應的agent的id
if ltemp==L1(2,j)
left=L1(1,j);
Probability_Matrix(left,fl)=1;%找到了與leader相連的左節點
break
end
end
%%-----------------------------------------------------leader不和左區域agent相連的情況,確定l
else
if length(Left)~=0
Temp=[];
k=1;
for i=1:length(Left(1,:))
Temp(1,k)=Left(1,i);
Temp(2,k)=x(Left(1,i),1);
k=k+1;
end
ltemp=max(Temp(2,:));
for j=1:length(Temp(1,:))
if ltemp==Temp(2,j)
left=Temp(1,j);
Probability_Matrix(left,fl)=0;
break
end
end
end
end
%%--------------------------------------------------------leader和左區域agent相連的情況,確定left
if(num_LR~=0)
r1id=1;
for i=1:length(Right(1,:))
if Right(2,i)~=0
R1(1,r1id)=Right(1,i);
R1(2,r1id)=Dis_Mat(fl,Right(1,i));
r1id=r1id+1;
end
end
%確定leader的左節點
rtemp=min(R1(2,:));
for j=1:length(R1(1,:))%最小值對應的agent的id
if rtemp==R1(2,j)
right=R1(1,j);
Probability_Matrix(right,fl)=1;%找到了與leader相連的左節點
break
end
end
%%-----------------------------------------------------leader不和左區域agent相連的情況,確定l
else
if length(Right)~=0
Temp=[];
k=1;
for i=1:length(Right(1,:))
Temp(1,k)=Right(1,i);
Temp(2,k)=x(Right(1,i),1);
k=k+1;
end
rtemp=max(Temp(2,:));
for j=1:length(Temp(1,:))
if rtemp==Temp(2,j)
right=Temp(1,j);
break
end
end
end
end
end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -