pub struct QuantumReservoirComputer { /* private fields */ }Expand description
Main Quantum Reservoir Computer
Implementations§
Source§impl QuantumReservoirComputer
impl QuantumReservoirComputer
Sourcepub fn new(config: QRCConfig) -> Result<Self>
pub fn new(config: QRCConfig) -> Result<Self>
Create a new Quantum Reservoir Computer
Examples found in repository?
examples/quantum_ml_ultrathink_showcase.rs (line 235)
196fn quantum_reservoir_computing_demonstration() -> Result<()> {
197 println!(" Initializing Quantum Reservoir Computer...");
198
199 // Configure advanced QRC
200 let config = QRCConfig {
201 reservoir_qubits: 12,
202 input_qubits: 6,
203 readout_size: 16,
204 reservoir_dynamics: ReservoirDynamics {
205 evolution_time: 1.0,
206 coupling_strength: 0.15,
207 external_field: 0.08,
208 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
209 random_interactions: true,
210 randomness_strength: 0.05,
211 memory_length: 20,
212 },
213 input_encoding: InputEncoding {
214 encoding_type: EncodingType::Amplitude,
215 normalization: NormalizationType::L2,
216 feature_mapping: FeatureMapping::Linear,
217 temporal_encoding: true,
218 },
219 training_config: QRCTrainingConfig {
220 epochs: 100,
221 learning_rate: 0.01,
222 batch_size: 16,
223 washout_period: 50,
224 ..Default::default()
225 },
226 temporal_config: TemporalConfig {
227 sequence_length: 20,
228 time_step: 0.1,
229 temporal_correlation: true,
230 memory_decay: 0.95,
231 },
232 ..Default::default()
233 };
234
235 let mut qrc = QuantumReservoirComputer::new(config)?;
236 println!(" QRC initialized with {} reservoir qubits", 20);
237
238 // Generate temporal sequence data
239 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
240 println!(" Generated {} temporal sequences", training_data.len());
241
242 // Train the reservoir readout
243 println!(" Training quantum reservoir readout...");
244 qrc.train(&training_data)?;
245
246 // Analyze reservoir dynamics
247 let dynamics = qrc.analyze_dynamics()?;
248 println!(" ✅ QRC Training Complete!");
249 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
250 println!(" Memory Function: {:.4}", dynamics.memory_function);
251 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
252 println!(
253 " Entanglement Measure: {:.4}",
254 dynamics.entanglement_measure
255 );
256
257 // Test prediction
258 let test_sequence =
259 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
260 let prediction = qrc.predict(&test_sequence)?;
261 println!(" Test prediction shape: {:?}", prediction.shape());
262
263 Ok(())
264}
265
266/// Demonstrate Quantum Graph Attention Networks
267fn quantum_graph_attention_demonstration() -> Result<()> {
268 println!(" Initializing Quantum Graph Attention Network...");
269
270 // Configure advanced QGAT
271 let config = QGATConfig {
272 node_qubits: 5,
273 edge_qubits: 3,
274 num_attention_heads: 8,
275 hidden_dim: 128,
276 output_dim: 32,
277 num_layers: 4,
278 attention_config: QGATAttentionConfig {
279 attention_type: QGATQuantumAttentionType::QuantumSelfAttention,
280 dropout_rate: 0.1,
281 scaled_attention: true,
282 temperature: 0.8,
283 multi_head: true,
284 normalization: AttentionNormalization::LayerNorm,
285 },
286 pooling_config: PoolingConfig {
287 pooling_type: PoolingType::QuantumGlobalPool,
288 pooling_ratio: 0.5,
289 learnable_pooling: true,
290 quantum_pooling: true,
291 },
292 training_config: QGATTrainingConfig {
293 epochs: 150,
294 learning_rate: 0.0005,
295 batch_size: 8,
296 loss_function: LossFunction::CrossEntropy,
297 ..Default::default()
298 },
299 ..Default::default()
300 };
301
302 let qgat = QuantumGraphAttentionNetwork::new(config)?;
303 println!(" QGAT initialized with {} attention heads", 8);
304
305 // Create complex graph data
306 let graphs = generate_complex_graphs(50)?;
307 println!(" Generated {} complex graphs", graphs.len());
308
309 // Test forward pass
310 let sample_graph = &graphs[0];
311 let output = qgat.forward(sample_graph)?;
312 println!(" ✅ QGAT Forward Pass Complete!");
313 println!(
314 " Input graph: {} nodes, {} edges",
315 sample_graph.num_nodes, sample_graph.num_edges
316 );
317 println!(" Output shape: {:?}", output.shape());
318
319 // Analyze attention patterns
320 let attention_analysis = qgat.analyze_attention(sample_graph)?;
321 println!(" Attention Analysis:");
322 println!(
323 " Number of attention heads: {}",
324 attention_analysis.attention_weights.len()
325 );
326 println!(
327 " Average entropy: {:.4}",
328 attention_analysis.average_entropy
329 );
330
331 // Graph representation learning
332 let graph_embeddings = qgat.forward(sample_graph)?;
333 let embedding_norm = graph_embeddings.iter().map(|x| x * x).sum::<f64>().sqrt();
334 println!(" Graph embedding norm: {embedding_norm:.4}");
335
336 Ok(())
337}
338
339/// Advanced Integration Showcase
340fn advanced_integration_showcase() -> Result<()> {
341 println!(" Creating multi-algorithm quantum ML pipeline...");
342
343 // Step 1: Use QPINN to solve a PDE and extract features
344 println!(" Stage 1: QPINN feature extraction from PDE solution");
345 let pde_features = extract_pde_features_with_qpinn()?;
346 println!(
347 " Extracted {} features from PDE solution",
348 pde_features.len()
349 );
350
351 // Step 2: Use QRC to process temporal dynamics
352 println!(" Stage 2: QRC temporal pattern recognition");
353 let temporal_patterns = process_temporal_with_qrc(&pde_features)?;
354 println!(
355 " Identified {} temporal patterns",
356 temporal_patterns.nrows()
357 );
358
359 // Step 3: Use QGAT for relationship modeling
360 println!(" Stage 3: QGAT relationship modeling");
361 let relationship_graph = create_relationship_graph(&temporal_patterns)?;
362 let graph_insights = analyze_with_qgat(&relationship_graph)?;
363 println!(
364 " Generated relationship insights: {:.4} complexity score",
365 graph_insights.sum() / graph_insights.len() as f64
366 );
367
368 // Step 4: QNODE for continuous optimization
369 println!(" Stage 4: QNODE continuous optimization");
370 let optimization_result = optimize_with_qnode(&graph_insights)?;
371 println!(" Optimization converged to: {optimization_result:.6}");
372
373 println!(" ✅ Multi-Algorithm Pipeline Complete!");
374 println!(" Successfully integrated 4 cutting-edge quantum algorithms");
375 println!(" Pipeline demonstrates quantum synergies and enhanced capabilities");
376
377 Ok(())
378}
379
380/// Comprehensive Benchmarking
381fn comprehensive_benchmarking() -> Result<()> {
382 println!(" Running comprehensive quantum advantage benchmarks...");
383
384 // Benchmark QNODE vs Classical NODE
385 println!(" Benchmarking QNODE vs Classical Neural ODE...");
386 let qnode_config = QNODEConfig::default();
387 let mut qnode = QuantumNeuralODE::new(qnode_config)?;
388 let test_data = generate_benchmark_data()?;
389 let qnode_benchmark = benchmark_qnode_vs_classical(&mut qnode, &test_data)?;
390
391 println!(
392 " QNODE Quantum Advantage: {:.2}x",
393 qnode_benchmark.quantum_advantage
394 );
395 println!(
396 " QNODE Speed Ratio: {:.2}x",
397 qnode_benchmark.classical_time / qnode_benchmark.quantum_time
398 );
399
400 // Benchmark QRC vs Classical RC
401 println!(" Benchmarking QRC vs Classical Reservoir Computing...");
402 let qrc_config = QRCConfig::default();
403 let mut qrc = QuantumReservoirComputer::new(qrc_config)?;
404 let qrc_test_data = generate_qrc_benchmark_data()?;
405 let qrc_benchmark = benchmark_qrc_vs_classical(&mut qrc, &qrc_test_data)?;
406
407 println!(
408 " QRC Quantum Advantage: {:.2}x",
409 qrc_benchmark.quantum_advantage
410 );
411 println!(
412 " QRC Accuracy Improvement: {:.2}%",
413 (qrc_benchmark.quantum_advantage - 1.0) * 100.0
414 );
415
416 // Benchmark QGAT vs Classical GAT
417 println!(" Benchmarking QGAT vs Classical Graph Attention...");
418 let qgat_config = QGATConfig::default();
419 let qgat = QuantumGraphAttentionNetwork::new(qgat_config)?;
420 let qgat_test_graphs = generate_benchmark_graphs()?;
421 let qgat_benchmark = benchmark_qgat_vs_classical(&qgat, &qgat_test_graphs)?;
422
423 println!(
424 " QGAT Quantum Advantage: {:.2}x",
425 qgat_benchmark.quantum_advantage
426 );
427 println!(
428 " QGAT Processing Speed: {:.2}x faster",
429 qgat_benchmark.classical_time / qgat_benchmark.quantum_time
430 );
431
432 // Overall analysis
433 let avg_quantum_advantage = (qnode_benchmark.quantum_advantage
434 + qrc_benchmark.quantum_advantage
435 + qgat_benchmark.quantum_advantage)
436 / 3.0;
437
438 println!(" ✅ Comprehensive Benchmarking Complete!");
439 println!(" Average Quantum Advantage: {avg_quantum_advantage:.2}x");
440 println!(" All algorithms demonstrate quantum superiority");
441
442 Ok(())
443}Sourcepub fn process_sequence(
&mut self,
input_sequence: &Array2<f64>,
) -> Result<Array2<f64>>
pub fn process_sequence( &mut self, input_sequence: &Array2<f64>, ) -> Result<Array2<f64>>
Process a sequence of inputs through the reservoir
Sourcepub fn train(
&mut self,
training_data: &[(Array2<f64>, Array2<f64>)],
) -> Result<()>
pub fn train( &mut self, training_data: &[(Array2<f64>, Array2<f64>)], ) -> Result<()>
Train the readout layer on sequential data
Examples found in repository?
examples/quantum_ml_ultrathink_showcase.rs (line 244)
196fn quantum_reservoir_computing_demonstration() -> Result<()> {
197 println!(" Initializing Quantum Reservoir Computer...");
198
199 // Configure advanced QRC
200 let config = QRCConfig {
201 reservoir_qubits: 12,
202 input_qubits: 6,
203 readout_size: 16,
204 reservoir_dynamics: ReservoirDynamics {
205 evolution_time: 1.0,
206 coupling_strength: 0.15,
207 external_field: 0.08,
208 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
209 random_interactions: true,
210 randomness_strength: 0.05,
211 memory_length: 20,
212 },
213 input_encoding: InputEncoding {
214 encoding_type: EncodingType::Amplitude,
215 normalization: NormalizationType::L2,
216 feature_mapping: FeatureMapping::Linear,
217 temporal_encoding: true,
218 },
219 training_config: QRCTrainingConfig {
220 epochs: 100,
221 learning_rate: 0.01,
222 batch_size: 16,
223 washout_period: 50,
224 ..Default::default()
225 },
226 temporal_config: TemporalConfig {
227 sequence_length: 20,
228 time_step: 0.1,
229 temporal_correlation: true,
230 memory_decay: 0.95,
231 },
232 ..Default::default()
233 };
234
235 let mut qrc = QuantumReservoirComputer::new(config)?;
236 println!(" QRC initialized with {} reservoir qubits", 20);
237
238 // Generate temporal sequence data
239 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
240 println!(" Generated {} temporal sequences", training_data.len());
241
242 // Train the reservoir readout
243 println!(" Training quantum reservoir readout...");
244 qrc.train(&training_data)?;
245
246 // Analyze reservoir dynamics
247 let dynamics = qrc.analyze_dynamics()?;
248 println!(" ✅ QRC Training Complete!");
249 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
250 println!(" Memory Function: {:.4}", dynamics.memory_function);
251 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
252 println!(
253 " Entanglement Measure: {:.4}",
254 dynamics.entanglement_measure
255 );
256
257 // Test prediction
258 let test_sequence =
259 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
260 let prediction = qrc.predict(&test_sequence)?;
261 println!(" Test prediction shape: {:?}", prediction.shape());
262
263 Ok(())
264}Sourcepub fn predict(&mut self, input_sequence: &Array2<f64>) -> Result<Array2<f64>>
pub fn predict(&mut self, input_sequence: &Array2<f64>) -> Result<Array2<f64>>
Predict on new sequential data
Examples found in repository?
examples/quantum_ml_ultrathink_showcase.rs (line 260)
196fn quantum_reservoir_computing_demonstration() -> Result<()> {
197 println!(" Initializing Quantum Reservoir Computer...");
198
199 // Configure advanced QRC
200 let config = QRCConfig {
201 reservoir_qubits: 12,
202 input_qubits: 6,
203 readout_size: 16,
204 reservoir_dynamics: ReservoirDynamics {
205 evolution_time: 1.0,
206 coupling_strength: 0.15,
207 external_field: 0.08,
208 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
209 random_interactions: true,
210 randomness_strength: 0.05,
211 memory_length: 20,
212 },
213 input_encoding: InputEncoding {
214 encoding_type: EncodingType::Amplitude,
215 normalization: NormalizationType::L2,
216 feature_mapping: FeatureMapping::Linear,
217 temporal_encoding: true,
218 },
219 training_config: QRCTrainingConfig {
220 epochs: 100,
221 learning_rate: 0.01,
222 batch_size: 16,
223 washout_period: 50,
224 ..Default::default()
225 },
226 temporal_config: TemporalConfig {
227 sequence_length: 20,
228 time_step: 0.1,
229 temporal_correlation: true,
230 memory_decay: 0.95,
231 },
232 ..Default::default()
233 };
234
235 let mut qrc = QuantumReservoirComputer::new(config)?;
236 println!(" QRC initialized with {} reservoir qubits", 20);
237
238 // Generate temporal sequence data
239 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
240 println!(" Generated {} temporal sequences", training_data.len());
241
242 // Train the reservoir readout
243 println!(" Training quantum reservoir readout...");
244 qrc.train(&training_data)?;
245
246 // Analyze reservoir dynamics
247 let dynamics = qrc.analyze_dynamics()?;
248 println!(" ✅ QRC Training Complete!");
249 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
250 println!(" Memory Function: {:.4}", dynamics.memory_function);
251 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
252 println!(
253 " Entanglement Measure: {:.4}",
254 dynamics.entanglement_measure
255 );
256
257 // Test prediction
258 let test_sequence =
259 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
260 let prediction = qrc.predict(&test_sequence)?;
261 println!(" Test prediction shape: {:?}", prediction.shape());
262
263 Ok(())
264}Sourcepub fn get_training_history(&self) -> &[TrainingMetrics]
pub fn get_training_history(&self) -> &[TrainingMetrics]
Get training history
Sourcepub fn get_reservoir_states(&self) -> &[Array1<f64>] ⓘ
pub fn get_reservoir_states(&self) -> &[Array1<f64>] ⓘ
Get reservoir states for analysis
Sourcepub fn analyze_dynamics(&self) -> Result<DynamicsAnalysis>
pub fn analyze_dynamics(&self) -> Result<DynamicsAnalysis>
Analyze reservoir dynamics
Examples found in repository?
examples/quantum_ml_ultrathink_showcase.rs (line 247)
196fn quantum_reservoir_computing_demonstration() -> Result<()> {
197 println!(" Initializing Quantum Reservoir Computer...");
198
199 // Configure advanced QRC
200 let config = QRCConfig {
201 reservoir_qubits: 12,
202 input_qubits: 6,
203 readout_size: 16,
204 reservoir_dynamics: ReservoirDynamics {
205 evolution_time: 1.0,
206 coupling_strength: 0.15,
207 external_field: 0.08,
208 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
209 random_interactions: true,
210 randomness_strength: 0.05,
211 memory_length: 20,
212 },
213 input_encoding: InputEncoding {
214 encoding_type: EncodingType::Amplitude,
215 normalization: NormalizationType::L2,
216 feature_mapping: FeatureMapping::Linear,
217 temporal_encoding: true,
218 },
219 training_config: QRCTrainingConfig {
220 epochs: 100,
221 learning_rate: 0.01,
222 batch_size: 16,
223 washout_period: 50,
224 ..Default::default()
225 },
226 temporal_config: TemporalConfig {
227 sequence_length: 20,
228 time_step: 0.1,
229 temporal_correlation: true,
230 memory_decay: 0.95,
231 },
232 ..Default::default()
233 };
234
235 let mut qrc = QuantumReservoirComputer::new(config)?;
236 println!(" QRC initialized with {} reservoir qubits", 20);
237
238 // Generate temporal sequence data
239 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
240 println!(" Generated {} temporal sequences", training_data.len());
241
242 // Train the reservoir readout
243 println!(" Training quantum reservoir readout...");
244 qrc.train(&training_data)?;
245
246 // Analyze reservoir dynamics
247 let dynamics = qrc.analyze_dynamics()?;
248 println!(" ✅ QRC Training Complete!");
249 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
250 println!(" Memory Function: {:.4}", dynamics.memory_function);
251 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
252 println!(
253 " Entanglement Measure: {:.4}",
254 dynamics.entanglement_measure
255 );
256
257 // Test prediction
258 let test_sequence =
259 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
260 let prediction = qrc.predict(&test_sequence)?;
261 println!(" Test prediction shape: {:?}", prediction.shape());
262
263 Ok(())
264}Trait Implementations§
Source§impl Clone for QuantumReservoirComputer
impl Clone for QuantumReservoirComputer
Source§fn clone(&self) -> QuantumReservoirComputer
fn clone(&self) -> QuantumReservoirComputer
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for QuantumReservoirComputer
impl RefUnwindSafe for QuantumReservoirComputer
impl Send for QuantumReservoirComputer
impl Sync for QuantumReservoirComputer
impl Unpin for QuantumReservoirComputer
impl UnwindSafe for QuantumReservoirComputer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.