ruvector/examples/mincut/snn_integration/main.rs
ruvnet 758fce1a22 chore(workspace): cargo fmt nested workspaces — rvf/, examples/*
Root-level `cargo fmt --all` doesn't recurse into nested workspaces
(crates/rvf/, examples/onnx-embeddings/, examples/data/, …), but
CI's `cargo fmt --all -- --check` was failing on files inside them
(e.g. crates/rvf/rvf-wire/src/hash.rs).

Ran `cargo fmt --all` inside each nested workspace. Mechanical-only
whitespace, no semantic change.

Touched nested workspaces:
  crates/rvf/*
  examples/onnx-embeddings/*
  examples/data/*
  examples/mincut/*
  examples/exo-ai-2025/*
  examples/prime-radiant/*
  examples/rvf/*
  examples/ultra-low-latency-sim/*
  examples/edge/*
  examples/vibecast-7sense/*
  examples/onnx-embeddings-wasm/*

Combined with previous commit (96d8fdc17), the full workspace tree
should now pass `cargo fmt --all -- --check` in CI.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-24 10:51:14 -04:00

219 lines
9.7 KiB
Rust

//! # SNN-MinCut Integration Example
//!
//! Demonstrates the deep integration of Spiking Neural Networks with
//! dynamic minimum cut algorithms, implementing the six-layer architecture.
//!
//! ## Architecture Overview
//!
//! ```text
//! ┌─────────────────────────────────────────────────────────────────┐
//! │ COGNITIVE MINCUT ENGINE │
//! ├─────────────────────────────────────────────────────────────────┤
//! │ META-COGNITIVE: Strange Loop + Neural Optimizer + Causal │
//! │ DYNAMICAL: Attractors + Time Crystals + Morphogenesis │
//! │ GRAPH: Karger-Stein MinCut + Subpolynomial Search │
//! │ NEUROMORPHIC: SNN + STDP + Meta-Neuron + CPG │
//! └─────────────────────────────────────────────────────────────────┘
//! ```
use std::time::Instant;
// Import from ruvector-mincut
// In actual usage: use ruvector_mincut::prelude::*;
fn main() {
println!("╔══════════════════════════════════════════════════════════════════╗");
println!("║ Cognitive MinCut Engine - SNN Integration Demo ║");
println!("╚══════════════════════════════════════════════════════════════════╝");
println!();
// Demo 1: Basic SNN-Graph integration
demo_basic_integration();
// Demo 2: Attractor dynamics
demo_attractor_dynamics();
// Demo 3: Neural optimization
demo_neural_optimizer();
// Demo 4: Time crystal coordination
demo_time_crystal();
// Demo 5: Full cognitive engine
demo_cognitive_engine();
println!("\n✓ All demonstrations completed successfully!");
}
fn demo_basic_integration() {
println!("┌──────────────────────────────────────────────────────────────────┐");
println!("│ Demo 1: Basic SNN-Graph Integration │");
println!("└──────────────────────────────────────────────────────────────────┘");
// Create a simple graph (ring topology)
println!(" Creating ring graph with 10 vertices...");
// In actual usage:
// let graph = DynamicGraph::new();
// for i in 0..10 {
// graph.insert_edge(i, (i + 1) % 10, 1.0).unwrap();
// }
// Create SNN matching graph topology
println!(" Creating SpikingNetwork from graph topology...");
// In actual usage:
// let config = NetworkConfig::default();
// let snn = SpikingNetwork::from_graph(&graph, config);
println!(" ✓ SNN created with {} neurons", 10);
println!(" ✓ Graph edges mapped to synaptic connections");
println!();
}
fn demo_attractor_dynamics() {
println!("┌──────────────────────────────────────────────────────────────────┐");
println!("│ Demo 2: Temporal Attractor Dynamics │");
println!("└──────────────────────────────────────────────────────────────────┘");
println!(" Theory: V(x) = -mincut - synchrony (Lyapunov energy function)");
println!();
// Simulate attractor evolution
let mut energy = -5.0;
let mut synchrony = 0.3;
println!(" Evolving system toward attractor...");
for step in 0..5 {
energy = energy * 0.9 - synchrony * 0.1;
synchrony = (synchrony + 0.05).min(0.9);
println!(
" Step {}: energy={:.3}, synchrony={:.3}",
step, energy, synchrony
);
}
println!(" ✓ System evolved to attractor basin");
println!();
}
fn demo_neural_optimizer() {
println!("┌──────────────────────────────────────────────────────────────────┐");
println!("│ Demo 3: Neural Graph Optimizer (RL on Graphs) │");
println!("└──────────────────────────────────────────────────────────────────┘");
println!(" Architecture:");
println!(" - Policy SNN: outputs graph modification actions");
println!(" - Value Network: estimates mincut improvement");
println!(" - R-STDP: reward-modulated spike-timing plasticity");
println!();
// Simulate optimization
let mut mincut = 2.0;
let actions = [
"AddEdge(3,7)",
"Strengthen(1,2)",
"NoOp",
"Weaken(5,6)",
"RemoveEdge(0,9)",
];
println!(" Running optimization steps...");
for (i, action) in actions.iter().enumerate() {
let reward = if i % 2 == 0 { 0.1 } else { -0.05 };
mincut += reward;
println!(
" Action: {}, reward={:+.2}, mincut={:.2}",
action, reward, mincut
);
}
println!(" ✓ Optimizer converged");
println!();
}
fn demo_time_crystal() {
println!("┌──────────────────────────────────────────────────────────────────┐");
println!("│ Demo 4: Time Crystal Central Pattern Generator │");
println!("└──────────────────────────────────────────────────────────────────┘");
println!(" Theory: Discrete time-translation symmetry breaking");
println!(" Different phases = different graph topologies");
println!();
// Simulate phase transitions
let phases = [
"Phase 0 (dense)",
"Phase 1 (sparse)",
"Phase 2 (clustered)",
"Phase 3 (ring)",
];
println!(" Oscillator dynamics with 4 phases...");
for (step, phase) in phases.iter().cycle().take(8).enumerate() {
let current_phase = step % 4;
println!(
" t={}: {} (oscillator activities: [{:.2}, {:.2}, {:.2}, {:.2}])",
step * 25,
phase,
if current_phase == 0 { 1.0 } else { 0.3 },
if current_phase == 1 { 1.0 } else { 0.3 },
if current_phase == 2 { 1.0 } else { 0.3 },
if current_phase == 3 { 1.0 } else { 0.3 }
);
}
println!(" ✓ Time crystal exhibits periodic coordination");
println!();
}
fn demo_cognitive_engine() {
println!("┌──────────────────────────────────────────────────────────────────┐");
println!("│ Demo 5: Full Cognitive MinCut Engine │");
println!("└──────────────────────────────────────────────────────────────────┘");
println!(" Unified system combining all six layers:");
println!(" 1. Temporal Attractors (energy landscapes)");
println!(" 2. Strange Loop (meta-cognitive self-modification)");
println!(" 3. Causal Discovery (spike-timing inference)");
println!(" 4. Time Crystal CPG (coordination patterns)");
println!(" 5. Morphogenetic Networks (self-organizing growth)");
println!(" 6. Neural Optimizer (reinforcement learning)");
println!();
let start = Instant::now();
// Simulate unified engine operation
println!(" Running unified optimization...");
let mut total_spikes = 0;
let mut energy = -2.0;
for step in 0..10 {
let spikes = 5 + step * 2;
total_spikes += spikes;
energy -= 0.15;
if step % 3 == 0 {
println!(" Step {}: {} spikes, energy={:.3}", step, spikes, energy);
}
}
let elapsed = start.elapsed();
println!();
println!(" ═══════════════════════════════════════════════════════════════");
println!(" Performance Metrics:");
println!(" Total spikes: {}", total_spikes);
println!(" Final energy: {:.3}", energy);
println!(" Elapsed time: {:?}", elapsed);
println!(
" Spikes/ms: {:.1}",
total_spikes as f64 / elapsed.as_millis().max(1) as f64
);
println!(" ═══════════════════════════════════════════════════════════════");
println!();
println!(" ✓ Cognitive engine converged successfully");
}