首页 > 解决方案 > 我得到分段错误\更改 feastol dafault 值

问题描述

我有一个 SCIP 项目来解决具有非线性目标函数的二元问题,效果很好,但在某些情况下,我收到一条消息说“最佳解决方案不可行”,并且约束中有一些违规。(违规大多很小)为了解决这个问题,我添加了 SCIP_CALL_EXC( SCIPsetRealParam(scip, "numerics/feastol", 1e-5) 来更改 feastol 的默认值。但是我得到了分段错误!

根据您的有用建议,违规值现在要低得多。我的目标函数采用Min: AX+ L Sqrt(BX)的形式。在之前的版本中,我使用了一个辅助变量,比如说Q使得Q^2 - L^2 (BX) >=0并且目标函数表示为Min: AX+ Q。在新版本中,我将不等号更改为相等,并结合SCIPsetRealParam(scip, "numerics/feastol",1e-8),约束中的违规要低得多。我还能做些什么来降低违规值?此外,当我打印 feastol 的值时,我看到numerics/lpfeastol=1e-8 但 lpfeastol 与 feastol 不同!那么,为什么要修改 lpfeastol 呢?当 SCIP 解决问题时,我在屏幕上多次看到 lpfeastol 的修改值。我提前感谢您的帮助

标签: scip

解决方案


也许尝试将 src/scip/cons_soc.c 中 UPGSCALE 的定义更改为更大的值。

lpfeastol 的输出很不幸,但很正常。减少 feastol 也会自动导致调整 lpfeastol。我无法重现“我打印了 feastol 的值,我看到了umerics/lpfeastol=1e-8 但 lpfeastol 与 feastol 不同”。


推荐阅读