我正在尝试使用Pyomo在OSX上找到Python模型的最佳值。我从https://github.com/shoibalc/recem获得了脚本,并按照我的指示安装了Pyomo和COIN-OR,并更改了一些过时或在OSX上似乎不起作用的内容。

导致问题的代码如下。

import pyomo
from pyomo.opt.base import *
from pyomo.opt.parallel import SolverManagerFactory
from DICE2007 import createDICE2007
from DICEutils import DICE_results_writer

global start_time
start_time = time.time()

dice = createDICE2007()
dice.doc = 'OPTIMAL SCENARIO'
opt = SolverFactory('ipopt',solver_io='nl')
tee = False
options =   """
        halt_on_ampl_error=yes"""
solver_manager = SolverManagerFactory('serial')

print '[%8.2f] create model %s OPTIMAL SCENARIO\n' %(time.time()-start_time,dice.name)

instance = dice.create()
print '[%8.2f] created instance\n' %(time.time()-start_time)

results = solver_manager.solve(instance, opt=opt, tee=tee, options=options, suffixes=['dual','rc'])


这在最后一行(“结果”)崩溃,并显示以下错误消息:


  SolverFactory无法创建求解器“ ipopt”
  并返回了UnknownSolver对象。此时会引发此错误
  将该UnknownSolver对象当作有效对象使用的位置(通过调用
  方法“解决”)。
  
  原始求解器是使用以下参数创建的:
      Solver_io:nl
      类型:ipopt
      _args:()
      选项:{}
      _options_str:[]


我对这一切都是新手,但认为Pyomo可能无法访问所需的ipopt文件,对我来说,该文件位于我下载的COIN-OR二进制文件中。我尝试将看起来相似的文件添加到我的PYTHONPATH中,并将它们导入脚本中,但这没有帮助。有什么想法我接下来应该尝试使它起作用或者将脚本修改为可行的东西吗?

最佳答案

我的一位同事遇到了同样的问题,他设法解决了这个问题,方法是生成带有指向IPOPT AMPL可执行文件的路由的Solver对象:

opt = SolverFactory('/route/to/ipopt',solver_io='nl')

09-11 17:07