{ "cells": [ { "cell_type": "markdown", "id": "616dc2e6", "metadata": {}, "source": [ "{download}`Download this notebook <2_kuramoto.ipynb>`" ] }, { "cell_type": "markdown", "id": "b7b25f5e", "metadata": { "vscode": { "languageId": "plaintext" } }, "source": [ "## Kuramoto network optimization\n", "\n", "> **`gradnet` concepts demonstrated below**\n", "> - **ODE integration** via `gradnet.integrate_ode`\n", "> - A **loss function** for a dynamical system\n", "> - Optimizer selection\n", "> - Logging using TensorBoard\n", "> - Checkpointing\n", "> - Animation\n", "### Problem setup\n", "Consider the Kuramoto model for nodes with internal frequencies $\\{\\omega_i\\}_{i=1}^N$ with weighted adjacency matrix $A_{ij}$ obaying the dynamics:\n", "$$\n", "\\frac{d\\theta_i}{dt} = \\omega_i + \\sum_{j=1}^N A_{ij} \\sin(\\theta_j - \\theta_i)\n", "$$\n", "\n", "Notice, that the adjacency matrix here is weighted: $A_{ij}=0$ if there is no edge between nodes $i$ and $j$, otherwise $A_{ij}$ is the edge-weight of the existing edge.\n", "\n", "For this model, we seek the optimal network, with the fixed total edge-weight budget which supports the strongest synchronization. \n", "\n", "Synchronization in Kuramoto model is measured as:\n", "$$\n", "r(t) = \\left| \\frac{1}{N} \\sum_{j=1}^N e^{i\\theta_j(t)} \\right|\n", "$$\n", "where $r(t) \\in [0, 1]$ measures the degree of phase synchronization at time $t$. This is implemented in the function `loss_fn`.\n", "\n", "### Vectorizing the ODE (Optional)\n", "We can simplify the right-hand-side of the ODE by applying the trig identity $\\sin(a-b) = \\cos(a)\\sin(b) - \\sin(a)\\cos(b)$, which allows efficient vectorized computation of the interaction term. The resulting vectorized ODE is:\n", "$$\n", "\\frac{d\\boldsymbol{\\theta}}{dt} = \\boldsymbol{\\omega} + \\left[ \\cos(\\boldsymbol{\\theta}) \\odot (A\\cdot \\sin(\\boldsymbol{\\theta})) - \\sin(\\boldsymbol{\\theta}) \\odot (A\\cdot \\cos(\\boldsymbol{\\theta})) \\right]\n", "$$\n", "where $\\odot$ denotes the Hadamard (element-wise) product. This is implemented in the function `dθ_dt` in the code\n", "\n", "Note: vectorization is not required, but it helps accelerate the computations (especially if using a GPU)." ] }, { "cell_type": "markdown", "id": "27e67499", "metadata": {}, "source": [ "### Install\n", "install the required dependencies silently" ] }, { "cell_type": "code", "execution_count": 1, "id": "05917013", "metadata": {}, "outputs": [], "source": [ "%%capture\n", "!pip install 'gradnet[examples]'" ] }, { "cell_type": "markdown", "id": "536794ec", "metadata": {}, "source": [ "### GradNet optimization" ] }, { "cell_type": "code", "execution_count": 2, "id": "20e67163", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "GPU available: True (mps), used: False\n", "TPU available: False, using: 0 TPU cores\n", "HPU available: False, using: 0 HPUs\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "caf760e9c1824923a19d668aee060e3a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Updates: 0%| | 0/600 [00:00" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from gradnet import GradNet, integrate_ode, fit\n", "from gradnet.utils import plot_adjacency_heatmap, plot_graph\n", "import numpy as np\n", "import torch\n", "import matplotlib.pyplot as plt\n", "from matplotlib.cm import bwr\n", "\n", "\n", "# set up problem parameters preferably in Torch\n", "N = 100\n", "budget_per_node = 2.0\n", "ω = np.linspace(0, 1, N) # uniformly distributed natural frequencies in [0, 1]\n", "ω = torch.tensor(ω) # convert to torch tensor\n", "\n", "gn = GradNet(num_nodes=N, budget=budget_per_node*N, rand_init_weights=False, \n", " delta_sign=\"nonnegative\", final_sign=\"free\", strict_budget=True) # create the GradNet instance\n", "\n", "def dθ_dt(t, θ, A, ω):\n", " # Kuramoto model: dθ_i/dt = ω_i + Σ A_ij sin(θ_j - θ_i)\n", " sinx = torch.sin(θ)\n", " cosx = torch.cos(θ)\n", " return ω + cosx * (A @ sinx) - sinx * (A @ cosx)\n", "\n", "def loss_fn(gn):\n", " tt = torch.linspace(0, 5, 150) # time grid to evaluate the numerical solutions\n", " θ0 = torch.zeros(N) # set the initial phases to 0 (this choice accelerates traning)\n", "\n", " f_params = {\"ω\": ω} # contains every parameter of the dθ_dt beyond t, θ, and A. \n", " tt, θθ = integrate_ode(gn, f=dθ_dt, x0=θ0, tt=tt, f_kwargs=f_params) # integrate the ODE\n", "\n", " rr = torch.abs(torch.mean(torch.exp(1j * θθ), dim=1)) # compute the synchronization time series\n", " r_mean = torch.mean(rr) # average it over time\n", "\n", " return 1 - r_mean, {'r':r_mean} # loss function is minimized, so in order to maximize synch, \n", "\n", "\n", "fit(gn=gn, \n", " loss_fn=loss_fn, \n", " num_updates=600, \n", " optim_cls=torch.optim.Adam, optim_kwargs={\"lr\": 1, \"betas\": (0.9, 0.999)}, \n", " accelerator=\"cpu\",\n", " logger=True,\n", " enable_checkpointing=True, checkpoint_dir=\"./kuramoto_checkpoints\", checkpoint_every_n=1);\n", "\n", "loss, measures = loss_fn(gn)\n", "print(f\"optimal synchrony: {measures['r']}\")\n", "\n", "fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(10, 4), constrained_layout=True)\n", "plot_adjacency_heatmap(gn, ax=ax0)\n", "plot_graph(gn, ax=ax1, draw_kwargs={'node_color': ω, 'cmap': bwr}, colorbar_label=\"ω\")" ] }, { "cell_type": "markdown", "id": "71111188", "metadata": {}, "source": [ "On the left, the optimized adjacency matrix is plotted as a heatmap.\n", "\n", "On the right, we show the sppring layout plot of the resulting weighted network. The edgeweights are repreented as the edge widths, and the node colors correspond to their intrinsic frequencies." ] }, { "cell_type": "markdown", "id": "94936ada", "metadata": {}, "source": [ "### Let's animate the adjacency matrix from the checkpoints" ] }, { "cell_type": "code", "execution_count": 3, "id": "443f8982", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from gradnet.utils import animate_adjacency\n", "\n", "animate_adjacency(\"./kuramoto_checkpoints\");" ] }, { "cell_type": "markdown", "id": "ee2df368", "metadata": {}, "source": [ "### TensorBoard\n", "To track live plots of loss and other scalars (like the number of missclassified edges in this case), you first need to ensure that tensorboard is installed: type `pip install tensorboard` in terminal.\n", "Then you should navigate your a terminal to your python project directory and type: `tensorboard --logdir .`" ] } ], "metadata": { "kernelspec": { "display_name": "torch", "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.11.8" } }, "nbformat": 4, "nbformat_minor": 5 }