⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test3_5.m

📁 粒子群算法的实例
💻 M
📖 第 1 页 / 共 5 页
字号:
        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                                         % 与当前最优粒子比较适应度并调整最优粒子
        if r_fit(i)<fitness
            fitness=r_fit(i);
            r_gbest(1,1:0.2*n)=r(i,1:0.2*n);
        end
        if r_fit(i)<r_lfit(i)
            r_lfit(i)=r_fit(i);
            r_best(i,1:0.2*n)=r(i,1:0.2*n);
        end   
    end    
    
    w=w-0.00013*f;                                % modify the parameter of w
    if w<0.2                                      % setting the smallest value of w
        w=0.2;
    end
    fit(f)=fitness;
    if mod(f,20)==0                               % 调整参数n1,n2
        if fit(f-19)==fit(f)
            if n2<0.2*60
                n2=n2+1;
            end
            if n1>0.05*60
                n1=n1-1;
            end
        end
        if fit(f-19)~=fit(f)
            if n1<0.15*60
                n1=n1+1;
            end
            if n2>=1
                n2=n2-1;
            end
        end
    end
    z=f
end

for i=1:n
    x(i)=node1(i).xposition;
    y(i)=node1(i).yposition;
end
s=square1(x,y,n,16);
q=s/(16^2*20^2);            %计算实际服务质量
h=figure(1);
for i=1:0.1*n
    plot(node1(i).xposition,node1(i).yposition,'s');
    hold on;
end
for i=1:n
    plot(node1(i).xposition,node1(i).yposition,'.');
    hold on;
end
grid on;

h=figure(2);
for i=1:0.1*n
    node(i).xposition=2*r_gbest(1,2*i-1)-1;
    node(i).yposition=2*r_gbest(1,2*i)-1;
end
for i=1:n
    x(i)=node(i).xposition;
    y(i)=node(i).yposition;
end
s=square1(x,y,n,16);
q2=s/(16^2*20^2);
for i=1:0.1*n
    plot(node(i).xposition,node(i).yposition,'s');
    hold on;
end
for i=1:n
    plot(node(i).xposition,node(i).yposition,'.');
    hold on;
end
grid on;

m=0.1*n;
r=1;

for i=1:8                     %  nsnode 存放在自区域的节点和机器人的ID号
    for j=1:8
        for k=1:5
            nsnode(i,j,k)=0;
        end
    end
end

for i=1:m                % robot 存放机器人所在的子区域
    robot(i,1)=0;
    robot(i,2)=0;
end
for i=1:8
    for j=1:8
        ns(i,j)=0;
    end
end
   
for i=1:8                % 统计各子区域的节点ID
    for j=1:8
        k=0;
        for h=1:n
            if x(h)<2*i & x(h)>2*(i-1)
                if y(h)<2*j & y(h)>2*(j-1)
                    ns(i,j)=ns(i,j)+1;
                    k=k+1;
                    nsnode(i,j,k)=h;               
                    if h<=m
                        robot(h,1)=i;
                        robot(h,2)=j;
                    end
                end
            end
        end
    end
end

for i=1:m            % 记录活动节点的各子区域内最近邻居节点
    for j=1:3
        for k=1:3
            nnode(m,j,k)=0;
        end
    end
end


for f=1:600
    for i=1:0.1*n
        for j=1:3
            nrobot(i,j)=0;            %  记录与机器人在同一子区域内的固定节点
        end
    end
    
    for i=1:m              % 在邻近区域中找距活动节点距离最近的节点
        j=robot(i,1);
        k=robot(i,2);
        if j==1 
            h1=0;
            h2=1;
            if k==1
                g1=0;
                g2=1;
            elseif k>1 & k<8
                g1=-1;
                g2=1;
            else
                g1=-1;
                g2=0;
            end  
        elseif j>1 & j<8
            h1=-1;
            h2=1;
            if k==1
                g1=0;
                g2=1;
            elseif k>1 & k<8
                g1=-1;
                g2=1;
            else
                g1=-1;
                g2=0;
            end  
        else
            h1=-1;
            h2=0;
            if k==1
                g1=0;
                g2=1;
            elseif k>1 & k<8
                g1=-1;
                g2=1;
            else
                g1=-1;
                g2=0;
            end  
        end
        for h=h1:h2
            for g=g1:g2
                id=0;
                if h~=0 | g~=0
                    if ns(j+h,k+g)>0
                        id=nsnode(j+h,k+g,1);
                        d=((2*j-1-x(id))^2+(2*k-1-y(id))^2)^0.5;
                        for t1=1:ns(j+h,k+g)
                            id1=nsnode(j+h,k+g,t1);
                            d1=((2*j-1-x(id1))^2+(2*k-1-y(id1))^2)^0.5;
                            if d1<d
                                id=id1;
                                d=d1;
                            end
                        end
                    end
                    nnode(i,h+2,g+2)=id;
                end
                if h==0 & g==0
                    if ns(j+h,k+g)>1
                        z=0;
                        for t=1:ns(j+h,k+g)
                            id=nsnode(j+h,k+g,t);
                            if id~=i
                                z=z+1;
                                nrobot(i,z)=id;
                            end
                        end
                    end
                end                                
            end
        end   
    end
    
    for i=1:3
        for j=1:3
            d2(i,j)=0;
            force(i,j)=0;
            fx(i,j)=0;
            fy(i,j)=0;
        end
    end
    
    forcex=0;
    forcey=0;

    for i=1:m
        t1=robot(i,1);
        t2=robot(i,2);
        if t1==1
            j1=2;
            j2=3;
            if  t2==1
                k1=2;
                k2=3;
            elseif t2>1 & t2<8
                k1=1;
                k2=3;
            else
                k1=1;
                k2=2;
            end
        elseif t1>1 & t1<8
            j1=1;
            j2=3;
            if  t2==1
                k1=2;
                k2=3;
            elseif t2>1 & t2<8
                k1=1;
                k2=3;
            else
                k1=1;
                k2=2;
            end
        else
            j1=1;
            j2=2;
            if  t2==1
                k1=2;
                k2=3;
            elseif t2>1 & t2<8
                k1=1;
                k2=3;
            else
                k1=1;
                k2=2;
            end
        end
        for j=j1:j2
            for k=k1:k2
                if abs(j-2)==1 & abs(k-2)==1
                    w=0.4;
                else
                    w=1;
                end
                id=nnode(i,j,k);
                if id~=0
                    d2(j,k)=((x(i)-x(id))^2+(y(i)-y(id))^2)^0.5;
                    if d2(j,k)<1.8*r
                        m1=ns(t1+j-2,t2+k-2);
                        if m1<=3
                            force(j,k)=w*m1^0.5/d2(j,k)^2;
                        else
                            force(j,k)=w*3^0.5/d2(j,k)^2;
                        end
                        fx(j,k)=force(j,k)*(x(i)-x(id))/d2(j,k);
                        fy(j,k)=force(j,k)*(y(i)-y(id))/d2(j,k);
                    end 
                    if d2(j,k)>1.8*r
                        m1=ns(t1+j-2,t2+k-2);
                        force(j,k)=w*(d2(j,k)-1.8*r)^2/m1^0.5;
                        fx(j,k)=-1*force(j,k)*(x(i)-x(id))/d2(j,k);
                        fy(j,k)=-1*force(j,k)*(y(i)-y(id))/d2(j,k);
                    end 
                end
                if id==0
                    if j==2 & k==2
                        if ns(t1,t2)>1
                            id=nrobot(i,1);
                            d2(j,k)=((x(i)-x(id))^2+(y(i)-y(id))^2)^0.5;
                            force(j,k)=6/d2(j,k)^2;
                            fx(j,k)=force(j,k)*(x(i)-x(id))/d2(j,k);
                            fy(j,k)=force(j,k)*(y(i)-y(id))/d2(j,k);
                        else
                            fx(j,k)=0;
                            fy(j,k)=0;
                        end
                    else
                        d2(j,k)=((x(i)-2*(t1+j-2))^2+(y(i)-2*(t2+k-2))^2)^0.5;
                        force(j,k)=w*(d2(j,k)-1.8*r)^2;
                        fx(j,k)=-1*force(j,k)*(x(i)-2*(t1+j-2)-1)/d2(j,k);
                        fy(j,k)=-1*force(j,k)*(y(i)-2*(t2+k-2)-1)/d2(j,k);
                    end
                end
       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -