作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,在我用 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。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
关于python - 如何仅访问 PuLP 问题中的特定变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242960/
我是一名优秀的程序员,十分优秀!