use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum AcceptorConfig {
HillClimbing,
StepCountingHillClimbing(StepCountingHillClimbingConfig),
TabuSearch(TabuSearchConfig),
SimulatedAnnealing(SimulatedAnnealingConfig),
LateAcceptance(LateAcceptanceConfig),
DiversifiedLateAcceptance(DiversifiedLateAcceptanceConfig),
GreatDeluge(GreatDelugeConfig),
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct StepCountingHillClimbingConfig {
pub step_count_limit: Option<u64>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct TabuSearchConfig {
pub entity_tabu_size: Option<usize>,
pub value_tabu_size: Option<usize>,
pub move_tabu_size: Option<usize>,
pub undo_move_tabu_size: Option<usize>,
pub aspiration_enabled: Option<bool>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct SimulatedAnnealingConfig {
pub level_temperatures: Option<Vec<f64>>,
pub decay_rate: Option<f64>,
pub hill_climbing_temperature: Option<f64>,
pub hard_regression_policy: Option<HardRegressionPolicyConfig>,
pub calibration: Option<SimulatedAnnealingCalibrationConfig>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum HardRegressionPolicyConfig {
#[default]
TemperatureControlled,
NeverAcceptHardRegression,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct SimulatedAnnealingCalibrationConfig {
pub sample_size: Option<usize>,
pub target_acceptance_probability: Option<f64>,
pub fallback_temperature: Option<f64>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct LateAcceptanceConfig {
pub late_acceptance_size: Option<usize>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct DiversifiedLateAcceptanceConfig {
pub late_acceptance_size: Option<usize>,
pub tolerance: Option<f64>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct GreatDelugeConfig {
pub water_level_increase_ratio: Option<f64>,
}