Population-level model of the basal ganglia and action selection (Gurney et al 2001, 2004)

 Download zip file 
Help downloading and running models
We proposed a new functional architecture for the basal ganglia (BG) based on the premise that these brain structures play a central role in behavioural action selection. The papers quantitatively describes the properties of the model using analysis and simulation. In the first paper, we show that the decomposition of the BG into selection and control pathways is supported in several ways. First, several elegant features are exposed--capacity scaling, enhanced selectivity and synergistic dopamine modulation--which might be expected to exist in a well designed action selection mechanism. Second, good matches between model GPe output and GPi and SNr output, and neurophysiological data, have been found. Third, the behaviour of the model as a signal selection mechanism has parallels with some kinds of action selection observed in animals under various levels of dopaminergic modulation. In the second paper, we extend the BG model to include new connections, and show that action selection is maintained. In addition, we provide quantitative measures for defining different forms of selection, and methods for assessing performance changes in computational neuroscience models.
1 . Gurney K, Prescott TJ, Redgrave P (2001) A computational model of action selection in the basal ganglia. II. Analysis and simulation of behaviour. Biol Cybern 84:411-23 [PubMed]
2 . Gurney KN, Humphries M, Wood R, Prescott TJ, Redgrave P (2004) Testing computational hypotheses of brain systems function: a case study with the basal ganglia. Network 15:263-90 [PubMed]
3 . Gurney K, Prescott TJ, Redgrave P (2001) A computational model of action selection in the basal ganglia. I. A new functional anatomy. Biol Cybern 84:401-10 [PubMed]
4 . Humphries MD (2003) High level modeling of dopamine mechanisms in striatal neurons Technical Report ABRG 3
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Basal ganglia;
Cell Type(s):
Gap Junctions:
Transmitter(s): Dopamine;
Simulation Environment: MATLAB; Simulink;
Model Concept(s): Parkinson's; Action Selection/Decision Making;
Implementer(s): Humphries, Mark D [m.d.humphries at shef.ac.uk];
Search NeuronDB for information about:  Dopamine;
/* general purpose sigmoid:
 * use as template for single input, single output function system (no states)

#define RAND_FACT 2147483647.0	/* largest random number generated */

#define S_FUNCTION_NAME Msigmoid2 /* same as filename */

#include "simstruc.h"
extern double exp();
extern double log();
/* extern long random(); */

/* input arguments (parameters) */

#define SLOPE    ssGetArg(S, 0)
#define THRESH  ssGetArg(S, 1)

 * mdlInitializeSizes - initialize the sizes array
 * for single input, single output function system (no states)
 * notice use of ssSetNumInputArgs() to set number of input pars 

static void mdlInitializeSizes(S)
    SimStruct *S;
    ssSetNumContStates(    S, 0);      /* number of continuous states */
    ssSetNumDiscStates(    S, 0);      /* number of discrete states */
    ssSetNumInputs(        S, 1);      /* number of inputs */
    ssSetNumOutputs(       S, 1);      /* number of outputs */
    ssSetDirectFeedThrough(S, 1);      /* direct feedthrough flag */
    ssSetNumSampleTimes(   S, 1);      /* number of sample times */
    ssSetNumInputArgs(     S, 2);      /* number of input arguments */
    ssSetNumRWork(         S, 0);      /* number of real work vector elements */
    ssSetNumIWork(         S, 0);      /* number of integer work vector elements */
    ssSetNumPWork(         S, 0);      /* number of pointer work vector elements */

 * mdlInitializeSampleTimes - initialize the sample times array
 * This function is used to specify the sample time(s) for your S-function.
 * If your S-function is continuous, you must specify a sample time of 0.0.
 * Sample times must be registered in ascending order.

static void mdlInitializeSampleTimes(S)
    SimStruct *S;
    ssSetSampleTimeEvent(S, 0, 0.0);
    ssSetOffsetTimeEvent(S, 0, 0.0);

/* have to have th efiollowing functions even though they are empty 
 * otherwise get segmentation violations */

static void mdlInitializeConditions(x0, S)
    double *x0;
    SimStruct *S;

static void mdlUpdate(x, u, S, tid)
    double *x, *u;
    SimStruct *S;
    int tid;

static void mdlDerivatives(dx, x, u, S, tid)
    double *dx, *x, *u;
    SimStruct *S;
    int tid;

static void mdlTerminate(S)
    SimStruct *S;

/***************** main function calculation **********/
 * mdlOutputs - compute the outputs

static void mdlOutputs(y, x, u, S, tid)
    double *y, *x, *u;
    SimStruct *S;
    int tid;
     double slope, thresh;
     double act;
     double y_out;

     slope = mxGetPr(SLOPE)[0];
     thresh = mxGetPr(THRESH)[0];

     act = u[0];
     if (act <= thresh) {
	  y_out = 0;
     else if ((act > thresh) && (act < 1/slope + thresh)) {
	  y_out = slope * (act - thresh);
     else {
	  y_out = 1;
     y[0] = y_out;


#ifdef	MATLAB_MEX_FILE    /* Is this file being compiled as a MEX-file? */
#include "simulink.c"      /* MEX-file interface mechanism */
#include "cg_sfun.h"       /* Code generation registration function */