pub struct LiftProjectMipSolver { /* private fields */ }Expand description
Lift-and-project cut manager for MIP solving.
Maintains a pool of previously generated cuts so they can be re-used across branch-and-cut nodes without regenerating them from scratch.
Implementations§
Source§impl LiftProjectMipSolver
impl LiftProjectMipSolver
Sourcepub fn new(config: LiftProjectConfig) -> Self
pub fn new(config: LiftProjectConfig) -> Self
Create a new solver with the given configuration.
Sourcepub fn default_solver() -> Self
pub fn default_solver() -> Self
Create a solver with default configuration.
Sourcepub fn add_cuts_to_lp(
&mut self,
a: &[Vec<f64>],
b: &[f64],
x_bar: &[f64],
integer_vars: &[usize],
) -> OptimizeResult<Vec<LiftProjectCut>>
pub fn add_cuts_to_lp( &mut self, a: &[Vec<f64>], b: &[f64], x_bar: &[f64], integer_vars: &[usize], ) -> OptimizeResult<Vec<LiftProjectCut>>
Generate lift-and-project cuts violated at x_bar and add them to the pool.
§Arguments
a– Constraint matrix rows (a[i][k]is the coefficient of x_k in row i). The constraint isa[i] · x ≤ b[i].b– Right-hand side.x_bar– Current LP relaxation solution.integer_vars– Indices of variables constrained to {0, 1}.
§Returns
The newly generated cuts that are violated at x_bar. These have already
been added to the internal cut pool; the caller should augment the LP with
these cuts and re-solve.
Sourcepub fn cut_pool_size(&self) -> usize
pub fn cut_pool_size(&self) -> usize
Number of cuts currently in the pool.
Sourcepub fn cut_pool(&self) -> &[LiftProjectCut]
pub fn cut_pool(&self) -> &[LiftProjectCut]
Access the full cut pool (read-only).
Sourcepub fn clear_cut_pool(&mut self)
pub fn clear_cut_pool(&mut self)
Remove all cuts from the pool (e.g., when moving to a new B&B node).
Sourcepub fn purge_non_violated_cuts(&mut self, x_new: &[f64])
pub fn purge_non_violated_cuts(&mut self, x_new: &[f64])
Retain only cuts that are still violated at a new LP solution x_new.
This is useful for node-level cut management: cuts that were valid at the parent node but are no longer violated can be removed to keep the working LP compact.
Sourcepub fn iterations(&self) -> usize
pub fn iterations(&self) -> usize
Number of times add_cuts_to_lp has been called.
Sourcepub fn total_cuts_generated(&self) -> usize
pub fn total_cuts_generated(&self) -> usize
Cumulative count of all cuts ever generated (including purged ones).
Sourcepub fn config(&self) -> &LiftProjectConfig
pub fn config(&self) -> &LiftProjectConfig
Read-only reference to the underlying configuration.
Sourcepub fn cut_violation(&self, cut: &LiftProjectCut, x_bar: &[f64]) -> f64
pub fn cut_violation(&self, cut: &LiftProjectCut, x_bar: &[f64]) -> f64
Compute the violation of a cut at x_bar.
Returns π · x_bar - π₀. Positive means x_bar violates the cut.
Sourcepub fn build_augmented_system(
&self,
a: &[Vec<f64>],
b: &[f64],
) -> OptimizeResult<(Vec<Vec<f64>>, Vec<f64>)>
pub fn build_augmented_system( &self, a: &[Vec<f64>], b: &[f64], ) -> OptimizeResult<(Vec<Vec<f64>>, Vec<f64>)>
Build an augmented constraint system by appending pooled cuts to (a, b).
The BCC cuts are stored as π · x ≥ π₀. To express them in ≤ form for standard LP solvers, we negate: −π · x ≤ −π₀.
§Returns
(a_aug, b_aug) where the first a.len() rows are the original constraints
and the subsequent rows are the negated cut inequalities.
Auto Trait Implementations§
impl Freeze for LiftProjectMipSolver
impl RefUnwindSafe for LiftProjectMipSolver
impl Send for LiftProjectMipSolver
impl Sync for LiftProjectMipSolver
impl Unpin for LiftProjectMipSolver
impl UnsafeUnpin for LiftProjectMipSolver
impl UnwindSafe for LiftProjectMipSolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.