(Brunel & Hakim, 1999) Fast Global Oscillation
Implementation of the paper:
Brunel, Nicolas, and Vincent Hakim. “Fast global oscillations in networks of integrate-and-fire neurons with low firing rates.” Neural computation 11.7 (1999): 1621-1671.
Author: Chaoming Wang
[1]:
import brainpy as bp
import brainpy.math as bm
bm.set_platform('cpu')
[6]:
bp.__version__
[6]:
'2.4.3'
[2]:
Vr = 10. # mV
theta = 20. # mV
tau = 20. # ms
delta = 2. # ms
taurefr = 2. # ms
duration = 100. # ms
J = .1 # mV
muext = 25. # mV
sigmaext = 1. # mV
C = 1000
N = 5000
sparseness = float(C) / N
[3]:
class LIF(bp.NeuGroup):
def __init__(self, size, **kwargs):
super(LIF, self).__init__(size, **kwargs)
# variables
self.V = bm.Variable(bm.ones(self.num) * Vr)
self.t_last_spike = bm.Variable(-1e7 * bm.ones(self.num))
self.spike = bm.Variable(bm.zeros(self.num, dtype=bool))
self.refractory = bm.Variable(bm.zeros(self.num, dtype=bool))
# integration functions
fv = lambda V, t: (-V + muext) / tau
gv = lambda V, t: sigmaext / bm.sqrt(tau)
self.int_v = bp.sdeint(f=fv, g=gv)
def update(self):
t = bp.share['t']
dt = bp.share['dt']
V = self.int_v(self.V, t, dt)
in_ref = (t - self.t_last_spike) < taurefr
V = bm.where(in_ref, self.V, V)
spike = V >= theta
self.spike.value = spike
self.V.value = bm.where(spike, Vr, V)
self.t_last_spike.value = bm.where(spike, t, self.t_last_spike)
self.refractory.value = bm.logical_or(in_ref, spike)
[4]:
group = LIF(N)
syn = bp.synapses.Delta(group, group,
conn=bp.conn.FixedProb(sparseness),
delay_step=int(delta / bm.get_dt()),
post_ref_key='refractory',
output=bp.synouts.CUBA(target_var='V'),
g_max=-J)
net = bp.Network(syn, group=group)
[5]:
runner = bp.DSRunner(net, monitors=['group.spike'])
runner.run(duration)
bp.visualize.raster_plot(runner.mon.ts, runner.mon['group.spike'],
xlim=(0, duration), show=True)
