如何排查Gurobi求解美国2022年OPF模型的不可行约束?
排查PyPSA最优潮流(OPF)模型 infeasible/unbounded问题的方法
运行基于2022年美国实际数据的OPF模型时,出现WARNING:pypsa.linopf:Optimization failed with status warning and termination condition infeasible or unbounded警告,可按以下步骤排查问题约束:
定位故障时段
你的代码循环处理第35到40小时的快照,先单独运行每个时段的lopf,比如执行network.lopf(network.snapshots[35:36]),逐个验证,锁定触发问题的具体小时,排除其他时段干扰。生成并分析IIS文件
调用lopf时添加keep_files=True参数,PyPSA会将生成的LP/MPS模型文件保留在临时目录。用Gurobi命令行工具加载该文件,执行不可行子系统分析:gurobi_cl --computeIIS your_model_file.lp工具会生成
.ilp文件,里面列出了导致模型不可行的核心约束集合,直接指向冲突根源。核查基础数据合理性
- 负荷数据:检查目标时段的负荷值是否存在异常(如数值过大、负数,或与电网整体供电容量严重失衡)
- 发电机参数:确认
p_min_pu/p_max_pu、p_nom等参数设置合理,无停机发电机被强制出力、备用容量为0但负荷突增的情况 - 电网拓扑:排查是否存在孤岛区域(某片区无电源连接),线路
sn_nom(额定容量)是否设置过低
验证约束配置
- 检查手动添加的约束是否存在冲突(如强制节点电压在不合理区间、固定发电机出力与负荷需求矛盾)
- 确认
lopf的constraint_options参数是否意外修改了默认约束逻辑,比如关闭必要的约束松弛、开启过严的限制条件
通过松弛约束定位问题
调用lopf时设置slack=True,给模型添加微小松弛变量,若模型恢复可行,查看松弛变量的取值,对应找到被过度约束的模块;也可逐步关闭非核心约束(如备用约束、电压约束),观察模型是否恢复可行,以此缩小问题范围。
内容的提问来源于stack exchange,提问作者shqu
相关产品推荐
相关产品推荐

