A simple model of neuromodulatory state-dependent synaptic plasticity (Pedrosa and Clopath, 2016)

 Download zip file 
Help downloading and running models
The model is used to illustrate the role of neuromodulators in cortical plasticity. The model consists of a feedforward network with 1 postsynaptic neuron with plastic synaptic weights. These weights are updated through a spike-timing-dependent plasticity rule. "First, we explore the ability of neuromodulators to gate plasticity by reshaping the learning window for spike-timing-dependent plasticity. Using a simple computational model, we implement four different learning rules and demonstrate their effects on receptive field plasticity. We then compare the neuromodulatory effects of upregulating learning rate versus the effects of upregulating neuronal activity. "
1 . Pedrosa V, Clopath C (2017) The role of neuromodulators in cortical plasticity. A computational perspective. Front. Synaptic Neurosci. 8:38
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism:
Cell Type(s): Abstract integrate-and-fire fractional leaky neuron;
Gap Junctions:
Simulation Environment: Python;
Model Concept(s): STDP; Synaptic Plasticity; Learning; Neuromodulation;
Implementer(s): Pedrosa, Victor [v.pedrosa15 at imperial.ac.uk];
# ============================================================================================================
# Neuromodulators_Pedrosa_and_Clopath16_fig1.py -- Simulates a feedforward network of excitatory neurons as in
# Ref: Pedrosa V and Clopath C (2017) The Role of Neuromodulators in Cortical Plasticity. 
# A Computational Perspective. Front. Synaptic Neurosci. 8:38. doi: 10.3389/fnsyn.2016.00038
# This code executes both 1-Neuromodulation_and_plasticity and 2-Neuromodulation_and_plasticity_with_special_input
# to simulate a feedforward network of neurons with homogeneous stimulation and a specific training input, 
# respectively. Finally, this code executes Make_figs.py to generate the final figures.
# -----------------------------------------------------------------------
# Author: Victor Pedrosa <v.pedrosa15@imperial.ac.uk>
# Imperial College London, London, UK - Dec 2016
# ====================================================================================================

# Import modules -------------------------------------------------------------------------------------
import subprocess
import numpy as np
import os
from time import time as time_now

# Create new directories to store data ---------------------------------------------------------------
newpath = r'Data_hom_stimulation/' 
if not os.path.exists(newpath):

newpath = r'Data_RF_shift/' 
if not os.path.exists(newpath):
newpath = r'Figures/' 
if not os.path.exists(newpath):

# start to count the time spent with simulations -----------------------------------------------------
time_in = time_now() 

# ====================================================================================================
# Define the arguments to be used when calling the main code.
# Each pair of arguments corresponds to the amplitude of synaptic plasticity for pre-post and post-pre
# events.
# ====================================================================================================
args = [[0.0003, -0.0003], [0.0003, 0.0003], [0.0003, 0.000], [0.000, -0.0003]] 

# ====================================================================================================
# Run the simulations
# ====================================================================================================

# Run the main code for homogeneous stimulation ------------------------------------------------------
for arg in args:
	subprocess.call('python 1-Neuromodulation_and_plasticity.py {0} {1}'.format(arg[0],arg[1]),shell=True)

# Run the main code for stimulation with a training stimulus -----------------------------------------
for arg in args:
	subprocess.call('python 2-Neuromodulation_and_plasticity_with_special_input.py {0} {1}'.format(arg[0],arg[1]),shell=True)

# stop counting the time and show the total time spent -----------------------------------------------
time_end = time_now()
total_time = (time_end-time_in)/60. # [min]

print('Simulation finally finished!')
print('Total time = {0:.2f} minutos'.format(total_time))

# Run the code to generate the figures ---------------------------------------------------------------

subprocess.call('python Make_figs.py',shell=True)

Loading data, please wait...