The package provides Low-level bindings to the [Cgl] library. [Cgl] build with [CoinUtils] ([CoinUtils-src]), [Osi] ([Clp-src]) and [Clp] ([Clp-src])(Optional) support.
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]) or [BCP] ([BCP-src]). Cgl uses the [Osi] ([Osi-src]) to use or communicate with a solver, such as the linear programming solvers Clp. It does not directly call a solver.
Just add the following to your Cargo.toml
:
toml
[dependencies]
cgl-src = "0.1"
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
CglAllDifferent
to provide [CglAllDifferent] cut generator;
CglClique
to provide [CglClique] cut generator;CglKnapsackCover
to provide [CglKnapsackCover] cut generator;CglOddHole
to provide [CglOddHole] cut generator;
CglZeroHalf
to provide [CglZeroHalf] cut generator;flow cover cuts:
CglFlowCover
to provide [CglFlowCover] cut generator;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:
CglMixedIntegerRounding
to provide [CglMixedIntegerRounding] cut generator;CglMixedIntegerRounding2
to provide [CglMixedIntegerRounding2] cut generator;CglTwomir
to provide [CglTwomir] cut generator, which requires with_clp
feature to use [clp-src];CglResidualCapacity
to provide [CglResidualCapacity] cut generator;Strengthening:
CglDuplicateRow
to provide [CglDuplicateRow] cut generator;CglPreProcess
to provide [CglPreProcess] cut generator;CglProbing
to provide [CglProbing] cut generator;CglSimpleRounding
to provide [CglSimpleRounding] cut generator;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
.
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:
sh
vcpkg install cgl --triplet x64-windows
To link Cgl statically, install cgl
for the x64-windows-static-md
triplet:
sh
vcpkg install cgl --triplet x64-windows-static-md
To link Cgl and C Runtime (CRT) statically, install cgl
for the x64-windows-static
triplet:
sh
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.
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-linux-androideabi
| ✓ |
| armv7-unknown-linux-gnueabi
| ✓ |
| armv7-unknown-linux-gnueabihf
| ✓ |
| armv7-unknown-linux-musleabi
| ✓ |
| armv7-unknown-linux-musleabihf
| ✓ |
| riscv64gc-unknown-linux-gnu
| ✓ |
| x86_64-pc-windows-gnu
| ✓ |
| x86_64-unknown-linux-gnu
| ✓ |
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.