• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Matlab
  • 标签: 节点定位  

资源简介

无线传感器网络节点定位程序,运用遗传算法,使用MATLAB编程语言

资源截图

代码片段和文件信息

%Generic Algorithm for function f(x1x2) optimum
clear all;
clc;
close all;

%Parameters
Size=100;%种群数量   
G=100; %迭代次数   
CodeL=10;%编码长度
NodeNum=7;%锚节点数目
NodeP=[0 1;1 3;2 1;3 4.2;4 3;1.2 3.9;3.4 2.8];%锚节点取值
AimNum=5;%目标节点数目
AimP=[1.2 2.4;2.5 1.4;0.4 3;2.5 3.2;3.6 3.5];%目标点验证用.
%for j=1:AimNum
%    for i=1:NodeNum
%        D(ji)=roundn(sqrt(sum((NodeP(i:)-AimP(j:)).^2))-1);%网络节点定位为已知条件(距离Di各锚节点(信标节点)点坐标)         
%    end
%end
%D=[sqrt(2) sqrt(2) sqrt(2)];%与各锚节点的距离
D=[1.80.61.62.52.91.52.2;2.52.20.62.82.22.81.7;...
    20.62.62.93.61.23;3.31.52.31.11.51.51;...
    4.4 2.630.90.62.40.7];
umax=10;%变量区间
umin=-10;%01区间

%Main Program
for a=1:AimNum
    E=round(rand(Size2*CodeL));%初始编码round四舍五入,rand(Size2*CodeL)产生80*20矩阵,元素(0,1)随机取,服从均匀分布  
    for k=1:G
        time(k)=k; 
        for s=1:Size
            m=E(s:);%取矩阵的第s行
            y1=0;y2=0;%两个变量在零一区间的初始值

            %Uncoding
            m1=m(1:CodeL);%取前10个元素,解码生成y1
            for i=1:CodeL
                y1=y1+m1(i)*2^(i-1);
            end
            x1=(umax-umin)*y1/1023+umin;%将解码出来的结果转换到区间内
            m2=m((CodeL+1):(2*CodeL));% 取另外十个元素,解码生成y2
            for i=1:CodeL
                y2=y2+m2(i)*2^(i-1);
            end

            x2=(umax-umin)*y2/1023+umin;%将解码出来的结果转换到区间内
    
            for i=1:NodeNum
                F1(i)=sum((NodeP(i:)-[x1x2]).^2);% 求到信标节点距离
            end
            [F2 Idx]=sort(F1);%从小到大排列
            Idx_r(a:)=Idx(1:3);
    
            F(s)=0;
            for i=1:3
                F(s)=abs(sqrt(sum((NodeP(Idx(i):)-[x1x2]).^2))-D(aIdx(i)))+F(s);% 最优函数n个节点1234....n误差求和,使最优函数最小
            end
            F(s)=1./F(s);%见第70行
        end

        Ji=1./F;
    %****** Step 1 : Evaluate BestJ ******
        BestJ(k)=min(Ji);

        fi=F;                          %Fitness Function
        [OderfiIndexfi]=sort(fi);     %Arranging fi bigger to small从大到小排序
        Bestfi=Oderfi(Size);           %Let Bestfi=max(fi)
        BestS=E(Indexfi(Size):);      %Let BestS=E(m)初始样本中最优样本 m is the Indexfi belong to max(fi)
        bfi(k)=Bestfi;%将每次循环的最优值存到数组中

    %****** Step 2 : Select and Reproduct Operation******选择复制
       fi_sum=sum(fi);%所有的值求和
       fi_Size=(Oderfi/fi_sum)*Size;%oderfi是排序之后的数组,求数组之中每个元素所占的比例(占的比例大,值大,说明更优)

       fi_S=floor(fi_Size);        %Selecting Bigger fi value,floor函数的作用是取比每个元素小的整数。左边最近的整数(数轴)

       kk=1;
       for i=1:Size
            for j=1:fi_S(i)        %选择复制
                TempE(kk:)=E(Indexfi(i):);  %fi_S=floor(fi_Size)这个数组元素是零则不选择复制,是一就选择复制(占的比例比较大就是一,占的比例比较小就是零)
                kk=kk+1;             %kk是用于复制的
            end
       end

    %************ Step 3 : Crossover Operation ************
        pc=0.60;    %交叉概率
        n=ceil(20*rand);%ceil(20*随机数)20位随机选择一位,ceil取比它大得最近的整数
        for i=1:2:(Size-1)
            temp=rand;
            if pc>temp                  %Crossover Cond

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6874  2008-05-20 09:16  Genetic_others.m

----------- ---------  ---------- -----  ----

                 7092                    2


评论

共有 条评论