CVXPY如何判定模型类型 全整数变量模型选GLPK/SCS报MIP不支持错误
CVXPY模型类型判定规则
- 优先校验变量属性:只要模型中存在通过
bool()、integer()声明的离散变量(含0-1变量、整数变量),无论目标和约束的形式,都会被划分为混合整数(MIP)类问题,对应细分类型包括MILP(混合整数线性)、MIQP(混合整数二次)等,不再属于纯连续变量的LO/QP/锥优化分类。 - 次步校验数学结构:如果所有变量均为连续型,再根据目标函数、约束的阶数和凸性,判定为LO(线性优化)、QP(二次优化)、二阶锥优化等具体类型。
- 求解前二次校验:即使用户手动指定求解器,CVXPY在调用求解器前会再次匹配问题类型和求解器的支持范围,不匹配则直接抛出错误,不会将问题传入求解器运行。
报错原因解析
- 你观测到的“未指定求解器时识别为LO”仅为模型数学结构的属性标记,不是完整的问题类型:你的模型的数学结构是线性的,但因为包含整数变量,完整类型为MILP(混合整数线性优化),不属于纯LO问题。未指定求解器时CVXPY会自动筛选环境中已安装的支持MIP的求解器运行,所以不会触发报错。
- 你选择的求解器不符合MIP问题的能力要求:
- SCS本身仅支持连续型的锥优化问题,无混合整数求解能力
- GLPK在CVXPY中有两个接口,你选择的是纯线性优化接口
GLPK,仅支持连续LO问题,需要选择GLPK_MI接口才能调用GLPK的混合整数求解能力
- 报错信息的逻辑:CVXPY预校验时识别到你的问题是混合整数类型,但你指定的两个求解器均无MIP求解能力,因此候选求解器列表为空,抛出对应错误。
内容的提问来源于stack exchange,提问作者陈春蓉
相关产品推荐
相关产品推荐

