Gurobi常见问题

来源:Gurobi中国答疑QQ群251135672
Model is infeasible : Gurobi 不可行问题的冲突溯源
如果明确获知模型不可行,有几种溯源的方法
(1)调用 model.computeIIS() 函数,会自动启动冲突约束寻找和筛选过程,这个过程根据问题类型和规模可能会花费较长时间。
(2)computeIIS() 结束后,可以用 model.write(“abc.ilp”) 命令 输出为以 ilp 为后缀的文件,用户打开文件后,就可以看到冲突的约束和变量。用户需要采用消元、合并、推理等方法自行分析冲突的具体原因。在 ilp 文件中,如果某个变量在 Bounds 部分显示为 free, 那说明这个变量无论取什么值,冲突都会发生。注意没有出现在 Bounds 部分的变量,Gurobi 默认为非负变量。
(3)如果 ilp 中的约束和变量过多,分析推理比较困难,用户也可以参考群文件的《Gurobi 不可行问题的冲突溯源》文章,通过松弛变量的结果来分析冲突发生的原因。
(4)对于采用 computeIIS() 和 松弛变量方法都无法分析原因的不可行模型,用户也可以采用从一个可行模型起步,逐步增加约束,直到模型不可行的方式找到产生冲突的约束条件。

如何快速判断模型可能存在数值问题
为了获得最大数值稳定性和运算效率,Gurobi 建议
(1)变量、约束条件、目标的系数取值合适的范围,使得变量的优化值尽量范围在【-1e+4,1e+4】 之间,约束取值在【-1e+4, 1e+4】之间,目标取值【-1e+4, 1e+4】之间
(2)查看日志,最大系数/最小系数 的比值,对于线性模型控制在 1e+9 之内,二次和非线性模型控制在 1e+6 之内,见右边图片。
(3)详细信息请阅读 安装目录 docs 目录中参考手册 refman.pdf 中的最后一章。
在这里插入图片描述
Numerical trouble encountered 解决思路
内点法对于数值问题更加敏感。一方面请阅读参考手册最后一章,缩小模型中最大系数和最小系数的比值差距到1e9 之内(包括右边项),对于二次模型,系数比值最好控制在 1e6 之内。另外一方面可以尝试以下一个或者多个参数 (1)BarHomogeneous =1 (2)NumericFocus = 2 或者3 (3)Method = 0 或者 1 (4)Aggregate = 0 (5) Presolve = 0

Sub-optimal termination 信息处理方法
这个信息通常在采用 Barrier 算法时模型出现数值问题时出现。处理的方法包括 (1)检查和调整模型的系数,参见群公告【如何快速判断模型可能存在数值问题】,避免模型出现数值问题 (2)设置 NumericFocus = 2 或者 3, 增大精度检验 (3)减少 BarConvTol, BarQCPConvTol 收敛精度 (4)减少 FeasibilityTol 可行度精度 (5)设置 BarHomogeneous = 1 (6)实验和调整 BarCorrectors 参数 (7)设置 Presolve = 0 关闭 Presolve (8)设置 Crossover = 0 关闭 Crossover. 以上各参数的含义请查阅参考手册。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值