【问题标题】:Python Pulp absolute constraintsPython Pulp 绝对约束
【发布时间】:2019-01-19 20:10:13
【问题描述】:

假设我的 PuLP 定义中有一组决策变量:

vals = [-v for k, v in (DecisionVars.items())]

我想创建一个与所有约束之和的绝对值相关的约束。所以像:

for i in range(len(DecisionVars)):
   prob += lpSum(abs(vals[:i+1])) <= some_limit, "Absolute constraint"

但我似乎无法将 abs() 运算符应用于我的约束?

更新

好的,如果我利用这篇文章sum of absolute values constraint in semi definite programming 中的信息,那么我的问题可以用不同的方式表述。我现在正在尝试评估:

abs(x1) + abs(x2) + abs(x3) <= some_limit

正如上面链接中所指出的,答案可能是创建向量 x 的 1 范数(其中 x 是上述决策变量的向量)。我可以看到numpy 有numpy.linalg.norm,但我看不到这如何在 PuLP 中递归地创建我的一组约束。我正在努力使用lpSum 创建正确的语法。

【问题讨论】:

标签: python constraints pulp


【解决方案1】:

对每个变量都正确

X1 生成两个新的非负变量Y1 和Z1 &gt;=0

然后设置一个约束

X1 == Y1 - Z1

那么你的 abs 约束就变成了

Y1 + Z1 +.... &lt;= 10

【讨论】:

    【解决方案2】:

    您需要为每个绝对变量设置另一个变量和两组约束。

    m += xn <= tn
    m += -xn <= tn
    

    那么tn的和就是xn的绝对值之和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多