Ipopt отсутствует cyggcc_s-1.dll и cyggfortran-3.dll

#python #conda #mathematical-optimization #pyomo #ipopt

#python #conda #математическая оптимизация #pyomo #ipopt

Вопрос:

Мне нужно запустить целочисленную квадратичную программу — желательно с использованием бесплатных инструментов с открытым исходным кодом — и я остановился на использовании Ipopt с pyomo.

Я использую Windows 10 и обнаружил, что установка ipopt затруднена, но, похоже, использование anaconda — самый простой способ.

Я установил ipopt с

conda install -c conda-forge ipopt, который, похоже, сработал.

Однако при выполнении небольшой проблемы оптимизации (см. Ниже) возникает:

Выполнение кода не может продолжаться, потому что cyggcc_s-1.dll не был найден. Переустановка программы может решить эту проблему.

Выполнение кода не может продолжаться, потому что cyggfortran-3.dll не был найден. Переустановка программы может решить эту проблему.

Проблема, с которой я сталкиваюсь, заключается в

 from pyomo.environ import *
m = ConcreteModel()
m.x = Var()
m.c = Constraint(expr=m.x >= 2)
m.o = Objective(expr=m.x)
s = SolverFactory('ipopt')
s.options['fixed_variable_treatment'] = 'make_parameter'
s.solve(m, tee=True, keepfiles=True)
 

Существуют различные руководства по установке ipopt в Windows, но я не нашел ничего авторитетного. Я видел ссылку на необходимость установки компиляторов Intel Fortran, но не нашел, где их взять, и мне интересно, не в этом ли моя проблема.

Комментарии:

1. Работает для меня… ну, помимо того факта, что IPOPT говорит 'fixed_variable_treatment' , что это недопустимый ключ. Я использовал этот YAML для создания env ( conda env create -f so-ipopt.yaml ), активировал его ( conda activate so-ipopt ), затем запустил Python и запустил ваш пример. Однако я не на Windows, так что, надеюсь, вы сможете найти другого пользователя Windows, чтобы попробовать это.

2. ipopt — это непрерывная оптимизация, вы знаете это правильно (без целых чисел!)? Я просто упоминаю об этом, потому что вам, вероятно, нужен Bonmin, который, в общем, еще хуже в отношении простоты установки. Сказав это, я помню, что pyomo был сосредоточен на вызовах решателя на основе файлов, верно? Значение: написать экземпляр, запустить двоичный файл на экземпляре. В этом случае просто используйте двоичные файлы AMPL (ipopt, bonmin, couenne; выберите свой яд)

3. Отсутствующие библиотеки выглядят как GCC и библиотека времени выполнения Fortran Cygwin. Возможно, сотрудники Conda забыли включить их или забыли установить опцию, чтобы они не требовались. Есть и другие места, где можно найти готовые двоичные файлы Ipopt, см., Например, README.md из Ipopt. Опция fixed_variable_treatment недоступна через AMPL напрямую (но будет доступна с Ipopt 3.14). Вам понадобится дополнительный файл параметров ipopt.opt, чтобы установить это (хотя ‘make_parameter’ в любом случае используется по умолчанию).