solverforge_solver/termination/
mod.rs1mod best_score;
4mod composite;
5mod diminished_returns;
6mod move_count;
7mod score_calculation_count;
8mod step_count;
9mod time;
10mod unimproved;
11
12use std::fmt::Debug;
13
14use solverforge_core::domain::PlanningSolution;
15use solverforge_scoring::Director;
16
17use crate::scope::BestSolutionCallback;
18use crate::scope::SolverScope;
19
20pub use best_score::{BestScoreFeasibleTermination, BestScoreTermination};
21pub use composite::{AndTermination, OrTermination};
22pub use diminished_returns::DiminishedReturnsTermination;
23pub use move_count::MoveCountTermination;
24pub use score_calculation_count::ScoreCalculationCountTermination;
25pub use step_count::StepCountTermination;
26pub use time::TimeTermination;
27pub use unimproved::{UnimprovedStepCountTermination, UnimprovedTimeTermination};
28
29pub trait Termination<S: PlanningSolution, D: Director<S>, BestCb: BestSolutionCallback<S> = ()>:
36 Send + Debug
37{
38 fn is_terminated(&self, solver_scope: &SolverScope<S, D, BestCb>) -> bool;
40
41 fn install_inphase_limits(&self, _solver_scope: &mut SolverScope<S, D, BestCb>) {}
46}
47
48#[cfg(test)]
49mod tests;