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 只是 True
或 False
。然后,如果您想更改单个索引,可以使用
更新 row_sum
数组
row_sum[3] = a[3]*new_val
和运行再次分析您的问题。
看起来可以通过以下方式实现:
- 定义 PULP 变量和约束并将它们添加到 LpProblem
- 以 {'variable name': value}
的形式制作你的作业字典
- 使用 LpProblem.assignVarsVals(your_assignment_dict) 分配这些值
- 运行 LpProblem.valid() 检查您的赋值是否满足所有约束和变量限制
请注意,这几乎肯定比使用 numpy 和 Ax <= b 慢。制定问题可能更容易,但性能会因 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 库?我考虑过 Google 的 OR-Tools,但发现文档比 PULP 的更难解析。
你可以留在 numpy 中完成这个。查看矩阵中的一行,您可以将 A 的行设置为一个向量,然后创建一个行总和,以便您检查索引并确定它是否为真。例如:
a = A[0, :]
row_sum = a*x
sum(row_sum) <= B[0]
最后一行 return 只是 True
或 False
。然后,如果您想更改单个索引,可以使用
row_sum
数组
row_sum[3] = a[3]*new_val
和运行再次分析您的问题。
看起来可以通过以下方式实现:
- 定义 PULP 变量和约束并将它们添加到 LpProblem
- 以 {'variable name': value} 的形式制作你的作业字典
- 使用 LpProblem.assignVarsVals(your_assignment_dict) 分配这些值
- 运行 LpProblem.valid() 检查您的赋值是否满足所有约束和变量限制
请注意,这几乎肯定比使用 numpy 和 Ax <= b 慢。制定问题可能更容易,但性能会因 PULP 运行这些检查的方式而受到影响。