use crate::model_optimizer::{ModelOptimizer, OptimizationConfig, GridSearchConfig, ValidationData};
use crate::adaptive_learning::PerformanceTrend;
use crate::ml_metrics::ModelMetrics;
#[test]
fn test_grid_search() {
let config = OptimizationConfig {
learning_rate_range: (0.001, 0.1),
batch_size_range: (16, 128),
max_iterations: 10,
early_stopping_patience: 3,
validation_split: 0.2,
};
let mut optimizer = ModelOptimizer::new(config);
let validation_data = create_test_data();
let best_params = optimizer.grid_search(&validation_data);
assert!(best_params.learning_rate >= 0.001 && best_params.learning_rate <= 0.1);
assert!(best_params.batch_size >= 16 && best_params.batch_size <= 128);
assert!(best_params.num_trees >= 50 && best_params.num_trees <= 200);
}
fn create_test_data() -> ValidationData {
let mut features = Vec::new();
let mut labels = Vec::new();
for i in 0..100 {
let x = (i as f64) / 100.0;
features.push(vec![x, x.powi(2)]);
labels.push(x > 0.5);
}
ValidationData { features, labels }
}
#[test]
fn test_cross_validation() {
let config = OptimizationConfig {
learning_rate_range: (0.001, 0.1),
batch_size_range: (16, 128),
max_iterations: 5,
early_stopping_patience: 2,
validation_split: 0.2,
};
let optimizer = ModelOptimizer::new(config);
let params = optimizer.get_default_parameters();
let data = create_test_data();
let score = optimizer.cross_validate(¶ms, &data);
assert!(score >= 0.0 && score <= 1.0);
}