我想通过cplex和python获得强大的分支分数,并且第一步,我只是尝试使用“ cplex.advanced.strong_branching”解决一个非常简单的MILP问题(我的代码完全遵循此函数的示例用法)。但是它告诉我“ CPLEX错误1017:不适用于混合整数问题”,这使我非常困惑,因为SB应该是传统的分支定界算法。但是,当我用它来解决LP问题时,它工作得很好。
错误似乎是由基本的C / C ++ API“ CPXXstrongbranch”引起的,这也使我感到疑问,当我将分支策略参数设置为SB时,cplex如何做出SB决策。一个类似的问题是我知道Python API没有重要的“ CPXgetcallbacknodelp”功能,那么“ cplex.advanced.strong_branching”如何工作?可能是此错误的原因吗?
我不完全了解“ CPXstrongbranch”在C语言中的工作方式,因此以下信息可能不正确:我尝试在示例“ adlpex1.c”的用户设置分支回调中使用“ CPXstrongbranch”,并且提出了同样的错误;它使我无法使用“ ctypes”来获取“ CPXgetcallbacknodelp”功能。
可能是版本问题吗? Cplex是否会阻止SB的访问?因为我看过一篇论文,该论文依赖于Cplex 12.6.1和C API中的SB分数。或者我只是犯了一些错误。
我的问题是Cplex是否可以进行SB并将其结果提交给MILP问题。
答案 0 :(得分:1)
cplex.advanced.strong_branching
不执行任何分支。该文件在这里有点混乱。此功能的作用是为您传递的变量(或所有未通过列表的变量)计算强分支得分。
这需要一个LP,因为通常在MIP搜索树中,您使用当前的LP松弛调用此函数。
如果要通过强分支使用CPLEX,则将变量选择参数设置为“强分支”:
with cplex.Cplex() as cpx:
cpx.parameters.mip.strategy.variableselect.set(cpx.parameters.mip.strategy.variableselect.values.strong_branching)
cpx.solve()
仅当您想实现自己的分支算法时才需要strong_branching
函数。