【问题标题】:Using IPOPT with Openmdao (or pyoptsparse) in python在 python 中将 IPOPT 与 Openmdao(或 pyoptsparse)一起使用
【发布时间】:2016-12-07 13:56:11
【问题描述】:

大家好。我有一个小问题:我正在使用 openmdao 和 pyOptSparseDriver。它适用于某些求解器(例如 SLSQP、PSQP),因此安装没有问题。

现在我想对 IPOPT 进行同样的尝试,但是 pyoptsparse 没有给出代码。我按照 COIN-OR 文档安装了 IPOPT (http://www.coin-or.org/Ipopt/documentation/node10.html),一切看起来都很好(我不知道如何检查)。现在我的桌子上有一个 COIN-OR 文件夹,我不知道如何让 pyoptsparse 从中获取 IPOPT(它是“从 .import pyoptcore”行崩溃),来自 pyIPOPT/pyIPOPT.py。 谁能帮我 ? 提前谢谢你

【问题讨论】:

    标签: python-2.7 openmdao ipopt


    【解决方案1】:

    我们通过 pytoptsparse 包将 IPOPT 与 OpenMDAO 一起使用,并将其安装为独立库,就像您所做的那样。要使其正常工作,您需要在运行 pyoptsparse 安装之前将 IPOPT_DIR 环境变量设置为指向您安装 IPOPT 的位置。

    假设您安装了 IPOPT,例如/usr/local/IPOPT:

    $ export IPOPT_DIR=/usr/local/IPOPT
    $ cd /path/to/pyoptsparse/
    $ python setup.py install
    

    应该导致 pyoptsparse 为 IPOPT 编译 python 包装器并生成文件 pyoptcore.so,该文件将放置在 Python 的 site-packages/pyoptsparse/pyIPOPT 中。

    在我们的集群上,我们不得不稍微修改 pyoptsparse/pyIPOPT/setup.py 文件,因为我们使用 Intel 编译所有内容,但如果您使用 gfortran 编译,pyoptsparse 的官方版本应该适合您。

    或者,您可以按照 Justin 的建议进行操作,这基本上是您在 pyoptsparse 文档中找到的说明。

    【讨论】:

    • 命令 python setup.py install 似乎没有效果。在 shell 中,命令 os.getenv('IPOPT_DIR') 给出了良好的路径(导出工作)。查看pyIPOPT/setup.py,不知是否调用了函数配置(返回配置)...
    • 您可能需要先删除构建目录才能全新安装 pyoptsparse。对于调试,您还可以尝试注释掉 pyoptsparse/setup.py (bitbucket.org/mdolab/pyoptsparse/src/…) 中的所有其他优化器。您可以尝试在 pyoptsparse/pyIPOPT/setup.py 文件中添加一些打印语句,以查看它是否被调用并正确检测到您的 IPOPT 安装。
    • 好的,所以我从下载一个新的 mdolab-pyoptsparse*.zip 重新开始我在 gcc 调用后出现此错误: /usr/bin/ld: cannot find -lcoinhsl Is not HSL optional ?我下载了 MUMPS,文档似乎解释说它足以解决线性系统......
    • pyoptsparse pyIPOPT setup.py 文件要求该 lib 存在 (bitbucket.org/mdolab/pyoptsparse/src/…)。您是否按照 pyoptsparse 文档中的 IPOPT 安装说明进行操作?他们建议使用$ ./configure --disable-linear-solver-loader 进行配置。您可以使用 make html 从 docs 目录构建它。
    • 我没有关注文档,但是当我查看 setup.py 文件时,我也在做同样的事情。我从头开始使用 pyoptsparse 和 IPOPT。命令 --disable-linear-solver-loader 应该做什么?我希望“将 pyOptSparse bitbucket 页面中的 ma27ad.f 复制到 Ipopt/ThirdParty/HSLold/ 目录中”来替换 HSL。我想我必须检查所有这些获得许可的东西才能获得 HSL?
    【解决方案2】:

    你必须将ipopt源代码放入src folder of pyopt-sparse,然后重新编译包。

    【讨论】:

    • 源代码是什么意思? Ipopt/src 中有 6 个不同的文件夹。将它们放在 pyIPOPT/src 中不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多