neuromodulated_stdp
neuromodulated_stdp  Synapse model for spiketiming dependent plasticity modulated by a neurotransmitter such as dopamine
Description
stdp_dopamine_synapse is a connection to create synapses with dopaminemodulated spiketiming dependent plasticity (used as a benchmark model in [1]_, based on [2]_). The dopaminergic signal is a lowpass filtered version of the spike rate of a userspecific 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.
Parameters
Name 
Physical unit 
Default value 
Description 

the_delay 
ms 
1ms 
!!! cannot have a variable called “delay” 
tau_tr_pre 
ms 
20ms 
STDP time constant for weight changes caused by prebeforepost spike pairings. 
tau_tr_post 
ms 
20ms 
STDP time constant for weight changes caused by postbeforepre spike pairings. 
tau_c 
ms 
1000ms 
Time constant of eligibility trace 
tau_n 
ms 
200ms 
Time constant of dopaminergic trace 
b 
real 
0.0 
Dopaminergic baseline concentration 
Wmax 
real 
200.0 
Maximal synaptic weight 
Wmin 
real 
0.0 
Minimal synaptic weight 
A_plus 
real 
1.0 
Multiplier applied to weight changes caused by prebeforepost 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 postbeforepre 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. 
State variables
Name 
Physical unit 
Default value 
Description 

w 
real 
1.0 

n 
real 
0.0 
Neuromodulator concentration 
c 
real 
0.0 
Eligibility trace 
pre_tr 
real 
0.0 

post_tr 
real 
0.0 
Source code
synapse neuromodulated_stdp:
state:
w real = 1.0
n real = 0.0 # Neuromodulator concentration
c real = 0.0 # Eligibility trace
pre_tr real = 0.0
post_tr real = 0.0
end
parameters:
the_delay ms = 1ms # !!! cannot have a variable called "delay"
tau_tr_pre ms = 20ms # STDP time constant for weight changes caused by prebeforepost spike pairings.
tau_tr_post ms = 20ms # STDP time constant for weight changes caused by postbeforepre spike pairings.
tau_c ms = 1000ms # Time constant of eligibility trace
tau_n ms = 200ms # Time constant of dopaminergic trace
b real = 0.0 # Dopaminergic baseline concentration
Wmax real = 200.0 # Maximal synaptic weight
Wmin real = 0.0 # Minimal synaptic weight
A_plus real = 1.0 # Multiplier applied to weight changes caused by prebeforepost 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 postbeforepre 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.0 / tau_n
end
onReceive(post_spikes):
post_tr += 1.0
# facilitation
c += A_plus * pre_tr
end
onReceive(pre_spikes):
pre_tr += 1.0
# 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