use std::time::Duration;
#[derive(Debug, Clone)]
pub struct ActiveLearningConfig {
pub enable_online_learning: bool,
pub max_decomposition_depth: usize,
pub min_subproblem_size: usize,
pub max_subproblem_size: usize,
pub learning_rate: f64,
pub exploration_rate: f64,
pub performance_threshold: f64,
pub enable_transfer_learning: bool,
pub query_budget: usize,
pub overlap_tolerance: f64,
}
impl Default for ActiveLearningConfig {
fn default() -> Self {
Self {
enable_online_learning: true,
max_decomposition_depth: 3,
min_subproblem_size: 2,
max_subproblem_size: 100,
learning_rate: 0.01,
exploration_rate: 0.1,
performance_threshold: 0.7,
enable_transfer_learning: true,
query_budget: 100,
overlap_tolerance: 0.1,
}
}
}
#[derive(Debug, Clone)]
pub struct MetricComputationConfig {
pub enable_expensive_metrics: bool,
pub enable_approximation: bool,
pub sampling_ratio: f64,
pub computation_timeout: Duration,
}
impl Default for MetricComputationConfig {
fn default() -> Self {
Self {
enable_expensive_metrics: false,
enable_approximation: true,
sampling_ratio: 0.1,
computation_timeout: Duration::from_secs(60),
}
}
}
#[derive(Debug, Clone)]
pub struct SizeConstraints {
pub min_size: usize,
pub max_size: usize,
pub target_size: usize,
pub size_tolerance: f64,
}
impl Default for SizeConstraints {
fn default() -> Self {
Self {
min_size: 2,
max_size: 100,
target_size: 20,
size_tolerance: 0.2,
}
}
}
#[derive(Debug, Clone)]
pub struct ResourceConstraints {
pub max_computation_time: Duration,
pub max_memory_usage: usize,
pub num_processors: usize,
pub communication_bandwidth: f64,
}
impl Default for ResourceConstraints {
fn default() -> Self {
Self {
max_computation_time: Duration::from_secs(300),
max_memory_usage: 1024 * 1024 * 1024, num_processors: 4,
communication_bandwidth: 1000.0,
}
}
}