SCIP:儿童vs父母vs兄弟姐妹

时间:2019-07-05 18:18:24

标签: scip

我正在实现一个节点选择器。我以为SCIPgetLeaves会给我当前节点的列表,其中需要选择一个进行进一步分支。在解决阶段之后,SCIPgetLeaves中的NODESELSELECT()不返回任何节点。相反,我不得不使用SCIPgetFocusNode()

文档指出NODESELSELECT()选择叶子,孩子和兄弟姐妹中的一个,因此我尝试收集这三个叶子。在预解决阶段之后,为什么没有将根节点的孩子和兄弟姐妹包含在叶子中的原因?只是想了解SCIP的设计。

1 个答案:

答案 0 :(得分:2)

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

  • SCIPgetChildren()提供对通过分支新创建的子代的快速访问
  • SCIPgetSiblings()提供对焦点节点的兄弟姐妹的访问
  • 其余的SCIPgetLeaves()与焦点节点之间的关系更远

请记住,每次选择时,打开的节点都会被分区为上述3种类型。

节点解决方案过程极大地受益于热/热启动双重单纯形算法的可能性,这就是为什么SCIP(以及其他求解器)大多会在树上进行潜水(也称为“俯冲”),但有一定的限制的原因。这需要快速访问焦点节点的子节点。

查看src / scip / nodesel_dfs.c,了解简单节点选择的好例子。