Python 纸浆绝对约束

Python Pulp absolute constraints

假设我的 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() 运算符应用于我的约束?

更新

好的,如果我利用 post 中的信息,那么我的问题可以用不同的方式表述。我现在正在尝试评估:

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

正如上面 link 中指出的那样,答案可能是创建向量 x 的 1-范数(其中 x 是上述决策变量的向量)。我可以看到 numpynumpy.linalg.norm 但我看不到这如何在 PuLP 中递归地创建我的约束集。我正在努力使用 lpSum.

创建正确的语法

每个变量的权利

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

然后设置约束

X1 == Y1 - Z1

那么你的腹肌约束就变成了

Y1 + Z1 +.... <= 10

每个绝对变量都需要另一个变量和两组约束。

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

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