scip - 我得到分段错误\更改 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 的修改值。我提前感谢您的帮助
解决方案
也许尝试将 src/scip/cons_soc.c 中 UPGSCALE 的定义更改为更大的值。
lpfeastol 的输出很不幸,但很正常。减少 feastol 也会自动导致调整 lpfeastol。我无法重现“我打印了 feastol 的值,我看到了umerics/lpfeastol=1e-8 但 lpfeastol 与 feastol 不同”。
推荐阅读
- reactjs - 反应路由器重复的 URL 参数
- django - “[Errno 8] nodename nor servname provided, or not known” 使用 django-ses 时
- python - 使用 argparse 组合标志和选项
- next.js - Apolllo 客户端状态预设缓存不适用于服务器端渲染
- c++ - 与 shared_ptr 相比,unique_ptr 有什么优势
- r - 重命名列表特定元素的函数
- javascript - 确定鼠标单击的 X 坐标
- dart - 如何拆分字符串并将每一行放入 Dart 的元素数组中?
- r - R:在列表中累积乘以df的行并从操作中返回一个列表
- javascript - 打字稿HTML显示