feat(algorithms): add TabuSearch with a configurable neighbor generator

Glover 1986 tabu search for single-objective problems. Generic over
decision type — the user supplies a neighbor-generator closure that
produces a finite list of candidate moves from the current incumbent
(e.g. all 2-swaps for a permutation, or N Gaussian-perturbed copies of
a real vector). Each iteration picks the best non-tabu neighbor (with
an aspiration override that lets a tabu move through if it beats the
best-seen-ever incumbent) and adds the chosen move's decision to a
fixed-size FIFO tabu list.

Single-objective only. Tracks the best-seen-ever incumbent across the
run, returned as the result. Generic over the decision `D: Hash + Eq`
so the tabu list can match by full decision (simple and correct;
move-based tabu is left for users to implement themselves via a
custom decision wrapper).
This commit is contained in:
2026-05-05 09:51:11 -06:00
parent ba07361439
commit d82fcfc658
3 changed files with 280 additions and 1 deletions
+2
View File
@@ -12,6 +12,7 @@ pub mod particle_swarm;
pub mod random_search;
pub mod simulated_annealing;
pub mod spea2;
pub mod tabu_search;
pub use differential_evolution::*;
pub use genetic_algorithm::*;
@@ -24,3 +25,4 @@ pub use particle_swarm::*;
pub use random_search::*;
pub use simulated_annealing::*;
pub use spea2::*;
pub use tabu_search::*;