gpt4 book ai didi

scip - 进行列生成时没有双重限制

转载 作者:行者123 更新时间:2023-12-04 10:37:06 26 4
gpt4 key购买 nike

我目前正在实现列生成(多商品流的变体)。
注意:我禁用了预求解,因为我认为原型(prototype)制作会更容易。
在这种情况下,定价工作正常:添加正确的变量,相应地修改约束等等 - 当在定价过程中没有发现更多变量时,SCIP 在该轮之前给出的原始界限是最佳目标值。

我的问题是报告的双重界限是“---”每次迭代和 SCIP 不认为解决方案是最优的。

我不太明白内部发生了什么,特别是因为 SCIP 在定价期间给我的双重解决方案( SCIPgetDualSolLinear() )是正确的,一个想法是目标函数以某种方式退化。

我能弄清楚的唯一相关的事情是它与预先解决和标记约束为可修改有关。

如果我没有将约束标记为可修改,SCIP 会报告正确的双重约束,但定价不起作用,因为 SCIPgetDualSolLinear() 失败 - 我的猜测是将约束标记为可修改的类型“使其可用于定价”?无论如何,我想知道为什么当变量实际添加到从 获得的约束时,原始约束应该被标记为可修改。 SCIPgetTransformedCons() .

无论预求解是打开还是关闭,不将约束标记为可修改都会使 SCIP 产生双重约束,但如前所述,定价失败。唯一的异常(exception):如果我运行程序时已添加了所有变量 如果预求解已关闭, SCIPgetDualSolLinear() 即使约束未标记为可修改,也不会失败。在这种情况下,还报告了双重界限。我想这支持了可修改标志与“保留结构”有关的想法。

我确实希望这个描述是可以理解的,有人可以指出我正确的方向,我真的不知道如何继续。

谢谢

编辑:我只是尝试设置从 获得的约束SCIPgetTransformedCons() 作为可修改的,而不是原始的,但结果显然保持不变。

edit2,附加信息:我正在阅读 .lp 文件并使用 SCIPsetConsModifiable() 在调用 期间activatePricerXyz() , 但在调用 之前activatePricer() .

最佳答案

大多数时候,解决方案是阅读文档:)

In the usual case that the pricer either adds a new variable or ensures that there are no further variables with negative dual feasibility, the result pointer should be set to SCIP_SUCCESS. Only if the pricer aborts pricing without creating a new variable, but there might exist additional variables with negative dual feasibility, the result pointer should be set to SCIP_DIDNOTRUN. In this case, which sometimes is referred to as "early branching", the LP solution will not be used as a lower bound. The pricer can, however, store a valid lower bound in the lowerbound pointer.



就我而言,即使定价者可以保证最优性,成功指针也设置为 SCIP_DIDNOTRUN。

关于scip - 进行列生成时没有双重限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60117487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com