Pyomo的SolverFactory无法创建Ipopt(OSX) - 可能与COIN-OR有关

时间:2015-01-28 22:21:37

标签: python macos optimization ipopt

我正在尝试使用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中,并将它们导入到脚本中,这没有用。我接下来应该尝试的任何想法要么使这个工作,要么修改脚本到可行的东西?

1 个答案:

答案 0 :(得分:0)

我的同事有同样的问题,他设法通过生成带有IPOPT AMPL可执行文件路径的求解器对象来解决它:

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