📄 test3_5.m
字号:
end
end
end
else
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:0
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:0
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:0
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
end
end
k=0;
for i=1:8
for j=1:8
k=value(i,j)+k;
end
end
r_lfit(l)=k;
end
fitness=r_lfit(1);
r_gbest(1,1:0.2*n)=r_best(1,1:0.2*n);
for i=1:60
if fitness>r_lfit(i)
fitness=r_lfit(i);
r_gbest(1,1:0.2*n)=r_best(i,1:0.2*n);
end
end
for i=1:60 %速度初始为0
for j=1:0.2*n
r_v(i,j)=rand;
end
end
w=0.8;
c=2.5;
n1=0.1*60; % n1代表克隆选择的粒子数目
n2=0.05*60; % n2代表发生变异的粒子数目
for f=1:8000 % 粒子群进化代数
for i=1:60
r1(i,1:0.2*n)=r(i,1:0.2*n);
c1=c*rand;
c2=c*rand;
r_v(i,1:0.2*n)=w*r_v(i,1:0.2*n)+c1*(r_best(i,1:0.2*n)-r(i,1:0.2*n))+c2*(r_gbest(1,1:0.2*n)-r(i,1:0.2*n)); % 根据粒子群公式计算粒子的速度
for h=1:0.2*n % 调整速度值,使之不大于1
if r_v(i,h)>=0.6
r_v(i,h)=1;
elseif r_v(i,h)<-0.6
r_v(i,h)=-1;
else
r_v(i,h)=0;
end
end
r(i,1:0.2*n)=r(i,1:0.2*n)+r_v(i,1:0.2*n); % 根据粒子群公式调整各粒子的位置
for k=1:0.2*n % 检查机器人的坐标值是否超出范围
if r(i,k)>8 | r(i,k)<1
r(i,k)=r1(i,k);
end
end
end
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(l,2*i-1)==j
for h=1:8
if r(l,2*i)==h
ns(j,h)=ns(j,h)+1;
end
end
end
end
end
ns=ns+ns1;
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
if ns(i,j)-ns1(i,j)>1
value(i,j)=abs(6000*(value(i,j)+20));
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -