Roles of subthalamic nucleus and DBS in reinforcement conflict-based decision making (Frank 2006)

 Download zip file 
Help downloading and running models
Deep brain stimulation (DBS) of the subthalamic nucleus dramatically improves the motor symptoms of Parkinson's disease, but causes cognitive side effects such as impulsivity. This model from Frank (2006) simulates the role of the subthalamic nucleus (STN) within the basal ganglia circuitry in decision making. The STN dynamically modulates network decision thresholds in proportion to decision conflict. The STN ``hold your horses'' signal adaptively allows the system more time to settle on the best choice when multiple options are valid. The model also replicates effects in Parkinson's patients on and off DBS in experiments designed to test the model (Frank et al, 2007).
1 . Frank MJ (2006) Hold your horses: a dynamic computational role for the subthalamic nucleus in decision making. Neural Netw 19:1120-36 [PubMed]
2 . Frank MJ, Samanta J, Moustafa AA, Sherman SJ (2007) Hold your horses: impulsivity, deep brain stimulation, and medication in parkinsonism. Science 318:1309-12 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism:
Cell Type(s): Neostriatum medium spiny direct pathway GABA cell; Substantia nigra pars compacta DA cell; Subthalamus nucleus projection neuron; Globus pallidus neuron;
Gap Junctions:
Transmitter(s): Dopamine; Gaba; Glutamate;
Simulation Environment: Emergent/PDP++;
Model Concept(s): Simplified Models; Synaptic Plasticity; Rate-coding model neurons; Parkinson's; Reinforcement Learning; Action Selection/Decision Making; Deep brain stimulation; Rebound firing;
Implementer(s): Frank, Michael [mfrank at];
Search NeuronDB for information about:  Neostriatum medium spiny direct pathway GABA cell; Substantia nigra pars compacta DA cell; Dopamine; Gaba; Glutamate;
#!/usr/local/bin/css -f

void Anal(String fnm) {
  fstream istrm;, ios::in);

  fstream ostrm; + ".gort20", ios::out);

  int epc;
  int rt_go[3200];
  int  cycle;
  float thal, m1;
  int i;
  int settle;
  int cycle_col, thal_col;
  while(!istrm.eof() && istrm.good()) {
    String_Array& col = ReadLine(istrm);
    if(istrm.eof() || istrm.bad()) break;
    if(col[0].contains("_H:")) {
      if (col[7].contains("cycle")) {
	cycle_col =7;  // columns for cycle and thalamus are different 
	thal_col = 12; // in c1 and c4 log files; adjust here
      else {cycle_col = 8; thal_col = 13;}


    cycle = col[cycle_col];
    thal = col[thal_col];

    if (cycle==0) {settle=0; 
      rt_go[i]=200; // initialize rt to be max
    if ((i!=0)&&((i%50 ==38)||(i%50==39))) { 
// only get rts's on 20th epoch for each net, 2 trials per epoch makes i=38,39

    if (settle==0) {	// check if net has settled on response yet
      if (thal>.25) { // check if average thal act is > .25, which means that a single unit > .5
	rt_go[i]=cycle;  // if so, then set the rt to be this cycle 
settle =1;  // network has settled on response
    if (cycle==199) i++; // new epoch


  for (i=0;i<1600;i++) { if ((rt_go[i]!=0)&&(rt_go[i]!=200)) // only show rt's for actual responses
    ostrm << "_D:" << "\t" <<  i << "\t" << rt_go[i] << "\n";
  //ostrm << right;
  cout << fnm << ".gort20:\n";
  system("more " + fnm + ".gort20");
  cout << "\n";

void Main() {
  int i;
  for(i=1;i<argc;i++) {


Loading data, please wait...