Polychronization: Playing with the Code

Last month I reviewed the paper “Polychronization: Computation with Spikes” (published February 2006 in Neural Computation) that described a highly simplified computational model of cerebral cortex containing 1,000 neurons that included axon conductance delays and spike timing dependent plasticity (STDP). The model exhibited the spontaneous formation of neuronal groups defined as “small collectives of neurons having strong connections with matching conduction delays and exhibiting time-locked but not necessarily synchronous spiking activity” (they may fire at many different times). The author called this process polychronization (poly means many and chronous means time) and the neuronal groups it forms polychronous groups.

A spike raster plot of a polychronization model.
Figure 1. This is a spike raster plot of data from the polychronization model spnet.cpp. The model included 1,000 neurons (y-axis) and was run for 24 hours simulation time. The plot shows the last second (in milliseconds; x-axis) of the 24 hour simulation. Neurons 0 through 799 are excitatory and 800 through 999 are inhibitory (these are fast spiking inhibitory neurons). This plot is similar to the bottom plot in Figure 5 of “Polychronization: Computation with Spikes” (published February 2006 in Neural Computation) except that in the paper the 1 second time period is extracted from the 3,600 second time point or at 1 hour of simulation time.

C++ and MATLAB versions of the computational model are available from the SenseLab’s ModelDB repository in the “Polychronization: Computation With Spikes (Izhikevich 2005)” record. The C++ code of the standard model described in the paper is in the spnet.cpp file. Compiling the code was straight forward. I did need to modify the main() method so that it returned an int to comply with C++ coding standards. No other modifications were necessary.

Running the spnet.cpp code resulted in a spike.dat file that, when graphed, reproduced the bottom graph in Figure 5 (see Figure 1 above) of Dr. Eugene Izhikevich’s paper “Polychronization: Computation with Spikes” (published February 2006 in Neural Computation). I created the graph by reading the contents of the spikes.dat file into an OpenOffice.org spreadsheet by using the Insert menu’s Sheet From File… command. In the Text Import dialog box use the Separated by Space option under Separator options. Delete column B, highlight all of the data, and graph by clicking on the Chart button and selecting the XY (Scatter) chart type with Points Only.

Note: For more on the paper associated with this model please see my earlier blog post “Spontaneously Formed Neuronal Groups Far Exceed the Number of Neurons.”

The computational model in poly_spnet.cpp is the same as in spnet.cpp. However, poly_spnet.cpp includes code for finding polychronous groups. By default the cerebral cortex simulation in poly_spnet.cpp runs for a simulated 18,000 seconds (60 seconds/minute * 60 minutes/hour * 5 hours). The program then finds the polychronous groups for you. Compiling and running poly_spnet.cpp was also straight forward. Make the same modification to the main() method. Change its return value from void to int so that it complies with C++ coding standards. I also had to remove the malloc.h header. Next we’ll take a look at the data set produced by poly_spnet.cpp.

Other related blog posts:

Spontaneously Formed Neuronal Groups Far Exceed the Number of Neurons