pub struct LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
M: Move<S>,
Source: MoveCursorSource<S, M>,
A: Acceptor<S>,
Fo: LocalSearchForager<S, M>,{ /* private fields */ }Expand description
Local search phase that improves an existing solution.
This phase iteratively:
- Streams candidate moves through a cursor-owned store
- Evaluates each move by stable candidate ID
- Accepts/rejects based on the acceptor
- Releases losers immediately and transfers ownership of the selected move
§Type Parameters
S- The planning solution typeM- The move typeSource- The phase cursor-source typeA- The acceptor typeFo- The forager type
§Zero-Clone Design
Uses ID-based online foraging. Stock foragers retain only the current winner’s
CandidateId and score. The cursor releases rejected and replaced candidates,
then transfers the selected move by value without cloning it.
Implementations§
Source§impl<S, M, MS, A, Fo> LocalSearchPhase<S, M, SelectorCursorSource<MS>, A, Fo>where
S: PlanningSolution,
M: Move<S> + 'static,
MS: MoveSelector<S, M>,
A: Acceptor<S>,
Fo: LocalSearchForager<S, M>,
impl<S, M, MS, A, Fo> LocalSearchPhase<S, M, SelectorCursorSource<MS>, A, Fo>where
S: PlanningSolution,
M: Move<S> + 'static,
MS: MoveSelector<S, M>,
A: Acceptor<S>,
Fo: LocalSearchForager<S, M>,
Trait Implementations§
Source§impl<S, M, Source, A, Fo> CustomSearchPhase<S> for LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
M: Move<S>,
Source: MoveCursorSource<S, M> + Debug + Send,
A: Acceptor<S> + Debug,
Fo: LocalSearchForager<S, M> + Debug,
impl<S, M, Source, A, Fo> CustomSearchPhase<S> for LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
M: Move<S>,
Source: MoveCursorSource<S, M> + Debug + Send,
A: Acceptor<S> + Debug,
Fo: LocalSearchForager<S, M> + Debug,
fn solve<D, ProgressCb>(
&mut self,
solver_scope: &mut SolverScope<'_, S, D, ProgressCb>,
)where
D: Director<S>,
ProgressCb: ProgressCallback<S>,
fn phase_type_name(&self) -> &'static str
Source§fn on_solver_terminal<D, ProgressCb>(
&mut self,
solver_scope: &mut SolverScope<'_, S, D, ProgressCb>,
)where
D: Director<S>,
ProgressCb: ProgressCallback<S>,
fn on_solver_terminal<D, ProgressCb>(
&mut self,
solver_scope: &mut SolverScope<'_, S, D, ProgressCb>,
)where
D: Director<S>,
ProgressCb: ProgressCallback<S>,
Runs once at the enclosing solver’s terminal boundary. Read more
Source§impl<S, M, Source, A, Fo> Debug for LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
M: Move<S>,
Source: MoveCursorSource<S, M> + Debug,
A: Acceptor<S> + Debug,
Fo: LocalSearchForager<S, M> + Debug,
impl<S, M, Source, A, Fo> Debug for LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
M: Move<S>,
Source: MoveCursorSource<S, M> + Debug,
A: Acceptor<S> + Debug,
Fo: LocalSearchForager<S, M> + Debug,
Source§impl<S, D, BestCb, M, Source, A, Fo> Phase<S, D, BestCb> for LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
D: Director<S>,
BestCb: ProgressCallback<S>,
M: Move<S>,
Source: MoveCursorSource<S, M> + Debug + Send,
A: Acceptor<S>,
Fo: LocalSearchForager<S, M>,
impl<S, D, BestCb, M, Source, A, Fo> Phase<S, D, BestCb> for LocalSearchPhase<S, M, Source, A, Fo>where
S: PlanningSolution,
D: Director<S>,
BestCb: ProgressCallback<S>,
M: Move<S>,
Source: MoveCursorSource<S, M> + Debug + Send,
A: Acceptor<S>,
Fo: LocalSearchForager<S, M>,
fn solve(&mut self, solver_scope: &mut SolverScope<'_, S, D, BestCb>)
fn phase_type_name(&self) -> &'static str
Source§fn on_solver_terminal(
&mut self,
_solver_scope: &mut SolverScope<'_, S, D, BestCb>,
)
fn on_solver_terminal( &mut self, _solver_scope: &mut SolverScope<'_, S, D, BestCb>, )
Runs once when the enclosing solver reaches its terminal boundary. Read more
Source§fn candidate_trace_plan(&self) -> CandidateTracePhasePlan
fn candidate_trace_plan(&self) -> CandidateTracePhasePlan
Returns the exact resolved-plan provenance this phase can prove. Read more
Auto Trait Implementations§
impl<S, M, Source, A, Fo> Freeze for LocalSearchPhase<S, M, Source, A, Fo>
impl<S, M, Source, A, Fo> RefUnwindSafe for LocalSearchPhase<S, M, Source, A, Fo>where
Source: RefUnwindSafe,
<Source as MoveCursorSource<S, M>>::Resources: RefUnwindSafe,
A: RefUnwindSafe,
Fo: RefUnwindSafe,
impl<S, M, Source, A, Fo> Send for LocalSearchPhase<S, M, Source, A, Fo>where
Source: Send,
impl<S, M, Source, A, Fo> Sync for LocalSearchPhase<S, M, Source, A, Fo>
impl<S, M, Source, A, Fo> Unpin for LocalSearchPhase<S, M, Source, A, Fo>
impl<S, M, Source, A, Fo> UnsafeUnpin for LocalSearchPhase<S, M, Source, A, Fo>where
Source: UnsafeUnpin,
<Source as MoveCursorSource<S, M>>::Resources: UnsafeUnpin,
A: UnsafeUnpin,
Fo: UnsafeUnpin,
impl<S, M, Source, A, Fo> UnwindSafe for LocalSearchPhase<S, M, Source, A, Fo>where
Source: UnwindSafe,
<Source as MoveCursorSource<S, M>>::Resources: UnwindSafe,
A: UnwindSafe,
Fo: UnwindSafe,
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