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 是上述决策变量的向量)。我可以看到 numpy
有 numpy.linalg.norm
但我看不到这如何在 PuLP 中递归地创建我的约束集。我正在努力使用 lpSum
.
创建正确的语法
每个变量的权利
X1
创建两个新的非负变量 Y1
和 Z1 >=0
然后设置约束
X1 == Y1 - Z1
那么你的腹肌约束就变成了
Y1 + Z1 +.... <= 10
每个绝对变量都需要另一个变量和两组约束。
m += xn <= tn
m += -xn <= tn
那么tn的和就是xn的绝对值之和
假设我的 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 是上述决策变量的向量)。我可以看到 numpy
有 numpy.linalg.norm
但我看不到这如何在 PuLP 中递归地创建我的约束集。我正在努力使用 lpSum
.
每个变量的权利
X1
创建两个新的非负变量 Y1
和 Z1 >=0
然后设置约束
X1 == Y1 - Z1
那么你的腹肌约束就变成了
Y1 + Z1 +.... <= 10
每个绝对变量都需要另一个变量和两组约束。
m += xn <= tn
m += -xn <= tn
那么tn的和就是xn的绝对值之和