如何仅访问 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
在我用 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