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, SolverEventMetadata,
98    SolverFactory, SolverFactoryBuilder, SolverLifecycleState, SolverManager, SolverManagerError,
99    SolverRuntime, SolverSnapshot, SolverSnapshotAnalysis, SolverStatus, SolverTerminalReason,
100};
101pub use phase::{
102    construction::{
103        BestFitForager, ConstructionForager, ConstructionHeuristicConfig,
104        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
105        ForagerType, Placement, QueuedEntityPlacer,
106    },
107    dynamic_vnd::DynamicVndPhase,
108    exhaustive::{
109        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
110        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, MoveSequence, ScoreBounder,
111        SimpleDecider, SoftScoreBounder,
112    },
113    localsearch::{
114        AcceptedCountForager, Acceptor, AcceptorType, BestScoreForager,
115        DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, FirstAcceptedForager,
116        FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager, GreatDelugeAcceptor,
117        HillClimbingAcceptor, LateAcceptanceAcceptor, LocalSearchConfig, LocalSearchForager,
118        LocalSearchPhase, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
119        StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
120    },
121    partitioned::{
122        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
123        SolutionPartitioner, ThreadCount,
124    },
125    sequence::PhaseSequence,
126    vnd::VndPhase,
127    Phase,
128};
129pub use scope::{PhaseScope, SolverScope, StepScope};
130pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
131pub use stats::{PhaseStats, SolverStats, SolverTelemetry};
132pub use termination::{
133    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
134    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
135    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
136    UnimprovedStepCountTermination, UnimprovedTimeTermination,
137};
138pub use unified_search::{
139    build_unified_local_search, build_unified_move_selector, build_unified_vnd, UnifiedLocalSearch,
140    UnifiedMove, UnifiedNeighborhood, UnifiedVnd,
141};
142
143pub use list_solver::{
144    build_list_construction, ListConstruction, ListVariableEntity, ListVariableMetadata,
145};
146pub use run::{log_solve_start, run_solver, run_solver_with_config};
147pub use runtime::{
148    build_phases, ListConstructionArgs, RuntimePhase, UnifiedConstruction, UnifiedRuntimePhase,
149};