solverforge_solver/phase/vnd/mod.rs
1//! Variable Neighborhood Descent (VND) phase.
2//!
3//! VND systematically explores multiple neighborhood structures, restarting
4//! from the first neighborhood whenever an improvement is found. This provides
5//! a structured way to combine multiple move types for better optimization.
6//!
7//! # Algorithm
8//!
9//! 1. Start with neighborhood k = 0
10//! 2. Find the best improving move in neighborhood k
11//! 3. If improvement found: apply move, restart from k = 0
12//! 4. If no improvement: move to k = k + 1
13//! 5. Terminate when k exceeds the number of neighborhoods
14//!
15//! # Zero-Erasure Design
16//!
17//! Uses macro-generated tuple implementations for neighborhoods. Each neighborhood
18//! is a concrete `MoveSelector` type, enabling full monomorphization.
19//! Moves are never cloned - ownership transfers via `arena.take(index)`.
20
21mod phase;
22
23pub use phase::VndPhase;
24pub use solverforge_scoring::ScoreDirector as ScoreDirectorTrait;