LEACH算法源代码
- 格式:doc
- 大小:90.00 KB
- 文档页数:15
仿真一:在100*100的区域内随机生成100个节点(matlab仿真代码: clear;xm=100;%x轴范围ym=100;%y轴范围sink.x=0.5*xm;%基站x轴 50sink.y=0.5*ym;%基站y轴 50n=100;E0=0.02;for i=1:1:nS(i).xd=rand(1,1)*xm;S(i).yd=rand(1,1)*ym;S(i).G=0;%每一周期结束此变量为0S(i).E=E0;%设置初始能量为E0S(i).type='N';%节点类型为普通plot(S(i).xd,S(i).yd,'o');hold on;end%设置SINK节点的坐标S(n+1).xd=sink.x;S(n+1).yd=sink.y;plot(S(n+1).xd,S(n+1).yd,'*');%绘制基站节点仿真结果图片:(‘O’代表随机散布的节点,‘*’代表SINK节点)仿真二:LEACH 分簇效果图(matlab 代码见附件)仿真结果:(p=0.1) 1、簇头个数14.01020304050607080901002、簇头个数:113、簇头个数:1201020304050607080901004、簇头个数:10102030405060708090100(p=0.05) 1、簇头=61020304050607080901002、簇头=73、簇头=124、簇头=81020304050607080901005、0102030405060708090100102030405060708090100xyLEACH 分簇算法成簇效果图仿真三:LEACH 分簇算法第一个节点死亡的轮数10203040506070809010001020304050607080901001020304050607080901000102030405060708090100第一死亡节点出现的分布及轮数xy0102030405060708090100xy经过matlab 仿真,LEACH 分簇算法在第一个节点死亡时,已经运行的轮数分别为: 122、143、125、149、122、72.仿真四:20%的节点死亡时分布及轮数1、yx 2、yxy0102030405060708090100x轮数:196、207、205、181.。
无线传感器网络改进的LEACH-ID算法摘要:分析了经典的分簇路由协议LEACH,针对LEACH中的簇头个数、簇中成员数太多或太少,从而导致节点加快死亡、网络能量利用率低的问题,通过计算最优簇头数、控制簇中成员数,均衡了网络中能量的消耗,提高了网络能量的利用率,延长了网络寿命。
同时给出一种简单的产生临时ID的方法,保证了相互间较大概率的互异性。
仿真实验结果表明,LEACH??ID协议与LEACH 协议相比延长了网络寿命,推迟了第一个死亡节点出现的时间,提高了能量利用率。
?ス丶?词:无线传感器网络;LEACH协议;簇头;临时ID号?ブ型挤掷嗪牛? TP393.04; TN915.04文献标志码:A英文标题??Improved LEACH??ID algorithm for wireless sensor networks?び⑽淖髡呙?SHI Ye??ling, CHEN Bin??bing?び⑽牡刂?(School of Electrical Engineering and Information, Sichuan University, Chengdu Sichuan 610065, China英文摘要)??Abstract:Classical clustering communication protocol of LEACH was analyzed. Concerning the problem that the amounts of cluster heads andtoo many or too few members of the cluster may cause the accelerated death of the nodes and low energy use of the network, by calculating optimal clustering heads and controlling members of the cluster, the consumed energy was balanced, the usage rate of the network energy was improved and the network??s lifetime was prolonged. At the same time, a simple and effective method of assigning temporary ID was given, which can assure the dissimilarity of the IDs with large probability. The simulation results indicate that, compared with LEACH, LEACH??ID extends the lifetime of network, delays the first node??s death time, and enhances the energy efficiency.英文关键词??Key words:Wireless Sensor Network (WSN); LEACH protocol; clusterhead; temporary ID number??0 引言??由于工作环境和自身构造所限,无线传感器网络(Wireless Sensor Network, WSN)传感器节点的计算、通信能力及能量都十分有限,对于节点的更换和充电也较难实现。
述leach算法的工作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!LEACH 算法是一种基于聚类的路由协议,它的工作流程如下:1. 初始化阶段。
简述LEACH算法的基本原理。
LEACH(Low Energy Adaptive Clustering Hierarchy)算法是一种无线传感器网络中常用的能量有效的数据聚集协议。
其基本原理是将传感器节点分为若干个簇,每个簇有一个簇头节点,簇头节点负责收集和汇总本簇内的数据并将其传输到基站,从而减少无线传输的能量消耗,延长网络寿命。
LEACH算法的具体实现步骤如下:
1. 初始阶段:每个节点随机选择一个数值作为阈值,若节点的能量水平高于该阈值,则该节点有可能成为簇头节点。
2. 簇头节点选择阶段:每个节点通过计算与其距离的平方和来确定与其最近的簇头节点,并将自己加入该簇头节点所在的簇中。
每个簇头节点根据自己的能量水平计算出一个概率值,该概率值与其他节点的能量水平成反比,能量水平越高的节点成为簇头节点的概率越小。
簇头节点将自己的概率值广播给其他节点,每个节点通过比较自己的概率值和簇头节点的概率值来决定是否成为簇头节点。
3. 簇内通信阶段:每个节点将数据发送给其所在的簇头节点,簇头节点负责汇总和压缩数据,并将数据传输到基站。
4. 轮换阶段:为了平衡能量消耗,每个簇头节点轮流充当簇头节点,其他节点
重新选择簇头节点。
LEACH算法的优点是能够有效地减少能量消耗,延长网络寿命,同时具有良好的可扩展性和自适应性。
但是由于其随机性较强,可能导致网络中出现簇头节点密集或稀疏的情况,从而影响网络性能。
WSN中LEACH协议源码分析分析(一)首先对wireless.tcl进行分析,先对默认的脚本选项进行初始化:set opt(chan)Channel/\VirelessChannelset opt(prop) Propagatioii/TwoRayGroundset opt(netif)PhyAVirelessPhyset opt(mac) Mac/802_l 1set opt(ifq) Qucuc/DropTail/PriQueueset opt(ll) LLset opt(ant) Antenna/OmniAntennaset opt(x) 0 。
# X dimension of the topographyset opt(y) 0。
# Y dimension of the topographyset opt(cp),H,set opt(sc) N../mobility/scene/scen-670x670-50-600-20-2u。
# scenario file set opt(ifqlen)50o # max packet in ifset opt(nn) 51。
# number of nodesset opt(secd) 0.0set opt(stop) 10.0 o # simulation timeset opt(tr) out.tr。
# trace fileset opt(rp) dsdv 。
# routing protocol scriptset opt(lm) M on H。
# log movement在这个wireless.tcl中设置了一些全局变呈::##Initialize Global Variables#set ns_ [new Simulator]set chan [new $opt(chan)]set prop [new $opt(prop)]set topo [newTopography]set tracefd [open Sopt(tr) w]Stopo Ioad_flatgrid $opt(x) $opt(y)Sprop topography Stopo这些初始化将在后而的使用中用到,该文件最重要的是创建leach 17点:创建方法如下:} elseif { [string compare Sopt(rp) M leach,,]==0} {for {set i 0} {$i < $opt(nn) } {incr i} {leach-create-mobile-node $i}如果路由协议是leach协议,则在Uamps.tcl中调用leach-create-mobile-node方法创建leach节点。
birch算法代码Birch算法是一种用于聚类的算法,它是一种基于模型的方法,可以有效地处理大规模的数据集。
该算法由David Arthur和William Vitter于1996年提出,是一种适用于大规模数据的分布式聚类算法。
以下是一个使用Python实现的Birch算法的示例代码:```pythonimport numpy as npimport randomimport copyclass BirchClustering:def __init__(self, k, n_clusters, n_neighbors):self.k = k # 聚类个数self.n_clusters = n_clusters # 聚类数量self.n_neighbors = n_neighbors # 邻居数量self.clusters = [] # 存储聚类结果的列表self.trees = [] # 存储每个聚类树的列表def generate_initial_clusters(self, data):# 使用k-means算法生成初始聚类中心initial_clusters = np.random.choice(len(data), self.k, replace=False)clusters = self.kmeans(data, initial_clusters)return clustersdef split_tree(self, tree):# 分割树并返回新的树和剩余的数据点new_clusters = []remaining_data = []for child in tree.children:new_clusters += self.split_tree(child)remaining_data += tree.datareturn new_clusters, remaining_datadef fit_tree(self, clusters):# 根据聚类结果生成树,并返回树对象root = TreeNode(len(clusters), clusters)for i in range(self.k):for cluster in clusters:if cluster[i] == 1:breakcluster = copy.deepcopy(clusters[i])new_cluster = self.split_cluster(cluster)root.children.append(TreeNode(new_cluster))return rootdef split_cluster(self, cluster):# 分割集群并返回分割后的集群和剩余的数据点new_cluster = []remaining_data = []for point in cluster:if point not in remaining_data:new_cluster += [point]else:remaining_data += [point]return new_cluster, remaining_data[:],remaining_data[len(new_cluster)] # 数据点和剩余点重合并赋值给一个新列表返回。
一:题目1、在给定WSN的节点数目(100)前提下,节点随机分布,按照LEACH算法,实现每一轮对WSN的分簇。
记录前K轮(k=10)时,网络的分簇情况,即每个节点的角色(簇头或簇成员)。
标记节点之间的关系,标记其所属的簇头。
2、在1的基础上,增加能量有效性控制:给定的所有节点具有相同的能量,考察第一个节点能量耗尽出现在第几轮。
节点的能量消耗仅考虑关键的几次通信过程,其他能量消耗不计。
通信过程能量消耗规则如下:Setup:簇成元:每次收到候选簇头信息-1,每个候选簇头仅被收集一次;通知簇头成为其成员,发送信息-2。
候选簇头:被簇成元接收信息,即发送信息,能量-2;被通知成为簇头,接收信息能量-1。
Steady:每个簇成员每轮向簇头发送10次数据,每次成员能量-2,簇头能量-1。
二:目的(1)在固定节点个数的前提下,仿真LEACH算法的分簇过程。
(2)在上述节点个数和分簇算法的前提下,计算节点的能量消耗,判断能量消耗到0的节点出现在第几轮。
三:方法描述(1)LEACH分簇簇头选举初始阶段,每个节点根据所建议网络簇头的百分比(事先确定)和节点已经成为簇头的次数来确定自己是否当选为簇头。
每个节点产生一个0-1的随机数字,如果该数字小于阈值,节点成为当前轮的簇头。
阈值其他其中,P为预期的簇头百分比,r为当前轮数,G是最近1/p轮里没有成为簇头的节点的集合。
首先确定传感器网络中的节点个数为100个,并对所有节点初始化其三个属性,分别有type(节点类型),selected(是否当选过簇头)和temp_rand(随机数)。
设定簇头产生概率p=0.08。
算法步骤如下:Step1:随机生成100个节点位置,并赋值随机数temp_rand,设置type和selected为’N’。
Step2:将所有selected为’N’的节点随机值与做比较,若temp_rand小于等于则转向Step3,否则转向Step4。
Step3:表明节点当选为簇头节点,将type赋值’C’, selected赋值’O’。
leach协议簇头计算公式的详细计算过程Leach 协议是一种用于无线传感器网络的分簇路由协议,其中簇头的选择是一个关键环节。
下面咱们就来详细聊聊 Leach 协议簇头计算公式的计算过程。
在 Leach 协议中,簇头的选择可不是随便定的。
它有一套自己的计算公式,这个公式的目的就是为了让网络中的节点能够相对公平、有效地承担起簇头的职责,从而优化整个网络的性能。
先来说说这个公式里涉及到的一些参数。
比如说,有节点成为簇头的概率 P,网络中节点的总数 N,还有已经轮数 r 等等。
具体的计算公式是这样的:T(n) = P / (1 - P * (r mod (1 / P))) ,当 n ∈ G这里面,T(n) 表示节点 n 成为簇头的阈值,G 是在这一轮还没有被选为簇头的节点集合。
那这个公式到底咋用呢?咱来举个例子哈。
比如说一个无线传感器网络里,一共有 100 个节点,设定节点成为簇头的概率 P 是 0.1,现在已经进行到第 5 轮了。
那咱们来算一算节点 20 这一轮成为簇头的可能性。
首先算 (r mod (1 / P)) ,也就是 5 mod (1 / 0.1) = 5 mod 10 = 5 。
然后算 1 - P * (r mod (1 / P)) ,也就是 1 - 0.1 * 5 = 0.5 。
最后算 T(20) ,也就是 0.1 / 0.5 = 0.2 。
如果随机生成的一个 0 到 1 之间的数小于 0.2,那节点 20 就在这一轮被选为簇头啦。
在实际的应用中,这个公式可不是光算算就行的。
比如说,网络中的节点分布不均匀,有的地方节点密集,有的地方稀疏。
在节点密集的区域,如果按照这个公式简单计算,可能会导致簇头过于集中,这样就会加重某些区域的通信负担,影响整个网络的性能。
我之前就碰到过这样一个情况。
在一个监测森林环境的无线传感器网络中,由于树木分布的影响,有些区域的节点比较集中。
按照最初的 Leach 协议簇头计算公式选择簇头,结果就发现那些节点密集的区域能耗特别快,数据传输也不太稳定。
仿真一:在100*100 的区域内随机生成100 个节点 ( matlab 仿真代码:clear;xm=100;%x 轴范围ym=100;%y 轴范围sink.x=0.5*xm;% 基站x 轴50sink.y=0.5*ym;% 基站y 轴50n=100;E0=0.02;for i=1:1:nS(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%设置SINK 节点的坐标S(n+1).xd=sink.x;S(n+1).yd=sink.y;plot(S(n+1).xd,S(n+1).yd,'*');% 绘制基站节点仿真结果图片:‘ O'代表随机散布的节点,’* '代表SINK节点)100. CJ ■-1H I L IL L L L* Q-O90 L r-.门 c ° 0』亠1E 小■-80 —0 QC O Q70 1”o o o QC0°C Q60 O J」u「一A o50 -• *oO o □oo o40 —0 oo O30O ccP c 」。
° % 020 = c C |2 7 Co o c W10Q_ v? O0 Q n0 i J. Qn L f r i f r r0 10 20 30 40 50 60 70 80 90 100仿真二:LEACH分簇效果图(matlab代码见附件)仿真结果:(p=0.1)1、簇头个数14.100905I ctJ_ oE £L*1 L1(g80 K J*QQ o70 一o-60 -辛-50 -如宀七—**0 Q r-h.40 一土7 o一30 ”•=t=-■o o <b l' l20 --*10 k-/-1r J i r r 1 t〕1! 一r0 10 20 30 40 50 60 70 80 90 100100 2、簇头个数:113、簇头个数:12100厂 1I [1L.1 IIr c奋L90 -卡Q- 80■*却o■70 「4oQQO 160 po+ oQ0 OQO50■40 -Q0 Q QJ|O Q-Q+- 30 --ooi 內 co ◎o20l' wQ10 一_ j-c0 ■ ( L i(JLj rr t L10 2030405060 70 80 90 1004、簇头个数:10100£ L ■ L O*OoI Q IcO- **oJ 0"皓 + jgo o l;.°5Q Q*4=-c O「■■--* r ?,-Xf )r~j%QOJi『1LJTr Lf L1009080 70 60 5040 30 20 1010 20 30 405060708090(p=0.05) 1、簇头=6100 90 80 70 60 50 40 30 20 102、簇头=7L.1七L B 1 1*lL L--o o*fjftzjC0Q*—*)°如-■-*一* o cP!. iex-tr r I rr r rr 90 80 70 6050 4030 20 1010 20 30 40 5060 70809010010 20 30 40 50 60 70 80 90 10010006 08 0Z 09 09 017OSOSOL4-OLOSOS0170909OZ0806 00 L 06 08 OZ 09 09 017 OS 0 乙OL 010203040506070 8090100xLEACH分簇算法成簇效果图 100 — __ Q2 Q90一fj__fj-簇头~^宰80 — 普通节点一尸 O 话70 —G + 苇广Q X )QOQOocW-o 60Q辛 0-oy50 —SINK 节点—>七> *40 PoO30C51f °。