{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# STDP - single synapse\n", "\n", "[![Download JupyterNotebook](https://img.shields.io/badge/Download-Notebook-orange?style=for-the-badge&logo=Jupyter)](https://raw.githubusercontent.com/ANNarchy/ANNarchy.github.io/master/notebooks/STDP1.ipynb) [![Download JupyterNotebook](https://img.shields.io/badge/Open_in-Colab-blue?style=for-the-badge&logo=Jupyter)](https://colab.research.google.com/github/ANNarchy/ANNarchy.github.io/blob/master/notebooks/STDP1.ipynb)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:24.597113Z", "iopub.status.busy": "2026-01-05T13:49:24.596789Z", "iopub.status.idle": "2026-01-05T13:49:24.600856Z", "shell.execute_reply": "2026-01-05T13:49:24.600092Z" } }, "outputs": [], "source": [ "#!pip install ANNarchy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook demonstrates the online implementation of the spike time-dependent plasticity (STDP) rule for a pair of neurons." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-01-05T13:49:24.603558Z", "iopub.status.busy": "2026-01-05T13:49:24.603235Z", "iopub.status.idle": "2026-01-05T13:49:25.228380Z", "shell.execute_reply": "2026-01-05T13:49:25.227647Z" }, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ANNarchy 5.0 (5.0.0) on linux (posix).\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import ANNarchy as ann" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The STDP learning rule maintains exponentially-decaying traces for the pre-synaptic and post-synaptic spikes.\n", "\n", "$$\\tau^+ \\, \\frac{d x(t)}{dt} = -x (t)$$\n", "\n", "$$\\tau^- \\, \\frac{d y(t)}{dt} = -x (t)$$\n", "\n", "LTP and LTD occur at spike times depending on the corresponding traces.\n", "\n", "* When a pre-synaptic spike occurs, $x(t)$ is incremented and **LTD** is applied proportionally to $y(t)$.\n", "* When a post-synaptic spike occurs, $y(t)$ is incremented and **LTP** is applied proportionally to $x(t)$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:25.254516Z", "iopub.status.busy": "2026-01-05T13:49:25.254009Z", "iopub.status.idle": "2026-01-05T13:49:25.259973Z", "shell.execute_reply": "2026-01-05T13:49:25.259289Z" } }, "outputs": [], "source": [ "STDP = ann.Synapse(\n", " parameters = dict(\n", " tau_plus = 20.0,\n", " tau_minus = 20.0, \n", " A_plus = 0.01,\n", " A_minus = 0.01,\n", " w_min = 0.0,\n", " w_max = 2.0,\n", " ),\n", " equations = [\n", " # Pre-synaptic trace\n", " ann.Variable('tau_plus * dx/dt = -x', method='event-driven'),\n", " # Post-synaptic trace\n", " ann.Variable('tau_minus * dy/dt = -y', method='event-driven'),\n", " ],\n", " pre_spike=\"\"\"\n", " g_target += w\n", " x += A_plus * w_max\n", " w = clip(w - y, w_min , w_max) # LTD\n", " \"\"\",\n", " post_spike=\"\"\"\n", " y += A_minus * w_max\n", " w = clip(w + x, w_min , w_max) # LTP\n", " \"\"\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create two dummy populations with one neuron each, whose spike times we can control." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:25.261825Z", "iopub.status.busy": "2026-01-05T13:49:25.261490Z", "iopub.status.idle": "2026-01-05T13:49:25.282433Z", "shell.execute_reply": "2026-01-05T13:49:25.281739Z" } }, "outputs": [], "source": [ "net = ann.Network()\n", "pre = net.create(ann.SpikeSourceArray([[0.]]))\n", "post = net.create(ann.SpikeSourceArray([[50.]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We connect the population using a STDP synapse." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:25.284581Z", "iopub.status.busy": "2026-01-05T13:49:25.284376Z", "iopub.status.idle": "2026-01-05T13:49:25.444829Z", "shell.execute_reply": "2026-01-05T13:49:25.444217Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proj = net.connect(pre, post, 'exc', STDP)\n", "proj.all_to_all(1.0)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:25.446903Z", "iopub.status.busy": "2026-01-05T13:49:25.446696Z", "iopub.status.idle": "2026-01-05T13:49:35.319862Z", "shell.execute_reply": "2026-01-05T13:49:35.319242Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compiling network 1... " ] }, { "name": "stdout", "output_type": "stream", "text": [ "OK \n" ] } ], "source": [ "net.compile()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The presynaptic neuron will fire at various times between 0 and 100 ms, while the postsynaptic neuron keeps firing at 50 ms." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:35.322580Z", "iopub.status.busy": "2026-01-05T13:49:35.322244Z", "iopub.status.idle": "2026-01-05T13:49:35.326036Z", "shell.execute_reply": "2026-01-05T13:49:35.325477Z" } }, "outputs": [], "source": [ "pre_times = np.linspace(100.0, 0.0, 101)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:35.328291Z", "iopub.status.busy": "2026-01-05T13:49:35.328036Z", "iopub.status.idle": "2026-01-05T13:49:35.348914Z", "shell.execute_reply": "2026-01-05T13:49:35.348384Z" } }, "outputs": [], "source": [ "weight_changes = []\n", "\n", "for t_pre in pre_times:\n", " \n", " # Reset the populations\n", " pre.clear()\n", " post.clear()\n", " pre.spike_times = [[t_pre]]\n", " post.spike_times = [[50.0]]\n", " \n", " # Reset the traces\n", " proj.x = 0.0\n", " proj.y = 0.0\n", " \n", " # Weight before the simulation\n", " w_before = proj[0].w[0]\n", " \n", " # Simulate long enough\n", " net.simulate(105.0)\n", " \n", " # Record weight change\n", " delta_w = proj[0].w[0] - w_before\n", " weight_changes.append(delta_w)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now plot the classical STDP figure:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-01-05T13:49:35.351199Z", "iopub.status.busy": "2026-01-05T13:49:35.351002Z", "iopub.status.idle": "2026-01-05T13:49:35.461349Z", "shell.execute_reply": "2026-01-05T13:49:35.460799Z" } }, "outputs": [ { "data": { "image/png": "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a6+9pr/97W/685//TIORZgTKNEgAgDWYBgkA8OjUBiMbNmzwNhb55z//qR49emjixIl67LHHdO2117Y5aAAAAABAgzYla3fffbe+9rWvad68ebr22ms1fPjwjo4LAAAAAMJam5K106dPt2rcihUrdPfddys2NrYtvwYAAAAAwlabGoy01iOPPKLS0tLO/BUAAAAAEJI6NVlrZ+8SAAAAAAhbnZqsAQAAAADahmQNAAAAAAIQyRoAAAAABCCSNQAAAAAIQJ2arH31q19V165dO/NXAAAAAEBIatM+axc6e/asampqfM7FxMRIkjZv3tze2wMAAABAWGpTZe3MmTOaP3++evXqpejoaHXv3t3n1ZmeeuopDRgwQFFRURo7dqzeeuutFsevX79egwcPVlRUlIYPH94ogTRNUw899JD69Omjrl27Ki0tTf/61798xpSWlmrWrFmKiYlRbGys5s6dq6qqqg5/NgAAAADwaFOy9sMf/lDbt2/Xb3/7WzkcDv3ud7/Tww8/rL59++r555/v6Bi91q1bp+zsbC1dulQFBQW65pprlJ6ertOnTzc5fteuXZo5c6bmzp2rffv2KSMjQxkZGTp06JB3zKOPPqonnnhCq1ev1p49exQdHa309HSdPXvWO2bWrFl69913tXXrVm3atElvvPGG5s2b12nPCQAAAACG2Yadq/v376/nn39ekyZNUkxMjAoKCnTllVfqT3/6k/785z932vTHsWPHavTo0XryySclSfX19UpKStKCBQu0ePHiRuMzMzPldru1adMm77lx48YpOTlZq1evlmma6tu3rxYtWqT77rtPklRRUaHevXvr2Wef1YwZM3T48GENHTpUe/fu1ahRoyRJW7Zs0Y033qjCwkL17du3VbFXVlbK5XKpoqLCO00UABA+3G63nE6nJKmqqkrR0dEWRwQAsEprc4M2rVkrLS3VFVdcIalhfVppaakkaeLEifr+97/fllteVE1NjfLz87VkyRLvOZvNprS0NOXl5TV5TV5enrKzs33OpaenKzc3V5L04Ycfqri4WGlpad7PXS6Xxo4dq7y8PM2YMUN5eXmKjY31JmqSlJaWJpvNpj179uiWW27pwKfsfKZp6syZM1aHAQBhx+12N/keAOA/3bp1k2EYVofRam1K1q644gp9+OGH6t+/vwYPHqy//OUvGjNmjDZu3KjY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 8))\n", "plt.plot(50. - pre_times, weight_changes, \"*\")\n", "plt.plot([-50, 50], [0, 0], 'k')\n", "plt.plot([0, 0], [min(weight_changes), max(weight_changes)], 'k')\n", "plt.xlabel(\"t_post - t_pre\")\n", "plt.ylabel(\"delta_w\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.15" } }, "nbformat": 4, "nbformat_minor": 4 }