feat(algorithms): add HillClimber single-objective greedy local search

The simplest possible local search: start from one initializer-sampled
decision, repeatedly mutate it via the variation operator, and keep the
child only when it is strictly better than the current incumbent (with
the standard feasible-beats-infeasible / lower-violation tiebreaks
when relevant).

Single-objective only — panics with a clear message if the problem
exposes more than one objective. Deterministic under a seed. Returns
a population/front of size one (the current incumbent) so it slots
into the comparison harness like any other optimizer.
This commit is contained in:
2026-05-05 09:51:10 -06:00
parent cf3b6acd10
commit a93d0df858
3 changed files with 156 additions and 3 deletions
+3 -3
View File
@@ -22,7 +22,7 @@ pub use crate::operators::{
};
pub use crate::algorithms::{
DifferentialEvolution, DifferentialEvolutionConfig, Moead, MoeadConfig, Nsga2,
Nsga2Config, Nsga3, Nsga3Config, Paes, PaesConfig, RandomSearch, RandomSearchConfig,
Spea2, Spea2Config,
DifferentialEvolution, DifferentialEvolutionConfig, HillClimber, HillClimberConfig,
Moead, MoeadConfig, Nsga2, Nsga2Config, Nsga3, Nsga3Config, Paes, PaesConfig,
RandomSearch, RandomSearchConfig, Spea2, Spea2Config,
};