【问题标题】:SCIP: Children vs Parent vs SiblingsSCIP:孩子vs父母vs兄弟姐妹
【发布时间】:2019-07-05 18:18:24
【问题描述】:

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

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

【问题讨论】:

    标签: scip


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多