Skip to main content

solverforge_solver/phase/localsearch/
mod.rs

1//! Local search phase
2//!
3//! Improves an existing solution by iteratively applying moves
4//! that are accepted according to an acceptance criterion.
5
6mod acceptor;
7mod forager;
8mod phase;
9
10pub use acceptor::{
11    Acceptor, DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, GreatDelugeAcceptor,
12    HillClimbingAcceptor, LateAcceptanceAcceptor, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
13    StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
14};
15pub use forager::{
16    AcceptedCountForager, BestScoreForager, FirstAcceptedForager, FirstBestScoreImprovingForager,
17    FirstLastStepScoreImprovingForager, LocalSearchForager,
18};
19pub use phase::LocalSearchPhase;
20
21/// Local search phase configuration.
22#[derive(Debug, Clone)]
23pub struct LocalSearchConfig {
24    /// The acceptor type to use.
25    pub acceptor_type: AcceptorType,
26    /// Maximum number of steps (None = unlimited).
27    pub step_limit: Option<u64>,
28    /// Number of accepted moves to collect before quitting early.
29    pub accepted_count_limit: Option<usize>,
30}
31
32impl Default for LocalSearchConfig {
33    fn default() -> Self {
34        Self {
35            acceptor_type: AcceptorType::HillClimbing,
36            step_limit: Some(1000),
37            accepted_count_limit: Some(1),
38        }
39    }
40}
41
42/// Type of acceptor to use in local search.
43#[derive(Debug, Clone, Copy, PartialEq, Eq)]
44pub enum AcceptorType {
45    /// Accept only improving moves.
46    HillClimbing,
47    /// Accept moves with probability based on temperature.
48    SimulatedAnnealing,
49}