You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pulp建模Linear relaxation infeasible但仍输出目标值问题

问题分析与排查建议

核心结论

  • 这不是多最优解:多最优解的前提是问题存在至少一个可行解,而你收到的Linear relaxation infeasible明确表示:你的模型的线性松弛版本(若为整数规划)或原线性规划本身,不存在任何满足所有约束的解。
  • 求解器输出的目标值完全无效:它只是求解过程中的临时迭代数值,没有对应的可行解支撑,不能作为结果参考。

具体排查方向

  • 检查能量平衡约束的符号与逻辑
    核心公式务必准确:

    光伏发电量[t] + 电池放电量[t] + E_import[t] = 建筑用电量[t] + 电池充电量[t] + E_export[t]
    

    同时SOC更新公式:

    SOC[t] = SOC[t-1] * (1 - 自放电率) + 电池充电量[t] - 电池放电量[t]
    

    注意充放电变量必须是非负的(电池充电量[t] >= 0、电池放电量[t] >= 0),如果把放电写成负数代入,会直接导致约束冲突。

  • 核对SOC的边界约束
    确保SOC的上下限与实际逻辑一致:

    • 0 <= SOC[t] <= 电池额定容量,不要把不等式方向写反(比如误写为SOC[t] >= 电池额定容量)
    • 初始SOC的设置(比如SOC[0] = 初始值)不能和其他约束冲突,比如初始值设置为50%但约束强制初始SOC为0。
  • 排查购售电变量的约束冲突
    避免出现互斥约束,比如不要同时要求E_import[t] >= 0、E_export[t] >= 0的情况下,又加了E_import[t] + E_export[t] <= 0——这会强制两个变量都为0,但能量平衡可能需要其中一个不为0,直接导致无解。

  • 统一变量单位
    确认所有变量的单位一致:比如光伏发电量用kWh、电池容量却用MWh,未做单位转换会导致约束量级严重失调,引发不可行。

  • 逐步调试约束
    先只保留最基础的能量平衡约束,运行求解器看是否可行;再逐步加入SOC约束、购售电约束,每次添加后重新求解,定位到哪一组约束加入后开始出现不可行,精准锁定矛盾点。

  • 开启求解器详细日志
    在Pulp中调用求解器时开启详细输出,比如用GLPK:

    solver = pulp.GLPK_CMD(msg=True)
    model.solve(solver)
    

    或者CBC:

    solver = pulp.CBC_CMD(msg=True)
    model.solve(solver)
    

    日志会明确指出导致不可行的约束类型或冲突变量,帮助快速定位问题。

内容的提问来源于stack exchange,提问作者Olav Bråthen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:52:57