Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
"""
neuromodulated_stdp - Synapse model for spike-timing dependent plasticity modulated by a neurotransmitter such as dopamine
##########################################################################################################################
Description
+++++++++++
stdp_dopamine_synapse is a connection to create synapses with
dopamine-modulated spike-timing dependent plasticity (used as a
benchmark model in [1]_, based on [2]_). The dopaminergic signal is a
low-pass filtered version of the spike rate of a user-specific pool
of neurons. The spikes emitted by the pool of dopamine neurons are
delivered to the synapse via the assigned volume transmitter. The
dopaminergic dynamics is calculated in the synapse itself.
References
++++++++++
.. [1] Potjans W, Morrison A, Diesmann M (2010). Enabling functional neural
circuit simulations with distributed computing of neuromodulated
plasticity. Frontiers in Computational Neuroscience, 4:141.
DOI: https://doi.org/10.3389/fncom.2010.00141
.. [2] Izhikevich EM (2007). Solving the distal reward problem through linkage
of STDP and dopamine signaling. Cerebral Cortex, 17(10):2443-2452.
DOI: https://doi.org/10.1093/cercor/bhl152
"""
synapse neuromodulated_stdp:
state:
w real = 1.
n real = 0. # Neuromodulator concentration
c real = 0. # Eligibility trace
pre_tr real = 0.
post_tr real = 0.
end
parameters:
the_delay ms = 1 ms @nest::delay # !!! cannot have a variable called "delay"
tau_tr_pre ms = 20 ms # STDP time constant for weight changes caused by pre-before-post spike pairings.
tau_tr_post ms = 20 ms # STDP time constant for weight changes caused by post-before-pre spike pairings.
tau_c ms = 1000 ms # Time constant of eligibility trace
tau_n ms = 200 ms # Time constant of dopaminergic trace
b real = 0. # Dopaminergic baseline concentration
Wmax real = 200. # Maximal synaptic weight
Wmin real = 0. # Minimal synaptic weight
A_plus real = 1. # Multiplier applied to weight changes caused by pre-before-post spike pairings. If b (dopamine baseline concentration) is zero, then A_plus is simply the multiplier for facilitation (as in the stdp_synapse model). If b is not zero, then A_plus will be the multiplier for facilitation only if n - b is positive, where n is the instantenous dopamine concentration in the volume transmitter. If n - b is negative, A_plus will be the multiplier for depression.
A_minus real = 1.5 # Multiplier applied to weight changes caused by post-before-pre spike pairings. If b (dopamine baseline concentration) is zero, then A_minus is simply the multiplier for depression (as in the stdp_synapse model). If b is not zero, then A_minus will be the multiplier for depression only if n - b is positive, where n is the instantenous dopamine concentration in the volume transmitter. If n - b is negative, A_minus will be the multiplier for facilitation.
end
equations:
pre_tr' = -pre_tr / tau_tr_pre
post_tr' = -post_tr / tau_tr_post
end
internals:
tau_s 1/ms = (tau_c + tau_n) / (tau_c * tau_n)
end
input:
pre_spikes nS <- spike
post_spikes nS <- spike
mod_spikes real <- spike
end
output: spike
onReceive(mod_spikes):
n += 1. / tau_n
end
onReceive(post_spikes):
post_tr += 1.
# facilitation
c += A_plus * pre_tr
end
onReceive(pre_spikes):
pre_tr += 1.
# depression
c -= A_minus * post_tr
# deliver spike to postsynaptic partner
deliver_spike(w, the_delay)
end
# update from time t to t + resolution()
update:
# resolution() returns the timestep to be made (in units of time)
# the sequence here matters: the update step for w requires the "old" values of c and n
w -= c * ( n / tau_s * expm1( -tau_s * resolution() ) \
- b * tau_c * expm1( -resolution() / tau_c ))
c = c * exp(-resolution() / tau_c)
n = n * exp(-resolution() / tau_n)
end
end