CPLEX12.9:强分支不适用于混合整数问题?

CPLEX12.9: Strong branching is not available for mixed-integer problems?

我想通过 cplex 和 python 获得强大的分支分数,第一步我只是尝试使用 "cplex.advanced.strong_branching" 来解决一个非常简单的 MILP 问题(我的代码遵循示例用法正是这个功能)。然而它告诉我"CPLEX Error 1017: Not available for mixed-integer problems",这让我很困惑,因为SB应该是传统的分支定界算法。但是当我用它来解决 LP 问题时,它运行良好。

错误似乎是从 "CPXXstrongbranch" 引发的,一个基础 C/C++ API,这也让我质疑当我设置分支时 cplex 如何做出 SB 决策SB 的策略参数。一个类似的问题是,我知道 Python API 没有重要的 "CPXgetcallbacknodelp" 功能,那么 "cplex.advanced.strong_branching" 怎么可能工作?难道是这个错误的原因?

我不太明白"CPXstrongbranch"在C中是如何工作的,所以以下信息可能不正确:我尝试在示例[=的用户设置分支回调中使用"CPXstrongbranch" 27=],报同样的错误;它阻止我使用 "ctypes" 来获取 "CPXgetcallbacknodelp" 函数。

会不会是版本问题? Cplex是否会阻止SB的访问?因为我看过一篇论文,它依赖于Cplex 12.6.1和C API中的SB分数。或者我只是犯了一些错误。

我的问题是 Cplex 是否可以在 MILP 问题中做 SB 并将其结果交付给用户。

cplex.advanced.strong_branching 不进行任何分支。文档在这里有点混乱。此函数的作用是为您传递的变量(如果您不传递列表,则为所有变量)计算强分支分数

这需要一个 LP,因为通常在 MIP 搜索树中,您使用当前 LP 松弛调用此函数。

如果您想使用具有强分支的 CPLEX,则将变量选择参数设置为 "strong branching":

with cplex.Cplex() as cpx:
    cpx.parameters.mip.strategy.variableselect.set(cpx.parameters.mip.strategy.variableselect.values.strong_branching)
    cpx.solve()

仅当您想实现自己的分支算法时才需要 strong_branching 函数。