Pyomo调用Ipopt报错返回码1:未知关键字max_cpu_time求解异常
解决Pyomo+MindtPy+Ipopt报错:Unknown keyword "max_cpu_time"
问题原因
你使用的Ipopt版本(3.5.5)过于老旧,不支持Pyomo默认传递的max_cpu_time参数,导致求解器启动失败。
解决思路
1. 升级Ipopt到兼容版本
老版本Ipopt(如3.5.5)没有max_cpu_time参数,建议升级到3.12.x及以上版本。使用conda可直接安装最新兼容版本:
conda install -c conda-forge ipopt
安装完成后,执行conda list ipopt确认版本是否更新。
2. 手动禁用max_cpu_time参数传递
如果暂时无法升级Ipopt,可在代码中配置Ipopt求解器,移除max_cpu_time选项后再传给MindtPy:
import pyomo.environ as pe model = pe.ConcreteModel() model.x = pe.Var(bounds=(1.0,10.0),initialize=5.0) model.y = pe.Var(within=pe.Binary) model.c1 = pe.Constraint(expr=(model.x-4.0)**2 - model.x <= 50.0*(1-model.y)) model.c2 = pe.Constraint(expr=model.x*pe.log(model.x)+5.0 <= 50.0*(model.y)) model.objective = pe.Objective(expr=model.x, sense=pe.minimize) # 初始化Ipopt求解器并移除不支持的参数 ipopt_solver = pe.SolverFactory('ipopt') ipopt_solver.options.pop('max_cpu_time', None) # 调用MindtPy时使用配置好的Ipopt求解器 pe.SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver=ipopt_solver)
3. 确认版本兼容性
Pyomo 6.6.1与较新版本的Ipopt兼容性更好,尽量避免混用过旧的Ipopt版本。若使用pip安装Ipopt,优先选择带预编译二进制的包(如ipopt-bin),避免源码编译带来的版本适配问题。
内容的提问来源于stack exchange,提问作者Marvin Lang
相关产品推荐
相关产品推荐

