- 新增工程运行期限、折现率、年损耗小时数参数配置 - 实现总费用计算功能(包含电缆投资NPV和电费损耗NPV) - 修复total_investment函数调用时机问题,确保GUI模式正确计算 - 优化电缆单价显示为万元/km单位 - 总长度显示单位改为公里 - 方案对比结果新增总费用列,支持全生命周期成本比选 - 代码格式化和导入顺序优化 - 添加IFLOW.md项目上下文文档
8.3 KiB
8.3 KiB
海上风电场集电线路设计优化系统 - 项目上下文
项目概述
这是一个用于设计和优化海上风电场集电系统拓扑的综合工具,专为海上能源业务开发部电气专业设计。该系统通过多种先进的拓扑优化算法(MST、旋转扫描法、Esau-Williams等),根据风机坐标、功率以及海缆规格,自动生成投资成本最低、损耗最优的设计方案。
核心功能
- 🖥️ 图形化界面:基于 NiceGUI 的现代化桌面应用,支持原生窗口模式
- 🌊 多种布局生成:支持规则网格和随机分布布局的模拟数据生成
- 🔌 多算法优化:
- MST (Minimum Spanning Tree):无容量约束基准方案
- Capacitated Sweep (Base):基础扇区扫描分组
- Rotational Sweep:全局最优起始角度旋转扫描优化
- Esau-Williams:经典启发式算法,在距离与容量间寻找最优平衡
- ⚙️ 灵活参数配置:通过 Excel 自定义系统电压、功率因数、电价及电缆规格
- 📊 智能方案对比:自动运行三大场景(标准方案、含可选电缆方案、限制最大截面方案)
- 📁 多格式导出:CAD图纸(.dxf)、Excel报告、压缩包
技术栈
- 语言:Python 3.12+
- GUI框架:NiceGUI 3.4.1 + PyWebview 6.1
- 核心库:
- numpy 2.4.0:数值计算
- pandas 2.3.3:数据处理
- matplotlib 3.10.8:可视化
- scikit-learn 1.8.0:聚类算法
- networkx 3.6.1:图算法
- ezdxf 1.4.3:CAD导出
- scipy 1.16.3:科学计算
项目结构
D:\code\windfarm\
├── main.py # 核心算法和业务逻辑(1388行)
├── gui.py # NiceGUI图形界面(1067行)
├── esau_williams.py # Esau-Williams算法实现(242行)
├── generate_template.py # Excel模板生成器
├── make_version.py # 版本号自动生成脚本
├── pyproject.toml # 项目依赖配置
├── Makefile # 构建脚本
├── 使用说明/ # 中文操作手册和截图
├── build/ # 构建输出目录
└── dist/ # 打包输出目录
构建和运行
环境配置
项目使用 uv 作为包管理器,也支持 pip:
# 使用 uv(推荐)
uv sync
# 或使用 pip
pip install -r requirements.txt # 如果有requirements.txt
# 或手动安装依赖
pip install numpy pandas matplotlib scikit-learn scipy networkx ezdxf nicegui openpyxl pywebview
运行方式
1. 图形化界面(推荐)
python gui.py
启动后,程序将弹出独立窗口,提供完整的交互式界面。
2. 命令行模式
python main.py --excel your_data.xlsx
构建可执行文件
使用 Makefile 进行构建:
# 构建exe文件(自动生成版本号)
make build
# 重新构建(先清理再构建)
make rebuild
# 清理构建文件
make clean
# 查看帮助
make help
构建过程:
- 运行
make_version.py生成版本号 - 使用
nicegui-pack打包为单文件exe - 重命名输出文件包含版本号
构建输出位于 dist/ 目录,文件名格式:海上风电场集电线路设计优化系统_{VERSION}.exe
输入数据规范
Excel文件格式
输入Excel文件应包含以下三个Sheet:
1. Coordinates(坐标数据)- 必需
| Type | ID | X | Y | Power | PlatformHeight |
|---|---|---|---|---|---|
| Substation | Sub1 | 4000 | -800 | 0 | 0 |
| Turbine | 1 | 0 | 0 | 8.0 | 25 |
- Type:
Substation或Turbine - X/Y: 投影坐标(米),建议使用高斯投影坐标
- Power: 功率(MW),升压站填0
- PlatformHeight: 塔筒/平台高度(米)
2. Cables(电缆规格)- 必需
| CrossSection | Capacity | Resistance | Cost | Optional |
|---|---|---|---|---|
| 35 | 150 | 0.524 | 80 | |
| 400 | 580 | 0.0470 | 600 | Y |
- CrossSection: 导体截面(mm²)
- Capacity: 额定载流量(A),需考虑降容系数
- Resistance: 交流电阻(Ω/km)
- Cost: 综合单价(元/m)
- Optional: 可选标记(Y表示可选大截面电缆)
重要规则:
- 电缆必须按截面从小到大排列
Optional为 'Y' 的电缆最多只能有一条- 若存在可选电缆,它必须是列表中截面最大的一条
3. Parameters(系统参数)- 必需
| Parameter | Value |
|---|---|
| Voltage (kV) / 电压 (kV) | 66 |
| Power Factor / 功率因数 | 0.95 |
| Electricity Price (元/kWh) / 电价 (元/kWh) | 0.4 |
核心算法说明
1. MST(最小生成树)
- 原理:基于 Kruskal 或 Prim 算法,寻找连接所有风机且总路径长度最短的树状结构
- 特点:不考虑电缆载流量限制,仅作为理论距离基准参考
- 适用场景:小规模风电场的理论分析
2. Capacitated Sweep(基础扇区扫描)
- 原理:以升压站为中心,将平面划分为扇区,按顺时针扫描风机
- 特点:计算速度快,拓扑结构简单清晰
- 局限:对起始扫描角度敏感,可能产生"长尾巴"连线
3. Rotational Sweep(旋转扫描优化)
- 原理:尝试 0° 到 360° 之间的所有起始扫描角度
- 优势:比基础扫描法节省 3%~8% 的线缆成本
- 适用场景:最接近人工精细化排布的自动化算法
4. Esau-Williams 启发式算法
- 原理:约束最小生成树(CMST)算法,迭代计算互联操作的成本节省
- 优势:能发现树状、多分叉等复杂但更经济的拓扑结构
- 适用场景:风机分布不规则、离岸距离较远或电缆造价极高的情况
方案场景说明
系统自动运行三种场景:
- Scenario 1 (Standard):仅使用非可选(标准)电缆进行优化
- Scenario 2 (With Optional):包含标记为 'Y' 的大型电缆,适用于尝试增加单回路容量
- Scenario 3 (No Max):排除最大截面电缆,测试电缆供应受限时的最优拓扑
输出文件说明
- Excel报告:
[文件名]_result.xlsx- 包含所有方案总览及详细连接清单 - CAD图纸:
design_[方案名].dxf- 分层分色的拓扑图 - 全部方案:
[文件名]_result.zip- 包含所有图纸及Excel报告
关键常量和配置
电气参数
- 系统电压:66,000 V (66kV)
- 功率因数:0.95
- 电价:0.4 元/kWh
电缆规格示例
- 最小截面:35mm² (载流量150A)
- 最大截面:400mm² (载流量580A)
- 降容系数:0.8(实际载流量 = 额定载流量 × 0.8)
算法参数
- 默认风机数量:30台
- 默认布局:随机分布或网格
- 默认间距:800米(网格布局)
开发约定
代码风格
- 使用中文注释和文档字符串
- 函数命名使用 snake_case
- 类名使用 PascalCase
- 常量使用 UPPER_CASE
版本管理
- 版本号通过
make_version.py自动生成 - 版本号格式:v{major}.{minor}.{patch}
- 版本号存储在
version.py文件中
构建约定
- 使用
nicegui-pack进行打包 - 单文件模式(--onefile)
- 无窗口模式(--windowed)
- 输出文件名包含版本号
测试约定
- GUI测试使用 frontend-tester agent
- Python代码测试使用 python-pro agent
- 测试覆盖率要求:核心算法部分 > 80%
常见问题
Q1: MST算法显示极高的成本和损耗?
A: 这是预期行为。MST算法不考虑载流量约束,会产生单一树状结构导致根部电缆严重过载。这仅作为理论基准参考。
Q2: 如何在CAD图纸中找到图形?
A: 双击鼠标滚轮(Zoom Extents)全屏显示。风机坐标通常是大地坐标(数值很大),如果CAD当前视口在(0,0)附近,可能会找不到图形。
Q3: 可选电缆的使用规则是什么?
A:
- 可选电缆(Optional='Y')最多只能有一条
- 必须是列表中截面最大的电缆
- 用于特定场景(如增加单回路容量)
技术支持
- 适用对象:海上能源业务开发部 - 电气专业
- 技术支持:杜孟远
- 文档版本:v1.0
- 编制日期:2026年1月5日
许可证
本项目仅供工程学习、研究和初步设计评估使用。详细计算应以专业设计院规范为准。