使用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,这显然不可能,说明约束条件存在矛盾,导致模型没有可行解空间。
解决方案
修正约束条件
检查所有约束的数值和符号是否符合实际业务逻辑:- 确认是否将约束的方向写反(比如
≥和≤搞混) - 核实约束中的常数项是否输入错误(例如c12的
685是否应为785,c14的705是否应为605等)
- 确认是否将约束的方向写反(比如
代码增加异常防护
在调用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}")验证可行域
可以通过绘制二维约束图像(因为只有x1、x2两个变量)直观查看约束是否存在交集,确认可行解空间是否存在。
内容的提问来源于stack exchange,提问作者Anil
相关产品推荐
相关产品推荐

