CPLEX 12.9:强分支不适用于混合整数问题



我想通过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分数。或者我只是犯了一些错误。

我的问题是,在MILP问题上,Cplex是否可以进行SB并将其结果交付给用户。

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函数。

最新更新