pub struct VndPhase<S, M>where
S: PlanningSolution,
M: Move<S>,{ /* private fields */ }Expand description
Variable Neighborhood Descent phase.
Explores multiple neighborhoods in sequence, restarting from the first whenever an improvement is found.
§Type Parameters
S- The planning solution typeM- The move type (all neighborhoods must produce this type)
§Example
use solverforge_solver::phase::vnd::VndPhase;
use solverforge_solver::heuristic::selector::MoveSelector;
use solverforge_solver::heuristic::r#move::ChangeMove;
use solverforge_core::domain::PlanningSolution;
use solverforge_core::score::SimpleScore;
#[derive(Clone)]
struct Solution { values: Vec<Option<i32>>, score: Option<SimpleScore> }
impl PlanningSolution for Solution {
type Score = SimpleScore;
fn score(&self) -> Option<Self::Score> { self.score }
fn set_score(&mut self, score: Option<Self::Score>) { self.score = score; }
}
// VND with empty neighborhoods (for demonstration)
let vnd: VndPhase<Solution, ChangeMove<Solution, i32>> = VndPhase::new(vec![]);
assert_eq!(vnd.neighborhood_count(), 0);
// Use with_step_limit for configuration
let vnd = vnd.with_step_limit(1000);Implementations§
Source§impl<S, M> VndPhase<S, M>where
S: PlanningSolution,
M: Move<S> + 'static,
impl<S, M> VndPhase<S, M>where
S: PlanningSolution,
M: Move<S> + 'static,
Sourcepub fn new(neighborhoods: Vec<Box<dyn MoveSelector<S, M>>>) -> Self
pub fn new(neighborhoods: Vec<Box<dyn MoveSelector<S, M>>>) -> Self
Creates a new VND phase with the given neighborhoods.
Neighborhoods are explored in order. When an improvement is found, exploration restarts from the first neighborhood.
Sourcepub fn with_step_limit(self, limit: u64) -> Self
pub fn with_step_limit(self, limit: u64) -> Self
Sets the maximum steps to try per neighborhood before moving on.
Sourcepub fn neighborhood_count(&self) -> usize
pub fn neighborhood_count(&self) -> usize
Returns the number of neighborhoods.
Trait Implementations§
Source§impl<S, M> Phase<S> for VndPhase<S, M>where
S: PlanningSolution,
M: Move<S>,
impl<S, M> Phase<S> for VndPhase<S, M>where
S: PlanningSolution,
M: Move<S>,
Source§fn solve(&mut self, solver_scope: &mut SolverScope<S>)
fn solve(&mut self, solver_scope: &mut SolverScope<S>)
Executes this phase. Read more
Source§fn phase_type_name(&self) -> &'static str
fn phase_type_name(&self) -> &'static str
Returns the name of this phase type.
Auto Trait Implementations§
impl<S, M> Freeze for VndPhase<S, M>
impl<S, M> !RefUnwindSafe for VndPhase<S, M>
impl<S, M> Send for VndPhase<S, M>
impl<S, M> !Sync for VndPhase<S, M>
impl<S, M> Unpin for VndPhase<S, M>where
M: Unpin,
impl<S, M> !UnwindSafe for VndPhase<S, M>
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