Skip to main content

solverforge_solver/
lib.rs

1//! SolverForge Solver Engine
2//!
3//! This crate provides the main solver implementation including:
4//! - Solver and SolverFactory
5//! - Phases (construction heuristic, local search, exhaustive search)
6//! - Move system
7//! - Termination conditions
8//! - Tracing-based structured logging
9//! - Configuration wiring (builder module)
10
11// PhantomData<(fn() -> T, ...)> is an intentional pattern to avoid inheriting
12// trait bounds from phantom type parameters. Clippy's type_complexity lint
13// triggers on these tuples but the pattern is architecturally required.
14#![allow(clippy::type_complexity)]
15
16#[cfg(test)]
17pub mod test_utils;
18
19pub mod basic;
20pub mod builder;
21pub mod heuristic;
22pub mod manager;
23pub mod phase;
24pub mod realtime;
25pub mod scope;
26pub mod solver;
27pub mod stats;
28pub mod termination;
29
30pub use builder::AcceptorBuilder;
31pub use heuristic::{
32    // K-opt reconnection patterns
33    k_opt_reconnection,
34    // Selectors
35    AllEntitiesSelector,
36    // Move types
37    ChangeMove,
38    ChangeMoveSelector,
39    CompositeMove,
40    CutPoint,
41    DefaultDistanceMeter,
42    DefaultPillarSelector,
43    EntityReference,
44    EntitySelector,
45    FromSolutionEntitySelector,
46    FromSolutionTypedValueSelector,
47    KOptConfig,
48    KOptMove,
49    KOptMoveSelector,
50    ListPositionDistanceMeter,
51    ListRuinMove,
52    ListRuinMoveSelector,
53    MimicRecorder,
54    MimicRecordingEntitySelector,
55    MimicReplayingEntitySelector,
56    Move,
57    MoveArena,
58    MoveSelector,
59    NearbyDistanceMeter,
60    NearbyEntitySelector,
61    NearbyKOptMoveSelector,
62    NearbySelectionConfig,
63    Pillar,
64    PillarChangeMove,
65    PillarSelector,
66    PillarSwapMove,
67    RuinMove,
68    RuinMoveSelector,
69    SelectionOrder,
70    StaticTypedValueSelector,
71    SubPillarConfig,
72    SwapMove,
73    SwapMoveSelector,
74    TypedValueSelector,
75};
76pub use manager::{
77    Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, ConstructionType, KOptPhase,
78    KOptPhaseBuilder, ListCheapestInsertionPhase, ListConstructionPhase,
79    ListConstructionPhaseBuilder, ListRegretInsertionPhase, LocalSearchPhaseFactory,
80    LocalSearchType, PhaseFactory, ScoreAnalysis, SolutionManager, Solvable, SolverFactory,
81    SolverFactoryBuilder, SolverManager, SolverStatus,
82};
83pub use phase::{
84    construction::{
85        BestFitForager, ConstructionForager, ConstructionHeuristicConfig,
86        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
87        ForagerType, Placement, QueuedEntityPlacer,
88    },
89    exhaustive::{
90        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
91        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, MoveSequence, ScoreBounder,
92        SimpleDecider, SimpleScoreBounder,
93    },
94    localsearch::{
95        AcceptedCountForager, Acceptor, AcceptorType, BestScoreForager,
96        DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, FirstAcceptedForager,
97        FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager, GreatDelugeAcceptor,
98        HillClimbingAcceptor, LateAcceptanceAcceptor, LocalSearchConfig, LocalSearchForager,
99        LocalSearchPhase, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
100        StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
101    },
102    partitioned::{
103        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
104        SolutionPartitioner, ThreadCount,
105    },
106    vnd::VndPhase,
107    Phase,
108};
109pub use scope::{PhaseScope, SolverScope, StepScope};
110pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
111pub use stats::{PhaseStats, SolverStats};
112pub use termination::{
113    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
114    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
115    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
116    UnimprovedStepCountTermination, UnimprovedTimeTermination,
117};
118
119pub use basic::{run_solver, run_solver_with_channel};