pumpkin_core/optimisation/
mod.rs1use solution_callback::SolutionCallback;
4
5use crate::Solver;
6use crate::branching::Brancher;
7use crate::conflict_resolving::ConflictResolver;
8use crate::results::OptimisationResult;
9use crate::termination::TerminationCondition;
10
11pub mod linear_sat_unsat;
12pub mod linear_unsat_sat;
13pub mod solution_callback;
14
15pub trait OptimisationProcedure<B: Brancher, R: ConflictResolver, Callback: SolutionCallback<B, R>>
16{
17 fn optimise(
18 &mut self,
19 brancher: &mut B,
20 termination: &mut impl TerminationCondition,
21 resolver: &mut R,
22 solver: &mut Solver,
23 ) -> OptimisationResult<Callback::Stop>;
24}
25
26#[derive(Debug, Clone, Copy, Default)]
28#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
29pub enum OptimisationStrategy {
30 #[default]
33 LinearSatUnsat,
34 LinearUnsatSat,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq)]
41pub enum OptimisationDirection {
42 Maximise,
43 Minimise,
44}