我正在尝试使用pyOptSparse包安装IPOPT算法。我得到了SNOPT和SLSQP算法。对于IPOPT算法,构建是成功的,但是当使用算法时,我得到错误:
pyOptSparse Error: There was an error importing the compiled IPOPT module
我正在基于Ubuntu的Docker容器中构建项目,并且几乎完全遵循pyOptSparse中IPOPT上的文档(doc / optimizers / pyipopt.rst)。完整的dockerfile可用(我已经尝试使用基于apt的软件包,以及根据this suggestion复制源代码)。最相关的部分是:
RUN wget http://www.coin-or.org/download/source/Ipopt/Ipopt-3.11.7.tgz && \
gunzip Ipopt-3.11.7.tgz && \
tar -xvf Ipopt-3.11.7.tar && \
rm -rf Ipopt-3.11.7.tar && \
mv Ipopt-3.11.7 /pyoptsparse/pyoptsparse/pyIPOPT/Ipopt && \
wget -P /pyoptsparse/pyoptsparse/pyIPOPT/Ipopt/ThirdParty/HSLold/ \
https://bitbucket.org/mdolab/pyoptsparse/downloads/ma27ad.f && \
cd /pyoptsparse/pyoptsparse/pyIPOPT/Ipopt/ThirdParty/Blas/ && \
./get.Blas && \
cd /pyoptsparse/pyoptsparse/pyIPOPT/Ipopt/ThirdParty/Lapack/ && \
./get.Lapack && \
cd /pyoptsparse/pyoptsparse/pyIPOPT/Ipopt && \
./configure --disable-linear-solver-loader && \
make install
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/pyoptsparse/pyoptsparse/pyIPOPT/Ipopt/lib
RUN cd pyoptsparse && \
python setup.py build_ext --inplace
在构建的输出中,pyOptSparse选择IPOPT "building 'pyoptsparse.pyIPOPT.pyipoptcore' extension"。
有没有人对如何安装IPOPT算法或如何调试安装有任何建议?
谢谢!
附加说明:
答案 0 :(得分:0)
Py_FindMethod
来电和/pyoptsparse/pyoptsparse/pyIPOPT/src/
中的号码转化来电。
original pyIPOPT code已使用Python3支持进行更新,可以使用:
RUN git clone https://github.com/xuy/pyipopt.git && \
mv /pyipopt/src/pyipoptcoremodule.c /pyoptsparse/pyoptsparse/pyIPOPT/src/pyipoptcoremodule.c && \
mv /pyipopt/src/hook.h /pyoptsparse/pyoptsparse/pyIPOPT/src/hook.h && \
mv /pyipopt/src/callback.c /pyoptsparse/pyoptsparse/pyIPOPT/src/callback.c
此时IPOPT会运行,但退出时不会调用目标。这是因为状态代码为-12,表示无效选项。编辑def_opts = {}
的默认选项解决了这个问题,算法能够收敛OpenMDAO Paraboloid示例。