pumpkin_core/optimisation/
mod.rs

1//! Contains structures related to optimissation.
2
3use solution_callback::SolutionCallback;
4
5use crate::branching::Brancher;
6use crate::results::OptimisationResult;
7use crate::termination::TerminationCondition;
8use crate::Solver;
9
10pub mod linear_sat_unsat;
11pub mod linear_unsat_sat;
12pub mod solution_callback;
13
14pub trait OptimisationProcedure<B: Brancher, Callback: SolutionCallback<B>> {
15    fn optimise(
16        &mut self,
17        brancher: &mut B,
18        termination: &mut impl TerminationCondition,
19        solver: &mut Solver,
20    ) -> OptimisationResult;
21}
22
23/// The type of search which is performed by the solver.
24#[derive(Debug, Clone, Copy, Default)]
25#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
26pub enum OptimisationStrategy {
27    /// Linear SAT-UNSAT - Starts with a satisfiable solution and tightens the bound on the
28    /// objective variable until an UNSAT result is reached. Can be seen as upper-bounding search.
29    #[default]
30    LinearSatUnsat,
31    /// Linear UNSAT-SAT - Starts with an unsatisfiable solution and tightens the bound on the
32    /// objective variable until a SAT result is reached. Can be seen as lower-bounding search.
33    LinearUnsatSat,
34}
35
36/// The direction of the optimisation, either maximising or minimising.
37#[derive(Debug, Clone, Copy, PartialEq)]
38pub enum OptimisationDirection {
39    Maximise,
40    Minimise,
41}