Python Pulp绝对约束

时间:2018-08-07 07:53:28

标签: python constraints pulp

假设我的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是上述决策变量的向量)。我可以看到numpynumpy.linalg.norm,但是我看不到它如何在PuLP中递归地创建我的约束集。我正在努力使用lpSum创建正确的语法。

2 个答案:

答案 0 :(得分:1)

每个变量正确

X1创建两个新的非负变量Y1Z1 >=0

然后设置一个约束

X1 == Y1 - Z1

然后您的吸收约束变为

Y1 + Z1 +.... <= 10

答案 1 :(得分:0)

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

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

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