【问题标题】:"pyOptSparse Error: There was an error importing the compiled IPOPT module" when following documentation遵循文档时出现“pyOptSparse 错误:导入已编译的 IPOPT 模块时出错”
【发布时间】:2017-03-03 11:01:23
【问题描述】:

我正在尝试使用 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 算法或如何调试安装有任何建议吗?

谢谢!

补充说明:

  • 我没有让 pyOptSparse 的 SLSQP 算法最新提交工作,因此我使用的是去年年底的提交 fd33788。
  • 我已经尝试过 --prefix=/usr/local 的各种组合,但如果有人对位置和环境变量有任何具体建议,我会全力以赴

【问题讨论】:

    标签: python-3.x openmdao ipopt


    【解决方案1】:

    原因

    pyOptSparse 中的 pyIPOPT 目前不支持 Python3。具体来说,它使用对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 抛物面示例。

    进一步的工作

    • 用 pyIPOPT 的更新版本更新 pyOptSparse 版本的 pyIPOPT
    • 可能弄清楚为什么 pyOptSparse 版本的 pyIPOPT 中的默认参数不起作用。将默认值转换为有效的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 2020-09-11
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多