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

使用Python的docplex求解线性规划(LP)问题失败求助

问题原因分析

你的线性规划模型无可行解,核心原因是约束条件之间存在无法同时满足的冲突:

选取关键约束组合验证:

  • 约束c14: x1 + x2 ≥ 705
  • 约束c12: 25x1 + x2 ≤ 685

将两个约束相减推导x1的范围:
(x1 + x2) - (25x1 + x2) ≥ 705 - 685
化简得:-24x1 ≥ 20 → x1 ≤ -20/24 ≈ -0.833

再看另一组约束组合:

  • 约束c16: 48x1 + x2 ≥ 650
  • 约束c11: x1 + x2 ≤ 722

相减推导x1范围:
(48x1 + x2) - (x1 + x2) ≥ 650 - 722
化简得:47x1 ≥ -72 → x1 ≥ -72/47 ≈ -1.532

再结合约束c12和c11的组合:
25x1 + x2 ≤ 685 和 x1 + x2 ≤ 722 相减得:24x1 ≤ 685 - 722 = -37 → x1 ≤ -37/24 ≈ -1.542

此时x1需要同时满足 x1 ≥ -1.532 和 x1 ≤ -1.542,这显然不可能,说明约束条件存在矛盾,导致模型没有可行解空间。

解决方案
  1. 修正约束条件
    检查所有约束的数值和符号是否符合实际业务逻辑:

    • 确认是否将约束的方向写反(比如≥和≤搞混)
    • 核实约束中的常数项是否输入错误(例如c12的685是否应为785,c14的705是否应为605等)
  2. 代码增加异常防护
    在调用print_solution()前先判断求解是否成功,避免直接抛出异常:

    from docplex.mp.model import Model
    
    m = Model(name="LP_Problem")
    x1 = m.continuous_var(name="x1")
    x2 = m.continuous_var(name="x2")
    c11 = m.add_constraint( x1 + x2 <=  722)
    c12 = m.add_constraint( 25 * x1 + x2 <= 685)
    c13 = m.add_constraint( 48 * x1 + x2 <= 678.05)
    c14 = m.add_constraint( x1 + x2 >= 705)
    c15 = m.add_constraint( 25 * x1 + x2 >= 658.25)
    c16 = m.add_constraint( 48 * x1 + x2 >= 650)
    m.minimize(2085.05 - 74 * x1 - 3 * x2)
    m.print_information()
    
    s = m.solve()
    if s:
        m.print_solution()
    else:
        print("模型无可行解或求解失败")
        print(f"求解状态详情: {m.solve_details}")
    
  3. 验证可行域
    可以通过绘制二维约束图像(因为只有x1、x2两个变量)直观查看约束是否存在交集,确认可行解空间是否存在。

内容的提问来源于stack exchange,提问作者Anil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:40:41