Skip to main content

solverforge_solver/
lib.rs

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