Motor system model with reinforcement learning drives virtual arm (Dura-Bernal et al 2017)

 Download zip file 
Help downloading and running models
"We implemented a model of the motor system with the following components: dorsal premotor cortex (PMd), primary motor cortex (M1), spinal cord and musculoskeletal arm (Figure 1). PMd modulated M1 to select the target to reach, M1 excited the descending spinal cord neurons that drove the arm muscles, and received arm proprioceptive feedback (information about the arm position) via the ascending spinal cord neurons. The large-scale model of M1 consisted of 6,208 spiking Izhikevich model neurons [37] of four types: regular-firing and bursting pyramidal neurons, and fast-spiking and low-threshold-spiking interneurons. These were distributed across cortical layers 2/3, 5A, 5B and 6, with cell properties, proportions, locations, connectivity, weights and delays drawn primarily from mammalian experimental data [38], [39], and described in detail in previous work [29]. The network included 486,491 connections, with synapses modeling properties of four different receptors ..."
1 . Dura-Bernal S, Neymotin SA, Kerr CC, Sivagnanam S, Majumdar A, Francis JT, Lytton WW (2017) Evolutionary algorithm optimization of biological learning parameters in a biomimetic neuroprosthesis. IBM Journal of Research and Development (Computational Neuroscience special issue) 61(2/3):6:1-6:14
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism:
Cell Type(s): Abstract Izhikevich neuron;
Gap Junctions:
Receptor(s): GabaA; GabaB; NMDA; AMPA;
Transmitter(s): Glutamate; Gaba;
Simulation Environment: NEURON; Python;
Model Concept(s): Learning; Reinforcement Learning; Reward-modulated STDP; STDP; Motor control; Sensory processing;
Implementer(s): Dura-Bernal, Salvador [salvadordura at]; Kerr, Cliff [cliffk at];
Search NeuronDB for information about:  GabaA; GabaB; AMPA; NMDA; Gaba; Glutamate;
#include <Math/MathHeaders.h>
#include <Multibody/MultibodyHeaders.h>
#include <BodyController/ControllerHeaders.h>
#include <OsgVisualization/OsgVizHeaders.h>

#include <Utils/Notify.h>
#include <FileIO/AtbTestBuilder.h>
#include <FileIO/ForceTestBuilder.h>

#include <iostream>
#include <iomanip>
#include "LSODAIntegrator2.h"

#include <FileIO/ControlledMbdSimulation.h>


int testFwdDynXML(int argc, char** argv)
	using namespace mf_mbd;

	const Real PI = 3.141592653589793238462643;

	try {

		if(argc == 1){
			throw std::runtime_error("Please specify the input file name");

		std::string filename(argv[1]);
		ControlledMbdSimulation sim;
		//MbdSimulation sim;

		// read xml file


		std::cout << "READY TO RUN" << std::endl;;

	catch(std::exception& ex) {			//in case there is an error on the sim file, Cobi will stop
		std::cerr << "Error: " << ex.what() << std::endl;
		return 1;

	return 0;

int main(int argc, char** argv){

	/*Turns out that the object files containing the static initializers 
	 were not included by the linker because nothing referenced any functions in them. 
	 Therefore we need the line below for now, how to solve this????
	 Use Library Dependency Inputs set to yes fixed this problem

		mf_mbd::IntegratorCreator::getFactoryReg()->regist("LSODAIntegrator2", &Math::User::LSODAIntegrator2<VecN>::createInstance);
	catch(std::exception& ex) {			//in case there is an error on the sim file, Cobi will stop
		std::cerr << "Error: " << ex.what() << std::endl;
		return 1;

	return 0;

Loading data, please wait...