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, CoverageRepairMoveSelectorConfig,
64    GroupedScalarMoveSelectorConfig, KOptMoveSelectorConfig, LimitedNeighborhoodConfig,
65    ListChangeMoveConfig, ListReverseMoveConfig, ListRuinMoveSelectorConfig, ListSwapMoveConfig,
66    MoveSelectorConfig, NearbyChangeMoveConfig, NearbyListChangeMoveConfig,
67    NearbyListSwapMoveConfig, NearbySwapMoveConfig, PillarChangeMoveConfig, PillarSwapMoveConfig,
68    RecreateHeuristicType, RuinRecreateMoveSelectorConfig, SublistChangeMoveConfig,
69    SublistSwapMoveConfig, SwapMoveConfig, UnionMoveSelectorConfig, UnionSelectionOrder,
70    VariableTargetConfig,
71};
72pub use phase::{
73    ConstructionHeuristicConfig, ConstructionHeuristicType, ConstructionObligation,
74    CustomPhaseConfig, ExhaustiveSearchConfig, ExhaustiveSearchType, LocalSearchConfig,
75    PartitionedSearchConfig, PhaseConfig, VndConfig,
76};
77pub use solver_config::{EnvironmentMode, MoveThreadCount, SolverConfig, SolverConfigOverride};
78pub use termination::TerminationConfig;
79
80#[cfg(test)]
81mod tests;