使用说明
⚡ 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界面(推荐)
-
启动web界面:
python3 -m streamlit run app.py -
打开浏览器:
- 界面将在以下时间自动打开
http://localhost:8501 - 如果没有,请手动导航到终端中显示的URL
- 界面将在以下时间自动打开
-
运行模拟:
- 从侧边栏中选择一个场景(例如“正常”)
- 点击“🚀 运行模拟”
- 在交互式选项卡中查看结果
选项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代表每辆公交车的边际电力成本,包括:
- 发电成本
- 输电阻塞
- 损失
迭代耦合
该算法迭代:
- 经济优化(PyPSA)
- 物理验证(pandapower)
- 如果检测到违规,则调整约束
- 重复直到收敛
🧪 测试
运行测试
# Run all tests
pytest
# Run with coverage
pytest --cov=src --cov-report=html
# Run specific test file
pytest tests/test_network_model.py -v
测试覆盖率
当前测试覆盖率目标:
- 网络模型:交流潮流计算
- 市场模型:优化求解器集成
- 耦合逻辑:收敛算法
🤝 贡献
欢迎投稿!请遵循以下指南:
- 分叉存储库
- 创建要素分支:
git checkout -b feature/amazing-feature - 进行更改 通过测试
- 运行测试:
pytest - 提交更改:
git commit -m 'Add amazing feature' - 推送到分支:
git push origin feature/amazing-feature - 打开拉取请求
代码的风格
- 遵循PEP 8 Python风格指南
- 对函数签名使用类型提示
- 将文档字符串添加到所有函数和类中
- 为新功能编写单元测试
📊 结果解释
关键指标
| 度量 | 描述 | 正常范围 |
|---|---|---|
| 收敛 | 算法收敛成功 | ✓ Yes |
| 迭代 | 所需迭代次数 | 1-5 |
| 总成本 | 总发电成本 | 取决于具体情况 |
| 边际价格 | 位置边际价格 | 20-50欧元/MWh |
| 拥挤的线路 | 加载行数>90% | 0(理想) |
| 电压违规 | 超出限制的公交车 | 0(理想) |
了解结果
- LMP地图:显示因拥堵导致的价格差异
- 发电计划:每台发电机的最佳调度
- 线路加载:识别网络中的瓶颈
- 电压分布图:确保系统稳定性
📝 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- PyPSA:Python用于电力系统分析
- 潘达波:易于使用的电力系统分析工具
- 溪流:用于web界面框架
- Plotly:用于交互式可视化
📧 联系与支持
- 电子邮件:zaksab98@gmail.com
由...制作⚡ 电力系统研究与工程