LEACH分簇算法实现和能量控制算法实现
- 格式:docx
- 大小:204.97 KB
- 文档页数:10
• 73•作为无线传感器网络的重要技术,WSN 路由协议是学术研究的热门话题。
LEACH 协议作为典型的的分簇算法它有很多的优点,但也有不足之处。
本文首先分析了原始的LEACH 算法。
缺点是没有考虑节点的剩余能量和位置。
在本文中,改进了缺陷,并将剩余的能量添加到考虑标准中,并且还增加了簇头之间的距离以避免形成热区域和簇头分布太密集。
通过Matlab 仿真,验证了改进的LEACH 算法可以使簇头分布更均匀,更能节省能耗,提高了网络生命周期。
1 LEACH协议LEACH (Low Energy Adaptive Clustering Hierarchy )全称是“低能耗自适应分簇型路由算法”,它是一种基于LEACH 协议的算法,因此被称作LEACH 算法,它作为层次型分簇路由算法,是无线传感器中很典型的代表(柳丽娜,无线传感器网络中LEACH 算法的研究和改进:吉林大学,2012)。
第一步,节点的初始化;第二步,选出网络中的簇头节点;第三步,正常部分成为簇头之后的初始化(基站的初始化,公共传感器节点的能量等),属于网络的建立阶段,并且选择簇头是在随机过程中生成的。
然后网络稳定来进行数据传输。
这属于一个循环,然后来回循环直到能量耗尽。
其中在选择簇头的过程中,首先会产生0到1的随机数值,如果产生的此数值比T(n)大,那么该节点就被选为簇首,T(n)就作为能否当选为簇头的标准。
T(n)的表达式为:(1)其中:P 是选举的簇头比例;r 是此时正在进行的轮数;G 是此时还没当选簇头的节点集合。
2 LEACH协议不足在分析了经典的LEACH 分簇算法过程中,虽然优点很多,但也存在一些缺点(唐甲东,蔡明,无线传感器网络路由协议研究-LEACH 路由协议的改进:计算机工程,2013):(1)簇头很容易产生在一些能量很低的节点上,从而会大大降低网络的寿命。
(2)簇头节点分布不均匀,有些过于集中,因此能量不能达到均衡状态。
LEACH算法讲解LEACH(low energy adaptive clustering hierarchy)算法是⼀种⾃适应分簇拓扑算法,它的执⾏过程是周期性的,其中定义了“轮”(round)的概念来实现周期性。
每轮循环分为族的建⽴阶段和稳定的数据通信阶段。
1、在簇的建⽴阶段,相邻节点动态地形成簇,随机产⽣簇头;2、在数据通信阶段,簇内节点把数据发送给簇头,簇头进⾏数据融合并把结果发送给汇聚节点。
由于族头需要完成数据融合、与汇聚节点通信等⼯作,所以能量消耗⼤。
LEACH算法能够保证各节点等概率地担任簇头,使得⽹络中的节点相对均衡地消耗能量。
1、簇头选举⽅法LEACH算法选举簇头的过程如下:节点产⽣⼀个0~1之间的随机数,如果这个数⼩于阀值T(n),则发布⾃⼰是簇头的公告消息。
在每轮循环中,如果节点已经当选过簇头,则把T(n)设置为0,这样该节点不会再次当选为簇头。
对于未当选过簇头的节点,则将以T(n)的概率当选;随着当选过簇头的节点数⽬增加,剩余节点当选簇头的阀值T(n)随之增⼤,节点产⽣⼩于T(n)的随机数的概率随之增⼤,所以节点当选簇头的概率增⼤。
当只剩下⼀个节点未当选时,T(n)=1,表⽰这个节点⼀定当选。
T(n)可表⽰为:其中,P是簇头数量占全部节点数量的百分⽐(⼀般会设为⼀个固定值,如 0.05 ),r是选举轮数,r mod (1/P)代表这⼀轮循环中当选过簇头的节点个数,G是在最后1/P轮中没有成为簇头的节点集。
2、数据通信当簇头选定之后,簇头节点主动向⽹络中节点⼴播⾃⼰成为簇头的消息。
接收到此消息的节点,依据接收信号的强度,选择它所要加⼊的簇,并发消息通知相应的簇头。
基于时分多址(Time Division Multiple Address,简称TDMA)的⽅式,簇头节点为其中的每个成员分配通信时隙,并以⼴播的形式通知所有的簇内节点。
这样保证了簇内每个节点在指定的传输时隙进⾏数据传输,⽽在其他时间进⼊休眠状态,减少了能量消耗。
基于LEACH协议的动态轮时间算法——LEACH-DRT钟一洋;刘兴长【摘要】Regarding the disadvantages of uneven clustering and fixed round time in Low Energy Adaptive Clustering Hierarchy ( LEACH) protocol, the Dynamic Round-Time ( DRT) algorithm based on LEACH ( LEACH-DRT) was proposed to prolong network life time. The algorithm obtained clusters' and member nodes' information from base station, and then figured out clusters' round time according to the number of clusters' member nodes and clusters' remaining energy. The time information was sent to different clusters by base station. Clusters began to work according to the time information received. Meanwhile, by using the new cluster head election mechanism, it avoided the data loss and useless energy consumption caused by the cluster's insufficient energy. The analysis and simulation results show that the improved algorithm prolongs about four times network life time and reduces the probability of data loss by 18% than LEACH protocol. It also demonstrates that LEACH-DRT algorithm achieves a better application effect at balancing energy consumption and data loss rate.%为延长无线传感器网络(WSN)的生存时间,针对低功耗自适应集簇分层(LEACH)协议中分簇不均匀和轮时间固定的问题,提出了一种基于LEACH协议的动态轮时间(LEACH-DRT)算法.通过基站获取簇和簇内成员节点信息,根据簇内成员节点数和簇内剩余能量计算出各簇的轮时间,并由基站将时间信息发送至各簇,各簇按接收到的时间信息进行工作.同时,利用新的簇头选取机制,避免了因簇头节点能量不足导致的数据丢失和成员节点的无谓消耗.分析和仿真结果表明,改进后的算法比LEACH协议延长了约4倍的网络生存时间,数据丢失率降低了约18%,在均衡网络能量消耗和降低数据丢失率方面取得了较好的应用效果.【期刊名称】《计算机应用》【年(卷),期】2013(033)001【总页数】4页(P120-123)【关键词】网络生存时间;低功耗自适应集簇分层协议;不均匀分簇;轮时间;数据丢失率【作者】钟一洋;刘兴长【作者单位】后勤工程学院后勤信息工程系,重庆401311;后勤工程学院后勤信息工程系,重庆401311【正文语种】中文【中图分类】TP393.090 引言随着计算成本的下降以及微处理器体积的减小,越来越多的无线传感器网络(Wireless Sensor Network,WSN)投入使用。
简述LEACH算法的基本原理。
LEACH(Low Energy Adaptive Clustering Hierarchy)算法是一种无线传感器网络中常用的能量有效的数据聚集协议。
其基本原理是将传感器节点分为若干个簇,每个簇有一个簇头节点,簇头节点负责收集和汇总本簇内的数据并将其传输到基站,从而减少无线传输的能量消耗,延长网络寿命。
LEACH算法的具体实现步骤如下:
1. 初始阶段:每个节点随机选择一个数值作为阈值,若节点的能量水平高于该阈值,则该节点有可能成为簇头节点。
2. 簇头节点选择阶段:每个节点通过计算与其距离的平方和来确定与其最近的簇头节点,并将自己加入该簇头节点所在的簇中。
每个簇头节点根据自己的能量水平计算出一个概率值,该概率值与其他节点的能量水平成反比,能量水平越高的节点成为簇头节点的概率越小。
簇头节点将自己的概率值广播给其他节点,每个节点通过比较自己的概率值和簇头节点的概率值来决定是否成为簇头节点。
3. 簇内通信阶段:每个节点将数据发送给其所在的簇头节点,簇头节点负责汇总和压缩数据,并将数据传输到基站。
4. 轮换阶段:为了平衡能量消耗,每个簇头节点轮流充当簇头节点,其他节点
重新选择簇头节点。
LEACH算法的优点是能够有效地减少能量消耗,延长网络寿命,同时具有良好的可扩展性和自适应性。
但是由于其随机性较强,可能导致网络中出现簇头节点密集或稀疏的情况,从而影响网络性能。
无线传感网络中的能量优化算法无线传感网络(Wireless Sensor Network, WSN)由大量分散的传感器节点组成,这些节点可以感知环境中的物理信息,并将数据通过无线信号传输到基站节点。
然而,传感器节点通常由于能源有限而导致寿命较短,因此能量优化算法在无线传感网络中起着至关重要的作用。
本文将介绍一些常见的能量优化算法,并对它们的原理和应用进行分析。
一、分簇算法1. LEACH算法LEACH(Low Energy Adaptive Clustering Hierarchy)是一种经典的分簇算法,在无线传感网络中得到广泛应用。
LEACH算法通过均匀地将传感器节点划分为多个簇来降低整体能耗。
每个簇由一个簇首节点负责进行数据聚合和传输,其他节点通过与簇首节点的短距离通信来减少能量消耗。
LEACH算法通过轮流选举簇首节点的方式,实现了能量的均衡分配,以延长整个网络的寿命。
2. HEED算法HEED(Hybrid Energy-Efficient Distributed Clustering)算法是一种改进的分簇算法,它根据节点的能量水平和节点之间的通信距离选择簇首节点。
HEED算法通过在能量消耗较低且距离较近的节点之间建立簇来实现能量的有效利用。
此外,HEED算法还引入了节点的剩余能量因素,以进一步优化簇首节点的选择过程。
二、路由算法1. SPAN算法SPAN(Sensor Protocols for Asynchronous Network)算法是一种经典的无线传感网络路由算法,它通过优化路由路径和节点的休眠机制来降低能源消耗。
SPAN算法使用浅度睡眠和深度睡眠的方式来控制节点的活跃时间,从而减少能量的消耗。
同时,SPAN算法还引入了数据预处理和数据融合的策略,以减少节点之间的通信量,从而降低了能源开销。
2. AODV算法AODV(Ad hoc On-Demand Distance Vector)算法是一种基于距离向量的路由协议,适用于无线传感网络中的动态拓扑环境。
无线传感器网络中能效优化算法的使用教程无线传感器网络(Wireless Sensor Network,缩写WSN)是由许多无线传感器节点组成的网络,节点分散在监测区域内,通过无线通信传输收集到的数据。
在WSN中,能源是一个关键资源,因此如何优化能量消耗成为了研究的重要问题。
本文将为您介绍几种在无线传感器网络中常用的能效优化算法,并详细说明每个算法的使用方法和优势。
1. LEACH算法LEACH(Low Energy Adaptive Clustering Hierarchy)是一种经典的能效优化算法。
它通过分簇的方式将传感器节点划分为无数个簇,并通过轮流担任簇首的方式来实现对能量消耗的均衡。
LEACH的使用方法如下:- 建立初始网络:将网络中的传感器节点随机地分为簇首节点和普通节点,并为每个节点分配能量。
- 簇首选举:普通节点根据一定的概率选择成为簇首节点,同时广播自己的信息给其他节点。
- 数据收集:簇首节点负责收集整个簇中的数据,并将聚合后的数据发送到基站进行处理。
LEACH算法的优点是能够减少数据传输的距离和能量消耗,从而延长整个网络的寿命。
2. PEGASIS算法PEGASIS(Power Efficient Gathering in Sensor Information Systems)是一种基于链路的能效优化算法。
它通过建立一个节点的链表来传输数据,从而减少节点之间的通信开销。
使用PEGASIS算法的方法如下:- 邻居查询:每个节点查询自己的邻居节点,并选择与自己距离最近的节点作为自己的下一个节点。
- 建立链表:每个节点根据前一步选择的下一个节点建立自己的链表,节点之间通过直接跳跃实现链表的建立。
- 数据收集:链表的第一个节点负责收集整个链表中的数据,并将数据传输到基站。
PEGASIS算法的优势在于能够有效减少节点之间的通信开销,从而延长整个网络的寿命。
3. S-MAC算法S-MAC(Sensor Medium Access Control)是一种基于时间同步和睡眠模式的能效优化算法。
Leach协议简介Leach(Low Energy Adaptive Clustering Hierarchy)是一种无线传感器网络中常用的分簇协议。
该协议基于分簇的方式,使得无线传感器节点能够有效地将数据传输到基站,从而延长整个网络的生命周期。
本文将介绍Leach协议的工作原理、特点以及应用场景。
工作原理Leach协议采用分簇的方式组织无线传感器节点。
每个节点在每个轮次中以一定的概率成为簇头节点,并负责收集和聚合其他节点的数据,并将聚合后的数据传输给基站。
其工作原理如下:1.初始阶段:每个节点根据预设的概率成为簇头节点。
这个概率可以在每个轮次中动态调整,以保证所有节点都有机会成为簇头节点。
2.簇头选择:节点通过计算与其它节点的距离来决定自己是否成为簇头节点。
距离越小,成为簇头的概率越高。
这样可以保证簇头节点分布均匀,避免节点集中在某一区域。
3.簇头通信:簇头节点负责与其他节点进行通信,收集并聚合数据。
簇头节点通过多跳的方式将数据传输给基站。
这种多跳方式减小了节点到基站的距离,节约了能量。
4.簇头轮流变更:为了均衡网络中各个节点的能量消耗,每个节点在一个轮次中只能成为簇头一次。
通过轮流变更簇头节点,可以使得每个节点都有机会承担更多的能量负担。
特点Leach协议具有以下几个特点:1.能量均衡:通过每个节点轮流变更成为簇头节点,Leach协议可以使得网络中各个节点的能量消耗均衡。
避免了少数节点能量消耗过快导致网络寿命缩短的问题。
2.低能耗:Leach协议采用分簇的方式,只有簇头节点需要与基站进行通信,其余节点只需要将数据传输给簇头节点即可。
这种方式减小了节点的能量消耗,延长了网络的寿命。
3.自适应性:Leach协议中的簇头节点选择是基于节点之间的距离计算的,距离越小的节点成为簇头的概率越高。
这种自适应性使得网络能够适应节点的位置分布,提高了网络的覆盖范围。
4.扩展性:Leach协议支持大规模无线传感器网络。
无线传感器网络中的能量平衡算法教程无线传感器网络(Wireless Sensor Networks,WSN)是由大量的传感器节点组成的网络,这些节点具有自主感知、数据处理和通信能力。
然而,传感器节点的能量供应是有限的,因此能量消耗成为影响网络寿命和性能的关键因素之一。
能量平衡算法是在传感器网络中广泛应用的一种方法,旨在合理分配能量,延长网络的寿命。
1. 能量平衡算法的概述能量平衡算法是一种通过有效地分配传感器节点的能量消耗来平衡整个网络能量消耗的算法。
其主要目标是使所有节点的能量消耗尽可能均衡,避免个别节点能量过早耗尽而导致整个网络失效。
2. 常用的能量平衡算法(1) LEACH(Low Energy Adaptive Clustering Hierarchy)算法LEACH是一种经典的能量平衡算法,采用分簇的方式组织节点,通过选择簇首节点来收集、处理和传输数据,降低了传感器节点的能量消耗。
LEACH算法具有简单的实现和低延迟的优点,适合大规模传感器网络。
(2) EECS(Energy Efficient Clustering Scheme)算法EECS算法在LEACH算法的基础上进行了改进,通过引入能量策略和吞吐量策略来选择簇首节点。
能量策略在选举过程中考虑节点的剩余能量,以降低能量消耗不均衡带来的影响。
吞吐量策略则通过评估节点的数据吞吐量来选择簇首节点,以提高网络性能。
(3) SEP(Stable Election Protocol)算法SEP算法是一种基于概率选择节点角色的能量平衡算法。
它通过引入稳定性概念来选择簇首节点,以确保网络中每个节点都有机会成为簇首节点,从而实现能量消耗的均衡。
3. 能量平衡算法的工作原理能量平衡算法的工作原理通常包括以下几个步骤:(1) 初始设置:确定网络的拓扑结构和参数设置,包括节点数量、节点分布以及网络通信协议等。
(2) 节点选举:根据算法的选举策略选择簇首节点,通常考虑节点的能量和通信质量等因素。
一:题目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’。
Step4:表明节点为普通节点,将type扔赋值’N’, selected不改变赋值。
Step5:遍历所有节点,若节点type为’C’,将节点在图上标记’*’,并标上节点数目。
否则将节点在图上标记为’o’,同时标记上节点数目。
Step6:如果节点为普通节点,则计算其与所有簇头的欧式距离,形成距离矩阵。
Step7:利用min函数,找到与普通节点相距最近的簇头,并将其相连接。
Step8:一轮分簇结束,返回Step1开始下一轮分簇过程。
所以在试验中通过计算每个普通节点到所有簇头的距离,并将该普通节点与相距最近的簇头节点相连,并将簇头节点的selected属性标记,保证当过簇头的节点在之后的分簇过程中不会再当选为簇头节点。
在10轮的分簇试验中选取5张分簇网络图,具体分簇情况分簇头簇成员71 3,27,2228 72,82,40,57,20,28,87,15,48,38,48,256 97,55,75,33,78,5,18,9911 49,83,12,36,89,9,61,52,6200 98,24,84,17,11,66,69,45,81,96,35,46,84,54,64,54,2114 13,73,44,47,0143 16,10,60,74,29,51,19,59,92,5693 02,58,08,88,67,79,96,33,50,32,53,77,34,39,65,35,37,42,31,70,76,91,30,26(2)节点能量消耗试验中通过对能量消耗规律的分析可以得出:假设某轮分簇中第i个簇头的簇成员有a 个,所以在这一轮中的通信过程中簇头消耗的能量为2+11*a,簇成员消耗的能量为22。
所以增加节点的一个属性为S(i).power,从而到达能量消耗监测的目的。
设置标志位,当发现第一个节点能量耗尽情况出现时,则结束程序,并用黑色标记。
而已做过簇头的节点用红色标记。
四:实验结论在本次实验中首先通过对LEACH算法的分析研究,学习了其进行传感器节点网络分簇的步骤,同时在P=0.08和节点数目为100的前提下通过MATLAB仿真在节点数目不变的情况下10轮的分簇结果。
在能量的消耗试验中,首先通过对簇头以及簇成员在一轮分簇通信过程中的能量消耗规律统计,简化了实验步骤。
通过仿真,第一个节点能量耗尽的情况出现在第5轮。
通过这次实验,对传感器网络的通信协议以及能量消耗控制有了更加深入的研究和探讨,收获很多。
1、Leach分簇:close allclear all;clc;pm=100; %概率范围xm=100; %x轴范围ym=100; %y轴范围line=10; %连线距离初始值sink.x=0.5*xm; %基站x轴 50sink.y=0.5*ym; %基站y轴 50n=100;p=0.08;for i=1:1:n %随机产生100个点S(i).xd=rand(1,1)*xm;S(i).yd=rand(1,1)*ym;S(i).temp_rand=rand;S(i).type='N'; %进行选举簇头前先将所有节点设为普通节点S(i).selected='N';S(i).power=300;hold on;endnum11=0;num12=0;flag=1;while(flag)for r=1:1:10figure(r);for i=1:1:n %随机产生100个点S(i).temp_rand=rand;endfor i=1:1:nif S(i).selected=='N'%if S(i).type=='N' %只对普通节点进行选举,即已经当选簇头的节点不进行再选举if ( S(i).temp_rand<=(p/(1-p*mod(r,round(1/p)))))S(i).type='C'; %节点类型为蔟头S(i).selected='O';plot(S(i).xd,S(i).yd,'*');text(S(i).xd,S(i).yd,num2str(i));num11=num11+1;else S(i).type='N'; %节点类型为普通plot(S(i).xd,S(i).yd,'o');text(S(i).xd,S(i).yd,num2str(i));num12=num12+1;endendif S(i).type=='C'plot(S(i).xd,S(i).yd,'*'); %蔟头节点以*标记text(S(i).xd,S(i).yd,num2str(i));elseplot(S(i).xd,S(i).yd,'o'); %普通节点以o标记text(S(i).xd,S(i).yd,num2str(i));endhold on;end%判断最近的簇头结点,如何去判断,采用距离矩阵yy=zeros(n);for a=1:1:nif S(a).type=='N'for b=1:1:nif S(b).type=='C'length(a,b)=sqrt((S(a).xd-S(b).xd)^2+(S(a).yd-S(b).yd)^2); %簇头与每个普通节点的距离elselength(a,b)=10000;endend[val,b]=min(length(a,:));plot([S(b).xd;S(a).xd],[S(b).yd;S(a).yd]) %将节点与簇头连起来,即加入簇头集合yy(a,b)=1;hold onelselength(a,:)=10000;endendfor i=1:1:nif S(i).type=='C'number=sum(yy(:,i))S(i).power=S(i).power-(2+11*number);elseS(i).power=S(i).power-22;endendfor i=1:1:nS(i).type='N';endendfor i=1:1:nif (S(i).power)<0text(S(i).xd,S(i).yd,num2str(i));flag=0;endendif flag==0breakendend2、能量clearclcclose allxm=100;ym=100;line=10;sink.x=0.5*xm;sink.y=0.5*ym;n=100;p=0.05;send_dissipation=2;receive_dissipation=1;for i=1:1:nS(i).xd=rand(1,1)*xm;S(i).yd=rand(1,1)*ym;S(i).temp_rand=rand;S(i).energy=500;S(i).signal='L';S(i).type='N';S(i).selected='N';hold on;endr=1;flag=1;while(flag)for i=1:nifS(i).selected=='N'&(S(i).temp_rand<=(p/(1-p*mod(r,round(1/p)))))&S(i).signal==' L'flag=1;break;endif i==nifS(i).selected=='Y'|(S(i).temp_rand>=(p/(1-p*mod(r,round(1/p)))))|S(i).signal==' D'flag=0;endendendif flag==0break;endfigure(r);for i=1:nif S(i).signal=='L'if S(i).selected=='N'if ( S(i).temp_rand<=(p/(1-p*mod(r,round(1/p)))))S(i).type='C';S(i).selected='Y';S(i).energy=S(i).energy-send_dissipation;plot(S(i).xd,S(i).yd,'r*');text(S(i).xd,S(i).yd,num2str(i));elseS(i).type='N';plot(S(i).xd,S(i).yd,'bo');text(S(i).xd,S(i).yd,num2str(i));endelseplot(S(i).xd,S(i).yd,'r.','markersize',20);text(S(i).xd,S(i).yd,num2str(i));endhold on;endenddistance=zeros(1,100);num_cluster=zeros(1,100);for i=1:100distance(1,i)=100000;endfor a=1:1:nif S(a).signal=='L'&S(a).type=='N'for b=1:1:nif S(b).signal=='L'&S(b).type=='C'distance(1,b)=sqrt((S(a).xd-S(b).xd)^2+(S(a).yd-S(b).yd)^2);S(a).energy=S(a).energy-receive_dissipation;endendmin=100000;for i=1:nif distance(1,i)<min;min=distance(1,i);nearest_cluster=i;endendif min~=100000;plot([S(nearest_cluster).xd;S(a).xd],[S(nearest_cluster).yd;S(a).yd],'b'); hold on;S(a).energy=S(a).energy-send_dissipation;S(nearest_cluster).energy=S(nearest_cluster).energy-receive_dissipation;S(a).energy=S(a).energy-10*send_dissipation;S(nearest_cluster).energy=S(nearest_cluster).energy-10*receive_dissipation; endendendenergy=zeros(1,100);energy1=zeros(1,100);for i=1:nenergy(1,i)=S(i).energy;endenergy1=sort(energy);for i=1:nif S(i).energy<=0S(i).signal='D';plot(S(i).xd,S(i).yd,'k.','markersize',20);text(S(i).xd,S(i).yd,num2str(i));hold on;endendfor i=1:nS(i).type='N';if S(i).selected=='N'S(i).temp_rand=rand;end endr=r+1; end。