0

我使用 'prob.solve(CPLEX())' 在 PuLP 中调用 CPLEX。

但是,我想知道如何在这里使用障碍算法来获得更非零的解决方案。

谢谢。

4

1 回答 1

0

我不是纸浆专家,但看起来这是可能的(但是,我不确定它有多可靠)。这里有关于如何使用 CPLEX DLL 共享库设置 CPLEX 参数的提示。我相信这已经过时了,但这是该线程的相应片段:

>>>> 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)文件中配置(在安装纸浆模块的目录中)。中的幻数“4”solver.setLpAlgorithm(4)对应于CPX_ALG_BARRIER(参见此处)。

话虽如此,如果您想更好地控制 CPLEX,直接使用CPLEX Python API可能会更好(尽管它是比 PuLP 更低级别的 API)。或者,查看更高级别的docplex包,它也允许您在云上解决。

于 2016-07-20T22:24:12.397 回答