After a week of spring quarter final exam madness and whatnot.. Here we go!

 

As in any self-motivated endeavor, I was off to a great start. Within the span of two hours, I got the basic skeleton of the code down. As stated in my URG proposal, the first three weeks were to be spent on building an agent-based model (ABM) code that reproduces the result generated by the MATLAB code written by Professor Riecke (my faculty advisor) and his graduate students. I was using this agent-based modeling platform called NetLogo (developed by Prof. Uri Wilensky at NU) — both because the platform was designed to be really easy to learn and because I had a prior experience with the platform, it wasn’t hard to get the basic skeleton down within the span of two hours. It looked like this:

 

Writing code in NetLogo is easy enough to produce something like this within two hours.

Writing code in NetLogo is easy enough to produce something like this within two hours.

 

Yes, I made this…only to completely revamp it by the end of next two days.

 

On Day 3, my model looked something like this:

 

Where I ended up at on Day 3.

Where I ended up at on Day 3.

 

You see, I was iterating fast. Really fast. Partly it was because I was excited to see aesthetically pleasing (and, as a matter of fact, consistent with the prior result!) results like the one above, but partly it was also because I ran into the first roadblock on Day 1 (within like five hours after start), which made me think that I should really buckle up, since it became more likely for there to be A LOT more ahead.

As it turned out on the first day, the simulation model I was envisioning was qualitatively different from Professor Riecke’s original model.

In highly technical terms, I was envisioning a model where the voltage for each postsynaptic neuron is updated each time a discrete synaptic firing occurs. In Prof. Riecke’s model, on the other hand, synaptic firing is treated in aggregate as a firing rate, whose value then changes over the simulated time according to a system of differential equations. Since I was describing neurons with their voltages instead of firing rates like Prof. Riecke’s model did, the two models could not be juxtaposed in the first place.

Essentially this meant, in non-technical terms, that I had to change the way I model from ground-up — from describing neurons with how much electric charge they have to describing them with how often they fire signals to one another. Because the second way of modeling was mostly governed by a system of differential equations, it was much more conducive to using matrix multiplications. Incidentally, NetLogo had a nice matrix extension for me to use.

 

By the end of the first week, building on the preliminary result from Day 3, I was figuring out a way to quantitatively verify the outputs. But there was one thing in my model that just seemed way off from that in the original model: the number of cells that are created throughout the simulation.

At the same time, I was creating another NetLogo code file, which also described neurons with how often they fire signals to one another, but without using any matrices. My next step for this project stage depended on how much better does this matrix-free version of NetLogo code performs than the one using matrices in terms of accuracy and computational efficiency (i.e., how fast the code runs).

 

So.. did the matrix-free code performed better? Or worse? Stay tuned!