我有一个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 ,但是lpfastol与feastol有所不同!那么,为什么要改用lpfeastol?当SCIP解决问题时,我在屏幕上多次看到了lpfastol的修改值。感谢您的提前帮助
答案 0 :(得分:0)
也许尝试将src / scip / cons_soc.c中UPGSCALE的定义更改为更大的值。
lpfastol的输出很不幸,但是很正常。减少feastol也会自动导致调整lpfastol。我无法复制“我印制了feastol的值,我seeumerics / lpfeastol = 1e-8,但lpfastol与feastol不同”。