Skip to main content

solverforge_solver/heuristic/selector/k_opt/
distance_meter.rs

1//! Distance meters for k-opt nearby selection.
2
3use std::fmt::Debug;
4
5/// A distance meter for list element positions.
6///
7/// Measures distance between elements at two positions in a list.
8/// Used by `NearbyKOptMoveSelector` to limit k-opt search space.
9pub trait ListPositionDistanceMeter<S>: Send + Sync + Debug {
10    /// Measures distance between elements at two positions in the same entity.
11    fn distance(&self, solution: &S, entity_idx: usize, pos_a: usize, pos_b: usize) -> f64;
12}
13
14/// Default distance meter using position difference.
15#[derive(Debug, Clone, Copy)]
16pub struct DefaultDistanceMeter;
17
18impl<S> ListPositionDistanceMeter<S> for DefaultDistanceMeter {
19    fn distance(&self, _solution: &S, _entity_idx: usize, pos_a: usize, pos_b: usize) -> f64 {
20        (pos_a as f64 - pos_b as f64).abs()
21    }
22}