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 builder;
22pub mod descriptor_standard;
23pub mod heuristic;
24pub mod manager;
25pub mod phase;
26pub mod realtime;
27pub mod run;
28pub mod runtime;
29pub mod scope;
30pub mod solver;
31pub mod stats;
32pub mod termination;
33
34pub use builder::{
35    build_local_search, build_move_selector, build_vnd, AcceptorBuilder, AnyAcceptor, AnyForager,
36    ForagerBuilder, IntraDistanceAdapter, ListVariableContext, LocalSearch, ModelContext,
37    Neighborhood, NeighborhoodLeaf, NeighborhoodMove, ScalarVariableContext, Selector, ValueSource,
38    VariableContext, Vnd,
39};
40pub use descriptor_standard::{
41    build_descriptor_construction, build_descriptor_move_selector, descriptor_has_bindings,
42    DescriptorConstruction, DescriptorEitherMove, DescriptorLeafSelector,
43};
44pub use heuristic::{
45    // K-opt reconnection patterns
46    k_opt_reconnection,
47    // Selectors
48    AllEntitiesSelector,
49    // Move types
50    ChangeMove,
51    ChangeMoveSelector,
52    CompositeMove,
53    CrossEntityDistanceMeter,
54    CutPoint,
55    DefaultCrossEntityDistanceMeter,
56    DefaultDistanceMeter,
57    DefaultPillarSelector,
58    EntityReference,
59    EntitySelector,
60    FromSolutionEntitySelector,
61    FromSolutionValueSelector,
62    KOptConfig,
63    KOptMove,
64    KOptMoveSelector,
65    ListPositionDistanceMeter,
66    ListRuinMove,
67    ListRuinMoveSelector,
68    MimicRecorder,
69    MimicRecordingEntitySelector,
70    MimicReplayingEntitySelector,
71    Move,
72    MoveArena,
73    MoveSelector,
74    NearbyDistanceMeter,
75    NearbyEntitySelector,
76    NearbyKOptMoveSelector,
77    NearbySelectionConfig,
78    PerEntitySliceValueSelector,
79    Pillar,
80    PillarChangeMove,
81    PillarSelector,
82    PillarSwapMove,
83    RuinMove,
84    RuinMoveSelector,
85    SelectionOrder,
86    StaticValueSelector,
87    SubPillarConfig,
88    SwapMove,
89    SwapMoveSelector,
90    ValueSelector,
91    // Vec union selector
92    VecUnionSelector,
93};
94pub use manager::{
95    analyze, Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, ConstructionType, KOptPhase,
96    KOptPhaseBuilder, ListCheapestInsertionPhase, ListClarkeWrightPhase, ListConstructionPhase,
97    ListConstructionPhaseBuilder, ListKOptPhase, ListRegretInsertionPhase, LocalSearchPhaseFactory,
98    LocalSearchType, PhaseFactory, ScoreAnalysis, Solvable, SolverEvent, SolverEventMetadata,
99    SolverFactory, SolverFactoryBuilder, SolverLifecycleState, SolverManager, SolverManagerError,
100    SolverRuntime, SolverSnapshot, SolverSnapshotAnalysis, SolverStatus, SolverTerminalReason,
101};
102pub use phase::{
103    construction::{
104        BestFitForager, ConstructionForager, ConstructionHeuristicConfig,
105        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
106        ForagerType, Placement, QueuedEntityPlacer,
107    },
108    dynamic_vnd::DynamicVndPhase,
109    exhaustive::{
110        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
111        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, MoveSequence, ScoreBounder,
112        SimpleDecider, SoftScoreBounder,
113    },
114    localsearch::{
115        AcceptedCountForager, Acceptor, AcceptorType, BestScoreForager,
116        DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, FirstAcceptedForager,
117        FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager, GreatDelugeAcceptor,
118        HillClimbingAcceptor, LateAcceptanceAcceptor, LocalSearchConfig, LocalSearchForager,
119        LocalSearchPhase, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
120        StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
121    },
122    partitioned::{
123        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
124        SolutionPartitioner, ThreadCount,
125    },
126    sequence::PhaseSequence,
127    vnd::VndPhase,
128    Phase,
129};
130pub use run::{log_solve_start, run_solver, run_solver_with_config};
131pub use runtime::{
132    build_phases, Construction, ConstructionArgs, ListVariableEntity, ListVariableMetadata,
133    RuntimePhase,
134};
135pub use scope::{PhaseScope, SolverScope, StepScope};
136pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
137pub use stats::{PhaseStats, SolverStats, SolverTelemetry};
138pub use termination::{
139    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
140    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
141    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
142    UnimprovedStepCountTermination, UnimprovedTimeTermination,
143};