BoB robotics
The Brains on Board robotics library
BoBRobotics::GeNNModels::STDPDopamine Class Reference
Inheritance diagram for BoBRobotics::GeNNModels::STDPDopamine:

Public Member Functions

 DECLARE_MODEL (STDPDopamine, 8, 3)
 
 SET_PARAM_NAMES ({ "tauPlus", "tauMinus", "tauC", "tauD", "aPlus", "aMinus", "wMin", "wMax", })
 
 SET_VARS ({ {"g", "scalar"}, {"c", "scalar"}, {"tC", "scalar"}, })
 
 SET_SIM_CODE ("$(addToInSyn, $(g));\n" "// Calculate how much tag has decayed since last update\n" "scalar tagDT = $(t) - $(tC);\n" "scalar tagDecay = exp(-tagDT / $(tauC));\n" "// Calculate how much dopamine has decayed since last update\n" "scalar dopamineDT = $(t) - $(tD);\n" "scalar dopamineDecay = exp(-dopamineDT / $(tauD));\n" "// Calculate offset to integrate over correct area\n" "scalar offset = ($(tC) <= $(tD)) ? exp(-($(tD) - $(tC)) / $(tauC)) : exp(-($(tC) - $(tD)) / $(tauD));\n" "// Update weight and clamp\n" "$(g) += ($(c) * $(d) * $(scale)) * ((tagDecay * dopamineDecay) - offset);\n" "$(g) = max($(wMin), min($(wMax), $(g)));\n" "// Decay tag and apply STDP\n" "scalar newTag = $(c) * tagDecay;\n" "scalar dt = $(t) - $(sT_post);\n" "if (dt > 0) {\n" " scalar timing = exp(-dt / $(tauMinus));\n" " newTag -= ($(aMinus) * timing);\n" "}\n" "// Write back updated tag and update time\n" "$(c) = newTag;\n" "$(tC) = $(t);\n")
 
 SET_EVENT_CODE ("// Calculate how much tag has decayed since last update\n" "scalar tagDT = $(t) - $(tC);\n" "scalar tagDecay = exp(-tagDT / $(tauC));\n" "// Calculate how much dopamine has decayed since last update\n" "scalar dopamineDT = $(t) - $(tD);\n" "scalar dopamineDecay = exp(-dopamineDT / $(tauD));\n" "// Calculate offset to integrate over correct area\n" "scalar offset = ($(tC) <= $(tD)) ? exp(-($(tD) - $(tC)) / $(tauC)) : exp(-($(tC) - $(tD)) / $(tauD));\n" "// Update weight and clamp\n" "$(g) += ($(c) * $(d) * $(scale)) * ((tagDecay * dopamineDecay) - offset);\n" "$(g) = max($(wMin), min($(wMax), $(g)));\n" "// Write back updated tag and update time\n" "$(c) *= tagDecay;\n" "$(tC) = $(t);\n")
 
 SET_LEARN_POST_CODE ("// Calculate how much tag has decayed since last update\n" "scalar tagDT = $(t) - $(tC);\n" "scalar tagDecay = exp(-tagDT / $(tauC));\n" "// Calculate how much dopamine has decayed since last update\n" "scalar dopamineDT = $(t) - $(tD);\n" "scalar dopamineDecay = exp(-dopamineDT / $(tauD));\n" "// Calculate offset to integrate over correct area\n" "scalar offset = ($(tC) <= $(tD)) ? exp(-($(tD) - $(tC)) / $(tauC)) : exp(-($(tC) - $(tD)) / $(tauD));\n" "// Update weight and clamp\n" "$(g) += ($(c) * $(d) * $(scale)) * ((tagDecay * dopamineDecay) - offset);\n" "$(g) = max($(wMin), min($(wMax), $(g)));\n" "// Decay tag and apply STDP\n" "scalar newTag = $(c) * tagDecay;\n" "scalar dt = $(t) - $(sT_pre);\n" "if (dt > 0) {\n" " scalar timing = exp(-dt / $(tauPlus));\n" " newTag += ($(aPlus) * timing);\n" "}\n" "// Write back updated tag and update time\n" "$(c) = newTag;\n" "$(tC) = $(t);\n")
 
 SET_EVENT_THRESHOLD_CONDITION_CODE ("$(injectDopamine)")
 
 SET_EXTRA_GLOBAL_PARAMS ({ {"injectDopamine", "bool"}, {"tD", "scalar"}, {"d", "scalar"} })
 
 SET_DERIVED_PARAMS ({ {"scale", [](const std::vector< double > &pars, double){ return 1.0/-((1.0/pars[2])+(1.0/pars[3]));}} })
 
 SET_NEEDS_PRE_SPIKE_TIME (true)
 
 SET_NEEDS_POST_SPIKE_TIME (true)
 

The documentation for this class was generated from the following file: