Files
windfarm/IFLOW.md
dmy 61fa870778 feat: 完善经济性分析功能和优化界面显示
- 新增工程运行期限、折现率、年损耗小时数参数配置
- 实现总费用计算功能(包含电缆投资NPV和电费损耗NPV)
- 修复total_investment函数调用时机问题,确保GUI模式正确计算
- 优化电缆单价显示为万元/km单位
- 总长度显示单位改为公里
- 方案对比结果新增总费用列,支持全生命周期成本比选
- 代码格式化和导入顺序优化
- 添加IFLOW.md项目上下文文档
2026-01-06 15:09:52 +08:00

240 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 海上风电场集电线路设计优化系统 - 项目上下文
## 项目概述
这是一个用于设计和优化海上风电场集电系统拓扑的综合工具专为海上能源业务开发部电气专业设计。该系统通过多种先进的拓扑优化算法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.3CAD导出
- 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`
```bash
# 使用 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. 图形化界面(推荐)
```bash
python gui.py
```
启动后,程序将弹出独立窗口,提供完整的交互式界面。
#### 2. 命令行模式
```bash
python main.py --excel your_data.xlsx
```
### 构建可执行文件
使用 Makefile 进行构建:
```bash
# 构建exe文件自动生成版本号
make build
# 重新构建(先清理再构建)
make rebuild
# 清理构建文件
make clean
# 查看帮助
make help
```
构建过程:
1. 运行 `make_version.py` 生成版本号
2. 使用 `nicegui-pack` 打包为单文件exe
3. 重命名输出文件包含版本号
构建输出位于 `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算法迭代计算互联操作的成本节省
- **优势**:能发现树状、多分叉等复杂但更经济的拓扑结构
- **适用场景**:风机分布不规则、离岸距离较远或电缆造价极高的情况
## 方案场景说明
系统自动运行三种场景:
1. **Scenario 1 (Standard)**:仅使用非可选(标准)电缆进行优化
2. **Scenario 2 (With Optional)**:包含标记为 'Y' 的大型电缆,适用于尝试增加单回路容量
3. **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日
## 许可证
本项目仅供工程学习、研究和初步设计评估使用。详细计算应以专业设计院规范为准。