SCIP如何计算vanillafullstrongbranching-scores?
How does SCIP calculate vanillafullstrongbranching-scores?
我想在 SCIP 中对分支规则进行一些实验(使用 python 界面)。
为了确保我的代码的一些基础知识有效,我尝试使用 dive 功能来镜像 SCIP 的 vanillafullstrongbranching。
这基本上按预期工作,但对于至少有一个不可行 child 的节点,我得到了奇怪的结果。我仔细研究了 PySCIPOpt 和 SCIP 的 C-code,并期望一个很大的数字作为 sb 分数,以防(至少)一个 child 不可行,因为 LP-solver returns 对于不可行的问题来说是一个很大的数字,SCIP 默认使用 product-score。我得到的不是大数字,而是大到足以比其他分数大的数字。
我的问题是:代码中缺少什么? SCIP 在何处以及如何以不同方式处理不可行 children 的分数。
由于需要相当多的代码来重现这一点,我创建了一个 gist,它利用了我也上传到 github.
的 set-cover 实例
我很确定强分支分数永远不会超过 lp 的截止范围,因此不可行的节点将获得截止范围的分数。
我想在 SCIP 中对分支规则进行一些实验(使用 python 界面)。 为了确保我的代码的一些基础知识有效,我尝试使用 dive 功能来镜像 SCIP 的 vanillafullstrongbranching。 这基本上按预期工作,但对于至少有一个不可行 child 的节点,我得到了奇怪的结果。我仔细研究了 PySCIPOpt 和 SCIP 的 C-code,并期望一个很大的数字作为 sb 分数,以防(至少)一个 child 不可行,因为 LP-solver returns 对于不可行的问题来说是一个很大的数字,SCIP 默认使用 product-score。我得到的不是大数字,而是大到足以比其他分数大的数字。 我的问题是:代码中缺少什么? SCIP 在何处以及如何以不同方式处理不可行 children 的分数。
由于需要相当多的代码来重现这一点,我创建了一个 gist,它利用了我也上传到 github.
的 set-cover 实例我很确定强分支分数永远不会超过 lp 的截止范围,因此不可行的节点将获得截止范围的分数。