pub struct Random { /* private fields */ }Expand description
Random sparse wiring structure (unstructured sparsity).
Unlike NCP which has structured 4-layer connectivity, Random wiring
simply removes a fraction of connections at random. This provides:
- Unstructured sparsity: No layer hierarchy
- Ablation baseline: Compare against structured sparsity
- Parameter reduction: Fewer synapses than fully-connected
§When to Use
- Ablation studies: Test if NCP’s structure matters vs just sparsity
- Research: Compare structured vs unstructured sparse networks
- Simple sparse networks: When you don’t need biological structure
§Example
use ncps::wirings::{Random, Wiring};
// Create random wiring with 50% sparsity
let mut wiring = Random::new(
32, // units
Some(8), // output_dim
0.5, // sparsity_level (50% connections removed)
42, // seed
);
wiring.build(16);
// Approximately half the possible synapses exist
let max_synapses = 32 * 32; // 1024
let actual = wiring.synapse_count();
// actual ≈ 512 (with some randomness)§Sparsity Level
The sparsity_level parameter controls what fraction of connections to remove:
sparsity_level | Connections | Effect |
|---|---|---|
| 0.0 | 100% (dense) | Same as FullyConnected |
| 0.5 | 50% | Moderate sparsity |
| 0.9 | 10% | Very sparse |
§Comparison with NCP
| Aspect | Random | NCP |
|---|---|---|
| Structure | None | 4-layer biological |
| Interpretability | Low | High |
| Information flow | Uncontrolled | Directed |
| Use case | Ablation | Production |
Implementations§
Trait Implementations§
Source§impl Wiring for Random
impl Wiring for Random
Source§fn units(&self) -> usize
fn units(&self) -> usize
Returns the total number of neurons (hidden units) in this wiring. Read more
Source§fn input_dim(&self) -> Option<usize>
fn input_dim(&self) -> Option<usize>
Returns the input dimension (number of input features), or
None if not yet built. Read moreSource§fn output_dim(&self) -> Option<usize>
fn output_dim(&self) -> Option<usize>
Returns the output dimension (number of motor neurons). Read more
Source§fn build(&mut self, input_dim: usize)
fn build(&mut self, input_dim: usize)
Builds the wiring by setting the input dimension and creating sensory connections. Read more
Source§fn adjacency_matrix(&self) -> &Array2<i32>
fn adjacency_matrix(&self) -> &Array2<i32>
Returns the internal adjacency matrix representing neuron-to-neuron synapses. Read more
Source§fn sensory_adjacency_matrix(&self) -> Option<&Array2<i32>>
fn sensory_adjacency_matrix(&self) -> Option<&Array2<i32>>
Returns the sensory adjacency matrix (input-to-neuron connections). Read more
Source§fn add_synapse(&mut self, src: usize, dest: usize, polarity: i32)
fn add_synapse(&mut self, src: usize, dest: usize, polarity: i32)
Adds or modifies an internal synapse between two neurons. Read more
Source§fn add_sensory_synapse(&mut self, src: usize, dest: usize, polarity: i32)
fn add_sensory_synapse(&mut self, src: usize, dest: usize, polarity: i32)
Adds or modifies a sensory synapse from an input feature to a neuron. Read more
Source§fn get_config(&self) -> WiringConfig
fn get_config(&self) -> WiringConfig
Creates a serializable configuration for this wiring. Read more
Source§fn num_layers(&self) -> usize
fn num_layers(&self) -> usize
Returns the number of logical layers in this wiring. Read more
Source§fn get_neurons_of_layer(&self, layer_id: usize) -> Vec<usize>
fn get_neurons_of_layer(&self, layer_id: usize) -> Vec<usize>
Returns the neuron IDs belonging to a specific layer. Read more
Source§fn is_built(&self) -> bool
fn is_built(&self) -> bool
Returns
true if the wiring has been built (input dimension is set). Read moreSource§fn get_type_of_neuron(&self, neuron_id: usize) -> &'static str
fn get_type_of_neuron(&self, neuron_id: usize) -> &'static str
Returns the type of a neuron by its ID. Read more
Source§fn erev_initializer(&self) -> Array2<i32>
fn erev_initializer(&self) -> Array2<i32>
Returns the reversal potential initializer (same as adjacency matrix). Read more
Source§fn sensory_erev_initializer(&self) -> Option<Array2<i32>>
fn sensory_erev_initializer(&self) -> Option<Array2<i32>>
Returns the sensory reversal potential initializer. Read more
Source§fn synapse_count(&self) -> usize
fn synapse_count(&self) -> usize
Returns the total number of internal synapses (non-zero entries in adjacency matrix). Read more
Source§fn sensory_synapse_count(&self) -> usize
fn sensory_synapse_count(&self) -> usize
Returns the total number of sensory synapses (input-to-neuron connections). Read more
Source§fn input_required(&self) -> bool
fn input_required(&self) -> bool
Returns
true if this wiring requires external input (has sensory connections). Read moreAuto Trait Implementations§
impl Freeze for Random
impl RefUnwindSafe for Random
impl Send for Random
impl Sync for Random
impl Unpin for Random
impl UnwindSafe for Random
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 more