7 releases

0.2.8+0.60.9 Aug 20, 2024
0.2.7+0.60.8 Apr 11, 2024
0.2.6+0.60.8 Oct 27, 2023
0.2.4+0.60.7 May 18, 2023
0.2.2+0.60.6 Mar 28, 2023

#1213 in Algorithms

45 downloads per month
Used in 4 crates (via cbc-src)

Apache-2.0

2MB
53K SLoC

C++ 52K SLoC // 0.1% comments Automake 232 SLoC // 0.6% comments Rust 192 SLoC Shell 11 SLoC // 0.3% comments

Cgl-src

Package Documentation License

description

Cgl-src crate is a *-src crate. This links Cgl libraries to executable build by cargo, but does not provide Rust bindings. Cgl is built with CoinUtils (CoinUtils-src), Osi (Clp-src) and Clp (Clp-src)(Optional).

By this package, you don't need to worry about installing Cgl in the system, and it can be built for all platforms.

The COIN-OR Cut Generation Library (Cgl) is a collection of cut generators that can be used with other COIN-OR packages that make use of cuts, such as, the mixed integer linear programming solvers Cbc (Cbc-src). Cgl uses the Osi (Osi-src) to use or communicate with a solver, such as the linear programming solvers Clp Clp-src. It does not directly call a solver.

Usage

  1. Add the following to your Cargo.toml:

    [dependencies]
    cgl-src = "\*"
    
  2. Add the following to your lib.rs:

    extern crate cgl_src;
    

This package does not provide bindings. Please use coincbc-sys, coinclp-sys to use Cbc, Clp, e.g.

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

Configuration

Features

The following Cargo features are supported:

  • default to with_clp and default_cuts feature;

  • with_clp to build with Clp support;

  • default_cuts to provide all the following cut generators;

  • Combinatorial cuts

    • CglZeroHalf to provide [CglZeroHalf] cut generator;
  • flow cover cuts:

  • Gomory cuts and variants:

    • CglGomory = to provide CglGomory cut generator, which requires with_clp feature to use clp-src;
    • CglGMI to provide [CglGMI] cut generator;
    • CglRedSplit to provide CglRedSplit cut generator;
    • CglRedSplit2 to provide [CglRedSplit2] cut generator;
  • Lift and project cuts:

    • CglLiftAndProject to provide CglLiftAndProject cut generator;
    • CglLandP = to provide CglLandP cut generator, which requires CglGomory feature;
  • Mixed integer rounding cuts and variants:

  • Strengthening:

Environment

The package build from the source and link statically by default. It also provide the following environment variables to allow users to link to system library customly:

  • CARGO_COINUTILS_STATIC to link to CoinUtils statically;
  • CARGO_COINUTILS_SYSTEM to link to CoinUtils system library;
  • CARGO_OSI_STATIC to link to Osi statically;
  • CARGO_OSI_SYSTEM to link to Osi system library;
  • CARGO_CLP_STATIC to link to Clp statically if with_clp feature is enabled;
  • CARGO_CLP_SYSTEM to link to Clp system library if with_clp feature is enabled;
  • CARGO_CGL_STATIC to link to Cgl statically;
  • CARGO_CGL_SYSTEM to link to Cgl system library;

Set the environment variable to 1 to enable the feature. For example, to link to system library dynamically, set CARGO_${LIB_NAME}_SYSTEM to 1; to link to system library statically, set both CARGO_${LIB_NAME}_SYSTEM and CARGO_${LIB_NAME}_STATIC to 1.

Windows and vcpkg

On Windows, if ${LIB_NAME}_SYSTEM is set to 1, cgl-src will use vcpkg to find Cgl. Before building, you must have the correct Cgl installed for your target triplet and kind of linking. For instance, to link dynamically for the x86_64-pc-windows-msvc toolchain, install cgl for the x64-windows triplet:

vcpkg install cgl --triplet x64-windows

To link Cgl statically, install cgl for the x64-windows-static-md triplet:

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

To link Cgl and C Runtime (CRT) statically, install cgl for the x64-windows-static triplet:

vcpkg install cgl --triplet x64-windows-static

and build with +crt-static option

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

Please see the "Static and dynamic C runtimes" in The Rust reference for detail.

Cross Compilation

you can compile it for the other target by providing the --target option to cargo build.

Target supported
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
x86_64-unknown-linux-musl
others not test

Contribution

Your contribution is highly appreciated. Do not hesitate to open an issue or a pull request. Note that any contribution submitted for inclusion in the project will be licensed according to the terms given in LICENSE.

Dependencies

~3.5–5.5MB
~137K SLoC