【问题标题】:PULP: Check variable setting against constraintsPULP:对照约束检查变量设置
【发布时间】:2018-05-01 20:23:34
【问题描述】:

我希望使用 PULP 在 Python 中设置约束检查。假设我有变量 A1,..,Xn 和一个约束 (AffineExpression) A1X1 + ... + AnXn

给定 X 的分配(例如 X1=1、X2=4、...Xn=2),我如何检查约束是否满足?我知道如何使用 Numpy 处理矩阵,但想知道是否可以使用 PULP 让库处理这项工作。

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

纸浆可以做到这一点吗?有没有更好的 Python 库?我考虑过 Google 的 OR-Tools,但发现文档比 PULP 更难解析。

【问题讨论】:

    标签: python optimization constraints pulp


    【解决方案1】:

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

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

    请注意,这几乎肯定会比使用 numpy 和 Ax

    【讨论】:

      【解决方案2】:

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

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

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

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

      然后再次运行您的分析。

      【讨论】:

      • 对不起,如果我的问题不清楚,我想使用 PULP 或其他优化库,而不是 numpy。原因是我希望有很多约束,而 PULP 使得构建这些约束比使用矩阵手工构建要容易得多
      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多