Python Pulp与矩阵的使用
我刚开始学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 中的第二个参数是决策变量的索引集合,而不是它们的下限。