mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-27 17:23:34 +00:00
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>
219 lines
9.7 KiB
Rust
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");
|
|
}
|