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

如何在Pulp中固定变量值并修改约束?求解整数规划问题

解决PuLP中固定二进制变量的问题

在PuLP中,直接使用x.fixed=1无法正确固定变量值,你可以通过以下两种可靠方式实现需求:

方法一:添加等式约束

直接将x=1作为新的约束条件加入优化问题,这是最通用且不易出错的方式:

import pulp as pulp
from pulp import *

x = LpVariable("x", cat=LpBinary)
y = LpVariable("y", cat=LpBinary)
z = LpVariable("z", cat=LpBinary)
k = LpVariable("k", cat=LpBinary)
prob = LpProblem("myProblem", LpMinimize)

# 添加约束固定x=1
prob += x == 1

prob += x + y + z + k, "myProblem"

prob += x + 3*y + 2*k >= 4
prob += 3*x + 2*y - 4*z + 6*k <= 30
prob += 5*x + y <= 10

status = prob.solve()

print(LpStatus[status])
print(value(x))
print(value(y))
print(value(z))
print(value(k))

方法二:定义变量时固定取值范围

由于x是二进制变量,你可以在定义时直接将其上下界设为1,强制变量只能取1:

import pulp as pulp
from pulp import *

# 定义x时固定取值范围为1-1
x = LpVariable("x", lowBound=1, upBound=1, cat=LpBinary)
y = LpVariable("y", cat=LpBinary)
z = LpVariable("z", cat=LpBinary)
k = LpVariable("k", cat=LpBinary)
prob = LpProblem("myProblem", LpMinimize)

prob += x + y + z + k, "myProblem"

prob += x + 3*y + 2*k >= 4
prob += 3*x + 2*y - 4*z + 6*k <= 30
prob += 5*x + y <= 10

status = prob.solve()

print(LpStatus[status])
print(value(x))
print(value(y))
print(value(z))
print(value(k))

可用工具库

  • PuLP:你当前使用的库本身就支持整数规划的变量固定操作,默认搭配开源的CBC求解器。
  • 商业求解器:若需要更高效的求解能力,可以搭配Gurobi、CPLEX、SCIP等,只需在prob.solve()中指定求解器(如prob.solve(GUROBI())),前提是已安装对应库和求解器。
  • 开源求解器:除CBC外,还可使用GLPK,同样能与PuLP兼容。

内容的提问来源于stack exchange,提问作者Minh Trần

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:35:15