我正在研究一些优化问题,我有一组带有松弛变量的方程式,用于表示约束的一些输入变量。根据输入数据,我可能需要也可能不需要所有松弛变量。每次重新编写方程以包含/排除这些变量将是一件麻烦事。因此,我计划保留所有松弛变量,并且正在寻找建议,以根据问题要求快速打开或关闭这些变量。假设以下代表方程组:
X1 + slack1 = y1
X2 + slack2 = y2
X3 + slack3 = y3
.
.
.
。
如何以最短的方式将一些或所有松弛变量转换为0(基本上禁用它们)?我应该指出,变量将在代码中的多个位置使用。
我想到的一种方法是在代码的开头创建一个松弛变量字典 - 例如slack= {'slack1':0,'slack2':1,'slack3':}
,然后在整个代码中将这些变量称为slack['slack1']
。
任何其他更有效的Pythonic建议?
答案 0 :(得分:0)
您不能简单地使用tuples
:
slacks = [("slack1", 1), ("slack2", 0), ("slack3", 1)]
for a,b in slacks:
if b==0:
#do whatever
else:
#do whatever
直接访问元素也会更容易。要访问slack3的bool
字段,我们只需使用slacks[2][1]
如果不是列表,您只需将slack
变量用作tuples
:
slack1 = tuple('slack1', 1)
slack1[0] #acess value
slack1[1] #access on/off
答案 1 :(得分:0)
如果您可以将方程式转换为函数,那么只需将这些松弛变量作为可选关键字参数传递
def func1(x, y, slack=0):
... # your code
return result
每当这些变量无关紧要时,您只需在客户端代码中省略它们即可。 因为您不会根据请求的问题输入更改代码。提供的输入是什么,并在函数中注入。
否则要手动禁用它,您可以将它们分组到您喜欢的任何结构中,并将它们全部重置为0.但我认为这不是正确的做法。