📄 test3_5.m
字号:
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;
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_fit(l)=k;
end
for i=1:60
r_fit1(i)=r_fit(i); % r_fitl(i)临时存放粒子的适应度
rx(i)=i; % rx(i) 存放粒子的编号
end
for i=1:60 % 比较离子的适应度找到适应度并排序,rx(i)按适应度大小存放粒子的编号
for j=i:60
if i~=j
if r_fit1(i)>r_fit1(j)
m=rx(i);
rx(i)=rx(j);
rx(j)=m;
m=r_fit1(i);
r_fit1(i)=r_fit1(j);
r_fit1(j)=m;
end
end
end
end
for i=1:n1 % 根据克隆选择系数n1,淘汰n1个最差粒子,用适应度高粒子替代
m=rx(60-i+1);
m1=rx(i);
r(m,1:0.2*n)=r(m1,1:0.2*n);
end
if mod(f,10)==0
for i=1:n2 % 根据变异系数n2,随机挑选n2个粒子产生随机变异
m=60*rand;
m=m-mod(m,1);
if m==0
m=1;
end
a=0.2*n*rand;
a=a-mod(m,1);
if a<=2
a=2;
end
if a>=6
a=6;
end
for j=1:a
b=0.2*n*rand;
b=b-mod(b,1);
if b==0
b=1;
end
r_best(m,j)=8*rand;
r_best(m,j)=r_best(m,j)-mod(r_best(m,j),1);
if r_best(m,j)==0
r_best(m,j)=1;
end
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -