电力网络优化仿真工具

MCP-NetSim是一款专业的电力市场优化与电网分析工具,通过经济优化(PyPSA)与物理网络分析(pandapower)的迭代耦合,提供最优且可行的解决方案。适用于学术研究、工业应用、教育及分析场景。

  • by zaka41a
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 zaka41a/MCP-NetSim

使用说明

⚡ MCP NetSim

市场清算问题——电网仿真

电力市场优化与电网分析相结合的专业研究和工程工具

特性 • 安装 • 快速开始 • 文档 • 贡献


📋 目录


🎯 概述

MCP NetSim 是一个综合仿真平台,解决了 市场清算问题(MCP) 在确保电网运行的物理可行性的同时,为电力市场提供服务。该项目实现了经济优化(PyPSA)和物理网络分析(pandapower)之间的迭代耦合,以提供最优和可行的解决方案。

关键问题已解决

电力市场运营商必须:

  • ✅ 将发电成本降至最低 (经济优化)
  • ✅ 确保物理可行性 (网络约束)
  • ✅ 处理拥堵 (线路容量限制)
  • ✅ 保持电压稳定 (电压限制)
  • ✅ 整合可再生能源 (变量生成)

MCP NetSim 通过迭代算法自动解决这个复杂的优化问题,该算法收敛到经济最优和物理可行的解。

用例

  • 🔬 学术研究:市场设计、拥堵管理、可再生能源整合
  • 🏭 工业应用:生产计划、网络分析、应急研究
  • 📚 教育:教授电力市场和电力系统优化
  • 🔍 分析:情景评估、敏感性分析、政策影响研究

✨ 特性

核心能力

  • 🔌 网络建模:使用pandapower进行交流潮流分析
  • 💰 市场优化:PyPSA经济调度(市场清算问题)
  • 🔄 迭代耦合:自动收敛到最佳可行的解决方案
  • 🌱 可再生能源一体化:可变剖面的风能和太阳能发电
  • 🔋 存储建模:具有充电/放电限制的电池存储
  • 📊 多个场景:正常、拥堵、可再生能源、N-1应急
  • 📈 交互式可视化:使用Plotly进行实时绘图
  • 🌐 网络界面:现代Streamlit仪表板
  • 💾 结果导出:CSV和Excel导出结构化数据

高级功能

  • 多时间步模拟:每小时或15分钟的分辨率
  • LMP计算:每辆巴士的位置边际价格
  • 拥塞检测:自动识别超载线路
  • 电压监测:实时电压违规检测
  • 场景管理:在测试用例之间轻松切换
  • 配置管理:基于YAML的集中式配置
  • 结构化日志记录:JSON格式的日志用于分析
  • 单元测试:带pytest的全面测试套件

🏗️ 建筑

系统架构

┌───────────────────────────────────────────────────┐
│                    MCP-NetSim Platform            │        
├───────────────────────────────────────────────────│
│                                                   │          
│  ┌──────────────┐         ┌──────────────┐        │         
│  │   Economic   │         │   Physical   │        │ 
│  │ Optimization │◄───────►│   Network    │        │         
│  │   (PyPSA)    │Iterative│   Analysis   │        │          
│  │              │Coupling │ (pandapower) │        │          
│  └──────────────┘         └──────────────┘        │          
│         │                        │                │       
│         └──────────┬─────────────┘                │          
│                    │                              │        
│              ┌─────▼─────┐                        │          
│              │  Results  │                        │          
│              │  Export   │                        │          
│              └───────────┘                        │          
│                                                   │          
└───────────────────────────────────────────────────┘

技术栈

组件 技术 目的
优化 PyPSA 市场清算问题解决者
网络分析 pandapower 交流功率流计算
可视化 绘图 交互式图表
网络界面 Streamlit 现代仪表板用户界面
数据处理 Pandas,NumPy 数据操作和分析
配置 YAML 集中式设置
测试 pytest 单元和集成测试
日志记录 Python日志 结构化JSON日志

📦 安装

先决条件

  • python:3.8或更高
  • 操作系统:macOS、Linux或Windows(带WSL)
  • 程序包管理器:pip(Python包安装程序)

步骤1:克隆存储库

git clone https://github.com/yourusername/MCP-NetSim.git
cd MCP-NetSim

步骤2:安装Python依赖项

# Install all required packages
pip install -r requirements.txt

# Or with trusted hosts (if SSL issues)
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org -r requirements.txt

步骤3:安装优化求解器(必需)

MCP NetSim需要一个优化求解器才能使PyPSA工作。

macOS

brew install cbc

Linux(Ubuntu/Debian)

sudo apt-get update
sudo apt-get install coinor-cbc

Linux(Fedora/RHEL)

sudo dnf install coin-or-Cbc

Windows(带WSL)

# In WSL Ubuntu
sudo apt-get update
sudo apt-get install coinor-cbc

步骤4:验证安装

# Test Python imports
python3 -c "import pypsa, pandapower; print('✓ All imports successful')"

# Test solver availability
python3 -c "
import pypsa
n = pypsa.Network()
n.set_snapshots([0])
n.add('Bus', 'bus1', v_nom=110)
n.add('Generator', 'gen1', bus='bus1', p_nom=100, marginal_cost=30)
n.add('Load', 'load1', bus='bus1', p_set=50)
n.optimize()
print('✓ Solver works!')
"

🚀 快速开始

选项1:Web界面(推荐)

  1. 启动web界面:

    python3 -m streamlit run app.py
    
  2. 打开浏览器:

    • 界面将在以下时间自动打开 http://localhost:8501
    • 如果没有,请手动导航到终端中显示的URL
  3. 运行模拟:

    • 从侧边栏中选择一个场景(例如“正常”)
    • 点击“🚀 运行模拟”
    • 在交互式选项卡中查看结果

选项2:命令行界面

# Run normal scenario
python3 main.py --scenario normal

# Run with verbose output
python3 main.py --scenario normal --verbose

# Run multi-timestep simulation (24 hours)
python3 main.py --scenario normal --multi-timestep --hours 24

选项3:程序化使用

from src.data.network_data import NetworkDataGenerator
from src.network.network_model import NetworkModel
from src.market.market_model import MarketModel
from src.coupling.coupling_logic import CouplingLogic

# Create network data
generator = NetworkDataGenerator()
network_data = generator.create_ieee_14_bus_network()

# Initialize models
network_model = NetworkModel(network_data)
market_model = MarketModel(network_data)
coupling_logic = CouplingLogic(network_model, market_model)

# Solve coupled problem
results = coupling_logic.solve_coupled_problem(verbose=True)

# Access results
print(f"Converged: {results['converged']}")
print(f"Total Cost: {results['total_cost']:.2f} €")
print(f"Generation: {results['generation_schedule']}")
print(f"LMPs: {results['lmps']}")

📖 用法

可用场景

场景 描述 用例
正常 标准网络操作 基线分析
拥堵 高需求场景 拥堵管理
可再生能源 可再生能源渗透率高 可再生能源整合
N-1停机 线路应急分析 安全评估

Web界面功能

  • 📊 实时可视化:价格、发电量、负载和电压的交互式图表
  • 💾 导出结果:将结果下载为CSV或Excel文件
  • ⚙️ 配置:通过侧边栏调整模拟参数
  • 📈 多个视图:在不同的可视化选项卡之间切换

命令行选项

python3 main.py [OPTIONS]

Options:
  --scenario SCENARIO     Scenario to run (normal, congestion, renewable_heavy, n1_outage)
  --verbose               Enable verbose output
  --multi-timestep        Enable multi-timestep simulation
  --hours HOURS           Number of hours for multi-timestep (default: 24)
  --output-dir DIR        Output directory for results (default: results/)

📁 项目结构

MCP-NetSim/
├── src/                          # Source code
│   ├── data/                    # Network data generation
│   │   └── network_data.py      # IEEE 14-bus and custom networks
│   ├── network/                 # Network modeling
│   │   └── network_model.py     # pandapower integration
│   ├── market/                  # Market optimization
│   │   └── market_model.py      # PyPSA MCP solver
│   ├── coupling/                # Coupling logic
│   │   └── coupling_logic.py    # Iterative algorithm
│   ├── renewables/              # Renewable integration
│   │   ├── renewable_integration.py
│   │   └── storage_model.py
│   ├── scenarios/               # Scenario management
│   │   └── scenario_manager.py
│   ├── visualization/           # Plotting functions
│   │   └── visualizer.py
│   ├── results/                 # Results export
│   │   └── results_export.py
│   └── utils/                   # Utilities
│       ├── config_loader.py     # Configuration management
│       ├── logger.py            # Structured logging
│       └── exceptions.py        # Custom exceptions
├── config/                      # Configuration files
│   └── config.yaml             # Centralized configuration
├── tests/                       # Test suite
│   ├── test_network_model.py
│   ├── test_market_model.py
│   └── conftest.py
├── results/                     # Output directory
│   └── data/                    # Exported results
├── logs/                        # Log files
├── app.py                       # Streamlit web interface
├── main.py                      # CLI entry point
├── requirements.txt             # Python dependencies
├── pytest.ini                   # pytest configuration
├── presentation.html            # Project presentation
└── README.md                    # This file

⚙️ 配置

配置通过以下方式管理 config/config.yaml.关键部分:

网络配置

network:
  base_voltage_kv: 110.0
  voltage_min_pu: 0.95
  voltage_max_pu: 1.05

市场配置

market:
  solver: cbc  # or glpk
  tolerance: 1e-6

联轴器配置

coupling:
  max_iterations: 20
  convergence_tolerance: 1e-3
  congestion_threshold: 90.0  # Percentage

日志记录配置

logging:
  level: INFO
  format: json
  file: logs/mcpsim.log

🔧 故障排除

问题:模拟不收敛(0 MW发电)

症状:

  • 汇聚:✗ No
  • 总发电量:0.00兆瓦
  • 总成本:0.00€

解决方案: 这通常意味着未安装PyPSA求解器。安装CBC:

# macOS
brew install cbc

# Linux
sudo apt-get install coinor-cbc

然后重新启动应用程序。

问题:“没有名为'pypsa'的模块”

解决方案:

pip install pypsa

问题:“没有名为'pandapower'的模块”

解决方案:

pip install pandapower

问题:功率流不收敛

可能的原因:

  • 网络数据问题
  • 电压设定值超出范围
  • 线路参数无效

解决方案:

  • 检查网络数据有效性
  • 验证电压是否在0.9-1.1 pu之间
  • 审查线路电阻/电抗值

问题:市场优化失败

可能的原因:

  • 未安装求解器
  • 发电量<负载
  • 发电机成本无效

解决方案:

  • 验证求解器安装(见上文)
  • 检查总发电量是否≥总负荷
  • 确保所有发电机成本为正

获取帮助

  • 检查web界面中的错误消息(红色框)
  • 启用详细模式: python3 main.py --scenario normal --verbose
  • 查看登录 logs/mcpsim.log
  • 看 presentation.html 详细的项目说明

📚 文档

文档文件

  • presentation.html:完整的项目演示文稿(在浏览器中打开)
  • README.md:此文件-主要文档
  • config/config.yaml:配置参考
  • 代码注释:源文件中的内联文档

关键概念

市场清算问题(MCP)

MCP根据以下条件将总发电成本降至最低:

  • 功率平衡:∑P_gen=∑P_load
  • 发电机限制:P_min≤P≤P_max
  • 网络约束:线路限制、电压限制

位置边际价格(LMP)

LMP代表每辆公交车的边际电力成本,包括:

  • 发电成本
  • 输电阻塞
  • 损失

迭代耦合

该算法迭代:

  1. 经济优化(PyPSA)
  2. 物理验证(pandapower)
  3. 如果检测到违规,则调整约束
  4. 重复直到收敛

🧪 测试

运行测试

# Run all tests
pytest

# Run with coverage
pytest --cov=src --cov-report=html

# Run specific test file
pytest tests/test_network_model.py -v

测试覆盖率

当前测试覆盖率目标:

  • 网络模型:交流潮流计算
  • 市场模型:优化求解器集成
  • 耦合逻辑:收敛算法

🤝 贡献

欢迎投稿!请遵循以下指南:

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature/amazing-feature
  3. 进行更改 通过测试
  4. 运行测试: pytest
  5. 提交更改: git commit -m 'Add amazing feature'
  6. 推送到分支: git push origin feature/amazing-feature
  7. 打开拉取请求

代码的风格

  • 遵循PEP 8 Python风格指南
  • 对函数签名使用类型提示
  • 将文档字符串添加到所有函数和类中
  • 为新功能编写单元测试

📊 结果解释

关键指标

度量 描述 正常范围
收敛 算法收敛成功 ✓ Yes
迭代 所需迭代次数 1-5
总成本 总发电成本 取决于具体情况
边际价格 位置边际价格 20-50欧元/MWh
拥挤的线路 加载行数>90% 0(理想)
电压违规 超出限制的公交车 0(理想)

了解结果

  • LMP地图:显示因拥堵导致的价格差异
  • 发电计划:每台发电机的最佳调度
  • 线路加载:识别网络中的瓶颈
  • 电压分布图:确保系统稳定性

📝 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。


🙏 致谢

  • PyPSA:Python用于电力系统分析
  • 潘达波:易于使用的电力系统分析工具
  • 溪流:用于web界面框架
  • Plotly:用于交互式可视化

📧 联系与支持

  • 电子邮件:zaksab98@gmail.com

由...制作⚡ 电力系统研究与工程

⬆ 返回页首