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