在脚本中,我经常调用该函数Rcplex(),该函数将"CPLEX环境打开"和"已关闭的CPLEX环境"打印到控制台.由于该函数被频繁调用,因此它经常打印,这非常烦人.有没有办法压制这个?我试过sink(),suppressWarnings/Messages或invisible(catch.output())但这些都不奏效了.我继续检查代码Rcplex()并找到打印到控制台的位置.Rcplex()调用底层的C函数(Rcplex.c).在rcplex.c的代码中,我找到了导致打印的命令:
REprintf("CPLEX environment opened\n");
REprintf("Closed CPLEX environment\n");
Run Code Online (Sandbox Code Playgroud)
有没有办法捕获输出,REprintf()以便它不会打印到R控制台?一种方法显然是弄乱Rcplex.c文件并删除相应的行.但是,这不是一个非常干净的解决方案,这就是为什么我要求另一种方法来捕获C函数的输出.
在我用 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)
Run Code Online (Sandbox Code Playgroud)
求解模型后,我只对 x[i][j] 取值为 1 的变量感兴趣。我知道
for v in prob.variables():
if v.varValue == 1:
print(v)
Run Code Online (Sandbox Code Playgroud)
我可以打印所有值等于 1 的变量。因此,所有值等于 1 的 x 和所有 y 变量都会被打印。如何设法仅访问 x 变量,以便不打印 y 变量?我尝试过prob.variables(x),prob.variables()[x]但到目前为止没有任何效果。
然后在下一步中,我想提取 x 等于 1 的 x 变量的索引。例如,如果x[1][3] == 1我想找到索引 1 和 3。PuLP 中有什么聪明的方法来实现这一点吗?