#ipopt #cargo-build #optimization #coin-or #non-linear #link #open-blas

sys ipopt-src

将 Coin-OR Ipopt 作为crate进行分发

3 个版本

0.2.3+3.14.16 2024年4月25日
0.2.2+3.14.15 2024年4月11日
0.2.1+3.14.14 2024年1月19日

#1637 in 算法


3 个crate中使用 (直接使用2个)

Apache-2.0

2MB
56K SLoC

C++ 54K SLoC // 0.1% comments C 564 SLoC // 0.0% comments Java 370 SLoC // 0.5% comments Automake 291 SLoC // 0.0% comments FORTRAN Legacy 224 SLoC // 0.5% comments Rust 125 SLoC // 0.0% comments Bitbake 50 SLoC

Ipopt-src

Package Documentation License

描述

Ipopt-src crate是一个*-src crate。这个crate将Ipopt库链接到由cargo构建的可执行文件,但不提供Rust绑定。Ipopt使用Mumps (mumps-src)和OpenBLAS (openblas-src)(可选)以及Intel-MKL (intel-mkl-src)(可选)构建。

通过此包,您无需担心在系统中安装Ipopt,这是一个适用于所有平台的包。

Ipopt (Interior Point OPTimizer,发音为eye-pea-Opt)是一个用于大规模非线性优化的软件包。它旨在找到NLP的数学优化问题的(局部)解。

用法

  1. 将以下内容添加到您的 Cargo.toml

    [dependencies]
    ipopt-src = "\*"
    
  2. 将以下内容添加到您的 lib.rs

    extern crate ipopt_src;
    

此包不提供绑定。请使用coinipopt-sys来使用Ipopt,例如。

[dependencies]
coinipopt-sys = { version = "\*" }

配置

功能

以下Cargo功能受到支持

  • default 用于启用带有 openblas-staticmumps

ipopt需要以下求解器之一(点击Ipopt获取更多信息)

  • intel-mkl 用于与Intel MKL构建;
  • mumps 用于与Mumps构建;
  • hsl 用于与HSL构建;(目前不支持)
  • spral 用于与Spral构建;(目前不支持)
  • wsmp 用于与WSMP构建;(目前不支持)

如果选择 intel-mkl,您应选择以下链接模式之一

  • intel-mkl-static 用于与Intel MKL lp64seq构建;
  • intel-mkl-dynamic 用于与Intel MKL lp64seq构建;

如果选择 mumps,应选择以下链接模式之一作为 mumps 的线性求解器

  • intel-mkl-static 用于与Intel MKL lp64seq构建;
  • intel-mkl-dynamic 用于与Intel MKL lp64seq构建;
  • openblas-static 构建并静态链接 OpenBLAS;
  • openblas-dynamic 构建并动态链接 OpenBLAS;

环境

默认情况下,从源代码构建的软件包会静态链接。它还提供以下环境变量,允许用户自定义链接到系统库:

  • CARGO_IPOPT_STATIC 以静态链接 Ipopt;
  • CARGO_IPOPT_SYSTEM 以链接到 Ipopt 系统库;
  • CARGO_MUMPS_STATIC 以静态链接 Mumps;
  • CARGO_MUMPS_SYSTEM 以链接到 Mumps 系统库;

将环境变量设置为 1 以启用该功能。例如,要动态链接到系统库,将 CARGO_${LIB_NAME}_SYSTEM 设置为 1;要静态链接到系统库,将 CARGO_${LIB_NAME}_SYSTEMCARGO_${LIB_NAME}_STATIC 都设置为 1

如果您启用了 OpenBLAS(openblas-src),您也可以通过 OPENBLAS_* 将环境变量传递给 make。更多信息请参阅 此处

其他

如果您启用了 OpenBLAS(openblas-src),您可以通过禁用默认功能并选择您喜欢的选项来静态或动态链接 OpenBLAS,例如

ipopt-src = { version = "\*", default-features = no, features = ["mumps", "openblas-static"] }

类似地,您可以使用以下方式链接 Intel MKL (intel-mkl-src)

ipopt-src = { version = "\*", default-features = no, features = ["intel-mkl", "intel-mkl-system"] }

如果您需要更多配置,您可以尝试这个

ipopt-src = { version = "\*", default-features = no, features = ["intel-mkl"] }
intel-mkl-src = { version = "\*", features = ["mkl-static-lp64-seq"] }

Windows 和 vcpkg

在 Windows 上,openblas 需要 vcpkg 来查找 Ipopt。在构建之前,您必须为您的目标三元组类型和链接类型安装正确的 Ipopt。例如,要为 x86_64-pc-windows-msvc 工具链动态链接,安装 ipoptx64-windows 三元组

vcpkg install ipopt --triplet x64-windows

要静态链接 Ipopt,安装 ipoptx64-windows-static-md 三元组

vcpkg install ipopt --triplet x64-windows-static-md

要静态链接 Ipopt 和 C 运行时 (CRT),安装 ipoptx64-windows-static 三元组

vcpkg install ipopt --triplet x64-windows-static

并使用 +crt-static 选项进行构建

RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc

请参阅 Rust 参考中的“静态和动态 C 运行时”以获取详细信息。

交叉编译

如果您使用 OpenBLAS(openblas-src),您需要设置 OPENBLAS_CCOPENBLAS_FCOPENBLAS_HOSTCCOPENBLAS_TARGET,以便将环境变量传递给 OpenBLAS,参考:openblas-srcOpenBLAS。例如

export OPENBLAS_TARGET=ARMV8
export OPENBLAS_HOSTCC=gcc
export OPENBLAS_CC=aarch64-linux-gnu-gcc
export OPENBLAS_FC=aarch64-linux-gnu-gfortran

您可以通过为 cargo build 提供选项 --target 来编译其他目标。

目标 支持
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
armv7-unknown-linux-gnueabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabi
armv7-unknown-linux-musleabihf
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
riscv64gc-unknown-linux-gnu
x86_64-pc-windows-msvc
x86_64-unknown-linux-gnu
其他 未测试

注意:特性 intel-mkl-* 只能用于 x86_64-*。特性 openblas-static 只能用于 linux

贡献

您的贡献非常受欢迎。请毫不犹豫地打开一个问题或拉取请求。请注意,提交给项目包含的任何贡献都将根据LICENSE中的条款进行许可。

依赖项

~0–1.8MB
~28K SLoC