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 list_solver;
23pub mod manager;
24pub mod phase;
25pub mod realtime;
26pub mod scope;
27pub mod solver;
28pub mod stats;
29pub mod termination;
30
31pub use builder::{
32    AcceptorBuilder, AnyAcceptor, AnyForager, BasicContext, BasicLeafSelector,
33    BasicMoveSelectorBuilder, ForagerBuilder, ListContext, ListLeafSelector,
34    ListMoveSelectorBuilder,
35};
36pub use heuristic::{
37    // K-opt reconnection patterns
38    k_opt_reconnection,
39    // Selectors
40    AllEntitiesSelector,
41    // Move types
42    ChangeMove,
43    ChangeMoveSelector,
44    CompositeMove,
45    CutPoint,
46    DefaultDistanceMeter,
47    DefaultPillarSelector,
48    EntityReference,
49    EntitySelector,
50    FromSolutionEntitySelector,
51    FromSolutionTypedValueSelector,
52    KOptConfig,
53    KOptMove,
54    KOptMoveSelector,
55    ListPositionDistanceMeter,
56    ListRuinMove,
57    ListRuinMoveSelector,
58    MimicRecorder,
59    MimicRecordingEntitySelector,
60    MimicReplayingEntitySelector,
61    Move,
62    MoveArena,
63    MoveSelector,
64    NearbyDistanceMeter,
65    NearbyEntitySelector,
66    NearbyKOptMoveSelector,
67    NearbySelectionConfig,
68    Pillar,
69    PillarChangeMove,
70    PillarSelector,
71    PillarSwapMove,
72    RuinMove,
73    RuinMoveSelector,
74    SelectionOrder,
75    StaticTypedValueSelector,
76    SubPillarConfig,
77    SwapMove,
78    SwapMoveSelector,
79    TypedValueSelector,
80    // Vec union selector
81    VecUnionSelector,
82};
83pub use manager::{
84    analyze, Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, ConstructionType, KOptPhase,
85    KOptPhaseBuilder, ListCheapestInsertionPhase, ListConstructionPhase,
86    ListConstructionPhaseBuilder, ListRegretInsertionPhase, LocalSearchPhaseFactory,
87    LocalSearchType, PhaseFactory, ScoreAnalysis, Solvable, SolverFactory, SolverFactoryBuilder,
88    SolverManager, SolverStatus,
89};
90pub use phase::{
91    construction::{
92        BestFitForager, ConstructionForager, ConstructionHeuristicConfig,
93        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
94        ForagerType, Placement, QueuedEntityPlacer,
95    },
96    exhaustive::{
97        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
98        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, MoveSequence, ScoreBounder,
99        SimpleDecider, SoftScoreBounder,
100    },
101    localsearch::{
102        AcceptedCountForager, Acceptor, AcceptorType, BestScoreForager,
103        DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, FirstAcceptedForager,
104        FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager, GreatDelugeAcceptor,
105        HillClimbingAcceptor, LateAcceptanceAcceptor, LocalSearchConfig, LocalSearchForager,
106        LocalSearchPhase, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
107        StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
108    },
109    partitioned::{
110        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
111        SolutionPartitioner, ThreadCount,
112    },
113    vnd::VndPhase,
114    Phase,
115};
116pub use scope::{PhaseScope, SolverScope, StepScope};
117pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
118pub use stats::{PhaseStats, SolverStats};
119pub use termination::{
120    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
121    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
122    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
123    UnimprovedStepCountTermination, UnimprovedTimeTermination,
124};
125
126pub use basic::run_solver;
127pub use list_solver::run_list_solver;