推广 热搜: page  音视频  使用  个数  搜索引擎  选择  企业  父亲  百度  可以 

【Gurobi】针对优化模型Infeasible的错误,如何快速Debug?

   日期:2024-12-26     作者:rhtoo    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/12888.html
核心提示:运筹优化博士,只做原创博文。更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号&#

运筹优化博士,只做原创博文。更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号:https://www.zhihu.com/people/wen-yu-zhi-37

相信用Gurobi写过model的童鞋大概率会遇到一个bug 就是 当你好不容易把模型输入到gurobi里边后,当你运行程序让gurobi去优化求解你的问题的时候,gurobi 却报出一个 infeasible model 的错误信息。此时有两种可能性第一个原因是 你建立的模型本身是有问题的,导致你的模型里的约束条件有互相矛盾的地方,所以这个模型根本就没有可行解;第二个原因是 你的模型本身没有问题,只不过你在把数学模型输入到gurobi的过程中编程错误或者参数值输入不正确导致你的模型不可行了。
这篇文章主要说一下针对第二种原因的处理办法,如何快速找到是哪些约束之间互相矛盾造成模型不可行的。话说总不能一个一个约束用眼睛用手去算去对吧。好在gurobi给我们提供了一个强大的函数computeIIS()能够迅速帮我们锁定出是有问题的约束条件。

话不多说直接用一个例子来说明,computeIIS()的用法(代码运行环境为python 3.6,gurobi 9.0.0

 

从上面的代码容易看到第一条约束x0+x1>=1.2和第二条约束x0+x1<=1.1是互相矛盾的,因此该模型不存在可行解。所以当我们求解这个模型的时候,gurobi会报出 infeasible model 的错误信息,此时我们可以调用computeIIS()即可得到哪些约束是互相矛盾的,即去掉这些矛盾约束剩下的约束构成的问题是可行的。
为了方便观察computeIIS()的输出结果,可以用m.write(“model1.ilp”)输出一个扩展名魏".ilp"的文件,里边会包含所以矛盾的约束,针对上面的例子生成的ilp文件内容如下所示

 

可以看到确实是输出了前2个造成矛盾的约束,而第三个约束没有矛盾所以没有输出在.ilp文件内。那么这里只是举了一个非常简单的例子来说明computeIIS()的用法,实际问题所构成的优化模型往往是非常复杂的,成千上万条约束依靠人工方式去排查哪些约束有问题是非常困难的。此时如果能采用computeIIS()输出有问题的约束,对于我们debug来说无疑是非常高效的一个小技巧。

【Gurobi】针对优化模型Infeasible的错误,如何快速Debug?

computeIIS()功能这么强大可以很快找出互相矛盾的约束,那是不是它就是一个很完美的解决我们矛盾约束的方法呢?在实际问题中computeIIS()并不是万能的。这是因为如果你的问题约束数量稍微多一点的话,computeIIS()所耗费的时间是非常长的,也就是说在大多数实际问题中我们很能直接采用computeIIS()去找到矛盾约束,因为计算时间太长了。

那么此时我们不得不采用一些“土”办法来初步定位出可能出问题的约束在哪类约束里边,例如我们可以注释掉一部分约束,然后运行程序,如果程序没有报出infeasible的提示,就表明这部分被注释掉的约束里边含有矛盾的约束。通过这个方法可以初步定位出可能有问题的约束,然后在小范围内再使用computeIIS()去精确定位是一个不错的选择。总之在实际问题中,我们需要灵活的去处理,computeIIS()有一定的作用,但它并不是解决infeasible 的万能钥匙。

本文地址:http://ww.kub2b.com/news/12888.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号