# LEACH
**Repository Path**: phoenix_pond_chant/LEACH
## Basic Information
- **Project Name**: LEACH
- **Description**: LEACH 分簇路由协议实现 - 面向对象设计/NumPy向量加速/异步执行/完整性能基准测试 | WSN clustering protocol
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-06-12
- **Last Updated**: 2026-06-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
---
## 📖 什么是 LEACH?
**LEACH**(Low Energy Adaptive Clustering Hierarchy)是无线传感器网络(WSN)领域最经典的分簇路由协议,由 Heinzelman 等人于 2000 年提出。
本项目不仅实现了 LEACH,还实现了 **5 种改进协议**,构成完整的 WSN 路由协议研究套件。**10 行代码即可运行仿真,一行命令切换协议。**
🎓 课程设计 · 🔬 学术研究 · 📊 IoT 仿真 · 🧠 算法教学
---
## 🆕 协议套件
| 协议 | 类型 | 核心思想 | 命令 |
|------|------|----------|------|
| **LEACH** | 分簇 | 随机阈值选举簇首 | `leach` |
| **LEACH-C** | 分簇 | 基站集中选择最优簇首 | `leach -P leach-c` |
| **LEACH-E** | 分簇 | 能耗感知加权选举 | `leach -P leach-e` |
| **PEGASIS** | 链式 | 贪心链 + 轮流链头 | `leach -P pegasis` |
| **TEEN** | 响应式 | 硬/软阈值触发传输 | `leach -P teen` |
| **LEACH-3D** | 3D 分簇 | 三维空间仿真 | `leach -P 3d` |
---
## 🚀 快速开始
### 安装
```bash
git clone https://gitee.com/phoenix_pond_chant/LEACH.git
cd LEACH
pip install -e ".[viz]"
```
### 运行
```bash
# 标准 LEACH
leach -n 100 -r 200 --plot
# 切换协议
leach -P leach-c -n 200 -r 300 # 集中式
leach -P leach-e -n 200 -r 300 # 能耗优化
leach -P pegasis -n 200 -r 300 # 链式
leach -P teen -n 200 -r 300 # 阈值响应
leach -P 3d -n 200 -r 300 # 3D 仿真
# 生成动画
leach -n 100 -r 200 --plot --animate
```
### Python 库
```python
from leach import LEACHNetwork, LEACHCNetwork, LEACHENetwork, PEGASISNetwork, TEENNetwork
# 任选一种协议
net = LEACHENetwork(num_nodes=100, num_rounds=200)
stats = net.run()
print(f"存活: {stats['alive_nodes']}/{stats['total_nodes']}")
```
---
## 📊 协议对比
### 性能对比(100 节点,200 轮)
| 协议 | 存活节点 | 首死轮次 | 平均能量 | 传输次数 |
|------|----------|----------|----------|----------|
| LEACH | 83/100 | 41 | 0.2905 J | - |
| **LEACH-C** | **100/100** | **无死亡** | 0.2363 J | - |
| **LEACH-E** | 97/100 | **108** | 0.2303 J | - |
| PEGASIS | 87/100 | 101 | 0.2411 J | - |
| **TEEN** | **100/100** | **无死亡** | **0.4864 J** | 45 |
> **关键发现**: TEEN 通过阈值机制大幅减少传输次数,能量效率最高;LEACH-C 通过集中优化实现零死亡;LEACH-E 将首死轮次从 41 推迟到 108。
### 全协议对比图

*从左到右: 网络生命周期 · 能量消耗曲线 · 首死轮次对比 · LEACH 拓扑 · TEEN 传输统计 · 汇总表*
---
## 📸 功能展示
### 🏆 LEACH-C — 集中式簇首选举
基站根据全局能量和位置信息选择最优簇首,最大化覆盖并均衡能耗。

*红色星号为基站选出的最优簇首,蓝色为普通成员。黄色三角为基站,位于区域上方。*
**核心优势**: 100/100 节点全部存活,零死亡。
---
### ⚡ LEACH-E — 能耗感知选举
修改阈值公式 `T(n) = T_base × (E_residual / E_initial)`,能量高的节点更可能成为簇首。

*左: 能量分布热力图(绿=高能量,红=低能量),圆圈标记为选出的簇首。右: LEACH vs LEACH-E 首死轮次对比。*
**核心优势**: 首死轮次从 41 推迟到 108,提升 163%。
---
### 🔗 PEGASIS — 链式路由
节点形成贪心链,每轮选择一个链头。数据沿链从两端向链头传递,每个节点只与邻居通信。

*左: 节点链路拓扑,橙色线条为链连接,红色星号为链头。右: 五种协议存活节点对比。*
**核心优势**: 通信距离短,适合大规模网络。
---
### 🎯 TEEN — 阈值响应式
簇首设定硬阈值(HT)和软阈值(ST),成员只在 `感知值 > HT 且 变化 > ST` 时传输。

*左: 节点传输次数热力图(颜色越深传输越多)。右: 每轮数据传输量,远低于最大值。*
**核心优势**: 事件驱动,传输量极低,能量效率最高(0.4864 J 剩余)。
---
### 🌐 LEACH-3D — 三维仿真
扩展到三维空间 `(x, y, z)`,支持立体部署场景。

*三维空间中的节点部署,红色星号为簇首,蓝色为普通成员。*
**核心优势**: 支持真实场景仿真(如山区传感器部署、水下网络)。
---
### 📈 CLI 运行输出
```
$ leach -P leach-e -n 100 -r 200 --seed 42
==================================================
LEACH-E Simulation Complete
==================================================
Total rounds : 200
Alive nodes : 97/100
Dead nodes : 3
Average energy: 0.2303 J
Total energy : 22.3407 J
First death : round 108
Elapsed time : 0.067 s
==================================================
```
---
## 🧬 各协议详解
### LEACH — 经典分簇
**簇首选举阈值**:
```
T(n) = p / (1 - p × (r mod 1/p)) 若 n ∈ G
T(n) = 0 其他
```
**流程**: 簇首选举 → 距离分簇 → TDMA 传输 → 簇首聚合 → 发送基站
---
### LEACH-C — 集中式
**改进**: 基站收集所有节点能量,贪心选择 k 个最优簇首(k = √(n/2π) × √(A/π))
**评分函数**: `score = 0.6 × (E/E_max) + 0.4 × (d_min/d_max)`
---
### LEACH-E — 能耗感知
**改进阈值**:
```
T(n) = T_base × (E_residual / E_initial)
```
能量高的节点阈值更大 → 更可能成为簇首 → 能耗均衡
---
### PEGASIS — 链式路由
**算法**:
1. 贪心建链:从左下角开始,每次选最近邻居
2. 轮流链头:round-robin 选链头
3. 数据沿链传递:两端 → 链头 → 基站
**优势**: 每个节点只与邻居通信,传输距离极短
---
### TEEN — 阈值响应
**阈值机制**:
- 硬阈值 (HT): 感知值 > HT 才考虑传输
- 软阈值 (ST): 变化 > ST 才实际传输
**适用场景**: 火灾监测、温度突变、事件驱动
---
### LEACH-3D — 三维仿真
**扩展**: Node3D 增加 z 坐标,距离计算 `d = √(Δx² + Δy² + Δz²)`
**适用场景**: 水下传感器网络、山区立体部署
---
## 📁 项目结构
```
LEACH/
├── src/leach/ # 核心包
│ ├── node.py # Node (2D)
│ ├── node3d.py # Node3D (3D)
│ ├── network.py # LEACHNetwork
│ ├── leach_c.py # LEACHCNetwork
│ ├── leach_e.py # LEACHENetwork
│ ├── network3d.py # LEACHNetwork3D
│ ├── pegasis.py # PEGASISNetwork
│ ├── teen.py # TEENNetwork + TEENNode
│ ├── protocol.py # 协议常量与能耗模型
│ ├── visualization.py # 可视化 + 动画
│ └── cli.py # CLI 入口
├── tests/ # 72 个单元测试
├── examples/ # 协议对比示例
└── docs/ # 详细文档
```
---
## 📚 API 参考
```python
# LEACH
from leach import LEACHNetwork
net = LEACHNetwork(num_nodes=100, num_rounds=200, p=0.05)
# LEACH-C (集中式)
from leach import LEACHCNetwork
net = LEACHCNetwork(num_nodes=100, num_rounds=200)
# LEACH-E (能耗优化)
from leach import LEACHENetwork
net = LEACHENetwork(num_nodes=100, num_rounds=200)
# PEGASIS (链式)
from leach import PEGASISNetwork
net = PEGASISNetwork(num_nodes=100, num_rounds=200)
# TEEN (阈值响应)
from leach import TEENNetwork
net = TEENNetwork(num_nodes=100, num_rounds=200, hard_threshold=50, soft_threshold=5)
# 3D 仿真
from leach import LEACHNetwork3D
net = LEACHNetwork3D(num_nodes=100, area_size=(100, 100, 100))
# 运行
stats = net.run()
# stats: { alive_nodes, dead_nodes, average_energy, total_energy, first_node_death_round, ... }
```
> 📖 完整 API 文档见 [docs/api.md](docs/api.md)
---
## ⚡ 性能
| 节点数 | LEACH | LEACH-C | LEACH-E | PEGASIS | TEEN |
|--------|-------|---------|---------|---------|------|
| 100 | 4 ms | 8 ms | 4 ms | 7 ms | 4 ms |
| 500 | 7 ms | 35 ms | 7 ms | 45 ms | 7 ms |
| 1,000 | 13 ms | 120 ms | 13 ms | 180 ms | 13 ms |
| 5,000 | 200 ms | 3 s | 200 ms | 5 s | 200 ms |
---
## 🗺️ 路线图
| 版本 | 内容 | 状态 |
|------|------|------|
| **v1.0** | LEACH · pip 包 · CLI · 34 测试 | ✅ |
| **v1.1** | LEACH-C · LEACH-E | ✅ |
| **v1.2** | 3D 网络仿真 | ✅ |
| **v1.3** | 能耗动画 (GIF) | ✅ |
| **v2.0** | PEGASIS · TEEN · 6 协议套件 · 72 测试 | ✅ |
| **v2.1** | LEACH-C 3D · TEEN 3D | 🔜 |
| **v2.2** | 协议自适应选择(AI 推荐最优协议) | 📋 |
| **v3.0** | 支持真实传感器数据接入 | 📋 |
---
## 🤝 贡献
欢迎 Issue 和 PR!详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
---
## 📄 License
[MIT](LICENSE)
---
**⭐ 如果对你的研究或学习有帮助,请点个 Star!**