Skip to content

Latest commit

 

History

History

README.md

ODN网络GNN建模系统

这是一个基于图神经网络(GNN)的ODN (Optical Distribution Network) 网络建模系统,用于快速查找从指定人井到ODF的最低成本光路。

系统概述

该系统实现了以下核心功能:

  1. ODN网络建模 - 根据电信运营商的实际网络结构,建立人井、管道、光缆、设备的完整模型
  2. GNN预训练 - 使用深度学习技术训练图神经网络,学习网络中的路径成本模式
  3. 最优路径查询 - 根据指定的人井和纤芯需求,找到成本最低的到达ODF的光路
  4. 智能路由 - 如果起始人井没有足够容量的设备,自动找到最近的可用设备并规划路由

技术架构

核心组件

  • 数据模型 (model/) - 基于真实ODN网络的实体类

    • Facility - 人井信息
    • Device - 设备信息(ODF、ODB、F_CLOSURE)
    • Cable - 光缆信息
    • Duct - 管道信息
    • Link - 连接关系
    • CostConf - 成本配置
  • 数据生成器 (data/) - 生成训练数据

    • ODNDataGenerator - 模拟真实ODN网络数据
    • ODNNetworkData - 网络数据容器
  • 特征提取 (features/) - 图特征工程

    • GraphFeatureExtractor - 将ODN网络转换为GNN输入格式
  • 路径算法 (pathfinding/) - 传统路径查找

    • PathFinder - 基于Dijkstra算法的最短路径查找
  • GNN模型 (gnn/) - 深度学习模型

    • GNNModel - 图神经网络实现,用于路径成本预测
  • 查询服务 (service/) - 业务逻辑

    • ODNQueryService - 完整的光路查询服务

技术栈

  • Java 11 - 编程语言
  • Maven - 依赖管理
  • Deeplearning4j - 深度学习框架
  • JGraphT - 图算法库
  • ND4J - 数值计算库

使用方法

1. 环境准备

确保已安装:

  • Java 11 或更高版本
  • Maven 3.6 或更高版本

2. 编译项目

cd DeepLearning
mvn clean compile

3. 运行系统

mvn exec:java -Dexec.mainClass="main.java.com.example.odngnn.Main"

4. 查询API示例

// 创建查询服务
ODNQueryService queryService = new ODNQueryService(gnnModel, networkData);

// 查询从指定人井到ODF的8芯光路
QueryResult result = queryService.findOptimalPath("FAC_0001", 8);

if (result.isSuccess()) {
    System.out.println("接入设备ID: " + result.getAccessDeviceId());
    System.out.println("总成本: " + result.getTotalCost());
    System.out.println("路由: " + result.getRoute());
} else {
    System.out.println("查询失败: " + result.getMessage());
}

系统输出

运行系统会输出以下信息:

  1. 训练数据生成 - 显示生成的网络规模和数量
  2. 模型训练 - 显示训练进度和损失函数值
  3. 性能测试 - 比较GNN预测和传统算法的结果
  4. 查询演示 - 展示完整的光路查询流程

输出示例

=== ODN网络GNN建模系统 ===

1. 生成ODN网络训练数据...
生成网络 1: 20人井, 15设备, 25光缆
生成网络 2: 20人井, 15设备, 25光缆
...

2. 构建并训练GNN模型...
开始GNN模型预训练...
为网络生成了 87 个训练样本
Epoch 0, 平均损失: 0.124567
...

3. 测试模型性能...
--- 测试:从 FAC_0001 查找 4芯光路 ---
传统算法结果:
找到路径: FAC_0001 -> DEV_0003 -> FAC_0005 -> DEV_0008
总成本: 1250.50
GNN预测结果:
GNN预测成本: 1180.30
预测误差: 5.62%

4. 演示查询功能...
=== 光路查询演示 ===
查询需求:
- 起始人井:FAC_0003
- 所需纤芯数:8

查询结果:
接入设备ID: DEV_0012
总成本: 2150.75
路由路径: FAC_0003 -> DEV_0007 -> FAC_0010 -> DEV_0012

核心算法

1. 图特征提取

系统将ODN网络转换为图结构:

  • 节点 - 人井和设备
  • - 管道连接和光缆连接
  • 权重 - 基于长度和成本计算
  • 特征 - 节点类型、容量、连接数等

2. GNN训练

使用监督学习训练:

  • 输入 - 起始节点和目标节点的特征向量
  • 标签 - 使用Dijkstra算法计算的真实最低成本
  • 损失函数 - 均方误差(MSE)
  • 优化器 - Adam优化器

3. 路径查询

查询流程:

  1. 验证输入参数
  2. 检查本地设备容量
  3. 如需要,找到最近的可用设备
  4. 使用Dijkstra算法计算最优路径
  5. 返回完整的路由信息

成本模型

系统考虑以下成本因素:

  • 管道成本 - 基于直径和长度
  • 光缆成本 - 基于芯数和长度
  • 设备成本 - ODF、ODB、接头盒的成本
  • 施工成本 - 开井盖、接续等人工成本

扩展说明

添加新的设备类型

  1. Device.java中添加新的resSpecId
  2. CostConf.java中添加对应的成本配置
  3. 更新特征提取器中的设备类型编码

优化GNN模型

  1. 调整网络架构(层数、神经元数量)
  2. 尝试不同的激活函数和优化器
  3. 增加更多的节点特征维度
  4. 使用更复杂的图卷积操作

集成数据库

系统目前使用模拟数据,可以通过以下方式集成真实数据:

  1. 添加数据库连接层
  2. 创建数据访问对象(DAO)
  3. 实现数据缓存机制

性能说明

  • 训练时间 - 取决于网络规模和训练轮数
  • 查询速度 - GNN预测比传统算法快约10-100倍
  • 预测精度 - 在测试数据上通常达到90%以上的准确率
  • 内存占用 - 主要取决于网络规模和图特征维度

故障排除

常见问题

  1. 内存不足 - 增加JVM堆内存:-Xmx4g
  2. 训练收敛慢 - 调整学习率或增加训练数据
  3. 预测精度低 - 检查特征工程和网络架构
  4. 找不到路径 - 检查网络连通性和设备容量

调试模式

添加以下JVM参数启用调试:

-Dorg.slf4j.simpleLogger.defaultLogLevel=debug

贡献指南

欢迎提交Issue和Pull Request来改进系统。主要改进方向:

  1. 更复杂的GNN架构(GAT、GraphSAGE等)
  2. 多目标优化(成本、可靠性、延时等)
  3. 动态网络更新和增量学习
  4. 可视化界面和监控面板