【问题标题】:How do I access only specific variables in a PuLP problem?如何仅访问纸浆问题中的特定变量?
【发布时间】:2018-09-10 03:21:02
【问题描述】:

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

然后在下一步中,我想提取 x 等于 1 的 x 变量的索引。例如,如果 x[1][3] == 1 那么我想找到那些索引 1 和 3。他们有什么聪明的方法吗在纸浆中实现这一目标?

【问题讨论】:

    标签: python python-3.x optimization linear-programming pulp


    【解决方案1】:

    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 并获取变量,即字典最后几层中的值。

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

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 2021-02-08
      • 2022-11-11
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多