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

问题描述 投票:0回答:1

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

#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。因此,打印所有x和y值均等于1的变量。如何设置只访问x变量,以便不打印y变量?我尝试过prob.variables(x)prob.variables()[x]但到目前为止还没有任何工作。

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

python python-3.x optimization linear-programming pulp
1个回答
2
投票

x是一个词典。鉴于i,j的两个指数x[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并获取变量,这些变量是dict最后几层中的值。

x = {0: {0: Decision_x_0_0, 1: Decision_x_0_1, 2: Decision_x_0_2},...
                ^                  ^                   ^
                |                  |                   |
                              LpVariable
© www.soinside.com 2019 - 2024. All rights reserved.