Izhikevich 2003 implementation in docs

The implementation of Izhikevich 2003 model provided in the Brian2 documentation uses a multiple pathway for the synapses:

S = Synapses(
    "w : 1",
    on_pre={"up": "I += w", "down": "I -= w"},
    delay={"up": 0 * ms, "down": 1 * ms},

If I read this correctly, the membrane potential increases w when the pre-synpatic spike occurs and then decreases w 1ms afterwards. For inhibitory synapses, it correspondingly decreases and then increases.

I’m wondering why the post-synaptic activity is not simply implemented as an increase in the membrane voltage via the variable v, on_pre="v += w"? Notably, since they clock is set 1ms. Both approaches seem to produce qualitatively similar —although not indentical— results.

Except for this, the rest of the implementation seems to exactly follow Izhikevich own implementation. Maybe @aesagtekin or @schmitts could shed some light?

1 Like


In Izhikevich’s original code, the simulation’s resolution changes the results quantitatively. For more, you can check: " Reproducing Polychronization: A Guide to Maximizing the Reproducibility of Spiking Network Models", chapter 3.4.4.

To prevent this, @schmitts implemented the multiple pathway code block. Now, even if you change the resolution of the simulation, the results of it will remain quantitatively similar. This multiple pathway code block is similar to the abovementioned paper’s “locked resolution” simulations.


I see, that’s a clever solution. Thanks for the clarification!

1 Like