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;
32pub mod scope;
33pub mod solver;
34pub mod stats;
35pub mod termination;
36
37pub use builder::{
38    build_local_search, build_move_selector, local_search, AcceptorBuilder, AnyAcceptor,
39    AnyForager, CustomSearchPhase, ForagerBuilder, GroupedScalarCursor, GroupedScalarSelector,
40    IntraDistanceAdapter, ListVariableSlot, LocalSearch, LocalSearchStrategy, Neighborhood,
41    NeighborhoodLeaf, NeighborhoodMove, RuntimeModel, ScalarGroupBinding, ScalarGroupMemberBinding,
42    ScalarVariableSlot, Search, SearchContext, Selector, ValueSource, VariableSlot,
43};
44pub use descriptor::{
45    build_descriptor_move_selector, descriptor_has_bindings, DescriptorConstruction,
46    DescriptorFlatSelector, DescriptorLeafSelector, DescriptorMoveUnion,
47    DescriptorPillarChangeMove, DescriptorPillarSwapMove, DescriptorRuinRecreateMove,
48    DescriptorSelector, 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    EntityReference,
71    EntitySelector,
72    FromSolutionEntitySelector,
73    FromSolutionValueSelector,
74    KOptConfig,
75    KOptMove,
76    KOptMoveSelector,
77    ListPositionDistanceMeter,
78    ListRuinMove,
79    ListRuinMoveSelector,
80    MimicRecorder,
81    MimicRecordingEntitySelector,
82    MimicReplayingEntitySelector,
83    Move,
84    MoveArena,
85    MoveSelector,
86    NearbyDistanceMeter,
87    NearbyEntitySelector,
88    NearbyKOptMoveSelector,
89    NearbySelectionConfig,
90    PerEntitySliceValueSelector,
91    Pillar,
92    PillarChangeMove,
93    PillarSelector,
94    PillarSwapMove,
95    RuinMove,
96    RuinMoveSelector,
97    RuinVariableAccess,
98    SelectionOrder,
99    StaticValueSelector,
100    SubPillarConfig,
101    SwapMove,
102    SwapMoveSelector,
103    ValueSelector,
104    // Vec union selector
105    VecUnionSelector,
106};
107pub use manager::{
108    analyze, Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, ConstructionType, KOptPhase,
109    KOptPhaseBuilder, ListCheapestInsertionPhase, ListClarkeWrightPhase, ListConstructionPhase,
110    ListConstructionPhaseBuilder, ListKOptPhase, ListRegretInsertionPhase, LocalSearchAcceptorType,
111    LocalSearchPhaseFactory, PhaseFactory, ScoreAnalysis, Solvable, SolverEvent,
112    SolverEventMetadata, SolverFactory, SolverFactoryBuilder, SolverLifecycleState, SolverManager,
113    SolverManagerError, SolverRuntime, SolverSnapshot, SolverSnapshotAnalysis, SolverStatus,
114    SolverTerminalReason,
115};
116pub use model_support::PlanningModelSupport;
117pub use phase::{
118    construction::{
119        BestFitForager, ConstructionChoice, ConstructionForager, ConstructionHeuristicConfig,
120        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
121        ForagerType, Placement, QueuedEntityPlacer, ScalarAssignmentMoveCursor,
122        ScalarAssignmentMoveOptions, ScalarAssignmentRequiredStreamingCursor,
123    },
124    exhaustive::{
125        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
126        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, ScoreBounder, SimpleDecider,
127        SoftScoreBounder,
128    },
129    localsearch::{
130        AcceptedCountForager, Acceptor, BestScoreForager, DiversifiedLateAcceptanceAcceptor,
131        FirstAcceptedForager, FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager,
132        GreatDelugeAcceptor, HardRegressionPolicy, HillClimbingAcceptor, LateAcceptanceAcceptor,
133        LocalSearchForager, LocalSearchPhase, SimulatedAnnealingAcceptor,
134        SimulatedAnnealingCalibration, StepCountingHillClimbingAcceptor, TabuSearchAcceptor,
135    },
136    partitioned::{
137        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
138        SolutionPartitioner, ThreadCount,
139    },
140    sequence::PhaseSequence,
141    Phase,
142};
143pub use planning::{
144    ConflictRepair, RepairCandidate, RepairLimits, RepairProvider, ScalarAssignmentRule,
145    ScalarCandidate, ScalarCandidateProvider, ScalarEdit, ScalarGroup, ScalarGroupLimits,
146    ScalarTarget,
147};
148pub use run::{log_solve_start, run_solver, run_solver_with_config, run_solver_with_config_parts};
149pub use runtime::{ListVariableEntity, ListVariableMetadata};
150pub use scope::{PhaseScope, SolverScope, StepScope};
151pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
152pub use stats::{
153    AppliedMoveTelemetry, MoveTelemetry, PhaseStats, SelectorTelemetry, SolverStats,
154    SolverTelemetry,
155};
156pub use termination::{
157    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
158    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
159    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
160    UnimprovedStepCountTermination, UnimprovedTimeTermination,
161};