////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // This simulation was used in an article in press at Neural Computation // Citation: Neymotin SA, Chadderdon GL, Kerr CC, Francis JT, Lytton WW (2013). // Reinforcement learning of 2-joint virtual arm reaching in a computer model of sensorimotor cortex. // // For questions/comments on the simulation contact Sam Neymotin (email: samn at neurosim dot downstate dot edu) // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// xopen("./setup.hoc") xopen("./nrnoc.hoc") load_file("init.hoc") load_file("nqsnet.hoc") load_file("network.hoc") load_file("params.hoc") load_file("stim.hoc") load_file("sense.hoc") load_file("run.hoc") load_file("nload.hoc") load_file("basestdp.hoc") load_file("arm.hoc") objref tnq tnq = new NQS("trainedplast.nqs") // stored weights from training tstop = 15e3 // 15 second reach //* settrained - set weights to learned values proc settrained () { localobj nq resetplast_INTF6=0 setplastnq(tnq,col[0]) // this loads the learned weights print "loaded trained weights." } //* setnaive - reset the weights to values prior to training proc setnaive () { resetplast_INTF6=1 print "set naive weights" } //* drawTrajTarg - draw trajectory from run + start + target proc drawTrajTarg () { local xt,yt g=Graph[0] g.erase() xt=tPos.x yt=tPos.y {rotArmTo(sAng[0],sAng[1]) tPos.x=armPos.x tPos.y=armPos.y drtarg(9)} tPos.x=xt tPos.y=yt {gvt=gvmarkflag gvmarkflag=0 if(nqa==nil) return} {tPos.x=xt tPosy=yt} {rotArmTo(tAng[0],tAng[1]) tPos.x=armPos.x tPos.y=armPos.y drarm(0) drtarg(1)} nqa.gr("y","x",0,1,1) g.size(-3,3,-3,3) } //* run simulation and display output proc mydemorun () { myrun() drawTrajTarg() // draw {drit(0,15,1) rasterlines(1)}// draw raster g[1].size(0,tstop,0,col.allcells+col.numc[DP]) // size the graph } //* run trained network, display output proc trainedrun () { settrained() mydemorun() } //* run naive network, display output proc naiverun () { setnaive() mydemorun() } objref hb //* make the gui proc setgui () { local i {hb=new HBox() hb.intercept(1)} xpanel("Reinforcement learning of 2-joint virtual arm reaching in a computer model of sensorimotor cortex") xlabel("Simulation from: Reinforcement learning") xlabel("of 2-joint virtual arm reaching in a") xlabel("computer model of sensorimotor cortex") xlabel("by Neymotin et al.") xlabel("Neural Computation, 2013 (in press)") xlabel("For questions/comments contact Sam Neymotin") xlabel("email: samn at neurosim dot downstate dot edu") xlabel(" ") xbutton("Run trained network","trainedrun()") xbutton("Run naive network", "naiverun()") xbutton("Quit","quit()") xpanel() for i=0,1 g[i]=new Graph() {hb.intercept(0) hb.map()} } setgui() tstop=15e3