1 简介
磷虾群算法(Krill Herd Algorithm,KHA)是 Gandomi 等于2012年提出的一种新型优化算法 。具体原理如下:
2 部分代码
clc
clear
close all
global N M %%N是未知节点数目,M是已知节点数目
ll=10;
dd=10;
N=1;M=4;
Vmax=1;
Vmin=-1;
number=N+M;
rand('state',sum(100*clock)*rand(1))
nodecoor0 =[0 0
0 dd
dd 0
dd dd ];
nodecoor =[dd*rand(N,2)
nodecoor0];
% nodecoor =[dd*rand(N+M,2)];
actualunknownnodecoor=nodecoor(1:N,:) ; %取50个点为未知的,未知节点实际坐标随机分布在dd*dd的区域内
actualunknownnodecoor1=actualunknownnodecoor' ;
undis=L2_distance(nodecoor',nodecoor') ; %%计算节点两两之间的欧拉距离
noise=zeros((N+M),(N+M));
noise_value=1;
for i=1:N
for j=1:(N+M)
if i<j
noise(i,j)=noise_value;
noise(j,i)=noise(i,j);
end
end
end
randn('state',sum(100*clock)*randn(1))
for i=(1):(N+M)
for j=(1):(N+M)
if(i<j) %%当节点之间距离在通信半径内,则测距有效,权重函数设为1
undis1(i,j)=undis(i,j)+sqrt(noise(i,j))*randn;
undis1(j,i)=undis1(i,j);
end
end
end
for i=(N+1):(N+M)
for j=(N+1):(N+M)
if(i<j) %%当节点之间距离不在通信半径内,则测距无效,权重函数设为0
undis1(i,j)=undis(i,j);
undis1(j,i)=undis1(i,j);
end
end
end
refnodecoor=nodecoor(N+1:N+M,:);
node=[actualunknownnodecoor;refnodecoor];
node1=actualunknownnodecoor;
% calcoor=50*rand(N,2) ;
[calcoor1,y,x_best]=KH(undis1,N,M,refnodecoor,dd) ;
figure
plot(refnodecoor(:,1),refnodecoor(:,2),'bo');hold on
plot(actualunknownnodecoor(1,1),actualunknownnodecoor(1,2),'gs'); hold on
plot(x_best(1,1),x_best(2,1),'r*'); hold on
legend('基站位置','目标真实位置','KH定位位置')
figure
plot(y)
xlabel('迭代次数')
ylabel('适应度值')
3 仿真结果
4 参考文献
[1]程庆, 张水锋, 陈帅. 基于混沌粒子群的WSN定位算法研究与matlab仿真[J]. 赤峰学院学报:自然科学版, 2018, 34(6):2.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。