我正在实现一个节点选择器。我以为SCIPgetLeaves
会给我当前节点的列表,其中需要选择一个进行进一步分支。在解决阶段之后,SCIPgetLeaves
中的NODESELSELECT()
不返回任何节点。相反,我不得不使用SCIPgetFocusNode()
。
文档指出NODESELSELECT()
选择叶子,孩子和兄弟姐妹中的一个,因此我尝试收集这三个叶子。在预解决阶段之后,为什么没有将根节点的孩子和兄弟姐妹包含在叶子中的原因?只是想了解SCIP的设计。
答案 0 :(得分:2)
所有三种节点类型都与焦点节点有关:
请记住,每次选择时,打开的节点都会被分区为上述3种类型。
节点解决方案过程极大地受益于热/热启动双重单纯形算法的可能性,这就是为什么SCIP(以及其他求解器)大多会在树上进行潜水(也称为“俯冲”),但有一定的限制的原因。这需要快速访问焦点节点的子节点。
查看src / scip / nodesel_dfs.c,了解简单节点选择的好例子。