【发布时间】:2016-07-20 16:16:21
【问题描述】:
我使用 'prob.solve(CPLEX())' 在 PuLP 中调用 CPLEX。
但是,我想知道如何在这里使用障碍算法来获得更非零的解决方案。
谢谢。
【问题讨论】:
我使用 'prob.solve(CPLEX())' 在 PuLP 中调用 CPLEX。
但是,我想知道如何在这里使用障碍算法来获得更非零的解决方案。
谢谢。
【问题讨论】:
我不是纸浆专家,但看起来这是可能的(不过,我不确定它的可靠性如何)。这里有一个hint,介绍了如何使用 CPLEX DLL 共享库设置 CPLEX 参数。我相信这已经过时了,但这是该线程中相应的 sn-p:
>>>> solver = CPLEX_DLL()
>>>> CplexDll.CPXsetintparam(solver.env, CPX_PARAM_MIPDISPLAY, 4)
Good point I would prefer
>>> solver.CPXsetintparam(CPX_PARAM_MIPDISPLAY, 4)
As this only requires Knowledge of CPLEX parameters and not Pulp internals
但是,在最新版本的 PuLP(1.6.1 版)中,CPLEX_DLL 类似乎具有 setLpAlgorithm 方法以使其更方便。这是一个例子,只是为了给你一个要点:
>>> from pulp import *
>>> cplex_dll_path
'<path_on_your_machine>/libcplex1263.so'
>>> solver = CPLEX()
>>> solver.setLpAlgorithm(4)
<path_on_your_machine>/libcplex1263.so 必须在pulp.cfg.(linux|osx|win) 文件中配置(在安装纸浆模块的目录中)。 solver.setLpAlgorithm(4) 中的幻数“4”对应于CPX_ALG_BARRIER(参见here)。
话虽如此,如果您想更好地控制 CPLEX,直接使用 CPLEX Python API 可能会更好(尽管它是比 PuLP 更低级别的 API)。或者,查看更高级别的 docplex 包,它也允许您在云上解决。
【讨论】: