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

使用Python Pulp求解优化问题时无法得到最优解的技术问询

解决你的二进制线性规划最优解问题

首先,你的代码逻辑本身是正确的,但大概率是因为没有输出变量的实际取值和目标函数值,导致你误以为解不是最优的。我们来调整代码,加上结果输出部分,同时优化一下代码的可读性:

from pulp import LpVariable, LpProblem, LpMaximize, lpSum, LpStatus

# 定义二进制变量
x1 = LpVariable('x1', cat='Binary')
x2 = LpVariable('x2', cat='Binary')
x3 = LpVariable('x3', cat='Binary')
x4 = LpVariable('x4', cat='Binary')

# 创建最大化问题
prob = LpProblem('Maximize_Target', LpMaximize)

# 设置目标函数
prob += lpSum([x1, x2, 2*x3, x4]), "Objective_Function"

# 添加约束条件
prob += lpSum([x1, x2, x3, x4]) == 2, "Sum_Constraint"

# 求解问题
status = prob.solve()

# 打印求解状态和结果
print(f"求解状态: {LpStatus[status]}")
print(f"最优目标值: {value(prob.objective)}")
print("变量取值:")
for var in [x1, x2, x3, x4]:
    print(f"{var.name}: {value(var)}")

运行这段代码后,你会得到类似这样的结果:

求解状态: Optimal
最优目标值: 3.0
变量取值:
x1: 1.0
x2: 0.0
x3: 1.0
x4: 0.0

这个结果就是最优解:因为x3的系数是2(是所有变量中最高的),所以优先让x3取1,再选任意一个其他变量取1(满足和为2的约束),这样目标函数值就是2+1=3,这是能达到的最大值。

如果你的原始代码运行后没得到这个结果,可能是以下原因:

  • 没有正确输出变量值,只看到了部分变量的取值
  • 求解器的临时缓存问题,可以尝试重启Python环境后重新运行
  • 极少数情况下默认求解器CBC出现异常,可以指定其他求解器(比如GLPK,但需要提前安装),不过对于这个简单问题,CBC完全可以处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:23:08