CoombesByrneStep#
- class brainmass.CoombesByrneStep(in_size, Delta=1.0, eta=2.0, k=1.0, v_syn=-4.0, init_r=Constant(value=0.1), init_v=Constant(value=0.0), noise_r=None, noise_v=None, method='exp_euler')#
Coombes-Byrne next-generation neural mass model (2D).
Exact mean-field reduction of an infinite population of all-to-all coupled quadratic-integrate-and-fire (QIF) / \(\theta\)-neurons with conductance-based synapses, obtained through the Ott-Antonsen ansatz [1]. Like the Montbrio-Pazo-Roxin model (
MontbrioPazoRoxinStep) it tracks the population firing rate \(r(t)\) and mean membrane potential \(v(t)\), but it adds a synaptic conductance proportional to the firing rate, \(g = \kappa\,\pi\,r\), which couples reciprocally into both equations:\[\begin{split}\begin{aligned} \dot r(t) &= \frac{\Delta}{\pi} + 2\,v\,r - g\,r, \\ \dot v(t) &= v^2 - (\pi r)^2 + \eta + (v_{\mathrm{syn}} - v)\,g + I(t), \end{aligned}\end{split}\]with \(g = \kappa\,\pi\,r\). Here \(\Delta\) is the half-width at half-maximum of the Lorentzian background-excitability distribution, \(\eta\) the mean excitability, \(\kappa\) the synaptic conductance scale, \(v_{\mathrm{syn}}\) the synaptic reversal potential, and \(I(t)\) an external/coupling input to the mean potential.
The conductance term makes the rate equation quadratically damped in \(r\) (the \(-g\,r = -\kappa\pi r^2\) term), giving richer dynamics than the standard QIF mean field.
- Parameters:
in_size (
int|Sequence[int] |integer|Sequence[integer]) – Spatial shape of the population. Anintor tuple ofint; all parameters are broadcastable to this shape.Delta (
Callable|Array|ndarray|bool|number|bool|int|float|complex|Quantity|Param) – HWHM of the Lorentzian excitability distribution (dimensionless). Default is1.0.eta (
Callable|Array|ndarray|bool|number|bool|int|float|complex|Quantity|Param) – Mean background excitability (dimensionless). Default is2.0.k (
Callable|Array|ndarray|bool|number|bool|int|float|complex|Quantity|Param) – Synaptic conductance scaling \(\kappa\) (dimensionless). Settingk = 0removes the conductance and recovers the Montbrio-Pazo-Roxin field withJ = 0. Default is1.0.v_syn (
Callable|Array|ndarray|bool|number|bool|int|float|complex|Quantity|Param) – Synaptic reversal potential \(v_{\mathrm{syn}}\) (dimensionless). Default is-4.0.init_r (
Callable) – Initializer for the firing-rate stater. Default isbraintools.init.Constant(0.1).init_v (
Callable) – Initializer for the mean-potential statev. Default isbraintools.init.Constant(0.0).noise_r (
Noise) – Additive noise process for the rate dynamics. If provided, its output is added tor_inpat each update. Default isNone.noise_v (
Noise) – Additive noise process for the potential dynamics. If provided, its output is added tov_inpat each update. Default isNone.method (
str) – Integration method. Either'exp_euler'(default) or any method inbraintools.quad(e.g.'rk4','rk2','heun').
- Return type:
Any
- r#
Population firing rate (dimensionless). Shape
(batch?,) + in_size.- Type:
brainstate.HiddenState
- v#
Population mean membrane potential (dimensionless).
- Type:
brainstate.HiddenState
Notes
State variables are dimensionless; the per-variable right-hand sides returned by
dr()/dv()carry unit1/msso an exponential-Euler step withdtin milliseconds is consistent (the same convention used byFitzHughNagumoStep).Relationship to Montbrio-Pazo-Roxin. With \(\kappa = 0\) the conductance \(g\) vanishes and the equations collapse to \(\dot r = \Delta/\pi + 2vr\), \(\dot v = v^2 - (\pi r)^2 + \eta + I\), i.e.
MontbrioPazoRoxinStepwith recurrent couplingJ = 0(at unit time constant). The conductance regime (k > 0) is what distinguishes the next-generation mass.The model can equivalently be written in the complex Kuramoto-Daido form via \(Z = (1 - \bar W)/(1 + \bar W)\) with \(\bar W = \pi r - i v\); this implementation uses the real
(r, v)coordinates.
References
Examples
>>> import brainmass >>> import brainstate >>> import brainunit as u >>> model = brainmass.CoombesByrneStep(in_size=1) >>> _ = brainstate.nn.init_all_states(model) >>> with brainstate.environ.context(dt=0.1 * u.ms): ... r = model.update() >>> r.shape (1,)
- __init__(in_size, Delta=1.0, eta=2.0, k=1.0, v_syn=-4.0, init_r=Constant(value=0.1), init_v=Constant(value=0.0), noise_r=None, noise_v=None, method='exp_euler')[source]#
- Parameters:
Delta (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param)
eta (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param)
k (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param)
v_syn (Callable | Array | ndarray | bool | number | bool | int | float | complex | Quantity | Param)
init_r (Callable)
init_v (Callable)
noise_r (Noise)
noise_v (Noise)
method (str)
- dr(r, v, r_ext)[source]#
Right-hand side for the firing rate
r.- Parameters:
r (array-like) – Current firing rate (dimensionless).
v (array-like) – Current mean membrane potential (dimensionless), broadcastable to
r.r_ext (array-like or scalar) – External input to the rate equation (includes noise if enabled).
- Returns:
Time derivative
dr/dtwith unit1/ms.- Return type:
array-like
- dv(v, r, v_ext)[source]#
Right-hand side for the mean membrane potential
v.- Parameters:
v (array-like) – Current mean membrane potential (dimensionless).
r (array-like) – Current firing rate (dimensionless), broadcastable to
v.v_ext (array-like or scalar) – External input to the potential equation (includes noise/coupling if enabled).
- Returns:
Time derivative
dv/dtwith unit1/ms.- Return type:
array-like
- init_state(batch_size=None, **kwargs)[source]#
Allocate firing-rate and mean-potential states.
- Parameters:
batch_size (int or None, optional) – Optional leading batch dimension. If
None, no batch dimension is used. Default isNone.
- update(r_inp=None, v_inp=None)[source]#
Advance the population by one time step.
- Parameters:
r_inp (array-like or scalar or None, optional) – External input to the rate equation. If
None, treated as zero. Ifnoise_ris set, its output is added. Default isNone.v_inp (array-like or scalar or None, optional) – External input to the potential equation (the coupling port). If
None, treated as zero. Ifnoise_vis set, its output is added. Default isNone.
- Returns:
The updated firing rate
r(the coupling observable), same shape as the internal state.- Return type:
array-like