Struct vrp_core::solver::search::ExchangeSwapStar
source · pub struct ExchangeSwapStar { /* private fields */ }
Expand description
Implements a SWAP* algorithm described in “Hybrid Genetic Search for the CVRP: Open-Source Implementation and SWAP* Neighborhood” by Thibaut Vidal.
The key idea is described by the following theorem:
In a best Swap* move between customers v and v0 within routes r and r0 , the new insertion
position of v in r0 is either:
i) in place of v0 , or
ii) among the three best insertion positions in r0 as evaluated prior to the removal of v0.
A symmetrical argument holds for the new insertion position of v0 in r.
For more details, see <https://arxiv.org/abs/2012.10384>
Implementations§
Trait Implementations§
source§impl LocalOperator for ExchangeSwapStar
impl LocalOperator for ExchangeSwapStar
source§fn explore(
&self,
refinement_ctx: &RefinementContext,
insertion_ctx: &InsertionContext,
) -> Option<InsertionContext>
fn explore( &self, refinement_ctx: &RefinementContext, insertion_ctx: &InsertionContext, ) -> Option<InsertionContext>
Applies local search operator to passed solution in order to explore possible
small move in solution space which leads to a different solution.
Auto Trait Implementations§
impl Freeze for ExchangeSwapStar
impl !RefUnwindSafe for ExchangeSwapStar
impl Send for ExchangeSwapStar
impl Sync for ExchangeSwapStar
impl Unpin for ExchangeSwapStar
impl !UnwindSafe for ExchangeSwapStar
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> 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