#anaconda #spyder #mingw-w64 #pyomo #ipopt
Вопрос:
Я пытался установить/скомпилировать ipopt
на своем компьютере с Windows, и до сих пор у меня не было никакого прогресса. Я в основном следую инструкциям, перечисленным здесь: https://coin-or.github.io/Ipopt/INSTALL
. Я скачал MSYS2 MinGW специально для этой цели.
В качестве зависимостей я загрузил следующее
- OpenBLAS;
- блис;
- Третья сторона-ASL;
- Третья сторона-HSL (с решателями библиотеки HSL, которые мне нужны);
- Третья сторона-Свинка;
В конце концов, я попадаю ipopt.exe
в C:msys64homemeIpoptsrcAppsAmplSolver
папку. Но в папке есть еще ipopt.exe
C:msys64homemeIpoptsrcAppsAmplSolver.libs
один, поэтому я попытался использовать и то, и другое.
Я использую навигатор Anaconda и Pyomo, чтобы посмотреть, работают ли мои ipopt.exe
работы, поэтому я помещаю результат ipopt.exe
в AnacondaenvsmyenvLibrarybin
папку. Однако исполняемый файл ipopt, который я получил, выдает мне ошибки. Один из них выдает мне ошибку, связанную с libipoptamplinterface-3.dll
. Когда я запускаю приведенный ниже скрипт Python с помощью Spyder:
import pyomo.environ as pyo
from pyomo.opt import SolverFactory
model = pyo.ConcreteModel()
model.nVars = pyo.Param(initialize=4)
model.N = pyo.RangeSet(model.nVars)
model.x = pyo.Var(model.N, within=pyo.Binary)
model.obj = pyo.Objective(expr=pyo.summation(model.x))
model.cuts = pyo.ConstraintList()
opt = SolverFactory('ipopt')
opt.solve(model)
# Iterate, adding a cut to exclude the previously found solution
for i in range(5):
expr = 0
for j in model.x:
if pyo.value(model.x[j]) < 0.5:
expr = model.x[j]
else:
expr = (1 - model.x[j])
model.cuts.add( expr >= 1 )
results = opt.solve(model)
print ("n===== iteration",i)
model.display()
Я получаю такие ошибки, как эта:
ERROR: Solver (ipopt) returned non-zero return code (127)
ApplicationError: Solver (ipopt) did not exit normally
Я не знаю, как это решить.
Комментарии:
1. Возможно, сначала проверьте, работает ли двоичный файл Ipopt только из командной строки. То есть сделайте
make test
это послеmake
. Также не забудьте сделатьmake install
. Вместо копирования двоичного файла Ipopt (и необходимых для этого библиотек DLL), возможно, просто укажите путь к установке Ipopt в свой ПУТЬ.
Ответ №1:
Ваша модель является типом оптимизации MILP, однако решатель ipopt не предназначен для этой цели, вместо этого используйте решатель glpk