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