如何在linux上使用ipopt优化器和pyomo

时间:2017-09-20 17:42:44

标签: python ubuntu pyomo ipopt

我已经按照ipopt coinor网站的说明操作并设法安装ipopt优化器。这在build dir中生成了一些静态目标文件,但它没有生成任何bin文件夹。

现在,当试图让pyomo使用ipopt时,我见过的唯一方法是指定可执行位置,就像这样 opt = SolverFactory('ipopt', executable='executable path here') 但我无法弄清楚那可能是什么。

我也注意到硬币 - 或者在他们的网站上有一些预编译的二进制文件。那些在bin文件夹中包含一个ipopt可执行文件,但链接会让系统抱怨缺少一个名为libsvml.so的静态对象。

ipopt安装指南没有提到libsvm,所以这让我很困惑。

我是否错过了制作/安装步骤中的某些内容? 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

这个问题与上一个问题非常相似。请查看答案here

根据我的经验,如果您按照说明从源代码安装ipopt并且您最终没有带有ipopt可执行文件的bin目录,那么您错过了一个步骤,或者配置/安装因缺少依赖项而失败或者第三方代码。您应该从头开始重做安装。

如果您更喜欢使用二进制文件,请确保为系统Linux-32bit或Linux-64bit下载正确的二进制文件,并确保包含可执行文件的bin文件夹位于搜索路径中。检查二进制文件的另一件事是可执行文件具有可执行权限。您可以使用Linux命令chmod +x来修改权限。您应该能够在命令行上键入ipopt并获得另一个答案中注明的输出。

答案 1 :(得分:0)

ipopt确实是一个库,有时会分散在也称为ipopt的二进制文件中,这可能会引起混淆。

package in the debian repos仅包含库,没有二进制文件。

此库可以从应用程序代码链接到。要用作“独立”求解器,需要一个接口。通常,为ASL(AMPL求解器库)接口。 ASL接口允许ipopt从.nl文件中读取输入数据,并将输出数据写入.sol文件中。

“从源代码编译”部分中的ipopt doc对此进行了说明,并指示如何从AMPL安装ASL代码。 GitHub上还有一个替代的ASL库:AMPL/MP。我不清楚这是否是相同的代码。至少这里的许可证更清晰,恕我直言。

一些以静态或动态链接的方式将ipopt分发为具有ASL功能的二进制文件。

例如,

COIN-OR分发ipopt源,但停止分发二进制文件。最新的linux二进制文件适用于ipopt 3.7.1(https://www.coin-or.org/download/binary/Ipopt/)。

AMPL分发具有静态链接的ASL的二进制on their website。没有提及许可证或版本,也没有版本历史记录,所以我不会使用它。

在conda-forge频道中还有一个ipopt conda package,其中也有一个ipopt bin。它取决于使用上述AMPL / MP ASL实现的另一个conda程序包。这是我目前的最佳选择。

编辑:download section of the ipopt doc现在发布了一个新的二进制源:JuliaOpt GH repo