我使用' prob.solve(CPLEX())'在PuLP中调用CPLEX。
但是,我想知道如何在这里使用屏障算法来获得更加非零的解决方案。
感谢。
答案 0 :(得分:0)
我不是PuLP专家,但看起来这是可能的(但是,我不确定它有多可靠)。这里有hint有关如何使用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)
。 solver.setLpAlgorithm(4)
中的幻数“4”对应CPX_ALG_BARRIER
(请参阅here)。
话虽如此,如果你想更好地控制CPLEX,你可能会更好地直接使用CPLEX Python API(尽管它是一个比PuLP更低级的API)。或者,查看更高级别的docplex包,它也允许您在云上解决。