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

📄 test3_5.m

📁 粒子群算法的实例
💻 M
📖 第 1 页 / 共 5 页
字号:
%%%%%%%%%%%%%%%%%    提高百分五左右         %%%%%%%%%%%%%%%%%%%%%%%%%%%
% 将区域分成大小相等的子区域,根据子区域及其相邻区域的节点数目对其赋予一定的加权值,并依据此值进行机器人的位置调整
% 将移动节点坐标简化,先确定其应在的子区域
% 子区域的边长为节点探测半径的2倍

n=160;              % the number of node 
x=rand(1,n);        % initialization position of robot
y=rand(1,n);
a1=0;
b1=0;

for i=1:0.1*n
    x(i)=16*x(i);
    y(i)=16*y(i);
    node(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
    node1(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
end
for i=0.1*n+1:n      % initialization position of node
    x(i)=16*x(i);
    y(i)=16*y(i);
    node(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
    node1(i)=struct('xposition',x(i) ,'yposition',y(i),'nodemate',0,'dan',0,'md',0);
end

for i=1:8;
    for j=1:8
        ns1(i,j)=0;            % ns(i,j)表示落入自区域的固定节点数目
    end
end
for i=0.1*n+1:n                % 根据固定节点的位置信息统计落入各自区域的固定节点数目
    for j=1:8
        if node(i).xposition<2*j & node(i).xposition>2*(j-1)
            for h=1:8
                if node(i).yposition<2*h & node(i).yposition>2*(h-1)
                    ns1(j,h)=ns1(j,h)+1;
                end
            end
        end
    end
end

for i=2:60           % initialization the local best robot's position     
    for j=1:0.2*n
        r_best(i,j)=8*rand;
        r_best(i,j)=r_best(i,j)-mod(r_best(i,j),1);
        if r_best(i,j)==0
            r_best(i,j)=1;
        end
    end
end

for i=1:0.1*n                    
    for j=1:8
        if node(i).xposition<2*j & node(i).xposition>2*(j-1)
            r_best(1,2*i-1)=j;            
        end
    end
    for j=1:8
        if node(i).yposition<2*j & node(i).yposition>2*(j-1)
            r_best(1,2*i)=j;            
        end
    end
end

for i=1:60                    % initialization the particle swarm
    for j=1:0.2*n
        r(i,j)=8*rand;
        r(i,j)=r(i,j)-mod(r(i,j),1);
        if r(i,j)==0;
            r(i,j)=1;
        end
    end
end
    
ave1=n/64-mod(n/64,1)+1;        % 理想时各自区域应有的节点数目

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_best(l,2*i-1)==j
                for h=1:8
                    if r_best(l,2*i)==h
                        ns(j,h)=ns(j,h)+1;
                    end
                end
            end
        end
    end    
    ns=ns+ns1;
    g=0;

    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   
                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;
                                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;

⌨️ 快捷键说明

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