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 list_solver;
25pub mod manager;
26pub mod phase;
27pub mod realtime;
28pub mod run;
29pub mod runtime;
30pub mod scope;
31pub mod solver;
32pub mod stats;
33pub mod termination;
34pub mod unified_search;
35
36pub use builder::{
37    AcceptorBuilder, AnyAcceptor, AnyForager, ForagerBuilder, ListContext, ListLeafSelector,
38    ListMoveSelectorBuilder,
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    Pillar,
79    PillarChangeMove,
80    PillarSelector,
81    PillarSwapMove,
82    RuinMove,
83    RuinMoveSelector,
84    SelectionOrder,
85    StaticValueSelector,
86    SubPillarConfig,
87    SwapMove,
88    SwapMoveSelector,
89    ValueSelector,
90    // Vec union selector
91    VecUnionSelector,
92};
93pub use manager::{
94    analyze, Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, ConstructionType, KOptPhase,
95    KOptPhaseBuilder, ListCheapestInsertionPhase, ListClarkeWrightPhase, ListConstructionPhase,
96    ListConstructionPhaseBuilder, ListKOptPhase, ListRegretInsertionPhase, LocalSearchPhaseFactory,
97    LocalSearchType, PhaseFactory, ScoreAnalysis, Solvable, SolverEvent, SolverFactory,
98    SolverFactoryBuilder, SolverManager, SolverStatus,
99};
100pub use phase::{
101    construction::{
102        BestFitForager, ConstructionForager, ConstructionHeuristicConfig,
103        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
104        ForagerType, Placement, QueuedEntityPlacer,
105    },
106    dynamic_vnd::DynamicVndPhase,
107    exhaustive::{
108        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
109        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, MoveSequence, ScoreBounder,
110        SimpleDecider, SoftScoreBounder,
111    },
112    localsearch::{
113        AcceptedCountForager, Acceptor, AcceptorType, BestScoreForager,
114        DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, FirstAcceptedForager,
115        FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager, GreatDelugeAcceptor,
116        HillClimbingAcceptor, LateAcceptanceAcceptor, LocalSearchConfig, LocalSearchForager,
117        LocalSearchPhase, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
118        StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
119    },
120    partitioned::{
121        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
122        SolutionPartitioner, ThreadCount,
123    },
124    sequence::PhaseSequence,
125    vnd::VndPhase,
126    Phase,
127};
128pub use scope::{PhaseScope, SolverScope, StepScope};
129pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
130pub use stats::{PhaseStats, SolverStats, SolverTelemetry};
131pub use termination::{
132    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
133    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
134    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
135    UnimprovedStepCountTermination, UnimprovedTimeTermination,
136};
137pub use unified_search::{
138    build_unified_local_search, build_unified_move_selector, build_unified_vnd, UnifiedLocalSearch,
139    UnifiedMove, UnifiedNeighborhood, UnifiedVnd,
140};
141
142pub use list_solver::{
143    build_list_construction, ListConstruction, ListVariableEntity, ListVariableMetadata,
144};
145pub use run::{log_solve_start, run_solver};
146pub use runtime::{
147    build_phases, ListConstructionArgs, RuntimePhase, UnifiedConstruction, UnifiedRuntimePhase,
148};