文章目录
- 1. 引言
- 2. 追溯不可行集的四种方法
- 2.1 通过约束增减进行判断
- 2.2 通过computeIIS函数获得冲突集
- 2.3 利用 feasRelaxS() 或 feasRelax() 函数辅助排查
- 2.4 利用 IIS Force 属性
1. 引言
模型不可行是一个让工程师头疼的问题,对于复杂模型而言,导致模型不可行的原因可能有很多,常常不会只由单一约束或者单一变量边界导致不可行,更多时候是若干个约束和变量边界一起发生冲突,因此导致冲突的原因有无穷多的解读和因果链条,进而化解不可行的方式也不唯一,需要结合模型的应用场景来调整。常见的简单排查方式 “逐一屏蔽” 法检查不可行约束也就不能全面地分析不可行的原因。
本文将介绍如何利用Gurobi的内置方法,对不可行问题进行冲突溯源,对于不可行问题,Gurobi会在求解后打印 “Infeasible model” 的信息,说明模型存在相互冲突的约束集,找不到同时满足所有约束的可行解,可以运行如下函数获得冲突的约束条件。
model.computeIIS()