资源简介
无线传感器网络节点定位程序,运用遗传算法,使用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
评论
共有 条评论