我想从捕获SCIP_EVENTTYPE_BESTSOLFOUND
事件的事件处理程序中存储可行的解决方案,后来我想将此解决方案作为启发式解决方案提供给另一个SCIP实例,该实例正在优化同一问题但具有不同之处参数设置(可以在后续优化中或并行进行)。
我的问题是,使用SCIPgetBestSol()
获得的解决方案将取决于转换后的问题,这可能与第二个SCIP实例中的转换后的问题不同。
关闭presolve(使用SCIPsetPresolving()
)是否足以确保SCIP始终引用回调函数中的原始变量?
有什么特别的方法建议您这样做吗?
谢谢!
答案 0 :(得分:0)
确保事件处理程序可以访问原始变量的数组(SCIPget(N)OrigVars()
可以解决问题)。您始终可以使用SCIPgetSolVal()
来查询原始变量的解决方案值,甚至可以从转换的解决方案中查询 ,并将这些值存储在通过SCIPcreateOrigSol()
创建的解决方案中。
为了将此解决方案提供给其他SCIP实例,您必须正确获取主要和辅助SCIP实例的变量之间的映射。为辅助SCIP实例创建一个新的解决方案,并将变量的解决方案值设置为主要SCIP中其(预)图像变量的值。