根据原始变量存储可行的解决方案

时间:2019-07-03 21:06:44

标签: scip

我想从捕获SCIP_EVENTTYPE_BESTSOLFOUND事件的事件处理程序中存储可行的解决方案,后来我想将此解决方案作为启发式解决方案提供给另一个SCIP实例,该实例正在优化同一问题但具有不同之处参数设置(可以在后续优化中或并行​​进行)。
我的问题是,使用SCIPgetBestSol()获得的解决方案将取决于转换后的问题,这可能与第二个SCIP实例中的转换后的问题不同。

关闭presolve(使用SCIPsetPresolving())是否足以确保SCIP始终引用回调函数中的原始变量? 有什么特别的方法建议您这样做吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

确保事件处理程序可以访问原始变量的数组(SCIPget(N)OrigVars()可以解决问题)。您始终可以使用SCIPgetSolVal()来查询原始变量的解决方案值,甚至可以从转换的解决方案中查询 ,并将这些值存储在通过SCIPcreateOrigSol()创建的解决方案中。

为了将此解决方案提供给其他SCIP实例,您必须正确获取主要和辅助SCIP实例的变量之间的映射。为辅助SCIP实例创建一个新的解决方案,并将变量的解决方案值设置为主要SCIP中其(预)图像变量的值。