📄 test3_5.m
字号:
%%%%%%%%%%%%%%%%% 提高百分五左右 %%%%%%%%%%%%%%%%%%%%%%%%%%%
% 将区域分成大小相等的子区域,根据子区域及其相邻区域的节点数目对其赋予一定的加权值,并依据此值进行机器人的位置调整
% 将移动节点坐标简化,先确定其应在的子区域
% 子区域的边长为节点探测半径的2倍
n=160; % the number of node
x=rand(1,n); % initialization position of robot
y=rand(1,n);
a1=0;
b1=0;
for i=1:0.1*n
x(i)=16*x(i);
y(i)=16*y(i);
node(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
node1(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
end
for i=0.1*n+1:n % initialization position of node
x(i)=16*x(i);
y(i)=16*y(i);
node(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
node1(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
end
for i=1:8;
for j=1:8
ns1(i,j)=0; % ns(i,j)表示落入自区域的固定节点数目
end
end
for i=0.1*n+1:n % 根据固定节点的位置信息统计落入各自区域的固定节点数目
for j=1:8
if node(i).xposition<2*j & node(i).xposition>2*(j-1)
for h=1:8
if node(i).yposition<2*h & node(i).yposition>2*(h-1)
ns1(j,h)=ns1(j,h)+1;
end
end
end
end
end
for i=2:60 % initialization the local best robot's position
for j=1:0.2*n
r_best(i,j)=8*rand;
r_best(i,j)=r_best(i,j)-mod(r_best(i,j),1);
if r_best(i,j)==0
r_best(i,j)=1;
end
end
end
for i=1:0.1*n
for j=1:8
if node(i).xposition<2*j & node(i).xposition>2*(j-1)
r_best(1,2*i-1)=j;
end
end
for j=1:8
if node(i).yposition<2*j & node(i).yposition>2*(j-1)
r_best(1,2*i)=j;
end
end
end
for i=1:60 % initialization the particle swarm
for j=1:0.2*n
r(i,j)=8*rand;
r(i,j)=r(i,j)-mod(r(i,j),1);
if r(i,j)==0;
r(i,j)=1;
end
end
end
ave1=n/64-mod(n/64,1)+1; % 理想时各自区域应有的节点数目
for l=1:60
for i=1:8;
for j=1:8
ns(i,j)=0; % ns(i,j)表示落入自区域的节点数目
value(i,j)=0; % value*i,j)表示各区域的加权值
end
end
for i=1:0.1*n % 根据移动机器人的位置信息统计落入各自区域的机器人数目
for j=1:8
if r_best(l,2*i-1)==j
for h=1:8
if r_best(l,2*i)==h
ns(j,h)=ns(j,h)+1;
end
end
end
end
end
ns=ns+ns1;
g=0;
for i=1:8 % 计算各个子区域的加权值,这个加权值是子区域和其邻居区域共同影响得到的
if i==1
for j=1:8
if j==1
if ns(i,j)>2
if ns(i,j)-ns1(i,j)>0
value(i,j)=exp(6*(ns(i,j)-ns1(i,j)));
end
end
if ns(i,j)<2
g=0;
for k=0:1
for h=0:1
if k==0 & h==0
c=1;
elseif abs(k)==1 & abs(h)==1
c=0.2;
else
c=0.4;
end
if ns(i+k,j+h)<2
value(i,j)=value(i,j)+c*exp(3*abs(ns(i+k,j+h)-ave1));
elseif ns(i+k,j+h)==2
if ns(i+k,j+h)-ns1(i+k,j+h)>1
value(i,j)=value(i,j)+c*exp(8);
else
value(i,j)=value(i,j)-1;
end
else
if ns(i+k,j+h)-ns1(i+k,j+h)>0
value(i,j)=value(i,j)+c*exp(8*abs(ns(i+k,j+h)-ave1));
else
value(i,j)=value(i,j)-c*exp(2*abs(ns(i+k,j+h)-ave1));
end
end
g=g+1;
end
end
value(i,j)=value(i,j)/g;
end
elseif j>1 & j<8
if ns(i,j)>2
if ns(i,j)-ns1(i,j)>0
value(i,j)=exp(6*(ns(i,j)-ns1(i,j)));
end
end
if ns(i,j)<2
g=0;
for k=0:1
for h=-1:1
if k==0 & h==0
c=1;
elseif abs(k)==1 & abs(h)==1
c=0.2;
else
c=0.4;
end
if ns(i+k,j+h)<2
value(i,j)=value(i,j)+c*exp(3*abs(ns(i+k,j+h)-ave1));
elseif ns(i+k,j+h)==2
if ns(i+k,j+h)-ns1(i+k,j+h)>1
value(i,j)=value(i,j)+c*exp(8);
else
value(i,j)=value(i,j)-1;
end
else
if ns(i+k,j+h)-ns1(i+k,j+h)>0
value(i,j)=value(i,j)+c*exp(8*abs(ns(i+k,j+h)-ave1));
else
value(i,j)=value(i,j)-c*exp(2*abs(ns(i+k,j+h)-ave1));
end
end
g=g+1;
end
end
value(i,j)=value(i,j)/g;
end
else
if ns(i,j)>2
if ns(i,j)-ns1(i,j)>0
value(i,j)=exp(6*(ns(i,j)-ns1(i,j)));
end
end
if ns(i,j)<2
g=0;
for k=0:1
for h=-1:0
if k==0 & h==0
c=1;
elseif abs(k)==1 & abs(h)==1
c=0.2;
else
c=0.4;
end
if ns(i+k,j+h)<2
value(i,j)=value(i,j)+c*exp(3*abs(ns(i+k,j+h)-ave1));
elseif ns(i+k,j+h)==2
if ns(i+k,j+h)-ns1(i+k,j+h)>1
value(i,j)=value(i,j)+c*exp(8);
else
value(i,j)=value(i,j)-1;
end
else
if ns(i+k,j+h)-ns1(i+k,j+h)>0
value(i,j)=value(i,j)+c*exp(8*abs(ns(i+k,j+h)-ave1));
else
value(i,j)=value(i,j)-c*exp(2*abs(ns(i+k,j+h)-ave1));
end
end
g=g+1;
end
end
value(i,j)=value(i,j)/g;
end
end
end
elseif i>1 & i<8
for j=1:8
if j==1
if ns(i,j)>2
if ns(i,j)-ns1(i,j)>0
value(i,j)=exp(6*(ns(i,j)-ns1(i,j)));
end
end
if ns(i,j)<2
g=0;
for k=-1:1
for h=0:1
if k==0 & h==0
c=1;
elseif abs(k)==1 & abs(h)==1
c=0.2;
else
c=0.4;
end
if ns(i+k,j+h)<2
value(i,j)=value(i,j)+c*exp(3*abs(ns(i+k,j+h)-ave1));
elseif ns(i+k,j+h)==2
if ns(i+k,j+h)-ns1(i+k,j+h)>1
value(i,j)=value(i,j)+c*exp(8);
else
value(i,j)=value(i,j)-1;
end
else
if ns(i+k,j+h)-ns1(i+k,j+h)>0
value(i,j)=value(i,j)+c*exp(8*abs(ns(i+k,j+h)-ave1));
else
value(i,j)=value(i,j)-c*exp(2*abs(ns(i+k,j+h)-ave1));
end
end
g=g+1;
end
end
value(i,j)=value(i,j)/g;
end
elseif j>1 & j<8
if ns(i,j)>2
if ns(i,j)-ns1(i,j)>0
value(i,j)=exp(6*(ns(i,j)-ns1(i,j)));
end
end
if ns(i,j)<2
g=0;
for k=-1:1
for h=-1:1
if k==0 & h==0
c=1;
elseif abs(k)==1 & abs(h)==1
c=0.2;
else
c=0.4;
end
if ns(i+k,j+h)<2
value(i,j)=value(i,j)+c*exp(3*abs(ns(i+k,j+h)-ave1));
elseif ns(i+k,j+h)==2
if ns(i+k,j+h)-ns1(i+k,j+h)>1
value(i,j)=value(i,j)+c*exp(8);
else
value(i,j)=value(i,j)-1;
end
else
if ns(i+k,j+h)-ns1(i+k,j+h)>0
value(i,j)=value(i,j)+c*exp(8*abs(ns(i+k,j+h)-ave1));
else
value(i,j)=value(i,j)-c*exp(2*abs(ns(i+k,j+h)-ave1));
end
end
g=g+1;
end
end
value(i,j)=value(i,j)/g;
end
else
if ns(i,j)>2
if ns(i,j)-ns1(i,j)>0
value(i,j)=exp(6*(ns(i,j)-ns1(i,j)));
end
end
if ns(i,j)<2
g=0;
for k=-1:1
for h=-1:0
if k==0 & h==0
c=1;
elseif abs(k)==1 & abs(h)==1
c=0.2;
else
c=0.4;
end
if ns(i+k,j+h)<2
value(i,j)=value(i,j)+c*exp(3*abs(ns(i+k,j+h)-ave1));
elseif ns(i+k,j+h)==2
if ns(i+k,j+h)-ns1(i+k,j+h)>1
value(i,j)=value(i,j)+c*exp(8);
else
value(i,j)=value(i,j)-1;
end
else
if ns(i+k,j+h)-ns1(i+k,j+h)>0
value(i,j)=value(i,j)+c*exp(8*abs(ns(i+k,j+h)-ave1));
else
value(i,j)=value(i,j)-c*exp(2*abs(ns(i+k,j+h)-ave1));
end
end
g=g+1;
end
end
value(i,j)=value(i,j)/g;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -