Python Pulp与矩阵的使用

20 投票
2 回答
13255 浏览
提问于 2025-04-17 04:05

我刚开始学Python,之前一直在用Matlab。现在我想用Pulp这个库来设置一个整数线性规划。

给定一组数字:

{P[i]:i=1...N}

我想要最大化:

sum( x_i P_i )

并且要满足一些限制条件

A x <= b
A_eq x = b_eq

还有一些边界(基于向量的边界)

LB <= x <= UB

不过在Pulp中,我不太清楚怎么正确地声明向量。我之前用的是:

RANGE = range(numpy.size(P))
x = pulp.LpVariable.dicts("x", LB_ind, UB_ind, "Integer")

但这样我只能输入单个边界(也就是只能输入一个数字)。

prob = pulp.LpProblem("Test", pulp.LpMaximize)
prob += pulp.lpSum([Prices[i]*Dispatch[i] for i in RANGE])

还有关于限制条件,我真的需要一行一行地写吗?感觉我好像漏掉了什么。希望能得到一些帮助。文档里有个简单的例子,但我这边的变量数量有几千个。

2 个回答

4

对于第一个问题,你可以像这样在其他一些问题中处理。

students = range(96)
group = range(24)

var = lp.LpVariable.dicts("if_i_in_group_j", ((i, j) for i in students for j in group),cat='binary')
10
x = pulp.LpVariable.dicts("x", RANGE,  cat="Integer")
for i in x.viewkeys():
     x[i].lowBound = LB_ind[i]
     x[i].upBound = UB_ind[i]

你可以在初始化之后为变量设置下限和上限。

你可以用以下代码创建一个变量数组。

LB[i] <= x[i] <= UB[i]

在 LpVariable.dict 中的第二个参数是决策变量的索引集合,而不是它们的下限。

撰写回答