【定位问题】基于matlab RSSI和模拟退火优化粒子群算法求解无线传感器网络定位问题【含Matlab源码 1766期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、简介

1 引言
随着物联网技术的发展,传感器之间通过通信方式连接在一起,构成了极为庞大的无线传感器网络,这使得传感器在各行各业的应用相当广泛[。然而,因为大规模抛撒的传感器节点无法全部配备价格昂贵的GPS定位系统,所以不能对全部传感器节点实现精确定位。因此,实现传感器节点的精确定位是无线传感器网络技术中最为关注的问题。

通常,无线传感网络中主要有与距离有关和与距离无关两类定位算法。其中,与距离有关的定位算法主要有TOA算法、TDOA[6]算法和三边定位算法等;与距离无关的定位算法主要有质心定位算法、APIT算法、DV-Hop算法和MDS-MAP算法等。然而,当前定位算法在定位精度方面和实际应用方面还存在一定的不足,为了进一步提高传感器网络的定位精度,国内外研究者进行了更深入的研究工作。在国外,Bulusu等利用传感器网络的连通性,获取了未知节点周边的参考节点并将其作为邻居节点,然后将邻居节点形成的质心作为未知节点的近似位置。Sretenovi等将城市环境下的RSSI模型数据应用到加权质心定位算法中,实现了传感器节点的位置确定,实验结果表明该方法更有实用价值。Sai等在RSSI的基础上提出了并行萤火虫算法,并通过改进目标函数将定位问题转化为非线性无约束问题,结果表明该算法具有更高的定位精度。Mass-Sanchez等采用粒子群算法对DV-hop定位算法进行了优化,获得了比加权DV-hop和双曲线DV-hop方法更好的定位精度。在国内,李腾宇等在基于RSSI加权质心定位算法测出的未知节点到参考节点距离的数学模型上用GASA算法优化求解,其具有更高的定位精度。谢国民等在质心定位算法的基础上,采用PSO-GSA算法对相关参数和位置信息进行优化,有效提高了复杂的煤矿环境中人员的定位精度。张兢等在基于RSSI的加权质心定位的基础上,将已被定位的未知节点作为参考节点再对其他未知节点进行定位,该方法可以有效减少网络连通度较低时不能定位的节点数量。汪晨等采用根据信号识别强度大小获得的距离和参考节点的位置信息作为人工鱼群算法的适应度函数,并对质心定位算法的定位过程进行了寻优求解,提高了定位精度,但大幅增加了计算量。

针对当前质心定位算法中存在的定位精度达不到实际应用要求、计算量较大、成本过高等问题,文中结合群智能算法较好的寻优性能和RSSI质心定位算法计算简单的优点,提出了基于粒子群-模拟退火优化算法-RSSI(Particle Swarm Optimization,Simulated Annealing algorithm and RSSI,PSO-SA-RSSI)的质心定位算法。为了评估本文算法在定位精度等方面的性能,以传统的质心定位算法、基于RSSI的加权质心定位算法和基于粒子群算法优化和RSSI(Particle Swarm Optimization and RSSI,PSO-RSSI)的质心定位算法为对比进行仿真。实验结果表明:本文方法不仅具有较高的定位精度,而且具有计算简单、泛化性能较强等突出的优点。

2 质心定位算法
2.1 无线电信号传播损耗模型

无线电信号传播损耗模型在无线传感器网络定位技术中是最为常用的一种模型。自由空间传播模型的通信区域是以发射节点为原点的圆,在通信区域内的接收节点才能接收到信号,否则无法进行数据交换。在理想环境下,该模型中传感器接收端节点测得的信号接收强度指示值Pr和接收端到发射端之间的距离d满足式(1):
在这里插入图片描述
但在实际应用中,无线电信号传输时会受到很多因素的影响,如传输距离、物体反射、折射和散射等。在自由空间模型中对数路径损耗模型加入高斯分布因子能够使其更好地模拟无线电信号在实际环境中的传播过程,因此将其作为本次实验的无线电信号传播损耗模型,具体可描述为:
在这里插入图片描述
其中,χ代表高斯分布因子;Pr代表接收节点收到信号的功率;Pt代表发射节点发出信号的功率;PL(d0)代表参考距离为d0时的路径损耗功率;η代表路径损耗指数;d代表接收节点和发射节点之间的距离;d0代表距离地面的参考高度,通常取1 m。

2.2 基于RSSI的加权质心定位算法
传统的质心定位算法主要是根据传感器间的连通性,将距离未知节点较近的邻居节点构成多边形,并以该多边形的质心作为定位系统中未知节点的坐标,然而其定位精度较差、实际应用价值不高。为了提高定位算法的定位精度,一些研究者提出了基于RSSI的加权质心定位算法,通过引入RSSI无线电信号传播损耗模型,可以在各个传感器节点传送数据帧时得到未知节点到参考节点的距离,并将该距离作为定位未知节点的权值,以此提高定位的精度。

假设未知节点附近的参考节点的坐标分别为(x1,y1),(x2,y2),…,(xi,yi),…,(xn,yn),传统质心定位的未知节点的坐标为:
在这里插入图片描述
与传统质心定位算法相比,加权质心定位算法只选取距离未知节点最近的3个参考节点A,B和C构成一个围绕未知节点的三角形,通过三角形的质心确定未知节点的位置。假设未知节点到A,B和C 3个参考节点之间的距离分别记为dA,dB和dC,则未知节点的位置坐标为:
在这里插入图片描述
需要注意的是,当距离未知节点最近的参考节点不足3个时,定位过程无法完成。为了解决这一问题,在实际定位过程中将已定位的未知节点作为伪参考节点参与到定位过程中,使得在通信范围内不足3个参考节点的未知节点也能实现精确定位。

3 PSO-SA优化的RSSI质心定位算法
群智能算法作为一种优化算法在各个领域均有应用,其中粒子群算法和模拟退火算法是当前群智能算法研究领域的热点。粒子群算法具有参数少、求解简单、全局搜索能力较强的优点。模拟退火算法是根据热力学中物体受热溶化后重新凝固以达到物体内能最小的过程提出的一种算法,该算法运行效率较高,求解过程不受初始条件的影响,能够用于求解大规模组合优化问题。本文提出了一种混合群智能算法,即粒子群算法结合模拟退火算法优化的RSSI质心定位算法,该算法不仅能够保持粒子群算法操作简单、易于实现的优点,根据模拟退火算法的概率性搜索策略还能改善粒子群算法容易陷入局部极值点的情况,减少算法的运行时间,提高算法的精确度。

3.1 适应度函数
利用粒子群结合模拟退火算法实现精确定位未知节点坐标的本质是:对适应度函数进行多次循环迭代求解出适应度函数的最小值,以准确确定未知节点的位置坐标。因此在对基于RSSI的质心定位算法进行优化求解的过程中,构造合理的适应度函数对于确定未知节点位置坐标极为重要。假设选取距离未知节点最近的3个节点A(xA,yA),B(xB,yB)和C(xC,yC)为邻居节点,其与未知节点之间的距离分别记为:
在这里插入图片描述
利用参考节点A,B和C到未知节点之间的距离(dA,dB和dC)和基于RSSI模型测距方法(见式(2))得到的距离(d1,d2和d3)构造出粒子群结合模型退火算法的适应度函数为:
在这里插入图片描述
3.2 PSO-SA优化算法的步骤
利用PSO-SA混合群智能算法优化质心定位算法的基本思想是:首先,利用RSSI模型实现参考节点与未知节点距离的测定,进而确定未知节点的邻居节点;然后,利用邻居节点构造出围绕未知节点的三角形;最后,利用PSO-SA混合群智能算法对上节中构造的适应度函数进行寻优求解,实现对未知节点位置信息的确定,其中PSO-SA混合群智能算法的步骤如下。

步骤1 初始化粒子群和模拟退火算法。
1)粒子群算法的初始化:
群粒子的初始位置为3个参考节点的质心x(i)=(xi,yi)=(xA,yA)+(xB,yB)+(xC,yC)3;粒子速度初始化为vi=rand;设置每个粒子的最优位置pi=(xi,yi)和最优位置的起始值pbest=f(xi,yi);初始化群粒子中的最后一个粒子的解作为全局最优解,然后与其他粒子的最优解进行比较取最小解的位置作为全局最优解的位置pall=(xi,yi),并将全局搜索的极值设为groupFit。

2)模拟退火算法的初始化:
初始化退火常数K,初始温度T=f(pall)log5。
步骤2 当模拟退火系统的能量状态从E1变化到E2时利用Metropolis算法准则:
在这里插入图片描述
步骤3 更新位置x(i)和速度v(i),r1和r2都是随机数。
v(i+1)=wv(i)+c1r1(i)(pi-x(i))+c2r2(i)*(pall_plus-x(i)) (8)
x(i+1)=x(i)+v(i+1) (9)
步骤4 判断新的粒子群个体是否是最优位置和最优解,是否是粒子群全局最优解和最优位置。然后更新每次迭代后最优解的位置。更新权重系数w(n+1)=w(n)−0.5N。
步骤5 退火操作T(n+1)=KT(n),n=1,2,…,N。
步骤6 直至迭代结束,得到最优解的位置,否则转至步骤2完成迭代次数。
综上所述,PSO-SA混合群智能算法的流程图如图1所示。
在这里插入图片描述
图1 PSO-SA混合群智能算法的流程

⛄二、部分源代码

%信标节点位于等边三角形顶点的仿真
clc
clear all
%S为三个选定的信标节点坐标矩阵,节点坐标已知(为便于仿真及验证,代码中采用的等边三角形)
%依次测试信标节点间距离放大t倍时的定位效果
for t = 1:10
S=[0,0;5t,5tsqrt(3);10t,0];
nums = [S(1,1),S(1,2),S(2,1),S(2,2),S(3,1),S(3,2)];
p = min(nums);
q = max(nums);
L = sqrt((S(1,1)-S(3,1))2+(S(1,2)-S(3,2))2);
m = 100;
%生成在[p,q]上满足均匀分布的随机数矩阵
%即生成一组m行2列的有可能落在等边三角形区域内的坐标
numbox = p+(q-p)*rand(m,2);

%计数初值,最终根据计算将随机生成的点中落在等边三角形区域内的坐标存放于新的矩阵 
n = 1; 
for i = 1:m 
    dA(i) = sqrt((numbox(i,1)-S(1,1))^2+(numbox(i,2)-S(1,2))^2); 
    dB(i) = sqrt((numbox(i,1)-S(2,1))^2+(numbox(i,2)-S(2,2))^2); 
    dC(i) = sqrt((numbox(i,1)-S(3,1))^2+(numbox(i,2)-S(3,2))^2); 
    %将确实在等边三角形区域内的坐标存入P_position矩阵 
    if (dA(i)<=L) && (dB(i)<=L) && (dC(i)<=L) 
        P_position(n,1) = numbox(i,1); 
        P_position(n,2) = numbox(i,2); 
        n = n+1; 
    end 
end 
%N为随机生成的点中落在等边三角形区域内的点(测试点)的个数 
N = n-1 
if N == 0 
    disp('所取的随机坐标无一落在等边三角形内,请增大m值重新运行程序.') 
    return 
end 

%计算测试点离三个顶点的实际距离 
%dis为N行3列的矩阵,用于存放N个测试点分别到等边三角形三个顶点A,B,C的实际距离 
for i = 1:N 
    dis(i,1) = sqrt((P_position(i,1)-S(1,1))^2+(P_position(i,2)-S(1,2))^2); 
    dis(i,2) = sqrt((P_position(i,1)-S(2,1))^2+(P_position(i,2)-S(2,2))^2); 
    dis(i,3) = sqrt((P_position(i,1)-S(3,1))^2+(P_position(i,2)-S(3,2))^2); 
end 

%根据函数Distance计算测试点离三个顶点的测试距离(考虑了衰减及环境误差等) 
%dis_test为N行3列的矩阵,用于存放N个测试点分别到等边三角形三个顶点A,B,C的测试距离 
a = 7; %由RSSI计算T-R距离时使用的参数 
for i = 1:N 
    dis_test(i,1) = Distance(dis(i,1),a); 
    dis_test(i,2) = Distance(dis(i,2),a); 
    dis_test(i,3) = Distance(dis(i,3),a); 
end 
 
%根据函数Triangle及求得的测试距离进行定位 
%P_calculate为N行2列的矩阵,用于存放定位后的N个坐标 
for i = 1:N 
    [P_temp_SAPSO,fv]= SAPSO(@fitness,500,2,2,0.6,20,2,S,dis_test(i,1),dis_test(i,2),dis_test(i,3)); 
    P_calculate_SAPSO(i,1) = P_temp_SAPSO(1); 
    P_calculate_SAPSO(i,2) = P_temp_SAPSO(2); 
    P_temp = Triangle(S,dis_test(i,1),dis_test(i,2),dis_test(i,3));
    P_calculate_Triangle(i,1) = P_temp(1); 
    P_calculate_Triangle(i,2) = P_temp(2); 
end 

%由于测试距离相比真实距离有误差,三角计算中的两圆有可能无交点,导致方程无实根. 
%于是P_calculate中会出现虚数.在测试中虚数无实际意义,因此取其实部存放于另一矩阵 
for i = 1:N 
    P_calculate_Triangle_real(i,1) = real(P_calculate_Triangle(i,1)); 
    P_calculate_Triangle_real(i,2) = real(P_calculate_Triangle(i,2)); 
end 

%对比测试点的定位坐标与实际坐标之间的误差 
P_position; 
P_calculate_SAPSO;
P_calculate_Triangle_real;
%计算定位结果与真实坐标之间的距离误差平均值e_average(测试点等概率) 
e_sum_SAPSO = 0; 
e_sum_Triangle=0;
e_max_SAPSO=0;
e_max_Triangle=0;
for i = 1:N 
    e_SAPSO = sqrt((P_calculate_SAPSO(i,1)-P_position(i,1))^2+(P_calculate_SAPSO(i,2)-P_position(i,2))^2); 
    if e_SAPSO>e_max_SAPSO
        e_max_SAPSO=e_SAPSO;
    end
    e_sum_SAPSO = e_sum_SAPSO+e_SAPSO; 
    e_Triangle=sqrt((P_calculate_Triangle_real(i,1)-P_position(i,1))^2+(P_calculate_Triangle_real(i,2)-P_position(i,2))^2);
    if e_Triangle>e_max_Triangle
        e_max_Triangle=e_Triangle;
    end
    e_sum_Triangle=e_sum_Triangle+e_Triangle;
end 
e_average_SAPSO = e_sum_SAPSO/N; 
e_average_SAPSO_box(t)=e_average_SAPSO
e_average_Triangle=e_sum_Triangle/N;
e_average_Triangle_box(t)=e_average_Triangle
e_max_SAPSO_box(t)=e_max_SAPSO
e_max_Triangle_box(t)=e_max_Triangle
e_average_percent_SAPSO = e_average_SAPSO/L; 
e_average_percent_SAPSO_box(t)= e_average_percent_SAPSO
e_average_percent_Triangle = e_average_Triangle/L;
e_average_percent_Triangle_box(t)=e_average_percent_Triangle

end

t = [1:10];
figure;
plot(t,e_average_SAPSO_box(t),‘k-’,t,e_average_Triangle_box(t),‘k-.’)
xlabel(‘t’)
ylabel(‘平均定位误差’)
legend(‘SAPSO’,‘Triangle’)
grid on;
figure;
plot(t,e_max_SAPSO_box(t),‘k-’,t,e_max_Triangle_box(t),‘k-.’)
xlabel(‘t’)
ylabel(‘最大定位误差’)
legend(‘SAPSO’,‘Triangle’)
grid on;
figure;
plot(t,e_average_percent_SAPSO_box(t),‘k-’,t, e_average_percent_Triangle_box(t),‘k-.’)
xlabel(‘t’)
ylabel(‘平均定位误差率’)
legend(‘SAPSO’,‘Triangle’)
grid on;

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]王改云,王磊杨,路皓翔.基于混合群智能算法优化的RSSI质心定位算法[J].计算机科学. 2019,46(09)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于构建一个集成的群体智能算法框架,将布谷鸟算法和其他群体智能算法作为子模块组合在一起,进行无线传感网络中的传感器定位,下面是一个简单的实现方案: 1. 初始化传感器节点和锚节点的位置:在100m*100m的范围内随机分布100个传感器节点,其中30个为锚节点。 2. RSSI或DV-hop定位算法:使用RSSI或DV-hop定位算法对未知节点进行定位。这些算法可以通过测量无线信号的强度或跳数来推断节点之间的距离。 3. 布谷鸟算法:将布谷鸟算法作为一个子模块,用于优化传感器节点的位置。布谷鸟算法是一种模拟自然选择和进化的优化算法,可以通过迭代优化节点位置以减小定位误差。 4. 集成群体智能算法框架:将RSSI或DV-hop定位算法和布谷鸟算法组合在一起,形成一个集成的群体智能算法框架。在每次迭代中,先利用RSSI或DV-hop定位算法对未知节点进行定位,然后使用布谷鸟算法对节点位置进行优化。 5. 画出节点分布图和计算定位误差:在定位前后,分别绘制节点的分布图,可以使用二维坐标系表示节点的位置。计算定位误差可以使用欧氏距离或其他指标来衡量。 需要注意的是,具体的实现细节和算法参数需要根据具体的需求和数据特点进行调整和优化。此外,还可以考虑其他群体智能算法定位算法的组合,以进一步提升定位精度和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值