quantrs2_ml/automl/resource/
mod.rs1use crate::automl::config::QuantumConstraints;
6use crate::error::Result;
7
8#[derive(Debug, Clone)]
10pub struct QuantumResourceOptimizer {
11 constraints: QuantumConstraints,
13
14 allocation_strategy: ResourceAllocationStrategy,
16
17 current_usage: ResourceUsage,
19}
20
21#[derive(Debug, Clone)]
23pub enum ResourceAllocationStrategy {
24 Conservative,
25 Balanced,
26 Aggressive,
27 Custom {
28 parameters: std::collections::HashMap<String, f64>,
29 },
30}
31
32#[derive(Debug, Clone)]
34pub struct ResourceUsage {
35 pub memory_mb: f64,
37
38 pub quantum_resources: QuantumResourceUsage,
40
41 pub compute_time: f64,
43}
44
45#[derive(Debug, Clone)]
47pub struct QuantumResourceUsage {
48 pub qubits_allocated: usize,
50
51 pub circuit_depth_used: usize,
53
54 pub gates_used: usize,
56
57 pub coherence_time_used: f64,
59}
60
61impl QuantumResourceOptimizer {
62 pub fn new(constraints: &QuantumConstraints) -> Self {
64 Self {
65 constraints: constraints.clone(),
66 allocation_strategy: ResourceAllocationStrategy::Balanced,
67 current_usage: ResourceUsage::default(),
68 }
69 }
70
71 pub fn optimize_allocation(
73 &mut self,
74 workload_requirements: &WorkloadRequirements,
75 ) -> Result<ResourceAllocation> {
76 Ok(ResourceAllocation {
78 qubits_allocated: std::cmp::min(
79 workload_requirements.qubits_needed,
80 self.constraints.available_qubits,
81 ),
82 memory_allocated: workload_requirements.memory_needed.min(2048.0), time_allocated: workload_requirements.time_needed.min(3600.0), })
85 }
86}
87
88#[derive(Debug, Clone)]
90pub struct WorkloadRequirements {
91 pub qubits_needed: usize,
92 pub memory_needed: f64,
93 pub time_needed: f64,
94}
95
96#[derive(Debug, Clone)]
98pub struct ResourceAllocation {
99 pub qubits_allocated: usize,
100 pub memory_allocated: f64,
101 pub time_allocated: f64,
102}
103
104impl Default for ResourceUsage {
105 fn default() -> Self {
106 Self {
107 memory_mb: 0.0,
108 quantum_resources: QuantumResourceUsage::default(),
109 compute_time: 0.0,
110 }
111 }
112}
113
114impl Default for QuantumResourceUsage {
115 fn default() -> Self {
116 Self {
117 qubits_allocated: 0,
118 circuit_depth_used: 0,
119 gates_used: 0,
120 coherence_time_used: 0.0,
121 }
122 }
123}