quantrs2_device/adaptive_compilation/
strategies.rs1use std::time::Duration;
4
5#[derive(Debug, Clone, PartialEq)]
7pub enum OptimizationAlgorithm {
8 GradientDescent,
9 LBFGS,
10 DifferentialEvolution,
11 GeneticAlgorithm,
12 ParticleSwarm,
13 SimulatedAnnealing,
14 BayesianOptimization,
15 ReinforcementLearning,
16 QuantumApproximateOptimization,
17 HybridClassicalQuantum,
18}
19
20#[derive(Debug, Clone)]
22pub struct AdaptiveStrategiesConfig {
23 pub enable_adaptive_circuits: bool,
25 pub enable_adaptive_resources: bool,
27 pub enable_adaptive_error_mitigation: bool,
29 pub enable_adaptive_scheduling: bool,
31 pub adaptation_triggers: Vec<AdaptationTrigger>,
33 pub adaptation_learning_rate: f64,
35 pub exploration_exploitation_balance: f64,
37}
38
39#[derive(Debug, Clone, PartialEq)]
41pub enum AdaptationTrigger {
42 PerformanceDegradation,
43 TimeInterval,
44 ErrorRateIncrease,
45 ResourceConstraintViolation,
46 UserRequest,
47 AutomaticDetection,
48}
49
50#[derive(Debug, Clone)]
52pub struct ParallelOptimizationConfig {
53 pub enable_parallel: bool,
54 pub max_parallel_jobs: usize,
55 pub load_balancing_strategy: LoadBalancingStrategy,
56 pub resource_allocation: ResourceAllocationStrategy,
57}
58
59#[derive(Debug, Clone, PartialEq)]
61pub enum LoadBalancingStrategy {
62 RoundRobin,
63 LeastLoaded,
64 PerformanceBased,
65 PredictiveBased,
66}
67
68#[derive(Debug, Clone, PartialEq)]
70pub enum ResourceAllocationStrategy {
71 Static,
72 Dynamic,
73 PredictiveBased,
74 LoadAware,
75 CapacityBased,
76}
77
78#[derive(Debug, Clone)]
80pub struct CircuitAnalysisConfig {
81 pub enable_analysis: bool,
83 pub analysis_depth: AnalysisDepth,
85 pub complexity_analysis: ComplexityAnalysisConfig,
87 pub structure_analysis: StructureAnalysisConfig,
89 pub optimization_potential: OptimizationPotentialConfig,
91}
92
93#[derive(Debug, Clone, PartialEq)]
95pub enum AnalysisDepth {
96 Basic,
97 Intermediate,
98 Comprehensive,
99 ExhaustiveSearch,
100}
101
102#[derive(Debug, Clone)]
104pub struct ComplexityAnalysisConfig {
105 pub complexity_metrics: Vec<ComplexityMetric>,
107 pub enable_parallel_analysis: bool,
109 pub analysis_timeout: Duration,
111 pub resource_limits: AnalysisResourceLimits,
113}
114
115#[derive(Debug, Clone, PartialEq)]
117pub enum ComplexityMetric {
118 CircuitDepth,
119 GateCount,
120 TwoQubitGateCount,
121 ParameterCount,
122 ConnectivityComplexity,
123 EntanglementComplexity,
124 ComputationalComplexity,
125 SimulationComplexity,
126}
127
128#[derive(Debug, Clone)]
130pub struct StructureAnalysisConfig {
131 pub pattern_recognition: bool,
133 pub symmetry_detection: bool,
135 pub subcircuit_identification: bool,
137 pub critical_path_analysis: bool,
139}
140
141#[derive(Debug, Clone)]
143pub struct OptimizationPotentialConfig {
144 pub potential_metrics: Vec<PotentialMetric>,
146 pub opportunity_detection: bool,
148 pub bottleneck_identification: bool,
150 pub resource_utilization_analysis: bool,
152}
153
154#[derive(Debug, Clone, PartialEq)]
156pub enum PotentialMetric {
157 GateReduction,
158 DepthReduction,
159 ParallelizationOpportunity,
160 ResourceOptimization,
161 ErrorMitigationPotential,
162 ExecutionTimeImprovement,
163}
164
165#[derive(Debug, Clone)]
167pub struct AnalysisResourceLimits {
168 pub max_memory_mb: usize,
170 pub max_cpu_time: Duration,
172 pub max_threads: usize,
174}
175
176impl Default for AdaptiveStrategiesConfig {
177 fn default() -> Self {
178 Self {
179 enable_adaptive_circuits: true,
180 enable_adaptive_resources: true,
181 enable_adaptive_error_mitigation: true,
182 enable_adaptive_scheduling: true,
183 adaptation_triggers: vec![
184 AdaptationTrigger::PerformanceDegradation,
185 AdaptationTrigger::TimeInterval,
186 AdaptationTrigger::AutomaticDetection,
187 ],
188 adaptation_learning_rate: 0.01,
189 exploration_exploitation_balance: 0.1,
190 }
191 }
192}
193
194impl Default for ParallelOptimizationConfig {
195 fn default() -> Self {
196 Self {
197 enable_parallel: true,
198 max_parallel_jobs: 4,
199 load_balancing_strategy: LoadBalancingStrategy::PerformanceBased,
200 resource_allocation: ResourceAllocationStrategy::Dynamic,
201 }
202 }
203}
204
205impl Default for CircuitAnalysisConfig {
206 fn default() -> Self {
207 Self {
208 enable_analysis: true,
209 analysis_depth: AnalysisDepth::Intermediate,
210 complexity_analysis: ComplexityAnalysisConfig::default(),
211 structure_analysis: StructureAnalysisConfig::default(),
212 optimization_potential: OptimizationPotentialConfig::default(),
213 }
214 }
215}
216
217impl Default for ComplexityAnalysisConfig {
218 fn default() -> Self {
219 Self {
220 complexity_metrics: vec![
221 ComplexityMetric::CircuitDepth,
222 ComplexityMetric::GateCount,
223 ComplexityMetric::TwoQubitGateCount,
224 ComplexityMetric::ConnectivityComplexity,
225 ],
226 enable_parallel_analysis: true,
227 analysis_timeout: Duration::from_secs(60),
228 resource_limits: AnalysisResourceLimits::default(),
229 }
230 }
231}
232
233impl Default for StructureAnalysisConfig {
234 fn default() -> Self {
235 Self {
236 pattern_recognition: true,
237 symmetry_detection: true,
238 subcircuit_identification: true,
239 critical_path_analysis: true,
240 }
241 }
242}
243
244impl Default for OptimizationPotentialConfig {
245 fn default() -> Self {
246 Self {
247 potential_metrics: vec![
248 PotentialMetric::GateReduction,
249 PotentialMetric::DepthReduction,
250 PotentialMetric::ParallelizationOpportunity,
251 ],
252 opportunity_detection: true,
253 bottleneck_identification: true,
254 resource_utilization_analysis: true,
255 }
256 }
257}
258
259impl Default for AnalysisResourceLimits {
260 fn default() -> Self {
261 Self {
262 max_memory_mb: 2048,
263 max_cpu_time: Duration::from_secs(300),
264 max_threads: 8,
265 }
266 }
267}