如何仅访问 PuLP 问题中的特定变量?

How do I access only specific variables in a PuLP problem?

在我用 PuLP 解决的 LP 模型中 python 我有两组决策变量,例如

#Variables x 
x = LpVariable.dicts("Decision_x",(range(3),range(3)),0,1,LpInteger)
#Variables y 
y = LpVariable.dicts("Decision_y",(range(3),range(3)),0,1,LpInteger)

求解模型后,我只对 x[i][j] 取值为 1 的那些变量感兴趣。我知道

for v in prob.variables():
    if v.varValue == 1:
        print(v)

我可以打印所有值为 1 的变量。因此,打印所有值等于 1 的 x 和所有 y 变量。我怎样才能设法只访问 x 变量,以便不打印 y 变量?我尝试了 prob.variables(x)prob.variables()[x],但到目前为止没有任何效果。

然后在下一步中我想提取 x 等于 1 的 x 变量的索引。例如,如果 x[1][3] == 1 那么我想找到那些索引 1 和 3。是他们在 PuLP 中有什么巧妙的方法来实现这一点?

x 是一个命令。给定 x[i][j] 处的两个索引 i,j 你有一个 pulp.LpVariable.
您事先知道 x 变量的索引,因此一种方法是例如以下

for i,j in itertools.product(range(3),range(3)):
    if x[i][j].varValue > 0:
        print((i,j), x[i][j].name, x[i][j].varValue)

或者如果您更愿意保留索引:

x_vars_indices = [(i,j) for i,j in itertools.product(range(3),range(3)) if x[i][j].varValue > 0]

另一种方法是迭代嵌套字典x并获取变量,这些变量是字典最后一层的值。

x = {0: {0: Decision_x_0_0, 1: Decision_x_0_1, 2: Decision_x_0_2},...
                ^                  ^                   ^
                |                  |                   |
                              LpVariable