无线传感器网络路由优化中的能量均衡LEACH改进算法(Matlab代码实现)

news2024/11/23 3:56:21

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

由于簇的规模和簇头选择对WSN总能耗影响较大:一方面,当簇的规模较小时,易导致WSN能量消耗不合理;另一方面,当簇的规模较大时,簇头转发数据量太大、负担较重,易造成能耗增大,使普通成员节点在单位之间可发送的数据量急速降低。

基于能耗均衡的LEACH改进算法在执行时循环进行簇的重构,仍然和传统 LEACH 一样按轮(round)进行,每轮依然分成簇的建立阶段和传输数据的稳定阶段。该算法的目标是在每一轮中产生可以实现整个WSN更低能耗的最优数目的簇头,同时,在簇头的选举时充分考虑节点的剩余能量引入簇头选择新阈值,从而使能量消耗更加均衡。

📚2 运行结果

主函数部分代码:

clc;
clear;%清除內存变量
​
xm=100;%x轴范围
ym=100;%y轴范围
​
sink.x=0.5*xm;%基站x轴
sink.y=0.5*ym;%基站y轴
​
n=100;%节点总数
​
p=0.1;%簇头概率
​
E0=0.02;%初始能量
ETX=50*0.000000000001;%传输能量,每bit,10e-12
ERX=50*0.000000000001;%接收能量,每bit
Efs=10*0.000000000001;%耗散能量,每bit
EDA=5*0.000000000001;%融合能耗,每bit
​
cc=0.6;%融合率
​
rmax=1000;%总轮数
​
CM=32;%控制信息大小
DM=4000;%数据信息大小
​
figure(1);%显示图片
%% 为每个节点随机分配坐标,并设置初始能量为E0,节点类型为普通,并绘制基站
for i=1:1:n
    S(i).xd=rand(1,1)*xm;
    S(i).yd=rand(1,1)*ym;
    S(i).G=0;%
每一周期結束此变量为
0
    S(i).E=E0;%设置初始能能量E0
    S(i).type='N';%节点类型为普通
​
    plot(S(i).xd,S(i).yd,'o');
    hold on;%保持所画的图像
end
​
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xd,S(n+1).yd,'x');%绘制基站节点
​
flag_first_dead=0;%第一个死亡节点的标识变量
%% 开始每轮循环
for r=1:1:rmax
  r=r+1;%
显示轮数  %% 变量初始化
    %
 如果轮数正好是一個周期的整数倍,则设置S(i).G为
0
    if(mod(r,round(1/p))==0)
       for i=1:1:n
           S(i).G=0;
       end
    end
    
     hold off;%每轮图片重新绘制
     cluster=0;%初始簇头数为0
     dead=0;%初始死亡节点数为0
     %%%%%%%%%绘图
     %figure(1);
    %% 记录死亡节点
     for i=1:1:n
         %
 将能量小于等于
0
的节点绘制成紅色,并将死亡节点数增加
1
         if(S(i).E<=0)
             %%%%%%%%%绘图
%            plot(S(i).xd,S(i).yd,'red .');
            dead=dead+1;
            
            if(dead==1)
                if(flag_first_dead==0)
                    first_dead=r %第一个节点的死亡轮数
                    save ltest, first_dead;
                    flag_first_dead=1;
                end
            end
​
 %        hold on;
         %绘制其他节点,其他节点正常标识
         else
             S(i).type='N';
  %%%%%%%%%绘图
  %           plot(S(i).xd,S(i).yd,'o');
             hold on;
         end      
     end
%%%%%%%%%绘图
  %   plot(S(n+1).xd,S(n+1).yd,'x');%绘制基站
​
     Dead(r+1)=dead; %每轮记录当前的死亡节点数
     save ltest, Dead(r+1);%将此数据存入ltest文件
     
     %% 按概率选取簇头,选出簇头后标识簇头,将簇头标识(位置,距离,ID)都记录下来
     for i=1:1:n
         if(S(i).E>0)
           if(S(i).G<=0)
            temp_rand=rand;%
取一个随机数            if(temp_rand<=((p/(1-p*mod(r,round(1/p))))*(S(i).E/E0)))%如果随机数小于等于
            %if(temp_rand<=(p/(1-p*mod(r,round(1/p)))))%如果随机数小于等于
            S(i).type='C';%此节点为此轮簇头
            S(i).G=round(1/p)-1;%S(i).G设置为大于0,此周期不能再被选择为簇头
            cluster=cluster+1;%簇头数加1
            C(cluster).xd=S(i).xd;
            C(cluster).yd=S(i).yd;%将此节点标识为簇头
%%%%%%%%%绘图
%            plot(S(i).xd,S(i).yd,'k*');%绘制此簇头
​
            distance=sqrt((S(i).xd-(S(n+1).xd))^2+(S(i).yd-(S(n+1).yd))^2);%簇头到基站的距离
            C(cluster).distance=distance;%标识为此簇头的距离
            C(cluster).id=i; %此簇头的节点id
​
            packet_To_BS(cluster)=1;%发送到基站的数据包数为1,每个簇头到基站都有一个数据包
            end
           end
          end
         end

🎉3 参考文献

[1]董嘉依,曹佳棋.基于延长WSN生命周期的CHL-LEACH算法[J].中国科技信息,2021(17):71-73.

部分理论引用网络文献,若有侵权联系博主删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/500725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2021年NOC大赛编程马拉松赛道图形化中高组模拟卷,包含答案

目录 单选题: 判断题: 下载文档打印做题: 2021年NOC大赛编程马拉松赛道图形化中高组模拟卷 单选题: 1.雪球不小心误入了图灵学院旁边山林中的一个洞穴,一直都没有出来,禾木、桃子和小核桃打算进去找她,洞穴里漆黑一片,三人走着走着,不知怎么也走散了。如下图所示,…

加速开放计算产业化,OCTC五大原则瞄准需求痛点

回顾计算产业过去十余载的历程&#xff0c;开放计算始终是一个绕不开的核心焦点。 始于2011年Facebook发起的数据中心硬件开源项目--开放计算项目&#xff08;简称&#xff1a;OCP&#xff09;&#xff0c;开放计算犹如星星之火&#xff0c;不仅迅速形成燎原之势&#xff0c;更…

windows安装GO语言环境

GO语言版本 Windows 平台和 Mac 平台推荐下载可执行文件版&#xff0c;Linux 平台下载压缩文件版。 版本&#xff1a;1.16.8 出现上面这个界面就说明已经安装好了 查看GO版本 可以打开终端窗口&#xff0c;输入go version命令&#xff0c;查看安装的 Go 版本 C:\Users\8617…

python数据可视化开发(5):webAPI百度地图轻量驾车路线规划距离与直线距离计算

webAPI百度地图轻量驾车路线规划规划 一、驾车路线规划说明1.接口说明API服务地址请求参数返回参数 二、python核心代码1.轻量路线规划代码封装2.批量读取起始点信息 三、直线距离计算 轻量级路线规划服务&#xff08;又名DirectionLite API &#xff09;是一套REST风格的Web服…

带你玩转数据结构-单链表(适合初学者的文章,讲解的很仔细哦)

前言: &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:讲解数据结构中链表的知识,;链表的分类,c语言实现单链…

界面控件Telerik UI for WinForms使用指南 - 数据绑定 填充(二)

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件&#xff0c;所有的UI for WinForms控件都具有完整的主题支持&#xff0c;可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms组件为可视化任何类…

使用【SD-WEBUI】插件生成同一张图包含多个人物:分区域的提示词

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;潜变量成对&#xff08;Latent Couple&#xff09;&#xff08;1.1&#xff09;可自组LoRA&#xff08;Composable LoRA&#xff09; &#xff08;二&#xff09;分区扩散&#xff08;Multi Diffusion&#…

测试用例常见设计方法

1.基于需求的设计方法 主要从以下方面进行思考&#xff1a; 2.等价类法 将输入的数据等价划分成几个类&#xff0c;从每个类里面选出一个测试用例&#xff0c;如果这个测试用例通过&#xff0c;说明这一个类的测试用例都通过 有效等价类&#xff1a;满足输入数据要求的类 无…

rosbag相关进阶操作

一些很好用的网站 时间戳在线转换网页 旋转矩阵、四元数、绕轴旋转、欧拉角在线转换网页 四元数、欧拉角可视化在线转换网页 一、按时间截取bag 使用如下代码&#xff1a; rosbag filter 原始包名.bag 截取后的包名.bag "t.to_sec() > 开始时间 and t.to_sec() <…

如何导出windows平台下cloudflare warp内部存的私钥和token

结论&#xff1a;管理员身份运行 mimikatz&#xff1a;https://github.com/gentilkiwi/mimikatz/releases/tag/2.2.0-20220919 然后输入&#xff1a; privilege::debug &#xff08;提升权限到&#xff1a;NT-AUTHORITY\SYSTEM&#xff09;以及sekurlsa::credman 就能看到&…

免费使用GPT4.0?搭载多模态的全新New Bing开放使用教程(文末送书)

目录 1 微软发布新必应2 支持文本生成图像3 支持多模态回答4 历史记录和回答导出5 支持插件化导入本期图书推广 1 微软发布新必应 5月4日&#xff0c;微软基于ChatGPT的搜索引擎New Bing发布了一次大规模更新&#xff0c;并宣布已开放给所有用户&#xff0c;现在无需再排队等待…

前端技术搭建弹珠小游戏(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了小人逃脱&#xff0c;当然很多伙伴再评论区提出了想法&#xff0c;后续我们会考虑实现的&#xff0c;今天还是继续按照我们原定的节…

sentinel 随笔 3-降级处理

0. 像喝点东西&#xff0c;但不知道喝什么 先来段源码&#xff0c;看一下 我们在dashboard 录入的降级规则&#xff0c;都映射到哪些字段上 package com.alibaba.csp.sentinel.slots.block.degrade;public class DegradeRule extends AbstractRule {public DegradeRule(String…

redis(1)---redis的安装以及五大基本类型的使用

一)认识NoSQL 格式化数据VS格式化 1)SQL关系型数据库&#xff0c;在关系型数据库里面表中的字段是有限制的&#xff0c;况且最好不要随意删除修改表结构&#xff0c;存入到关系型数据库中的数据&#xff0c;都是结构化的数据&#xff0c;对于这些数据都是必须要有格式化的要求&…

sentinel 随笔 2-流控

0. 想要个半个月的旅游 最近发现算法比较有意思一些&#xff0c;什么企业框架都是看不完的… 书接 FlowSlot 1. FlowRuleChecker.checkFlow() : 配置的规则校验类 sentinel 并没有对这个Checker进行抽象的设计&#xff0c;第一次看有些别扭… package com.alibaba.csp.sent…

01- 综述 (目标检测)

要点&#xff1a; 区分One-stage detector 和 Two-stage detector 参考链接&#xff1a;深度学习目标检测最全综述 - 爱码网 详细模型解读参考&#xff1a;目标检测简介 - 知乎 一 目标检测分类 1.1 发展历程 检测网络发布历程&#xff1a; 1.2 检测模型分类 2014年后目标…

C嘎嘎~~ [类 下篇之运算符重载]

类 下篇 之运算符重载 5.赋值运算符重载5.1运算符重载5.1.1 运算符的概念5..1.2 重载运费符的位置5.1.3运算符重载的实质 5.2 赋值运算符重载5.2.1深刻理解---编译器生成的默认赋值运算符重载5.2.2深刻理解---拷贝构造和赋值运算符重载5.2.3深刻理解---传参和返回值用引用修饰…

CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some

问题描述&#xff1a; 在修改代码时&#xff0c;出现入下报错。 发生异常: RuntimeError CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debuggi…

Android Switch开关按钮使用和自定义样式(系列教程五)

Switch开关按钮简介 Switch开关按钮是Android中的基本控件之一&#xff0c;其本质上也是一个按钮&#xff0c;具有开和关两种展示状态。 Switch开关按钮基本使用 在布局文件中定义开关按钮&#xff1a; <LinearLayoutandroid:layout_width"300dp"android:layo…

Vivado安装后添加器件库

1.前言 通常安装Vivado时&#xff0c;由于软件完整安装的空间需求过于庞大&#xff0c;一般只会选择一部分器件进行安装。而随着学习和工作的进展&#xff0c;遇到新的赛灵思朋友是成长的里程碑&#xff0c;也是综合不能通过的绊脚石。 今天有幸认识了一位新的赛灵思朋友——…