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

📄 test3_5.m

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