SolverFactory в Pyomo не может создавать Ipopt (OSX) - возможно, связанный с COIN-OR

Я пытаюсь использовать Pyomo, чтобы найти оптимальные значения модели Python для OSX. Я получил сценарий с 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 type: ipopt _args: () options: {} _options_str: []

Я очень новичок во всем этом, но подумал, что, возможно, Pyomo не может получить доступ к нужному файлу ipopt, который, как мне кажется, находится в загруженных бинарных файлах COIN-OR. Я попытался добавить соответствующие файлы в свой PYTHONPATH, а также импортировать их в скрипт, но это не помогло. Любые идеи, что я должен попробовать, чтобы сделать эту работу, или изменить сценарий, чтобы он работал?

1 ответ

У моего коллеги возникла та же проблема, и ему удалось решить ее, сгенерировав решающий объект с маршрутом к исполняемому файлу IPOPT AMPL:

opt = SolverFactory('/route/to/ipopt',solver_io='nl')
Другие вопросы по тегам