solverforge_solver/termination/
mod.rs

1//! Termination conditions for solver phases.
2
3mod 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;
15
16use crate::scope::SolverScope;
17
18pub use best_score::{BestScoreFeasibleTermination, BestScoreTermination};
19pub use composite::{AndCompositeTermination, OrCompositeTermination};
20pub use diminished_returns::DiminishedReturnsTermination;
21pub use move_count::MoveCountTermination;
22pub use score_calculation_count::ScoreCalculationCountTermination;
23pub use step_count::StepCountTermination;
24pub use time::TimeTermination;
25pub use unimproved::{UnimprovedStepCountTermination, UnimprovedTimeTermination};
26
27/// Trait for determining when to stop solving.
28pub trait Termination<S: PlanningSolution>: Send + Debug {
29    /// Returns true if solving should terminate.
30    fn is_terminated(&self, solver_scope: &SolverScope<S>) -> bool;
31}
32
33#[cfg(test)]
34mod tests;