#非线性 #coin-or #编程 #链接 #整数 #混合 #bonmin

sys build bonmin-src

将 Coin-OR Bonmin 作为 crate 分发

2 个版本

0.1.1+1.8.9 2024 年 4 月 11 日
0.1.0+1.8.9 2024 年 1 月 27 日

构建工具 中排名 296

Download history 4/week @ 2024-05-17 3/week @ 2024-05-24 3/week @ 2024-05-31 1/week @ 2024-06-07 1/week @ 2024-06-28 3/week @ 2024-07-05

每月下载量 80
用于 coinbonmin-sys

Apache-2.0 许可证

1MB
21K SLoC

C++ 21K SLoC // 0.1% comments Automake 664 SLoC // 0.3% comments Rust 111 SLoC

Bonmin-src

Package Documentation License

描述

Bonmin-src crate 是一个 *-src crate。该crate通过 cargo 将 Bonmin 库链接到可执行文件构建,但不提供 Rust 绑定。[Bomin] 使用 CoinUtils (CoinUtils-src), Osi (Osi-src), Cgl (Cgl-src), Clp (Clp-src), Cbc ([Cbc-src]), Ipopt (Ipopt-src), Mumps (Mumps-src)(可选), OpenBLAS (OpenBLAS-src)(可选) 和 Intel-mkl (intel-mkl-src)(可选) 构建。

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

Bonmin (基本开源非线性混合整数编程) 是一个用于解决一般 MINLP (混合整数非线性规划) 问题的开源代码。

用法

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

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

    extern crate bonmin_src;
    

此包不提供绑定。请使用 coinbonmin-sys, coinipopt-sys, coincbc-sys, coinclp-sys 来使用 Bonmin,Ipopt,Cbc,Clp 等。

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

注意:C接口来自Bonmin(https://github.com/coin-or/Bonmin)的主分支,其中仍有一些待办事项。

配置

功能

以下Cargo功能受支持

  • 默认;
  • cplex 与cplex构建(需要在系统中安装cplex);
  • filtersqp 与filtersqp构建(需要在系统中安装filtersqp);

环境

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

  • CARGO_BONMIN_STATIC 静态链接到Bonmin;
  • CARGO_BONMIN_SYSTEM 链接到Bonmin系统库;
  • CARGO_IPOPT_STATIC 静态链接到Ipopt;
  • CARGO_IPOPT_SYSTEM 链接到Ipopt系统库;
  • CARGO_MUMPS_STATIC 静态链接到Mumps;
  • CARGO_MUMPS_SYSTEM 链接到Mumps系统库;
  • CARGO_COINUTILS_STATIC 静态链接到CoinUtils;
  • CARGO_COINUTILS_SYSTEM 链接到CoinUtils系统库;
  • CARGO_OSI_STATIC 静态链接到Osi;
  • CARGO_OSI_SYSTEM 链接到Osi系统库;
  • CARGO_CLP_STATIC 静态链接到Clp;
  • CARGO_CLP_SYSTEM 链接到Clp系统库;
  • CARGO_CGL_STATIC 静态链接到Cgl;
  • CARGO_CGL_SYSTEM 链接到Cgl系统库;
  • CARGO_CBC_STATIC 静态链接到Cbc;
  • CARGO_CBC_SYSTEM 链接到Cbc系统库;

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

如果您启用OpenBLAS(https://github.com/blas-lapack-rs/openblas-src),您还可以通过OPENBLAS_*将环境传递给make。更多信息请参阅这里

其他

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

参考:intel-mkl-srcintel-mkl-srcipopt-srcmumps-src

Windows和vcpkg

在Windows上,OpenBLAS需要vcpkg来查找Bonmin。在构建之前,您必须为您的目标三元组和链接方式安装正确的Bonmin。例如,为了为x86_64-pc-windows-msvc工具链动态链接,请安装bonmin用于x64-windows三元组

vcpkg install bonmin --triplet x64-windows

若要静态链接Bonmin,请为x64-windows-static-md三元组安装bonmin

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

若要将Bonmin和C运行时(CRT)静态链接,请为x64-windows-static三元组安装bonmin

vcpkg install bonmin --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

贡献

我们非常欢迎您的贡献。请不要犹豫,打开一个issue或pull request。请注意,提交给项目包含的贡献将根据LICENSE中给出的条款进行许可。

依赖项

~18MB
~457K SLoC