动态更改 SCIP 参数

Dynamically changing SCIP parameters

我想根据求解过程的状态动态更改与切割生成和原始启发式相关的参数。当我在特定节点上分支后设置诸如 maxrounds 之类的参数时,它没有给我报错,但我无法确认它是否对后端进程进行了任何更改。

有人可以确认在求解过程中更改参数是否真的会将这些参数设置为新值以进一步求解问题?

是的,可以在搜索过程中更改参数。例如,SCIP 将根据新节点选择器的排序策略,通过重新排序开放节点队列来对节点选择器优先级进行切换。

请注意,一般来说,SCIP 与其他求解器一样,不希望在搜索过程中修改参数,奇怪的组合可能会终止求解过程。

如果某个参数在求解过程中"safe"改变,则取决于参数的特定实现。调整 separating/maxrounds 或独立于特定插件的其他核心参数应该始终是安全的。但是,如果在搜索过程中动态启用个别插件,它们可能会或可能不会正常工作,因为它们错过了初始化步骤。

你可以看看src/scip/event_solvingphases.c,它通过改变强调设置来调整几个参数。这些参数当然可以安全地在搜索过程中进行调整。