use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum AcceptorConfig {
HillClimbing,
TabuSearch(TabuSearchConfig),
SimulatedAnnealing(SimulatedAnnealingConfig),
LateAcceptance(LateAcceptanceConfig),
GreatDeluge(GreatDelugeConfig),
}
#[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>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct SimulatedAnnealingConfig {
pub starting_temperature: Option<String>,
}
#[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 GreatDelugeConfig {
pub water_level_increase_ratio: Option<f64>,
}