Gekko能否使用Gurobi、CPLEX、Mosek等商业求解器?求调用示例
Gekko对Gurobi/CPLEX/Mosek等商用求解器的支持说明
Gekko没有预置这几个商用求解器的直接调用接口,默认自带的求解器为开源的IPOPT、APOPT、BPOPT,可通过标准模型文件中转的方式搭配商用求解器使用,具体逻辑如下:
- 对于线性规划、二次规划、混合整数线性/二次规划类问题:用Gekko完成模型搭建后,导出为通用的LP或MPS格式模型文件——这两类是运筹优化领域通用的模型交换格式,几乎所有主流商用求解器都原生支持读取——再导入对应商用求解器求解即可,求解完成后可手动提取结果,也可以写简单的映射脚本把结果回传到Gekko对象做后续分析。
- 对于非线性规划、混合整数非线性规划类问题:目前没有通用的一键对接方案,需要自行解析Gekko生成的模型结构,传入对应商用求解器的API完成求解,适配成本相对较高。
实现示例
以下是最常用的「Gekko建模导出MPS+Gurobi求解」的最简实现,CPLEX、Mosek的操作逻辑完全一致:
首先是Gekko侧建模导出模型的代码:
from gekko import GEKKO # 初始化本地模式的Gekko模型,关闭自动求解 m = GEKKO(remote=False) m.options.SOLVER = 0 # SOLVER设为0时仅编译模型,不调用内置求解器 # 搭建测试模型:最大化4x+5y,约束2x+3y<=15,x为0-10范围整数变量,y为0-10范围连续变量 x = m.Var(lb=0, ub=10, integer=True, name='x') y = m.Var(lb=0, ub=10, name='y') m.Equation(2*x + 3*y <= 15) m.Minimize(-(4*x + 5*y)) # 导出标准MPS格式模型文件到本地 m.write_file('demo_model.mps')
然后是Gurobi侧读取模型求解的代码:
import gurobipy as gp # 读取Gekko导出的模型文件 grb_model = gp.read('demo_model.mps') # 启动求解 grb_model.optimize() # 输出最优结果 if grb_model.status == gp.GRB.OPTIMAL: print(f"最优目标值:{grb_model.ObjVal}") for var in grb_model.getVars(): print(f"变量{var.VarName} 最优取值:{var.X}")
注意:运行上述代码前需要提前安装好对应商用求解器的Python包,并完成许可证激活。如果需要频繁搭配使用,可以自己写一层简单的封装函数,自动完成模型导出、求解器调用、结果回传的全流程,不需要每次手动操作。
内容的提问来源于stack exchange,提问作者Himanshu Nagpal
相关产品推荐
相关产品推荐

