Description of problem
Hello, I am trying a new plasticity mechanism that depends on the activity of the presynaptic neuron (rho_PF) and postsynaptic neuron (rho_PC). The change in weights depends on a sliding threshold based on the postsynaptic neuron’s activity. However, the equation I’m trying to use to keep my weight changes bounded does not work. I get an error that says Syntax error: Value thresh_M is not constant.
Minimal code to reproduce problem
eqs_Copy = '''
I : amp # copy of the noise current
rho_PF : Hz
rho_PC : Hz
weight : 1 (constant)
new_weight = weight + delta_weight_CS: 1
ddelta_weight_BCM/dt = ((rho_PC*(rho_PC-thresh_M)*e**(-((thresh_M-500*Hz)/(250*(thresh_M-250*Hz)))*rho_PC))/thresh_M)*rho_PF*msecond : 1
phi = (rho_PC*(rho_PC-thresh_M)*e**(-((thresh_M-500*Hz)/(250*(thresh_M-250*Hz)))*rho_PC))/thresh_M : Hz
dthresh_M/dt = rho_PC**2 - thresh_M/tau_thresh_M : Hz
conn_N_PC = NeuronGroup(N_Copy, eqs_Copy, method='euler',dt=dt)
conn_N_PC.weight = Noise_PC_Synapse_Weights
mon_N_PC = StateMonitor(conn_N_PC , ['rho_PF','rho_PC','phi','thresh_M','delta_weight_CS','new_weight','delta_weight_BCM'], record=conn_N_PC_record, dt=dt_rec)
What you have aready tried
I understand the problem comes from the (250-theta) part as theta could reach 250 and make it go to zero. However, I don’t understand what the error truly means.
Expected output (if relevant)
Actual output (if relevant)
Full traceback of error (if relevant)
Hi @eliasmateo95. This is less obvious than what it should be, but first the reason for the error: in this equation
the exponent of e is wrong, you probably wanted to close the parentheses before multiplying it with
rho_PC (or divide
thresh_M as part of the argument)? As it is written now, the exponent has dimensions of 1/time, and you cannot take e to the power of a value that is not dimensionless.
You’d actually get a better error message if you used
exp(...) instead of
Argument number 1 for function exp does not have the correct units. Expression '(- ((thresh_M - (500 * Hz)) / (250 * (thresh_M - (250 * Hz))))) * rho_PC' has units (s^-1), but should be (1).
The reason you are getting this “value is not constant” error is that the code is going through the general pathway for x^y, trying to figure out the value of y (since e.g. something like
v**c would have a different dimensionality depending on the value of the constant
c). In your case, y is not a fixed value, since it refers to the variables
rho_PC. This is why it complains about a value that isn’t constant. If y is dimensionless (as it should be), then it shouldn’t matter – we should change the error handling here so that it doesn’t hide the real issue.
Hope that makes things clear!