Skip to main content

solverforge_solver/
lib.rs

1//! SolverForge Solver Engine
2//!
3//! This 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// PhantomData<(fn() -> T, ...)> is an intentional pattern to avoid inheriting
12// trait bounds from phantom type parameters. Clippy's type_complexity lint
13// triggers on these tuples but the pattern is architecturally required.
14#![allow(clippy::type_complexity)]
15
16#[cfg(test)]
17pub mod test_utils;
18
19pub mod basic;
20pub mod builder;
21pub mod heuristic;
22pub mod list_solver;
23pub mod manager;
24pub mod phase;
25pub mod problem_spec;
26pub mod realtime;
27pub mod run;
28pub mod scope;
29pub mod solver;
30pub mod stats;
31pub mod termination;
32
33pub use builder::{
34    AcceptorBuilder, AnyAcceptor, AnyForager, BasicContext, BasicLeafSelector,
35    BasicMoveSelectorBuilder, ForagerBuilder, ListContext, ListLeafSelector,
36    ListMoveSelectorBuilder,
37};
38pub use heuristic::{
39    // K-opt reconnection patterns
40    k_opt_reconnection,
41    // Selectors
42    AllEntitiesSelector,
43    // Move types
44    ChangeMove,
45    ChangeMoveSelector,
46    CompositeMove,
47    CutPoint,
48    DefaultDistanceMeter,
49    DefaultPillarSelector,
50    EntityReference,
51    EntitySelector,
52    FromSolutionEntitySelector,
53    FromSolutionTypedValueSelector,
54    KOptConfig,
55    KOptMove,
56    KOptMoveSelector,
57    ListPositionDistanceMeter,
58    ListRuinMove,
59    ListRuinMoveSelector,
60    MimicRecorder,
61    MimicRecordingEntitySelector,
62    MimicReplayingEntitySelector,
63    Move,
64    MoveArena,
65    MoveSelector,
66    NearbyDistanceMeter,
67    NearbyEntitySelector,
68    NearbyKOptMoveSelector,
69    NearbySelectionConfig,
70    Pillar,
71    PillarChangeMove,
72    PillarSelector,
73    PillarSwapMove,
74    RuinMove,
75    RuinMoveSelector,
76    SelectionOrder,
77    StaticTypedValueSelector,
78    SubPillarConfig,
79    SwapMove,
80    SwapMoveSelector,
81    TypedValueSelector,
82    // Vec union selector
83    VecUnionSelector,
84};
85pub use manager::{
86    analyze, Analyzable, ConstraintAnalysis, ConstructionPhaseFactory, ConstructionType, KOptPhase,
87    KOptPhaseBuilder, ListCheapestInsertionPhase, ListConstructionPhase,
88    ListConstructionPhaseBuilder, ListRegretInsertionPhase, LocalSearchPhaseFactory,
89    LocalSearchType, PhaseFactory, ScoreAnalysis, Solvable, SolverFactory, SolverFactoryBuilder,
90    SolverManager, SolverStatus,
91};
92pub use phase::{
93    construction::{
94        BestFitForager, ConstructionForager, ConstructionHeuristicConfig,
95        ConstructionHeuristicPhase, EntityPlacer, FirstFeasibleForager, FirstFitForager,
96        ForagerType, Placement, QueuedEntityPlacer,
97    },
98    exhaustive::{
99        BounderType, ExhaustiveSearchConfig, ExhaustiveSearchDecider, ExhaustiveSearchNode,
100        ExhaustiveSearchPhase, ExplorationType, FixedOffsetBounder, MoveSequence, ScoreBounder,
101        SimpleDecider, SoftScoreBounder,
102    },
103    localsearch::{
104        AcceptedCountForager, Acceptor, AcceptorType, BestScoreForager,
105        DiversifiedLateAcceptanceAcceptor, EntityTabuAcceptor, FirstAcceptedForager,
106        FirstBestScoreImprovingForager, FirstLastStepScoreImprovingForager, GreatDelugeAcceptor,
107        HillClimbingAcceptor, LateAcceptanceAcceptor, LocalSearchConfig, LocalSearchForager,
108        LocalSearchPhase, MoveTabuAcceptor, SimulatedAnnealingAcceptor,
109        StepCountingHillClimbingAcceptor, TabuSearchAcceptor, ValueTabuAcceptor,
110    },
111    partitioned::{
112        ChildPhases, FunctionalPartitioner, PartitionedSearchConfig, PartitionedSearchPhase,
113        SolutionPartitioner, ThreadCount,
114    },
115    vnd::VndPhase,
116    Phase,
117};
118pub use scope::{PhaseScope, SolverScope, StepScope};
119pub use solver::{MaybeTermination, NoTermination, SolveResult, Solver};
120pub use stats::{PhaseStats, SolverStats};
121pub use termination::{
122    AndTermination, BestScoreFeasibleTermination, BestScoreTermination,
123    DiminishedReturnsTermination, MoveCountTermination, OrTermination,
124    ScoreCalculationCountTermination, StepCountTermination, Termination, TimeTermination,
125    UnimprovedStepCountTermination, UnimprovedTimeTermination,
126};
127
128pub use basic::BasicSpec;
129pub use list_solver::ListSpec;
130pub use problem_spec::ProblemSpec;
131pub use run::run_solver;