ModularRandom

ModularRandom#

class braintools.conn.ModularRandom(n_modules, intra_prob=0.3, inter_prob=0.01, weight=None, delay=None, **kwargs)#

Modular network with intra-module and inter-module random connectivity.

This class creates a modular network structure where neurons are divided into distinct modules (communities) with different connection probabilities within and between modules. Intra-module connections (within the same module) typically have higher probability than inter-module connections (between different modules), creating a community structure.

Modular organization is a fundamental feature of brain networks, observed across multiple scales from cortical columns to large-scale brain areas. This topology enables specialized local processing within modules while maintaining global integration through sparse inter-module connections. It balances functional segregation with integration, supporting both specialized and distributed information processing.

Parameters:
  • n_modules (int) – Number of modules (communities) to divide the network into. Neurons are distributed approximately evenly across modules, with any remainder assigned to the last module.

  • intra_prob (float) – Connection probability for neuron pairs within the same module. Valid range is [0, 1]. Higher values create denser intra-module connectivity and stronger community structure.

  • inter_prob (float) – Connection probability for neuron pairs in different modules. Valid range is [0, 1]. Typically much smaller than intra_prob to create distinct modules. The ratio intra_prob/inter_prob determines the strength of modularity.

  • weight (Initialization | float | int | ndarray | Array | Quantity | None) – Weight initialization for all connections (both intra and inter-module). Can be a scalar value, array, or an Initializer instance for more complex initialization patterns. If None, no weights are generated.

  • delay (Initialization | float | int | ndarray | Array | Quantity | None) – Delay initialization for all connections (both intra and inter-module). Can be a scalar value, array, or an Initializer instance for more complex initialization patterns. If None, no delays are generated.

  • **kwargs – Additional keyword arguments passed to the parent PointConnectivity class, such as ‘seed’ for random number generation.

Notes

  • This connectivity pattern requires pre_size == post_size (recurrent connectivity)

  • Neurons are assigned to modules in sequential order (first n/m neurons to module 0, etc.)

  • Self-connections are automatically excluded

  • The same weight and delay initialization is used for all connections

  • For module-specific connectivity patterns, use ModularGeneral instead

  • Expected number of connections: n² * ((intra_prob + (n_modules-1)*inter_prob) / n_modules)

  • Modularity strength can be quantified by the Q-statistic (Newman, 2006)

References

See also

ModularGeneral

Modular network with custom connectivity patterns per module

Examples

Create a modular network with 5 modules:

>>> import brainunit as u
>>> from braintools.conn import ModularRandom
>>> mod = ModularRandom(n_modules=5, intra_prob=0.3, inter_prob=0.01)
>>> result = mod(pre_size=1000, post_size=1000)

Create a strongly modular network with sparse inter-module connections:

>>> mod = ModularRandom(
...     n_modules=10,
...     intra_prob=0.4,
...     inter_prob=0.005,
...     weight=1.0 * u.nS,
...     delay=2.0 * u.ms
... )
>>> result = mod(pre_size=500, post_size=500)

Create a weakly modular network:

>>> mod = ModularRandom(n_modules=3, intra_prob=0.2, inter_prob=0.1)
>>> result = mod(pre_size=1000, post_size=1000)

Use with custom initializers:

>>> from braintools.init import Normal
>>> mod = ModularRandom(
...     n_modules=8,
...     intra_prob=0.25,
...     inter_prob=0.02,
...     weight=Normal(mean=1.0, std=0.1)
... )
>>> result = mod(pre_size=800, post_size=800)
generate(**kwargs)[source]#

Generate modular network.

Return type:

ConnectionResult