Skip to main content

solverforge_config/
acceptor.rs

1use serde::{Deserialize, Serialize};
2
3// Acceptor configuration.
4#[derive(Debug, Clone, Deserialize, Serialize)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum AcceptorConfig {
7    // Hill climbing (only accept improving moves).
8    HillClimbing,
9
10    // Step counting hill climbing (allow limited non-improving moves).
11    StepCountingHillClimbing(StepCountingHillClimbingConfig),
12
13    // Tabu search acceptor.
14    TabuSearch(TabuSearchConfig),
15
16    // Simulated annealing acceptor.
17    SimulatedAnnealing(SimulatedAnnealingConfig),
18
19    // Late acceptance acceptor.
20    LateAcceptance(LateAcceptanceConfig),
21
22    // Diversified late acceptance acceptor.
23    DiversifiedLateAcceptance(DiversifiedLateAcceptanceConfig),
24
25    // Great deluge acceptor.
26    GreatDeluge(GreatDelugeConfig),
27}
28
29// Step counting hill climbing configuration.
30#[derive(Debug, Clone, Default, Deserialize, Serialize)]
31#[serde(rename_all = "snake_case")]
32pub struct StepCountingHillClimbingConfig {
33    pub step_count_limit: Option<u64>,
34}
35
36// Tabu search configuration.
37#[derive(Debug, Clone, Default, Deserialize, Serialize)]
38#[serde(rename_all = "snake_case")]
39pub struct TabuSearchConfig {
40    // Size of entity tabu list. Explicit `0` is invalid.
41    pub entity_tabu_size: Option<usize>,
42
43    // Size of value tabu list. Explicit `0` is invalid.
44    pub value_tabu_size: Option<usize>,
45
46    // Size of move tabu list. Explicit `0` is invalid.
47    pub move_tabu_size: Option<usize>,
48
49    // Size of undo move tabu list. Explicit `0` is invalid.
50    pub undo_move_tabu_size: Option<usize>,
51
52    // Whether aspiration can override tabu on strict new-best candidates.
53    // When all sizes are omitted, the canonical runtime normalizes to
54    // move-tabu-only with `move_tabu_size = 10` and `aspiration_enabled = true`.
55    pub aspiration_enabled: Option<bool>,
56}
57
58// Simulated annealing configuration.
59#[derive(Debug, Clone, Default, Deserialize, Serialize)]
60#[serde(rename_all = "snake_case")]
61pub struct SimulatedAnnealingConfig {
62    // Starting temperature.
63    pub starting_temperature: Option<String>,
64
65    // Decay rate.
66    pub decay_rate: Option<f64>,
67}
68
69// Late acceptance configuration.
70#[derive(Debug, Clone, Default, Deserialize, Serialize)]
71#[serde(rename_all = "snake_case")]
72pub struct LateAcceptanceConfig {
73    // Size of late acceptance list.
74    pub late_acceptance_size: Option<usize>,
75}
76
77// Diversified late acceptance configuration.
78#[derive(Debug, Clone, Default, Deserialize, Serialize)]
79#[serde(rename_all = "snake_case")]
80pub struct DiversifiedLateAcceptanceConfig {
81    // Size of late acceptance list.
82    pub late_acceptance_size: Option<usize>,
83
84    // Fractional tolerance against the phase-best score.
85    pub tolerance: Option<f64>,
86}
87
88// Great deluge configuration.
89#[derive(Debug, Clone, Default, Deserialize, Serialize)]
90#[serde(rename_all = "snake_case")]
91pub struct GreatDelugeConfig {
92    // Water level increase ratio.
93    pub water_level_increase_ratio: Option<f64>,
94}