Trait grb::callback::Callback [−][src]
Expand description
A trait that allows structs to be used as a callback object
Examples
This example shows how to store every integer solution found during a MIP solve
use grb::prelude::*;
use grb::callback::CbResult;
struct CallbackData {
vars: Vec<Var>,
solutions: Vec<Vec<f64>>,
}
impl Callback for CallbackData {
fn callback(&mut self, w: Where) -> CbResult {
match w {
Where::MIPSol(ctx) => {
self.solutions.push(ctx.get_solution(&self.vars)?)
}
_ => {}
}
Ok(())
}
}
This example shows how to cache lazy cuts for later use (perhaps adding them as hard constraints with
Model::add_constrs
once optimisation has finished)
use grb::prelude::*;
use grb::constr::IneqExpr;
use grb::callback::CbResult;
struct LazyCutSep {
vars: Vec<Var>,
past_cuts : Vec<IneqExpr>,
}
impl LazyCutSep {
fn separate_cuts(&self, solution: &[f64]) -> Vec<IneqExpr> {
/* ... */
}
}
impl Callback for LazyCutSep {
fn callback(&mut self, w: Where) -> CbResult {
if let Where::MIPSol(ctx) = w {
let solution = ctx.get_solution(&self.vars)?;
let cuts = self.separate_cuts(&solution);
self.past_cuts.extend_from_slice(&cuts);
for c in cuts {
ctx.add_lazy(c)?;
}
}
Ok(())
}
}