WilsonCowanDivisiveInputStep#

class brainmass.WilsonCowanDivisiveInputStep(in_size, tau_E=Quantity(1., 'ms'), a_E=1.2, theta_E=2.8, tau_I=Quantity(1., 'ms'), a_I=1.0, theta_I=4.0, wEE=6.0, wIE=2.0, wEI=6.5, wII=5.5, r=1.0, sigma_E=1.0, sigma_I=1.0, noise_E=None, noise_I=None, rE_init=Constant(value=0.0), rI_init=Constant(value=0.0), method='exp_euler')#

Wilson-Cowan neural mass model with divisive normalization (input normalization).

This variant implements divisive inhibition applied to the input before the transfer function. Unlike gain modulation, here the excitatory input is divided by inhibition before being passed through the transfer function. This provides a simpler mathematical formulation while still implementing contrast normalization.

Parameters:
  • in_size (int | Sequence[int] | integer | Sequence[integer]) – Spatial shape of each population (E and I). Can be an int, a tuple of ints, or any size compatible with brainstate.

  • tau_E (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Excitatory time constant with unit of time (e.g., 1. * u.ms). Broadcastable to in_size. Default is 1. * u.ms.

  • a_E (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Excitatory gain (dimensionless). Broadcastable to in_size. Default is 1.2.

  • theta_E (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Excitatory threshold (dimensionless). Broadcastable to in_size. Default is 2.8.

  • tau_I (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Inhibitory time constant with unit of time (e.g., 1. * u.ms). Broadcastable to in_size. Default is 1. * u.ms.

  • a_I (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Inhibitory gain (dimensionless). Broadcastable to in_size. Default is 1..

  • theta_I (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Inhibitory threshold (dimensionless). Broadcastable to in_size. Default is 4.0.

  • wEE (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – E→E coupling strength (dimensionless). Broadcastable to in_size. Default is 6. (reduced from standard model for stability).

  • wIE (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – E→I coupling strength (dimensionless). Broadcastable to in_size. Default is 2. (reduced from standard model for stability).

  • wEI (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – I→E coupling strength (dimensionless). Broadcastable to in_size. Default is 6.5 (reduced from standard model for stability).

  • wII (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – I→I coupling strength (dimensionless). Broadcastable to in_size. Default is 5.5 (reduced from standard model for stability).

  • r (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Refractory parameter (dimensionless) that limits maximum activation. Broadcastable to in_size. Default is 1..

  • sigma_E (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Excitatory semisaturation constant (dimensionless) that prevents division by zero and controls the strength of divisive normalization. Broadcastable to in_size. Default is 1..

  • sigma_I (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Inhibitory semisaturation constant (dimensionless) that prevents division by zero and controls the strength of divisive normalization. Broadcastable to in_size. Default is 1..

  • noise_E (Noise) – Additive noise process for the excitatory population. If provided, its output is added to rE_inp at each update. Default is None.

  • noise_I (Noise) – Additive noise process for the inhibitory population. If provided, its output is added to rI_inp at each update. Default is None.

  • rE_init (Callable) – Initializer for the excitatory state rE. Default is braintools.init.Constant(0.0).

  • rI_init (Callable) – Initializer for the inhibitory state rI. Default is braintools.init.Constant(0.0).

  • method (str) – The numerical integration method to use. One of 'exp_euler', 'euler', 'rk2', or 'rk4', that is implemented in braintools.quad. Default is 'exp_euler'.

Return type:

Any

rE#

Excitatory population activity (dimensionless). Shape equals (batch?,) + in_size after init_state.

Type:

brainstate.HiddenState

rI#

Inhibitory population activity (dimensionless). Shape equals (batch?,) + in_size after init_state.

Type:

brainstate.HiddenState

Notes

The continuous-time Wilson-Cowan equations with divisive input normalization are

\[\tau_E \frac{dr_E}{dt} = -r_E(t) + \bigl[1 - r\, r_E(t)\bigr] F_E\left(\frac{w_{EE} r_E(t)}{\sigma_E + w_{EI} r_I(t)} + I_E(t)\right),\]
\[\tau_I \frac{dr_I}{dt} = -r_I(t) + \bigl[1 - r\, r_I(t)\bigr] F_I\left(\frac{w_{IE} r_E(t)}{\sigma_I + w_{II} r_I(t)} + I_I(t)\right),\]

with the sigmoidal transfer function

\[F_j(x) = \frac{1}{1 + e^{-a_j (x - \theta_j)}} - \frac{1}{1 + e^{a_j \theta_j}},\quad j \in \{E, I\}.\]

Divisive normalization is applied to the excitatory input before the transfer function. This is mathematically simpler than gain modulation and still implements contrast normalization observed in neural systems.

References

Examples

>>> import brainmass
>>> import brainunit as u
>>> model = brainmass.WilsonCowanDivisiveInputStep(
...     in_size=100,
...     tau_E=1.*u.ms,
...     sigma_E=1.0,
...     sigma_I=1.0
... )
__init__(in_size, tau_E=Quantity(1., 'ms'), a_E=1.2, theta_E=2.8, tau_I=Quantity(1., 'ms'), a_I=1.0, theta_I=4.0, wEE=6.0, wIE=2.0, wEI=6.5, wII=5.5, r=1.0, sigma_E=1.0, sigma_I=1.0, noise_E=None, noise_I=None, rE_init=Constant(value=0.0), rI_init=Constant(value=0.0), method='exp_euler')[source]#
Parameters:
drE(rE, rI, ext)[source]#

Right-hand side for the excitatory population.

Must be implemented by subclasses.

Parameters:
  • rE (array-like) – Excitatory activity (dimensionless).

  • rI (array-like) – Inhibitory activity (dimensionless), broadcastable to rE.

  • ext (array-like or scalar) – External input to E.

Returns:

Time derivative drE/dt with unit of 1/time.

Return type:

array-like

drI(rI, rE, ext)[source]#

Right-hand side for the inhibitory population.

Must be implemented by subclasses.

Parameters:
  • rI (array-like) – Inhibitory activity (dimensionless).

  • rE (array-like) – Excitatory activity (dimensionless), broadcastable to rI.

  • ext (array-like or scalar) – External input to I.

Returns:

Time derivative drI/dt with unit of 1/time.

Return type:

array-like