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;
23pub mod heuristic;
24pub(crate) mod list_placement;
25pub mod manager;
26pub mod model_support;
27pub mod phase;
28pub(crate) mod pinning;
29pub mod planning;
30pub mod realtime;
31pub mod run;
32pub mod runtime;
33mod runtime_build_error;
34pub mod scope;
35pub mod solver;
36pub mod stats;
37pub mod termination;
38
39pub use builder::{
40    local_search, AcceptorBuilder, AnyAcceptor, AnyForager, CustomSearchPhase, ForagerBuilder,
41    IntraDistanceAdapter, ListVariableSlot, RuntimeCandidateMetric, RuntimeCandidateMetricBinding,
42    RuntimeCandidateMetricRegistry, RuntimeModel, ScalarGroupBinding, ScalarGroupMemberBinding,
43    ScalarVariableSlot, Search, SearchContext, ValueSource, VariableSlot,
44};
45pub use descriptor::{
46    build_descriptor_move_selector, descriptor_has_bindings, DescriptorFlatSelector,
47    DescriptorLeafSelector, DescriptorMoveUnion, DescriptorPillarChangeMove,
48    DescriptorPillarSwapMove, DescriptorRuinRecreateMove, DescriptorSelector,
49    DescriptorSelectorNode,
50};
51pub use heuristic::{
52    // K-opt reconnection patterns
53    k_opt_reconnection,
54    // Selectors
55    AllEntitiesSelector,
56    // Move types
57    ChangeMove,
58    ChangeMoveSelector,
59    CompositeMove,
60    CompoundScalarEdit,
61    CompoundScalarMove,
62    CrossEntityDistanceMeter,
63    CutPoint,
64    DefaultCrossEntityDistanceMeter,
65    DefaultDistanceMeter,
66    DefaultPillarSelector,
67    DynamicListChangeMove,
68    DynamicListChangeMoveSelector,
69    DynamicScalarChangeMove,
70    DynamicScalarChangeMoveSelector,
71    DynamicScalarNearbyChangeMoveSelector,
72    DynamicScalarNearbySwapMoveSelector,
73    DynamicScalarSwapMove,
74    EntityReference,
75    EntitySelector,
76    FromSolutionEntitySelector,
77    FromSolutionValueSelector,
78    KOptConfig,
79    KOptMove,
80    KOptMoveSelector,
81    ListPositionDistanceMeter,
82    ListRuinMove,
83    ListRuinMoveSelector,
84    MimicRecorder,
85    MimicRecordingEntitySelector,
86    MimicReplayingEntitySelector,
87    Move,
88    MoveArena,
89    MoveSelector,
90    NearbyDistanceMeter,
91    NearbyEntitySelector,
92    NearbyKOptMoveSelector,
93    NearbySelectionConfig,
94    PerEntitySliceValueSelector,
95    Pillar,
96    PillarChangeMove,
97    PillarSelector,
98    PillarSwapMove,
99    RuinMove,
100    RuinMoveSelector,
101    RuinVariableAccess,
102    ScalarNeighborhoodBindingError,
103    SelectionOrder,
104    StaticValueSelector,
105    SubPillarConfig,
106    SwapMove,
107    SwapMoveSelector,
108    ValueSelector,
109    // Vec union selector
110    VecUnionSelector,
111};
112pub use manager::{
113    analyze, Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, KOptPhase, KOptPhaseBuilder,
114    ListCheapestInsertionPhase, ListClarkeWrightPhase, ListConstructionPhase,
115    ListConstructionPhaseBuilder, ListKOptPhase, ListRegretInsertionPhase, LocalSearchPhaseFactory,
116    PhaseFactory, ScoreAnalysis, Solvable, SolverEvent, SolverEventMetadata, SolverFactory,
117    SolverFactoryBuilder, SolverLifecycleState, SolverManager, SolverManagerError,
118    SolverPanicPayload, SolverRuntime, SolverSnapshot, SolverSnapshotAnalysis, SolverStatus,
119    SolverTelemetryDetail, SolverTerminalReason,
120};
121pub use model_support::PlanningModelSupport;
122pub use phase::{
123    construction::{
124        BestFitForager, ConstructionChoice, ConstructionForager, ConstructionHeuristicConfig,
125        ConstructionHeuristicPhase, EntityPlacer, EntityPlacerCursor, FirstFeasibleForager,
126        FirstFitForager, ForagerType, Placement, QueuedEntityPlacer,
127    },
128    exhaustive::{
129        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
130        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, ScoreBounder, SimpleDecider,
131        SoftScoreBounder,
132    },
133    localsearch::{
134        AcceptedCountForager, Acceptor, BestScoreForager, DiversifiedLateAcceptanceAcceptor,
135        FirstAcceptedForager, FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager,
136        GreatDelugeAcceptor, HardRegressionPolicy, HillClimbingAcceptor, LateAcceptanceAcceptor,
137        LocalSearchForager, LocalSearchPhase, SimulatedAnnealingAcceptor,
138        SimulatedAnnealingCalibration, StepCountingHillClimbingAcceptor, TabuSearchAcceptor,
139    },
140    partitioned::{
141        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
142        SolutionPartitioner, ThreadCount,
143    },
144    sequence::PhaseSequence,
145    Phase,
146};
147pub use planning::{
148    ConflictRepair, RepairCandidate, RepairLimits, RepairProvider, ScalarAssignmentRule,
149    ScalarCandidate, ScalarCandidateProvider, ScalarEdit, ScalarGroup, ScalarGroupLimits,
150    ScalarTarget,
151};
152pub use run::{log_solve_start, try_run_solver_with_config_and_search};
153pub use runtime::{ListVariableEntity, ListVariableMetadata};
154pub use runtime_build_error::{RuntimeBuildError, RuntimeBuildResult};
155pub use scope::{PhaseScope, SolverScope, StepScope};
156pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
157pub use stats::{
158    AppliedMoveTelemetry, MoveTelemetry, PhaseStats, PhaseTelemetry, SelectorTelemetry,
159    SolverStats, SolverTelemetry,
160};
161pub use termination::{
162    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
163    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
164    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
165    UnimprovedStepCountTermination, UnimprovedTimeTermination,
166};