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 243)
204fn quantum_reservoir_computing_demonstration() -> Result<()> {
205 println!(" Initializing Quantum Reservoir Computer...");
206
207 // Configure advanced QRC
208 let config = QRCConfig {
209 reservoir_qubits: 12,
210 input_qubits: 6,
211 readout_size: 16,
212 reservoir_dynamics: ReservoirDynamics {
213 evolution_time: 1.0,
214 coupling_strength: 0.15,
215 external_field: 0.08,
216 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
217 random_interactions: true,
218 randomness_strength: 0.05,
219 memory_length: 20,
220 },
221 input_encoding: InputEncoding {
222 encoding_type: EncodingType::Amplitude,
223 normalization: NormalizationType::L2,
224 feature_mapping: FeatureMapping::Linear,
225 temporal_encoding: true,
226 },
227 training_config: QRCTrainingConfig {
228 epochs: 100,
229 learning_rate: 0.01,
230 batch_size: 16,
231 washout_period: 50,
232 ..Default::default()
233 },
234 temporal_config: TemporalConfig {
235 sequence_length: 20,
236 time_step: 0.1,
237 temporal_correlation: true,
238 memory_decay: 0.95,
239 },
240 ..Default::default()
241 };
242
243 let mut qrc = QuantumReservoirComputer::new(config)?;
244 println!(" QRC initialized with {} reservoir qubits", 20);
245
246 // Generate temporal sequence data
247 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
248 println!(" Generated {} temporal sequences", training_data.len());
249
250 // Train the reservoir readout
251 println!(" Training quantum reservoir readout...");
252 qrc.train(&training_data)?;
253
254 // Analyze reservoir dynamics
255 let dynamics = qrc.analyze_dynamics()?;
256 println!(" ✅ QRC Training Complete!");
257 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
258 println!(" Memory Function: {:.4}", dynamics.memory_function);
259 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
260 println!(
261 " Entanglement Measure: {:.4}",
262 dynamics.entanglement_measure
263 );
264
265 // Test prediction
266 let test_sequence =
267 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
268 let prediction = qrc.predict(&test_sequence)?;
269 println!(" Test prediction shape: {:?}", prediction.shape());
270
271 Ok(())
272}
273
274/// Demonstrate Quantum Graph Attention Networks
275fn quantum_graph_attention_demonstration() -> Result<()> {
276 println!(" Initializing Quantum Graph Attention Network...");
277
278 // Configure advanced QGAT
279 let config = QGATConfig {
280 node_qubits: 5,
281 edge_qubits: 3,
282 num_attention_heads: 8,
283 hidden_dim: 128,
284 output_dim: 32,
285 num_layers: 4,
286 attention_config: QGATAttentionConfig {
287 attention_type: QGATQuantumAttentionType::QuantumSelfAttention,
288 dropout_rate: 0.1,
289 scaled_attention: true,
290 temperature: 0.8,
291 multi_head: true,
292 normalization: AttentionNormalization::LayerNorm,
293 },
294 pooling_config: PoolingConfig {
295 pooling_type: PoolingType::QuantumGlobalPool,
296 pooling_ratio: 0.5,
297 learnable_pooling: true,
298 quantum_pooling: true,
299 },
300 training_config: QGATTrainingConfig {
301 epochs: 150,
302 learning_rate: 0.0005,
303 batch_size: 8,
304 loss_function: LossFunction::CrossEntropy,
305 ..Default::default()
306 },
307 ..Default::default()
308 };
309
310 let qgat = QuantumGraphAttentionNetwork::new(config)?;
311 println!(" QGAT initialized with {} attention heads", 8);
312
313 // Create complex graph data
314 let graphs = generate_complex_graphs(50)?;
315 println!(" Generated {} complex graphs", graphs.len());
316
317 // Test forward pass
318 let sample_graph = &graphs[0];
319 let output = qgat.forward(sample_graph)?;
320 println!(" ✅ QGAT Forward Pass Complete!");
321 println!(
322 " Input graph: {} nodes, {} edges",
323 sample_graph.num_nodes, sample_graph.num_edges
324 );
325 println!(" Output shape: {:?}", output.shape());
326
327 // Analyze attention patterns
328 let attention_analysis = qgat.analyze_attention(sample_graph)?;
329 println!(" Attention Analysis:");
330 println!(
331 " Number of attention heads: {}",
332 attention_analysis.attention_weights.len()
333 );
334 println!(
335 " Average entropy: {:.4}",
336 attention_analysis.average_entropy
337 );
338
339 // Graph representation learning
340 let graph_embeddings = qgat.forward(sample_graph)?;
341 let embedding_norm = graph_embeddings.iter().map(|x| x * x).sum::<f64>().sqrt();
342 println!(" Graph embedding norm: {embedding_norm:.4}");
343
344 Ok(())
345}
346
347/// Advanced Integration Showcase
348fn advanced_integration_showcase() -> Result<()> {
349 println!(" Creating multi-algorithm quantum ML pipeline...");
350
351 // Step 1: Use QPINN to solve a PDE and extract features
352 println!(" Stage 1: QPINN feature extraction from PDE solution");
353 let pde_features = extract_pde_features_with_qpinn()?;
354 println!(
355 " Extracted {} features from PDE solution",
356 pde_features.len()
357 );
358
359 // Step 2: Use QRC to process temporal dynamics
360 println!(" Stage 2: QRC temporal pattern recognition");
361 let temporal_patterns = process_temporal_with_qrc(&pde_features)?;
362 println!(
363 " Identified {} temporal patterns",
364 temporal_patterns.nrows()
365 );
366
367 // Step 3: Use QGAT for relationship modeling
368 println!(" Stage 3: QGAT relationship modeling");
369 let relationship_graph = create_relationship_graph(&temporal_patterns)?;
370 let graph_insights = analyze_with_qgat(&relationship_graph)?;
371 println!(
372 " Generated relationship insights: {:.4} complexity score",
373 graph_insights.sum() / graph_insights.len() as f64
374 );
375
376 // Step 4: QNODE for continuous optimization
377 println!(" Stage 4: QNODE continuous optimization");
378 let optimization_result = optimize_with_qnode(&graph_insights)?;
379 println!(" Optimization converged to: {optimization_result:.6}");
380
381 println!(" ✅ Multi-Algorithm Pipeline Complete!");
382 println!(" Successfully integrated 4 cutting-edge quantum algorithms");
383 println!(" Pipeline demonstrates quantum synergies and enhanced capabilities");
384
385 Ok(())
386}
387
388/// Comprehensive Benchmarking
389fn comprehensive_benchmarking() -> Result<()> {
390 println!(" Running comprehensive quantum advantage benchmarks...");
391
392 // Benchmark QNODE vs Classical NODE
393 println!(" Benchmarking QNODE vs Classical Neural ODE...");
394 let qnode_config = QNODEConfig::default();
395 let mut qnode = QuantumNeuralODE::new(qnode_config)?;
396 let test_data = generate_benchmark_data()?;
397 let qnode_benchmark = benchmark_qnode_vs_classical(&mut qnode, &test_data)?;
398
399 println!(
400 " QNODE Quantum Advantage: {:.2}x",
401 qnode_benchmark.quantum_advantage
402 );
403 println!(
404 " QNODE Speed Ratio: {:.2}x",
405 qnode_benchmark.classical_time / qnode_benchmark.quantum_time
406 );
407
408 // Benchmark QRC vs Classical RC
409 println!(" Benchmarking QRC vs Classical Reservoir Computing...");
410 let qrc_config = QRCConfig::default();
411 let mut qrc = QuantumReservoirComputer::new(qrc_config)?;
412 let qrc_test_data = generate_qrc_benchmark_data()?;
413 let qrc_benchmark = benchmark_qrc_vs_classical(&mut qrc, &qrc_test_data)?;
414
415 println!(
416 " QRC Quantum Advantage: {:.2}x",
417 qrc_benchmark.quantum_advantage
418 );
419 println!(
420 " QRC Accuracy Improvement: {:.2}%",
421 (qrc_benchmark.quantum_advantage - 1.0) * 100.0
422 );
423
424 // Benchmark QGAT vs Classical GAT
425 println!(" Benchmarking QGAT vs Classical Graph Attention...");
426 let qgat_config = QGATConfig::default();
427 let qgat = QuantumGraphAttentionNetwork::new(qgat_config)?;
428 let qgat_test_graphs = generate_benchmark_graphs()?;
429 let qgat_benchmark = benchmark_qgat_vs_classical(&qgat, &qgat_test_graphs)?;
430
431 println!(
432 " QGAT Quantum Advantage: {:.2}x",
433 qgat_benchmark.quantum_advantage
434 );
435 println!(
436 " QGAT Processing Speed: {:.2}x faster",
437 qgat_benchmark.classical_time / qgat_benchmark.quantum_time
438 );
439
440 // Overall analysis
441 let avg_quantum_advantage = (qnode_benchmark.quantum_advantage
442 + qrc_benchmark.quantum_advantage
443 + qgat_benchmark.quantum_advantage)
444 / 3.0;
445
446 println!(" ✅ Comprehensive Benchmarking Complete!");
447 println!(" Average Quantum Advantage: {avg_quantum_advantage:.2}x");
448 println!(" All algorithms demonstrate quantum superiority");
449
450 Ok(())
451}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 252)
204fn quantum_reservoir_computing_demonstration() -> Result<()> {
205 println!(" Initializing Quantum Reservoir Computer...");
206
207 // Configure advanced QRC
208 let config = QRCConfig {
209 reservoir_qubits: 12,
210 input_qubits: 6,
211 readout_size: 16,
212 reservoir_dynamics: ReservoirDynamics {
213 evolution_time: 1.0,
214 coupling_strength: 0.15,
215 external_field: 0.08,
216 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
217 random_interactions: true,
218 randomness_strength: 0.05,
219 memory_length: 20,
220 },
221 input_encoding: InputEncoding {
222 encoding_type: EncodingType::Amplitude,
223 normalization: NormalizationType::L2,
224 feature_mapping: FeatureMapping::Linear,
225 temporal_encoding: true,
226 },
227 training_config: QRCTrainingConfig {
228 epochs: 100,
229 learning_rate: 0.01,
230 batch_size: 16,
231 washout_period: 50,
232 ..Default::default()
233 },
234 temporal_config: TemporalConfig {
235 sequence_length: 20,
236 time_step: 0.1,
237 temporal_correlation: true,
238 memory_decay: 0.95,
239 },
240 ..Default::default()
241 };
242
243 let mut qrc = QuantumReservoirComputer::new(config)?;
244 println!(" QRC initialized with {} reservoir qubits", 20);
245
246 // Generate temporal sequence data
247 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
248 println!(" Generated {} temporal sequences", training_data.len());
249
250 // Train the reservoir readout
251 println!(" Training quantum reservoir readout...");
252 qrc.train(&training_data)?;
253
254 // Analyze reservoir dynamics
255 let dynamics = qrc.analyze_dynamics()?;
256 println!(" ✅ QRC Training Complete!");
257 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
258 println!(" Memory Function: {:.4}", dynamics.memory_function);
259 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
260 println!(
261 " Entanglement Measure: {:.4}",
262 dynamics.entanglement_measure
263 );
264
265 // Test prediction
266 let test_sequence =
267 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
268 let prediction = qrc.predict(&test_sequence)?;
269 println!(" Test prediction shape: {:?}", prediction.shape());
270
271 Ok(())
272}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 268)
204fn quantum_reservoir_computing_demonstration() -> Result<()> {
205 println!(" Initializing Quantum Reservoir Computer...");
206
207 // Configure advanced QRC
208 let config = QRCConfig {
209 reservoir_qubits: 12,
210 input_qubits: 6,
211 readout_size: 16,
212 reservoir_dynamics: ReservoirDynamics {
213 evolution_time: 1.0,
214 coupling_strength: 0.15,
215 external_field: 0.08,
216 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
217 random_interactions: true,
218 randomness_strength: 0.05,
219 memory_length: 20,
220 },
221 input_encoding: InputEncoding {
222 encoding_type: EncodingType::Amplitude,
223 normalization: NormalizationType::L2,
224 feature_mapping: FeatureMapping::Linear,
225 temporal_encoding: true,
226 },
227 training_config: QRCTrainingConfig {
228 epochs: 100,
229 learning_rate: 0.01,
230 batch_size: 16,
231 washout_period: 50,
232 ..Default::default()
233 },
234 temporal_config: TemporalConfig {
235 sequence_length: 20,
236 time_step: 0.1,
237 temporal_correlation: true,
238 memory_decay: 0.95,
239 },
240 ..Default::default()
241 };
242
243 let mut qrc = QuantumReservoirComputer::new(config)?;
244 println!(" QRC initialized with {} reservoir qubits", 20);
245
246 // Generate temporal sequence data
247 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
248 println!(" Generated {} temporal sequences", training_data.len());
249
250 // Train the reservoir readout
251 println!(" Training quantum reservoir readout...");
252 qrc.train(&training_data)?;
253
254 // Analyze reservoir dynamics
255 let dynamics = qrc.analyze_dynamics()?;
256 println!(" ✅ QRC Training Complete!");
257 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
258 println!(" Memory Function: {:.4}", dynamics.memory_function);
259 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
260 println!(
261 " Entanglement Measure: {:.4}",
262 dynamics.entanglement_measure
263 );
264
265 // Test prediction
266 let test_sequence =
267 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
268 let prediction = qrc.predict(&test_sequence)?;
269 println!(" Test prediction shape: {:?}", prediction.shape());
270
271 Ok(())
272}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 255)
204fn quantum_reservoir_computing_demonstration() -> Result<()> {
205 println!(" Initializing Quantum Reservoir Computer...");
206
207 // Configure advanced QRC
208 let config = QRCConfig {
209 reservoir_qubits: 12,
210 input_qubits: 6,
211 readout_size: 16,
212 reservoir_dynamics: ReservoirDynamics {
213 evolution_time: 1.0,
214 coupling_strength: 0.15,
215 external_field: 0.08,
216 hamiltonian_type: HamiltonianType::TransverseFieldIsing,
217 random_interactions: true,
218 randomness_strength: 0.05,
219 memory_length: 20,
220 },
221 input_encoding: InputEncoding {
222 encoding_type: EncodingType::Amplitude,
223 normalization: NormalizationType::L2,
224 feature_mapping: FeatureMapping::Linear,
225 temporal_encoding: true,
226 },
227 training_config: QRCTrainingConfig {
228 epochs: 100,
229 learning_rate: 0.01,
230 batch_size: 16,
231 washout_period: 50,
232 ..Default::default()
233 },
234 temporal_config: TemporalConfig {
235 sequence_length: 20,
236 time_step: 0.1,
237 temporal_correlation: true,
238 memory_decay: 0.95,
239 },
240 ..Default::default()
241 };
242
243 let mut qrc = QuantumReservoirComputer::new(config)?;
244 println!(" QRC initialized with {} reservoir qubits", 20);
245
246 // Generate temporal sequence data
247 let training_data = generate_temporal_sequences(100, 20, 6, 8)?;
248 println!(" Generated {} temporal sequences", training_data.len());
249
250 // Train the reservoir readout
251 println!(" Training quantum reservoir readout...");
252 qrc.train(&training_data)?;
253
254 // Analyze reservoir dynamics
255 let dynamics = qrc.analyze_dynamics()?;
256 println!(" ✅ QRC Training Complete!");
257 println!(" Reservoir Capacity: {:.4}", dynamics.capacity);
258 println!(" Memory Function: {:.4}", dynamics.memory_function);
259 println!(" Spectral Radius: {:.4}", dynamics.spectral_radius);
260 println!(
261 " Entanglement Measure: {:.4}",
262 dynamics.entanglement_measure
263 );
264
265 // Test prediction
266 let test_sequence =
267 Array2::from_shape_vec((15, 6), (0..90).map(|x| f64::from(x) * 0.01).collect())?;
268 let prediction = qrc.predict(&test_sequence)?;
269 println!(" Test prediction shape: {:?}", prediction.shape());
270
271 Ok(())
272}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.