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