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

📄 test3_5.m

📁 粒子群算法的实例
💻 M
📖 第 1 页 / 共 5 页
字号:
                    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 + -