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