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 以获取简单节点选择的好示例。
我正在实现一个节点选择器。我在想 SCIPgetLeaves
会给我当前节点的列表,需要从中选择一个节点进行进一步的分支。在预求解阶段之后,NODESELSELECT()
中的 SCIPgetLeaves
没有 return 任何节点。相反,我不得不使用 SCIPgetFocusNode()
。
文档指出 NODESELSELECT()
选择叶子、children 和兄弟姐妹之一,所以我尝试收集所有三个。 children 和根节点的兄弟节点在预求解阶段后未包含在叶子中是否有原因?只是想了解 SCIP 的设计。
所有三种节点类型都与焦点节点相关:
- SCIPgetChildren() 提供对通过分支 新创建的 children 的快速访问
- SCIPgetSiblings() 提供对焦点节点兄弟节点的访问
- SCIPgetLeaves() 是与焦点节点关系更远的其余部分
请记住,每次选择时,开放节点都会划分为上述 3 种类型。
节点求解过程极大地受益于 warm/hotstarting 对偶单纯形算法的可能性,这就是为什么 SCIP(以及其他求解器)主要执行潜水(也称为 "plunging")树,有一些限制。这需要快速访问焦点节点的children。
查看 src/scip/nodesel_dfs.c 以获取简单节点选择的好示例。