在通用 Cplex 回调中访问分支切割节点 ID

Accessing branch-and-cut node id in generic Cplex callback

我有一个使用 Benders 分解分解的优化问题。我实现了一个 Cplex 通用回调(在 JAVA 中),其中包括惰性回调、用户回调和启发式回调。现在,我需要添加一些切割管理策略,例如,限制树中每个节点的切割数量。问题是我不知道如何访问当前候选人的节点 ID。如果有人能提供帮助,我将不胜感激。

此答案适用于刚刚发布的 12.10 版本:

在松弛上下文中,您可以使用 CPXXcallbackgetinfolong()CPXCALLBACKINFO_NODEUIDCPXCALLBACKINFO_NODEDEPTH.

来请求节点的 UID 和深度

但是在候选上下文中,您目前无法获取此信息。原因是上下文可能不会在节点的上下文中调用(例如,当候选来自启发式时)。我们已经在进行一项改进,以至少在节点上下文中调用回调的情况下使此信息可用。另一方面,除非 CPLEX 疯狂地找到候选者,否则可能不需要限制分离的惰性约束的数量。