PULP:根据约束检查变量设置

时间:2018-05-01 20:23:35

标签: python optimization constraints pulp

我正在寻找使用PULP在Python中设置约束检查。假设我有变量A1,...,Xn和约束(AffineExpression)A1X1 + ... + AnXn< = B,其中A1,..,An和B都是常量。

给定X的赋值(例如X1 = 1,X2 = 4,... Xn = 2),如何检查约束是否满足?我知道如何使用Numpy对矩阵进行此操作,但想知道是否可以使用PULP让库来处理工作。

我希望这是我可以检查特定的变量赋值。我不想对问题运行优化算法(例如prob.solve())。

PULP可以这样做吗?有不同的Python库会更好吗?我考虑过谷歌的OR-Tools,但发现文档比PULP更难解析。

2 个答案:

答案 0 :(得分:1)

看起来可以执行以下操作:

  1. 定义PULP变量和约束并将它们添加到LpProblem
  2. 以{'变量名称':value}
  3. 的形式制作您的作业字典
  4. 使用LpProblem.assignVarsVals(your_assignment_dict)分配这些值
  5. 运行LpProblem.valid()以检查您的作业是否符合所有约束和变量限制
  6. 请注意,这几乎肯定比使用numpy和Ax< = b慢。制定问题可能会更容易,但由于PULP如何运行这些检查,性能将受到影响。

答案 1 :(得分:0)

你可以保持numpy并完成这个。查看矩阵中的单行,您可以将 A 行设置为等于向量,然后创建一个行总和,以便检查索引并查找是否为真。例如:

a = A[0, :]
row_sum = a*x
sum(row_sum) <= B[0]

最后一行只返回TrueFalse。然后,如果要更改单个索引,可以使用

更新row_sum数组
row_sum[3] = a[3]*new_val

再次运行您的分析。