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