quantrs2_device/mapping_scirs2/
optimization.rs

1//! Advanced optimization configurations and algorithms
2
3use super::*;
4
5/// Advanced optimization configuration
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct AdvancedOptimizationConfig {
8    /// Enable advanced optimization features
9    pub enable_advanced: bool,
10    /// Multi-objective optimization configuration
11    pub multi_objective: MultiObjectiveConfig,
12    /// Constraint handling configuration
13    pub constraint_handling: ConstraintHandlingConfig,
14    /// Search strategy configuration
15    pub search_strategy: SearchStrategyConfig,
16    /// Parallel optimization configuration
17    pub parallel_optimization: ParallelOptimizationConfig,
18}
19
20/// Multi-objective optimization configuration
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct MultiObjectiveConfig {
23    /// Enable multi-objective optimization
24    pub enable_multi_objective: bool,
25    /// List of objectives to optimize
26    pub objectives: Vec<OptimizationObjective>,
27    /// Pareto optimization configuration
28    pub pareto_config: ParetoConfig,
29}
30
31/// Pareto optimization configuration
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct ParetoConfig {
34    /// Population size for genetic algorithms
35    pub population_size: usize,
36    /// Number of generations
37    pub generations: usize,
38    /// Crossover rate
39    pub crossover_rate: f64,
40    /// Mutation rate
41    pub mutation_rate: f64,
42    /// Selection method
43    pub selection_method: SelectionMethod,
44    /// Scalarization method for multi-objective
45    pub scalarization: ScalarizationMethod,
46}
47
48/// Constraint handling configuration
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct ConstraintHandlingConfig {
51    /// Enable constraint handling
52    pub enable_constraints: bool,
53    /// Types of constraints to handle
54    pub constraint_types: Vec<ConstraintType>,
55    /// Penalty method for constraint violations
56    pub penalty_method: PenaltyMethod,
57    /// Tolerance for constraint satisfaction
58    pub tolerance: f64,
59}
60
61/// Search strategy configuration
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct SearchStrategyConfig {
64    /// Primary search strategy
65    pub strategy: SearchStrategy,
66    /// Hybrid search configuration
67    pub hybrid_config: HybridSearchConfig,
68    /// Search budget configuration
69    pub budget: SearchBudgetConfig,
70}
71
72/// Hybrid search configuration
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct HybridSearchConfig {
75    /// List of strategies to combine
76    pub strategies: Vec<SearchStrategy>,
77    /// Criteria for switching between strategies
78    pub switching_criteria: SwitchingCriteria,
79}
80
81/// Switching criteria for hybrid search
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct SwitchingCriteria {
84    /// Performance improvement threshold
85    pub performance_threshold: f64,
86    /// Number of iterations without improvement
87    pub stagnation_limit: usize,
88    /// Time limit for each strategy
89    pub time_limit: Duration,
90}
91
92/// Search budget configuration
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct SearchBudgetConfig {
95    /// Maximum number of evaluations
96    pub max_evaluations: usize,
97    /// Maximum time budget
98    pub max_time: Duration,
99    /// Target quality threshold
100    pub target_quality: f64,
101}
102
103/// Parallel optimization configuration
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct ParallelOptimizationConfig {
106    /// Enable parallel optimization
107    pub enable_parallel: bool,
108    /// Number of worker threads
109    pub num_workers: usize,
110    /// Load balancing strategy
111    pub load_balancing: LoadBalancingStrategy,
112    /// Synchronization method
113    pub synchronization: SynchronizationMethod,
114}
115
116/// Optimization metrics and performance data
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct OptimizationMetrics {
119    /// Total optimization time
120    pub optimization_time: Duration,
121    /// Number of iterations performed
122    pub iterations: usize,
123    /// Convergence achieved
124    pub converged: bool,
125    /// Final objective value
126    pub final_objective: f64,
127    /// Best objective value achieved
128    pub best_objective: f64,
129    /// Improvement over initial solution
130    pub improvement_ratio: f64,
131    /// Constraint violations
132    pub constraint_violations: f64,
133    /// Algorithm-specific metrics
134    pub algorithm_metrics: HashMap<String, f64>,
135    /// Resource utilization during optimization
136    pub resource_usage: ResourceUsageMetrics,
137}
138
139/// Resource usage metrics during optimization
140#[derive(Debug, Clone, Serialize, Deserialize)]
141pub struct ResourceUsageMetrics {
142    /// Peak memory usage
143    pub peak_memory: usize,
144    /// Average CPU utilization
145    pub average_cpu: f64,
146    /// Total energy consumption (if measurable)
147    pub energy_consumption: Option<f64>,
148    /// Network communication overhead
149    pub network_overhead: Option<f64>,
150}
151
152/// Result analysis for optimization outcomes
153#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct ResultAnalysis {
155    /// Analysis type
156    pub analysis_type: ResultAnalysisType,
157    /// Statistical summary
158    pub statistical_summary: StatisticalSummary,
159    /// Trend analysis over iterations
160    pub trend_analysis: TrendAnalysis,
161    /// Comparative analysis with baselines
162    pub comparative_analysis: ComparativeAnalysis,
163    /// Sensitivity analysis results
164    pub sensitivity_analysis: SensitivityAnalysis,
165}
166
167/// Statistical summary of results
168#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct StatisticalSummary {
170    /// Mean objective value
171    pub mean: f64,
172    /// Standard deviation
173    pub std_dev: f64,
174    /// Minimum value
175    pub min: f64,
176    /// Maximum value
177    pub max: f64,
178    /// Median value
179    pub median: f64,
180    /// 95% confidence interval
181    pub confidence_interval_95: (f64, f64),
182}
183
184/// Trend analysis over optimization iterations
185#[derive(Debug, Clone, Serialize, Deserialize)]
186pub struct TrendAnalysis {
187    /// Overall trend direction
188    pub trend_direction: TrendDirection,
189    /// Rate of improvement
190    pub improvement_rate: f64,
191    /// Convergence characteristics
192    pub convergence_pattern: String,
193    /// Plateaus and breakthroughs
194    pub plateau_analysis: Vec<PlateauInfo>,
195}
196
197/// Information about plateaus in optimization
198#[derive(Debug, Clone, Serialize, Deserialize)]
199pub struct PlateauInfo {
200    /// Start iteration of plateau
201    pub start_iteration: usize,
202    /// End iteration of plateau
203    pub end_iteration: usize,
204    /// Duration of plateau
205    pub duration: usize,
206    /// Objective value during plateau
207    pub plateau_value: f64,
208}
209
210/// Comparative analysis with baseline methods
211#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct ComparativeAnalysis {
213    /// Baseline method comparisons
214    pub baseline_comparisons: Vec<BaselineComparison>,
215    /// Performance ranking
216    pub performance_ranking: usize,
217    /// Statistical significance tests
218    pub significance_tests: HashMap<String, f64>,
219}
220
221/// Baseline comparison results
222#[derive(Debug, Clone, Serialize, Deserialize)]
223pub struct BaselineComparison {
224    /// Baseline method name
225    pub baseline_name: String,
226    /// Performance improvement factor
227    pub improvement_factor: f64,
228    /// Statistical significance
229    pub p_value: f64,
230    /// Effect size
231    pub effect_size: f64,
232    /// Confidence in comparison
233    pub confidence: f64,
234}
235
236/// Sensitivity analysis results
237#[derive(Debug, Clone, Serialize, Deserialize)]
238pub struct SensitivityAnalysis {
239    /// Parameter sensitivity scores
240    pub parameter_sensitivity: HashMap<String, f64>,
241    /// Robust parameter ranges
242    pub robust_ranges: HashMap<String, (f64, f64)>,
243    /// Critical parameters
244    pub critical_parameters: Vec<String>,
245    /// Interaction effects
246    pub interaction_effects: HashMap<String, f64>,
247}