#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’ в любом случае используется по умолчанию).