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    // Per-score-level delta temperatures, highest priority level first.
63    pub level_temperatures: Option<Vec<f64>>,
64
65    // Decay rate.
66    pub decay_rate: Option<f64>,
67
68    // Temperature at or below which worsening moves are rejected deterministically.
69    pub hill_climbing_temperature: Option<f64>,
70
71    // Hard-regression policy.
72    pub hard_regression_policy: Option<HardRegressionPolicyConfig>,
73
74    // Sampled auto-calibration settings used when level_temperatures is omitted.
75    pub calibration: Option<SimulatedAnnealingCalibrationConfig>,
76}
77
78#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Deserialize, Serialize)]
79#[serde(rename_all = "snake_case")]
80pub enum HardRegressionPolicyConfig {
81    #[default]
82    TemperatureControlled,
83    NeverAcceptHardRegression,
84}
85
86#[derive(Debug, Clone, Default, Deserialize, Serialize)]
87#[serde(rename_all = "snake_case")]
88pub struct SimulatedAnnealingCalibrationConfig {
89    pub sample_size: Option<usize>,
90    pub target_acceptance_probability: Option<f64>,
91    pub fallback_temperature: Option<f64>,
92}
93
94// Late acceptance configuration.
95#[derive(Debug, Clone, Default, Deserialize, Serialize)]
96#[serde(rename_all = "snake_case")]
97pub struct LateAcceptanceConfig {
98    // Size of late acceptance list.
99    pub late_acceptance_size: Option<usize>,
100}
101
102// Diversified late acceptance configuration.
103#[derive(Debug, Clone, Default, Deserialize, Serialize)]
104#[serde(rename_all = "snake_case")]
105pub struct DiversifiedLateAcceptanceConfig {
106    // Size of late acceptance list.
107    pub late_acceptance_size: Option<usize>,
108
109    // Fractional tolerance against the phase-best score.
110    pub tolerance: Option<f64>,
111}
112
113// Great deluge configuration.
114#[derive(Debug, Clone, Default, Deserialize, Serialize)]
115#[serde(rename_all = "snake_case")]
116pub struct GreatDelugeConfig {
117    // Water level increase ratio.
118    pub water_level_increase_ratio: Option<f64>,
119}