#ipopt #optimization #bindings #ffi

sys ipopt_bindgen

Rust 对 Ipopt 库的 C 接口的绑定,Ipopt 是一个用于大规模、约束、非线性优化的库

5 个版本

0.2.2 2024年4月14日
0.2.1 2024年4月14日
0.2.0 2024年4月14日
0.1.1 2024年4月7日
0.1.0 2024年4月7日

#715 in 数学

Download history 152/week @ 2024-04-09 69/week @ 2024-04-16 3/week @ 2024-05-21

每月 98 次下载

MIT/Apache

16KB

Ipopt Bindgen

crates.io docs.rs dependency status License

这个 crate 提供了使用 bindgenIpopt 优化库的 C 接口进行原始 Rust 绑定的功能。

快速开始

安装 Ipopt(更多详细信息请参阅先决条件部分)。

将此 crate 添加到您的 Cargo.toml

[dependencies]
ipopt_bindgen = "0.2"

在您的项目中使用 Ipopt C 接口

use ipopt_bindgen::*;

// Ipopt C interface symbols are now available.
println!("{0}.{1}.{2}", IPOPT_VERSION_MAJOR, IPOPT_VERSION_MINOR, IPOPT_VERSION_RELEASE);

或者,运行此仓库中的示例

cargo run --example hs071

支持

此 crate 目前已在以下环境中进行了测试

  • 基于 Debian 的 Linux,从源代码安装了 Ipopt。
  • Windows 11,从预编译的二进制文件中安装了 Ipopt,使用 MSVC。
  • macOS Sonoma,从 homebrew 安装了 Ipopt。

为什么还需要另一个 Ipopt 绑定器?

Rust 已经有其他 crates 提供了 Ipopt 的绑定

那么为什么还要创建另一个呢?

此 crate 的目的是直接使用系统 Ipopt 安装,而不是在 cargo 中构建。这既有优点也有缺点,可能不适合您。

优点

  • ✅ 完全自定义您的 Ipopt 构建,不受 cargo 或现有 crates 的约束。
  • ✅ 项目可能具有更少的构建依赖项。
  • ✅ 不绑定到特定的 Ipopt 版本(除非 C API 发生破坏性更改)。

缺点

  • ❌ 需要系统安装的 Ipopt,这可能对您的项目来说不方便。
  • ❌ 使用 C 接口,而不是功能更丰富的 C++ 接口。

如果您只是想开始在 Rust 中使用 Ipopt,您可能应该使用上述现有的某个 crate。但是,如果您已经在系统上安装了 Ipopt 或需要使用具有特定功能的构建,这个 crate 可能适合您。

理想情况下,一个符合 Rust 风格的 crate 应该建立在它之上,或者它可以集成到现有的 crate 中。

在示例目录中,有一个来自Ipopt文档的HS071问题的完整、镜像示例。再次强调,此crate的理想用途是被一个提供更自然接口的更高级crate消费,但它也可以直接使用。示例演示了C API的使用,这可能会在相关工作中提供帮助!

先决条件

Ipopt

Ipopt必须安装在你的系统上。绑定头文件将尝试包含coin-or/IpStdCInterface.h

在Linux上,你可以使用你的包管理器安装Ipopt,或者从源码构建它。默认情况下,这些过程应使Ipopt立即可用于与该crate一起使用。

在Windows上,你可以从Ipopt的GitHub仓库中获取预编译的二进制文件。然后,按照以下方式将下载的版本文件添加到你的环境变量中

  • 将包含预编译二进制的目录添加到PATH
  • 将包含静态库的目录添加到LIB
  • 将包含Ipopt头文件的目录添加到INCLUDE

在Windows上,默认情况下,此crate将尝试使用cc crate来自动检测MSVC安装。这用于更轻松地为Ipopt C接口头文件提供标准库头文件。如果失败,你需要将INCLUDE环境变量设置为包含你希望的标准库头文件。

Bindgen

必须也在你的系统上满足bindgen要求。这基本上意味着必须安装clang

在Windows上,你可以使用winget install LLVM.LLVM。在Linux上,你可以使用你的包管理器安装clang。LLVM还提供了一个apt安装脚本

更改

对这个项目所有有意义的更改都记录在更改日志中。

许可协议

此仓库的许可协议可以是以下之一

由你选择。

Ipopt本身根据Eclipse Public License (EPL)版本2.0进行许可。

无运行时依赖

~0–1.8MB
~36K SLoC