在我用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中是否有任何聪明的方法来实现这一点?
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