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

PULP: Check variable setting against constraints

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

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

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

PULP 可以做到吗?是否有其他更好的 Python 库?我考虑过 Google 的 OR-Tools,但发现文档比 PULP 的更难解析。

你可以留在 numpy 中完成这个。查看矩阵中的一行,您可以将 A 的行设置为一个向量,然后创建一个行总和,以便您检查索引并确定它是否为真。例如:

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

最后一行 return 只是 TrueFalse。然后,如果您想更改单个索引,可以使用

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

和运行再次分析您的问题。

看起来可以通过以下方式实现:

  1. 定义 PULP 变量和约束并将它们添加到 LpProblem
  2. 以 {'variable name': value}
  3. 的形式制作你的作业字典
  4. 使用 LpProblem.assignVarsVals(your_assignment_dict) 分配这些值
  5. 运行 LpProblem.valid() 检查您的赋值是否满足所有约束和变量限制

请注意,这几乎肯定比使用 numpy 和 Ax <= b 慢。制定问题可能更容易,但性能会因 PULP 运行这些检查的方式而受到影响。