You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:57:23