基于论文《A GNN-Enabled Multipath Routing Algorithm for Spatial-Temporal Varying LEO Satellite Networks》的LDMR (Link Disjoint Multipath Routing) 算法完整实现。
本项目实现了面向LEO卫星网络的链路不相交多路径路由算法,主要特色:
- 完整的LDMR算法实现:严格按照论文Algorithm 1实现
- 多星座网络支持:GlobalStar、Iridium等预定义星座
- 基准算法对比:SPF、ECMP等基准算法完整实现
- 灵活的配置系统:支持多场景配置和参数调优
- 详细的性能分析:路径不相交性验证、统计分析等
- 结果导出和可视化:CSV数据导出、图表生成
- Python 3.8+
- NumPy >= 1.21.0
- NetworkX >= 2.8.0
- Matplotlib >= 3.5.0
- PyYAML >= 6.0
# 克隆项目
git clone https://github.com/Shulin-Li22/LDMR-Algorithm.git
cd ldmr-simulation
# 安装依赖
pip install -r requirements.txtpython main.pyldmr_simulation/
├── README.md # 项目说明文档
├── requirements.txt # 依赖清单
├── main.py # 完整版主程序
├── config.py # 配置管理
├── benchmark.py # 基准测试
├── param_analysis.py # 参数分析
├── config/ # 配置文件目录
│ ├── default.yaml # 默认配置
│ └── scenarios/ # 场景配置
│ ├── testing.yaml # 测试场景
│ ├── light_load.yaml # 轻负载场景
│ ├── heavy_load.yaml # 重负载场景
│ └── performance.yaml # 性能测试场景
├── src/ # 核心源代码
│ ├── algorithms/ # 算法模块
│ │ ├── ldmr_algorithms.py # LDMR核心算法 ⭐
│ │ ├── basic_algorithms.py # 基础算法
│ │ └── baseline/ # 基准算法
│ ├── topology/ # 拓扑模块
│ │ ├── topology_base.py # 基础拓扑类
│ │ └── satellite_constellation.py # 卫星星座
│ ├── traffic/ # 流量模块
│ │ └── traffic_model.py # 流量生成模型
│ └── output/ # 输出模块
│ ├── result_exporter.py # 结果导出
│ └── visualizer.py # 可视化生成
├── results/ # 结果输出
│ ├── data/ # CSV数据文件
│ └── figures/ # 图表文件
└── logs/ # 日志文件
编辑 config/default.yaml 来修改默认参数:
# 网络配置
network:
constellation: "globalstar" # 星座类型: globalstar, iridium
ground_stations: 10 # 地面站数量
satellite_bandwidth: 10.0 # 卫星链路带宽 (Gbps)
ground_bandwidth: 5.0 # 地面链路带宽 (Gbps)
# LDMR算法配置
algorithm:
K: 2 # 每个节点对的路径数量
r1: 1 # 权重下界1
r2: 10 # 权重下界2
r3: 50 # 权重上界
Ne_th: 2 # 链路利用频次阈值
# 流量配置
traffic:
total_gbps: 6.0 # 总流量 (Gbps)
duration: 180.0 # 仿真时长 (秒)
elephant_ratio: 0.3 # 大象流比例
# 输出配置
output:
enable_export: true # 启用结果导出
export_csv: true # 导出CSV数据
export_figures: true # 生成图表项目提供了多种预定义场景:
- testing.yaml: 测试场景(小规模快速测试)
- light_load.yaml: 轻负载场景
- heavy_load.yaml: 重负载场景(测试拥塞处理)
- performance.yaml: 性能测试场景(Iridium星座)
python main.py提供四个核心功能:
- 🚀 运行LDMR算法
- 📊 基准算法对比
- 🔬 参数敏感性分析
- 🔄 切换场景配置
# 运行基准测试
python benchmark.py
# 运行参数分析
python param_analysis.py# 查看可用场景
python -c "from config import list_scenarios; print(list_scenarios())"
# 切换到性能测试场景
python -c "from config import load_scenario; config = load_scenario('performance')"- 成功率:成功计算路径的流量需求比例
- 平均延迟:所有路径的平均端到端延迟
- 路径不相交率:链路不相交路径的比例
- 计算时间:算法执行时间
- 吞吐量:网络传输能力
| 算法 | 成功率 | 平均延迟(ms) | 平均路径数 | 执行时间(s) |
|---|---|---|---|---|
| LDMR | 100.0% | 183.78 | 2.0 | 2.62 |
| SPF | 100.0% | 141.88 | 1.0 | 0.43 |
| ECMP | 100.0% | 160.00 | 2.0 | 6.49 |
本项目严格按照论文Algorithm 1实现:
- 初始化阶段:重置权重矩阵和链路使用计数
- 最短路径计算:为所有节点对计算最短延迟路径
- 多路径计算:按流量大小降序处理每个需求
- 权重动态更新:根据链路使用频次调整权重
- 备用路径搜索:寻找链路不相交的备用路径
- 链路不相交性:确保多条路径之间没有共享链路
- 动态权重更新:避免路径冲突和负载不均
- 流量优先级:优先处理大流量请求
- 拓扑适应性:支持时变卫星网络拓扑
运行仿真后,系统会自动生成:
-
CSV数据文件:详细的数值结果
ldmr_results_YYYYMMDD_HHMMSS.csvbenchmark_comparison_YYYYMMDD_HHMMSS.csv
-
可视化图表:
- 算法性能对比图
- 参数敏感性分析图
- 路径分析图表
- 性能趋势图
-
摘要报告:
experiment_summary_YYYYMMDD_HHMMSS.txt
results/
├── data/ # CSV数据文件
│ ├── ldmr_results_*.csv
│ ├── benchmark_comparison_*.csv
│ └── experiment_summary_*.txt
└── figures/ # 图表文件
├── algorithm_comparison_*.png
├── parameter_sensitivity_*.png
├── path_analysis_*.png
└── performance_trends_*.png
如果您在研究中使用了本项目,请引用原始论文:
@article{huang2024gnn,
title={A GNN-Enabled Multipath Routing Algorithm for Spatial-Temporal Varying LEO Satellite Networks},
author={Huang, Yunxue and Yang, Dong and Feng, Bohao and others},
journal={IEEE Transactions on Vehicular Technology},
volume={73},
number={4},
pages={5454--5468},
year={2024},
publisher={IEEE}
}欢迎提交Issue和Pull Request来改进项目!
-
导入模块失败
# 确保项目路径正确 export PYTHONPATH="${PYTHONPATH}:$(pwd)/src"
-
配置文件不存在
# 检查配置文件 ls config/default.yaml -
依赖包缺失
# 重新安装依赖 pip install -r requirements.txt
- 减少流量规模以加快测试速度
- 调整参数
r3和Ne_th优化性能 - 使用较小的星座配置进行调试
本项目的部分代码由 GenAI 辅助生成(ChatGPT, Gemini, Claude),并由作者进行审查、修改和完善。 请在使用或参考本项目代码时,自行核实其正确性与适用性,必要时进行适当的测试和调整。
本项目采用MIT许可证 - 详见 LICENSE 文件。
- 感谢原论文作者提供的优秀算法设计
- 感谢开源社区提供的基础工具和库
- 感谢所有为项目改进做出贡献的开发者
如果这个项目对您有帮助,请给我们一个Star!这是对我们最大的鼓励和支持。
最后更新: 2025年8月7日 项目状态: 稳定版本 v2.1.0