我已在Python Cplex API中为MIP问题建模。有什么方法可以读取变量值-可变变量吗?
目前,我正在将变量值读取到列表中,并从LP文件中映射它们”
for i, j in zip(cpx.variables.get_names(), cpx.solution.get_values()):
cplex_details_inp.append((i, j))
通过这种方法,我能够一次读取所有变量值, 但是这种方法由于存在500k变量而导致内存问题。
如何明智地读取变量值?我没有找到任何具体的文档或示例。
答案 0 :(得分:2)
for i in cpx.variables.get_names():
cplex_details_inp.append([i,cpx.solution.get_values(i)])
有帮助。
致谢
答案 1 :(得分:1)
通过查看reference documentation,我们可以看到调用此函数的各种方法:
因此,您可以仅将要读取其变量的变量指定为该函数的参数。要么一一指定变量,要么大块读取变量。
答案 2 :(得分:0)
所有变量都是非零值吗?如果您的解决方案向量稀疏,则以下方法可以解决内存问题:
cplex_details_inp = [[i, cpx.solution.get_values(i)] for i in cpx.variables.get_names() if cpx.solution.get_values(i) > 0]
与始终append
列出列表相比,它甚至可以加快处理过程。
为了将很小的变量视为零,您可能需要使用round()
:
cplex_details_inp = [[i, cpx.solution.get_values(i)] for i in cpx.variables.get_names() if round(cpx.solution.get_values(i), precision) > 0]