HalfProjAlignPost#
- class brainpy.dyn.HalfProjAlignPost(comm, syn, out, post, out_label=None, name=None, mode=None)[source]#
Defining the half-part of synaptic projection with the align-post reduction.
The
half-part
means that the model only needs to provide half information needed for a projection, includingcomm
->syn
->out
->post
. Therefore, the model’supdate
function needs the manual providing of the spiking input.The
align-post
means that the synaptic variables have the same dimension as the post-synaptic neuron group.All align-post projection models prefer to use the event-driven computation mode. This means that the
comm
model should be the event-driven model.To simulate an E/I balanced network:
class EINet(bp.DynSysGroup): def __init__(self): super().__init__() self.N = bp.dyn.LifRef(4000, V_rest=-60., V_th=-50., V_reset=-60., tau=20., tau_ref=5., V_initializer=bp.init.Normal(-55., 2.)) self.delay = bp.VarDelay(self.N.spike, entries={'I': None}) self.E = bp.dyn.HalfProjAlignPost(comm=bp.dnn.EventJitFPHomoLinear(3200, 4000, prob=0.02, weight=0.6), syn=bp.dyn.Expon(size=4000, tau=5.), out=bp.dyn.COBA(E=0.), post=self.N) self.I = bp.dyn.HalfProjAlignPost(comm=bp.dnn.EventJitFPHomoLinear(800, 4000, prob=0.02, weight=6.7), syn=bp.dyn.Expon(size=4000, tau=10.), out=bp.dyn.COBA(E=-80.), post=self.N) def update(self, input): spk = self.delay.at('I') self.E(spk[:3200]) self.I(spk[3200:]) self.delay(self.N(input)) return self.N.spike.value model = EINet() indices = bm.arange(1000) spks = bm.for_loop(lambda i: model.step_run(i, 20.), indices) bp.visualize.raster_plot(indices, spks, show=True)
- Parameters:
comm (
DynamicalSystem
) – The synaptic communication.syn (
JointType
[DynamicalSystem
,AlignPost
]) – The synaptic dynamics.out (
JointType
[DynamicalSystem
,BindCondData
]) – The synaptic output.post (
DynamicalSystem
) – The post-synaptic neuron group.