Ctrnn - AdapSysLab example
What is it
This model demonstrates use of a Continuous Time Recurrent Neural Network (CTRNN), using Xholon. It is based on an example produced by Ezequiel A. Di Paolo of the University of Sussex for an Adaptive Systems post-graduate lab. The original was written in C. The system consists of a robot that contains two photoreceptors in front, two motors each driving a separate wheel, and a controller. The controller is composed of five nodes in a neural network. The overall structure of nodes and connections is shown below in a graph.
In the initial configuration, there is one light on in the environment, shining on only one of the photoreceptors.
How to use it
- Run the Java application through the Xhn GUI (org.primordion.xholon.app.Xhn.java), and select File --> Open --> ctrnn --> AdapSysLab --> AdapSysLab_xhn.xml.
- Expand the Controller node in the tree.
- Press the Start node.
- You should see lines of text in the console window, similar to those shown below.
- If you have JFreeChart installed, and if you have selected "JFreeChart" as the value of the UseDataPlotter parameter in AdapSysLab_xhn.xml, you should see a chart showing the varying activation levels over time for five neurons in the CTRNN. If you don't have JFreeChart installed, then change the value of UseDataPlotter to "gnuplot", and look at the results that are saved to a .csv file in the statistics folder. If you have gnuplot installed, it can read the .plt script in the statistics folder to produce a displayable .png file from the .csv file, that should look similar to the one below.
- If you have JUNG installed, and have UseGraphicalTreeViewer and/or UseGraphicalNetworkViewer set to "true", then you will also see one or two graph viewers.
ModelName : Ctrnn - AdapSysLab example AppM : false InfoM : false ErrorM : true MaxProcessLoops : 300 SizeMessageQueue : 20 InheritanceHierarchyFile : ./config/ctrnn/AdapSysLab/InheritanceHierarchy.xml CompositeStructureHierarchyFile : ./config/ctrnn/AdapSysLab/CompositeStructureHierarchy.xml ClassDetailsFile : ./config/ctrnn/AdapSysLab/ClassDetails.xml InformationFile : ./config/ctrnn/AdapSysLab/Information.xml JavaClassName : org.primordion.ctrnn.app.AppAdapSysLab JavaXhClassName : org.primordion.ctrnn.app.XhAdapSysLab MaxPorts : 3 UseDataPlotter : true DataPlotterParams : Activation Level of Neurons in a CTRNN (changing over time),Time Step,Activation Level,./statistics/,ctrnnStats,1,WRITE_AS_DOUBLE UseGraphicalTreeViewer : false GraphicalTreeViewerParams : /,50,50,1000,300,9,Xholon - CTRNN - Adap Sys Lab - Composite Structure,false UseGraphicalNetworkViewer : true GraphicalNetworkViewerParams : /,1000,600,9,LAYOUT_KK,false,Xholon - CTRNN - Adap Sys Lab - Port Connections,false UseInteractions : false NumLightsOn : 1 Neuron0 output: 1.0998 Neuron1 output: 1.0998 Neuron2 output: 0.5 Neuron3 output: 0.5 Neuron4 output: 0.5 Neuron0 activation: 0.996078431372549 Neuron1 activation: 0.996078431372549 Neuron2 input: 9.2994 Neuron2 activation: 6.10998 Neuron3 input: 9.8992 Neuron3 activation: 9.9496 Neuron4 input: 9.8992 Neuron4 activation: 9.9496 ... Neuron0 input: 0.0 Neuron1 input: 500.0 MotorR input: 0.002511602164518533 MotorL input: 0.9954414854391215 Neuron0 activation: 1.0 Neuron1 activation: -0.9607843137254901 Neuron2 input: 13.651797690113293 Neuron2 activation: 13.65133136739952 Neuron3 input: 4.015680445794243 Neuron3 activation: 4.015680412448164 Neuron4 input: 15.386189629224432 Neuron4 activation: 15.386189595352343
Things to notice
In this implementation, both neural nodes (photoreceptors, neurons, motors) and connections between nodes are represented as xholons. Nodes have activation levels, inputs, and outputs. Connections have weights.
When the simulation is running, you can inspect the current state of each node and connection. In the Xholon GUI, expand the Model node, then the CompositeStructureHierarchy node, and then the robot_0 node. Click on each Sensor and Motor node to see what they are connected to and what their output and input levels are. Click on ctrnn_3. Click on each Neuron and Connection to see what each is connected to through its ports. This will also show the current values of its attributes.
Instead of pressing the "Start" node to run the simulation, you can repetitively press the "Step" node. Each time you press "Step" the simulation advances one time step. You can inspect how the values maintained by each node evolve at each step.
Things to try
Change the value of the NumLightsOn parameter in the AdapSysLab_xhn.xml configuration file. It is initially set to simulate having only one light on, and has a value of "1". Change the value to "0" (no lights on) or "2" (two lights on), and rerun the simulation.
Change the value to "3" to have a random pattern of on and off lights, and rerun the simulation.
The following three figures show the results for: no lights on, two lights on, and random.
Extending the model
Credits and references
Adapted from: Di Paolo, E.A. (2004). Adaptive Systems PG Lab Class. EASY MSc course. Brighton, UK: University of Sussex.
Thanks to Stephen Wolff for help with this sample model. http://www.loopo.co.uk/
One source for more information on CTRNNs is Randall Beer's publications list, especially his 1995 paper "On the Dynamics of Small Continuous-Time Recurrent Networks". http://mypage.iu.edu/~rdbeer/
Eduardo Izquierdo-Torres, a research student in the CCNR at the University of Sussex, has prepared a simple CTRNN example. http://edizquierdo.blogspot.com/2005_11_01_edizquierdo_archive.html