做WSN路由仿真的同行,十有八九都在LEACH协议上栽过跟头:论文跑出来的图不好看,审稿人质疑簇头选举太随机,网络生命周期短得离谱。我前前后后做了接近一年的LEACH系改进,最后落地的这套OHILEACH(基于优化的启发式集成低能耗自适应集群层次结构协议)在Matlab里实现之后,无论是同构网络还是带异质节点的场景,寿命和吞吐都比原始LEACH提升了一大截。这篇文章不说空话,直接把协议怎么拆解、Matlab代码怎么搭、参数怎么调、坑在哪里一次说清楚。
OHILEACH全称Optimized Heuristic Integrated Low Energy Adaptive Clustering Hierarchy,核心思路就是在LEACH的“随机簇头选举”基础上,引入剩余能量感知、节点分布度量、以及启发式优化算法来全局搜索最优簇头组合。它不是某一种算法的简单替换,而是把几类改进思路集成在一起:能量加权、位置均衡、启发式寻优、自适应簇头配比,四件事合起来才叫“集成”。这个协议适合两类人来读:一是做无线传感器网络路由协议研究的学生和科研人员,想找一个能复现、能出对比图的优化基线;二是工程上做能耗管理仿真的人,需要一套模块化程度高、能快速改参数跑批量的Matlab框架。无论哪类读者,我都建议先把LEACH的阈值选举公式背熟,再去碰OHILEACH,否则你连它优化了什么都不知道。
1. 为什么LEACH不够用:聚类协议演进中被忽视的三个核心问题
LEACH的问题是老生常谈,但很多人只记住了“随机选举导致能耗不均”这一条,其实它有三个层次的问题,理解透了才知道OHILEACH每一项设计在解决什么。
1.1 随机选举带来的低能量节点早死问题
LEACH的簇头选举基于一个阈值公式:每个节点在每轮开始时生成一个0到1的随机数,如果小于阈值T(n),就当选簇头。T(n) = P / [1 - P * (r mod 1/P)],其中P是预设的簇头比例,r是当前轮次。这个公式只保证了节点在1/P轮内至多当一次簇头,完全不看剩余能量。
后果非常直观:一个剩余能量只剩5%的节点,和一个满电节点,当选簇头的概率是相等的。低能量节点一旦当选,要承担簇内数据聚合、转发、与基站通信的全部工作,下一轮基本就死了。一个节点死亡,它覆盖区域的数据就全部丢失,网络覆盖出现空洞,这个空洞会迫使周围节点增大发射功率去补偿,加速连锁死亡。这个问题在LEACH的原始论文里都不是重点,但恰恰是实际仿真中最先暴露的瓶颈。
1.2 簇头分布不均带来的覆盖空洞
随机选举的另一个麻烦是簇头可能在地理上扎堆。两个簇头离得特别近,意味着它们各自的簇半径极小,簇内成员很少,簇头负载不饱和;而另一边几个簇头之间的距离特别远,簇成员大量堆积,簇头要处理的数据量巨大,能耗迅速拉高。
这种情况用术语说就是簇间负载不均衡。LEACH没有机制去约束簇头之间的最小间距,仿真时经常出现一张图里左边三个簇头挤在一起、右边零个簇头的局面。直观后果是网络右半边的节点传输距离远,路径损耗大,很快没电。OHILEACH在做簇头选举时,把节点之间的距离分布作为一项输入,目的就是让簇头在空间中尽量均匀铺开。
1.3 固定簇头比例在异构场景下的失效
LEACH把P设为常数,经典取值0.05,意思是每轮大约5%的节点当簇头。这在同构网络中勉强够用,但一旦节点初始能量不同(异构网络),或者节点分布密度差异明显,固定P就会失效:高能量区域簇头太少,浪费能量;低能量区域簇头太多,加速死亡。
自适应机制要解决的问题就是P不能被写死。理想情况下,每轮簇头比例应该根据当前网络的剩余能量总量、活节点数、基站位置动态调整。低能量密集区域应该降低簇头比例,高能量稀疏区域应该提高簇头比例。这就是OHILEACH中“自适应”三个字的落点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. OHILEACH协议设计拆解:从优化目标函数到启发式搜索策略
OHILEACH不是一个全新的协议,它的定位是LEACH的超集:保留了LEACH的分轮次模型和“簇头聚合-转发”的基本框架,但把簇头选举环节换成了带有目标函数的启发式优化过程。下面我把协议的核心设计逐层拆开讲。
2.1 综合能量-距离-密度的候选簇头评估指标
OHILEACH的第一步不是直接选簇头,而是构造一个候选簇头评估指标,对每个节点打分。分数公式我做了归一化处理:
Score(i) = w1 * (E_rem(i) / E_avg) + w2 * (D_avg(i) / D_ref) + w3 * (N_neighbor(i) / N_max)
其中E_rem(i)是节点i的剩余能量,E_avg是当前所有活节点平均剩余能量,D_avg(i)是节点i到其邻近节点的平均距离,D_ref是网络通信半径的参考值,N_neighbor(i)是节点i通信半径内的邻居数量,N_max是全网感知到的最大邻居数。w1、w2、w3是权重系数,我在仿真里常用0.5、0.3、0.2。
这个公式的含义很直接:能量越高分越高,周围节点密度越合适分越高,邻居数量越适中分越高。注意D_avg这一项除以D_ref后,得分高低取决于节点相对位置是否“居中”——太偏远、周围没邻居的节点虽然能量高,但当选簇头会导致簇成员少、传输距离大,所以分数要打折。这一层的计算复杂度是O(n²),因为要算每个节点到所有其他节点的距离,n是节点总数。n=100时完全没问题,n=1000时
