use scirs2_core::numeric::Float;
use std::fmt::Debug;
use crate::neural_architecture_search::NASConfig;
#[derive(Debug, Clone)]
pub struct AdaptiveNASConfig<T: Float + Debug + Send + Sync + 'static> {
pub base_config: NASConfig<T>,
pub performance_window: usize,
pub improvement_threshold: T,
pub adaptation_lr: T,
pub complexity_penalty: T,
pub online_learning: bool,
pub architecture_transfer: bool,
pub curriculum_search: bool,
pub _diversityweight: T,
pub exploration_weight: T,
pub prediction_confidence_threshold: T,
pub max_complexity: usize,
pub _minperformance: T,
pub enable_meta_learning: bool,
pub meta_learning_frequency: usize,
pub novelty_weight: T,
pub progressive_search: bool,
pub budget_allocation: BudgetAllocationStrategy,
pub quality_criteria: Vec<QualityCriterion>,
}
impl<T: Float + Debug + Send + Sync + 'static> Default for AdaptiveNASConfig<T> {
fn default() -> Self {
Self {
base_config: NASConfig::default(),
performance_window: 100,
improvement_threshold: scirs2_core::numeric::NumCast::from(0.01).unwrap_or_else(|| T::zero()),
adaptation_lr: scirs2_core::numeric::NumCast::from(0.001).unwrap_or_else(|| T::zero()),
complexity_penalty: scirs2_core::numeric::NumCast::from(0.1).unwrap_or_else(|| T::zero()),
online_learning: true,
architecture_transfer: true,
curriculum_search: false,
_diversityweight: scirs2_core::numeric::NumCast::from(0.2).unwrap_or_else(|| T::zero()),
exploration_weight: scirs2_core::numeric::NumCast::from(0.3).unwrap_or_else(|| T::zero()),
prediction_confidence_threshold: scirs2_core::numeric::NumCast::from(0.8).unwrap_or_else(|| T::zero()),
max_complexity: 1_000_000,
_minperformance: scirs2_core::numeric::NumCast::from(0.1).unwrap_or_else(|| T::zero()),
enable_meta_learning: true,
meta_learning_frequency: 50,
novelty_weight: scirs2_core::numeric::NumCast::from(0.1).unwrap_or_else(|| T::zero()),
progressive_search: true,
budget_allocation: BudgetAllocationStrategy::ExpectedImprovement,
quality_criteria: vec![
QualityCriterion::ValidationPerformance,
QualityCriterion::ConvergenceSpeed,
QualityCriterion::ComputationalEfficiency,
],
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BudgetAllocationStrategy {
Uniform,
PerformanceBased,
UncertaintyBased,
ExpectedImprovement,
UpperConfidenceBound,
ThompsonSampling,
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum QualityCriterion {
ValidationPerformance,
ConvergenceSpeed,
ComputationalEfficiency,
MemoryEfficiency,
GeneralizationAbility,
RobustnessToHyperparams,
TransferLearningCapability,
}