WilsonCowanThreePopulationStep#

class brainmass.WilsonCowanThreePopulationStep(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, tau_M=Quantity(2., 'ms'), a_M=1.0, theta_M=3.5, wEE=12.0, wIE=4.0, wEI=13.0, wII=11.0, wME=8.0, wMI=6.0, wEM=4.0, wIM=2.0, wMM=2.0, r=1.0, noise_E=None, noise_I=None, noise_M=None, rE_init=Constant(value=0.0), rI_init=Constant(value=0.0), rM_init=Constant(value=0.0), method='exp_euler')#

Three-population Wilson-Cowan model with modulatory neurons.

This variant extends the standard Wilson-Cowan model to include a third modulatory (M) population that can represent neuromodulation, attention, arousal, or VIP interneurons. The modulatory population receives input from E and I, and projects back to modulate both populations.

Parameters:
  • in_size (int | Sequence[int] | integer | Sequence[integer]) – Spatial shape of each population (E, I, M). 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. Default is 1. * u.ms.

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

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

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

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

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

  • tau_M (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Modulatory time constant with unit of time. Typically slower than E/I. Default is 2. * u.ms.

  • a_M (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Modulatory gain (dimensionless). Default is 1..

  • theta_M (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Modulatory threshold (dimensionless). Default is 3.5.

  • wEE (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – E→E coupling strength. Default is 12..

  • wIE (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – E→I coupling strength. Default is 4..

  • wEI (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – I→E coupling strength. Default is 13..

  • wII (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – I→I coupling strength. Default is 11..

  • wME (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – E→M coupling strength. Default is 8..

  • wMI (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – I→M coupling strength. Default is 6..

  • wEM (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – M→E coupling strength (modulatory excitation). Default is 4..

  • wIM (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – M→I coupling strength (modulatory excitation). Default is 2..

  • wMM (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – M→M self-coupling strength. Default is 2..

  • r (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param) – Refractory parameter for all populations. Default is 1..

  • noise_E (Noise) – Additive noise for excitatory population. Default is None.

  • noise_I (Noise) – Additive noise for inhibitory population. Default is None.

  • noise_M (Noise) – Additive noise for modulatory population. Default is None.

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

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

  • rM_init (Callable) – Initializer for rM. Default is braintools.init.Constant(0.0).

  • method (str) – Numerical integration method. Default is 'exp_euler'.

Return type:

Any

rE#

Excitatory population activity (dimensionless).

Type:

brainstate.HiddenState

rI#

Inhibitory population activity (dimensionless).

Type:

brainstate.HiddenState

rM#

Modulatory population activity (dimensionless).

Type:

brainstate.HiddenState

Notes

The continuous-time three-population Wilson-Cowan equations are

\[\tau_E \frac{dr_E}{dt} = -r_E(t) + \bigl[1 - r\, r_E(t)\bigr] F_E\bigl(w_{EE} r_E(t) - w_{EI} r_I(t) + w_{EM} r_M(t) + I_E(t)\bigr),\]
\[\tau_I \frac{dr_I}{dt} = -r_I(t) + \bigl[1 - r\, r_I(t)\bigr] F_I\bigl(w_{IE} r_E(t) - w_{II} r_I(t) + w_{IM} r_M(t) + I_I(t)\bigr),\]
\[\tau_M \frac{dr_M}{dt} = -r_M(t) + \bigl[1 - r\, r_M(t)\bigr] F_M\bigl(w_{ME} r_E(t) - w_{MI} r_I(t) + w_{MM} r_M(t) + I_M(t)\bigr),\]

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, M\}.\]

The modulatory population provides excitatory modulation to both E and I populations, modeling attention, arousal, or neuromodulatory effects.

References

Examples

>>> import brainmass
>>> import brainunit as u
>>> model = brainmass.WilsonCowanThreePopulationStep(
...     in_size=100,
...     tau_M=2.*u.ms,
...     wEM=4.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, tau_M=Quantity(2., 'ms'), a_M=1.0, theta_M=3.5, wEE=12.0, wIE=4.0, wEI=13.0, wII=11.0, wME=8.0, wMI=6.0, wEM=4.0, wIM=2.0, wMM=2.0, r=1.0, noise_E=None, noise_I=None, noise_M=None, rE_init=Constant(value=0.0), rI_init=Constant(value=0.0), rM_init=Constant(value=0.0), method='exp_euler')[source]#
Parameters:
drE(rE, rI, rM, ext)[source]#

Right-hand side for the excitatory population.

Must be implemented by subclasses.

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

Right-hand side for the inhibitory population.

Must be implemented by subclasses.

drM(rM, rE, rI, ext)[source]#

Right-hand side for the modulatory population.

Must be implemented by subclasses.