pub struct SolverFactory<S, D, C, P, T> { /* private fields */ }Expand description
Zero-erasure solver factory.
Stores phases as a concrete tuple type P, score calculator as C,
and termination as T. No dynamic dispatch anywhere.
§Type Parameters
S- The solution typeD- The score director typeC- The score calculator typeP- The phases tuple typeT- The termination type
Implementations§
Source§impl<S, D, C, P, T> SolverFactory<S, D, C, P, T>where
S: PlanningSolution,
D: ScoreDirector<S>,
C: Fn(&S) -> S::Score + Send + Sync,
P: Phase<S, D>,
T: Termination<S, D>,
impl<S, D, C, P, T> SolverFactory<S, D, C, P, T>where
S: PlanningSolution,
D: ScoreDirector<S>,
C: Fn(&S) -> S::Score + Send + Sync,
P: Phase<S, D>,
T: Termination<S, D>,
Sourcepub fn new(score_calculator: C, phases: P, termination: T) -> Self
pub fn new(score_calculator: C, phases: P, termination: T) -> Self
Creates a new SolverFactory with concrete types.
Sourcepub fn score_calculator(&self) -> &C
pub fn score_calculator(&self) -> &C
Returns a reference to the score calculator.
Sourcepub fn calculate_score(&self, solution: &S) -> S::Score
pub fn calculate_score(&self, solution: &S) -> S::Score
Calculates score for a solution.
Sourcepub fn phases_mut(&mut self) -> &mut P
pub fn phases_mut(&mut self) -> &mut P
Returns a mutable reference to the phases.
Sourcepub fn termination(&self) -> &T
pub fn termination(&self) -> &T
Returns a reference to the termination.
Sourcepub fn solve(&mut self, solver_scope: &mut SolverScope<'_, S, D>)
pub fn solve(&mut self, solver_scope: &mut SolverScope<'_, S, D>)
Solves using the configured phases and termination.
Sourcepub fn create_solver(self) -> Solver<'static, P, Option<T>, S, ()>
pub fn create_solver(self) -> Solver<'static, P, Option<T>, S, ()>
Creates a Solver from this factory’s configuration.
The returned Solver can be used with solve_with_director() for
macro-generated code or solve() for direct use.
Source§impl<S: PlanningSolution> SolverFactory<S, (), (), (), ()>
impl<S: PlanningSolution> SolverFactory<S, (), (), (), ()>
Sourcepub fn builder<D, C>(
score_calculator: C,
) -> SolverFactoryBuilder<S, D, C, (), NoTermination>
pub fn builder<D, C>( score_calculator: C, ) -> SolverFactoryBuilder<S, D, C, (), NoTermination>
Creates a new builder for SolverFactory.
This allows calling SolverFactory::<MySolution>::builder(score_fn)
to start building a solver factory.
§Example
use solverforge_core::domain::PlanningSolution;
use solverforge_core::score::SimpleScore;
use solverforge_solver::manager::solver_factory_builder;
#[derive(Clone)]
struct MySolution {
score: Option<SimpleScore>,
}
impl PlanningSolution for MySolution {
type Score = SimpleScore;
fn score(&self) -> Option<Self::Score> { self.score }
fn set_score(&mut self, score: Option<Self::Score>) { self.score = score; }
}
let builder = solver_factory_builder::<MySolution, (), _>(|_s| SimpleScore::of(0));Auto Trait Implementations§
impl<S, D, C, P, T> Freeze for SolverFactory<S, D, C, P, T>
impl<S, D, C, P, T> RefUnwindSafe for SolverFactory<S, D, C, P, T>
impl<S, D, C, P, T> Send for SolverFactory<S, D, C, P, T>
impl<S, D, C, P, T> Sync for SolverFactory<S, D, C, P, T>
impl<S, D, C, P, T> Unpin for SolverFactory<S, D, C, P, T>
impl<S, D, C, P, T> UnwindSafe for SolverFactory<S, D, C, P, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more