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个)
2MB
56K SLoC
Ipopt-src
描述
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的数学优化问题的(局部)解。
用法
-
将以下内容添加到您的
Cargo.toml
[dependencies] ipopt-src = "\*"
-
将以下内容添加到您的
lib.rs
extern crate ipopt_src;
此包不提供绑定。请使用coinipopt-sys来使用Ipopt,例如。
[dependencies]
coinipopt-sys = { version = "\*" }
配置
功能
以下Cargo功能受到支持
default
用于启用带有openblas-static
的mumps
;
ipopt需要以下求解器之一(点击Ipopt获取更多信息)
intel-mkl
用于与Intel MKL构建;mumps
用于与Mumps构建;hsl
用于与HSL构建;(目前不支持)spral
用于与Spral构建;(目前不支持)wsmp
用于与WSMP构建;(目前不支持)
如果选择 intel-mkl
,您应选择以下链接模式之一
intel-mkl-static
用于与Intel MKLlp64
、seq
构建;intel-mkl-dynamic
用于与Intel MKLlp64
、seq
构建;
如果选择 mumps
,应选择以下链接模式之一作为 mumps 的线性求解器
intel-mkl-static
用于与Intel MKLlp64
、seq
构建;intel-mkl-dynamic
用于与Intel MKLlp64
、seq
构建;- 以
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}_SYSTEM
和 CARGO_${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
工具链动态链接,安装 ipopt
的 x64-windows
三元组
vcpkg install ipopt --triplet x64-windows
要静态链接 Ipopt,安装 ipopt
的 x64-windows-static-md
三元组
vcpkg install ipopt --triplet x64-windows-static-md
要静态链接 Ipopt 和 C 运行时 (CRT),安装 ipopt
的 x64-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_CC
、OPENBLAS_FC
、OPENBLAS_HOSTCC
和 OPENBLAS_TARGET
,以便将环境变量传递给 OpenBLAS,参考:openblas-src 和 OpenBLAS。例如
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