【问题标题】:Storing feasible solutions in terms of original variables根据原始变量存储可行的解决方案
【发布时间】:2019-07-03 21:06:44
【问题描述】:

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

关闭预解析(使用SCIPsetPresolving())是否足以确保 SCIP 始终引用回调函数中的原始变量? 您有什么特别的方法可以推荐吗?

谢谢!

【问题讨论】:

    标签: scip


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢格雷戈尔!两个后续问题:这是否意味着我不需要关闭预解析?这是否也适用于分支规则(能够始终引用原始变量)?
    • 映射挑战的出现是因为 SCIP总是 将原始问题转换(即复制)为具有工作副本。即使禁用预求解也不会阻止问题转换。也可以对原始变量信息进行分支,但由于变量可能具有不同的状态,因此比访问解决方案值要复杂一些。
    猜你喜欢
    • 2023-01-03
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多