use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OnlineLearningConfig {
pub enable_online_learning: bool,
pub learning_rate_schedule: LearningRateSchedule,
pub memory_management: MemoryManagementConfig,
pub forgetting_prevention: ForgettingPreventionConfig,
pub incremental_learning: IncrementalLearningConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum LearningRateSchedule {
Constant,
ExponentialDecay,
StepDecay,
PolynomialDecay,
CosineAnnealing,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryManagementConfig {
pub max_buffer_size: usize,
pub eviction_strategy: MemoryEvictionStrategy,
pub replay_buffer: bool,
pub experience_prioritization: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MemoryEvictionStrategy {
FIFO,
LRU,
LFU,
RandomEviction,
ImportanceBased,
RecentnessBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ForgettingPreventionConfig {
pub elastic_weight_consolidation: bool,
pub progressive_networks: bool,
pub memory_replay: bool,
pub regularization_strength: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IncrementalLearningConfig {
pub incremental_batch_size: usize,
pub update_frequency: Duration,
pub stability_plasticity_balance: f64,
pub knowledge_distillation: bool,
}