algos 0.6.8

A collection of algorithms in Rust
Documentation
use std::error::Error;

pub mod benders;
pub mod branch_and_bound;
pub mod branch_and_cut;
pub mod branch_and_price;
pub mod branch_and_reduce;
pub mod column_generation;
pub mod dantzig_wolfe;
pub mod gomory;
pub mod lift_and_project;
pub mod mixed_integer_rounding;

#[derive(Debug, Clone)]
pub struct IntegerLinearProgram {
    pub objective: Vec<f64>,
    pub constraints: Vec<Vec<f64>>,
    pub bounds: Vec<f64>,
    pub integer_vars: Vec<usize>,
}

#[derive(Debug, Clone)]
pub struct ILPSolution {
    pub values: Vec<f64>,
    pub objective_value: f64,
    pub status: ILPStatus,
}

#[derive(Debug, Clone, PartialEq)]
pub enum ILPStatus {
    Optimal,
    Infeasible,
    Unbounded,
    MaxIterationsReached,
}

pub trait ILPSolver {
    fn solve(&self, problem: &IntegerLinearProgram) -> Result<ILPSolution, Box<dyn Error>>;
}

pub use benders::BendersDecomposition;
pub use branch_and_bound::BranchAndBoundSolver;
pub use branch_and_cut::BranchAndCutSolver;
pub use branch_and_price::BranchAndPriceSolver;
pub use branch_and_reduce::BranchAndReduceSolver;
pub use column_generation::ColumnGenerationSolver;
pub use dantzig_wolfe::DantzigWolfeDecomposition;
pub use gomory::GomoryCuttingPlanes;
pub use lift_and_project::LiftAndProjectCuts;
pub use mixed_integer_rounding::MixedIntegerRoundingCuts;