打开/关闭或有效启用/禁用变量

时间:2018-04-13 18:08:42

标签: python

我正在研究一些优化问题,我有一组带有松弛变量的方程式,用于表示约束的一些输入变量。根据输入数据,我可能需要也可能不需要所有松弛变量。每次重新编写方程以包含/排除这些变量将是一件麻烦事。因此,我计划保留所有松弛变量,并且正在寻找建议,以根据问题要求快速打开或关闭这些变量。假设以下代表方程组:

X1 + slack1 = y1 X2 + slack2 = y2 X3 + slack3 = y3 . . .

如何以最短的方式将一些或所有松弛变量转换为0(基本上禁用它们)?我应该指出,变量将在代码中的多个位置使用。

我想到的一种方法是在代码的开头创建一个松弛变量字典 - 例如slack= {'slack1':0,'slack2':1,'slack3':},然后在整个代码中将这些变量称为slack['slack1']

任何其他更有效的Pythonic建议?

2 个答案:

答案 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.但我认为这不是正确的做法。