SCIP:Children vs Parent vs 兄弟姐妹

SCIP: Children vs Parent vs Siblings

我正在实现一个节点选择器。我在想 SCIPgetLeaves 会给我当前节点的列表,需要从中选择一个节点进行进一步的分支。在预求解阶段之后,NODESELSELECT() 中的 SCIPgetLeaves 没有 return 任何节点。相反,我不得不使用 SCIPgetFocusNode()

文档指出 NODESELSELECT() 选择叶子、children 和兄弟姐妹之一,所以我尝试收集所有三个。 children 和根节点的兄弟节点在预求解阶段后未包含在叶子中是否有原因?只是想了解 SCIP 的设计。

所有三种节点类型都与焦点节点相关:

  • SCIPgetChildren() 提供对通过分支
  • 新创建的 children 的快速访问
  • SCIPgetSiblings() 提供对焦点节点兄弟节点的访问
  • SCIPgetLeaves() 是与焦点节点关系更远的其余部分

请记住,每次选择时,开放节点都会划分为上述 3 种类型。

节点求解过程极大地受益于 warm/hotstarting 对偶单纯形算法的可能性,这就是为什么 SCIP(以及其他求解器)主要执行潜水(也称为 "plunging")树,有一些限制。这需要快速访问焦点节点的children。

查看 src/scip/nodesel_dfs.c 以获取简单节点选择的好示例。