Skip to main content

solverforge_config/
lib.rs

1/* Configuration system for SolverForge.
2
3Load solver configuration from TOML files to control termination,
4phases, and acceptors without code changes.
5
6# Examples
7
8Load configuration from TOML string:
9
10```
11use solverforge_config::SolverConfig;
12use std::time::Duration;
13
14let config = SolverConfig::from_toml_str(r#"
15[termination]
16seconds_spent_limit = 30
17unimproved_seconds_spent_limit = 5
18
19[[phases]]
20type = "construction_heuristic"
21construction_heuristic_type = "first_fit"
22
23[[phases]]
24type = "local_search"
25[phases.acceptor]
26type = "late_acceptance"
27late_acceptance_size = 400
28"#).unwrap();
29
30assert_eq!(config.time_limit(), Some(Duration::from_secs(30)));
31assert_eq!(config.phases.len(), 2);
32```
33
34Use default config when file is missing:
35
36```
37use solverforge_config::SolverConfig;
38
39let config = SolverConfig::load("solver.toml").unwrap_or_default();
40// Proceeds with defaults if file doesn't exist
41```
42*/
43
44mod acceptor;
45mod director;
46mod error;
47mod forager;
48mod move_selector;
49mod phase;
50mod solver_config;
51mod termination;
52
53pub use acceptor::{
54    AcceptorConfig, DiversifiedLateAcceptanceConfig, GreatDelugeConfig, HardRegressionPolicyConfig,
55    LateAcceptanceConfig, SimulatedAnnealingCalibrationConfig, SimulatedAnnealingConfig,
56    StepCountingHillClimbingConfig, TabuSearchConfig,
57};
58pub use director::DirectorConfig;
59pub use error::ConfigError;
60pub use forager::{AcceptedCountForagerConfig, ForagerConfig};
61pub use move_selector::{
62    CartesianProductConfig, ChangeMoveConfig, CompoundConflictRepairMoveSelectorConfig,
63    ConflictRepairMoveSelectorConfig, GroupedScalarMoveSelectorConfig, KOptMoveSelectorConfig,
64    LimitedNeighborhoodConfig, ListChangeMoveConfig, ListReverseMoveConfig,
65    ListRuinMoveSelectorConfig, ListSwapMoveConfig, MoveSelectorConfig, NearbyChangeMoveConfig,
66    NearbyListChangeMoveConfig, NearbyListSwapMoveConfig, NearbySwapMoveConfig,
67    PillarChangeMoveConfig, PillarSwapMoveConfig, RecreateHeuristicType,
68    RuinRecreateMoveSelectorConfig, SublistChangeMoveConfig, SublistSwapMoveConfig, SwapMoveConfig,
69    UnionMoveSelectorConfig, UnionSelectionOrder, VariableTargetConfig,
70};
71pub use phase::{
72    ConstructionHeuristicConfig, ConstructionHeuristicType, ConstructionObligation,
73    CustomPhaseConfig, ExhaustiveSearchConfig, ExhaustiveSearchType, LocalSearchConfig,
74    PartitionedSearchConfig, PhaseConfig, VndConfig,
75};
76pub use solver_config::{EnvironmentMode, MoveThreadCount, SolverConfig, SolverConfigOverride};
77pub use termination::TerminationConfig;
78
79#[cfg(test)]
80mod tests;