{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Random walk on hypergraphs\n", "In this tutorial, we show how to simulate random walks on hypergraphs.\n", "\n", "Source: \n", "\n", "Carletti T., Battiston F., Cencetti G., Fanelli D., _Random walks on hypergraphs_, Physical Review E 101, 022308\n", "\n" ], "id": "cfe0799b" }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. admonition:: Definition\n", "\n", " A hypergraph random walk transitions between nodes via shared hyperedges, yielding a transition matrix.\n" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. admonition:: You will learn\n", "\n", " Build random-walk transition matrices and study diffusion behavior.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview\n", "\n", "- Build random-walk transition matrices for hypergraphs.\n", "- Explore how structure affects diffusion dynamics.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup\n" ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "import matplotlib as mpl\n", "\n", "mpl.rcParams.update({\n", " \"figure.figsize\": (6, 4),\n", " \"figure.dpi\": 120,\n", " \"savefig.dpi\": 150,\n", "})\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "from collections import Counter\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "sys.path.append(\"..\")\n", "from hypergraphx.core.hypergraph import Hypergraph\n", "from hypergraphx.linalg.linalg import *\n", "from hypergraphx.dynamics.randwalk import *\n", "from hypergraphx.generation.random import *\n", "\n", "np.random.seed(123)" ], "id": "34f31e07" }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Generate transition matrix" ], "id": "085e864a" }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "HG = random_hypergraph(10, {2: 100, 3: 20, 4: 5})" ], "id": "0be75817" }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "T = transition_matrix(HG)" ], "id": "14dbbb5e" }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAewAAAHFCAYAAAAwicqeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA30UlEQVR4nO3de1yUdd7/8feAMniCygNoElJ3JkalggcgtVJxPW1tB+2EuXnIRUuldgvNSt1k3U0jzUN2V+TuquxmrbZLt1LmodUsCax7dbU2FdbgJt0CtQSZuX5/mPPzakAZBphrxtfz8bgej+aa73Vdn2usPn4+1+FrMwzDEAAAsLQgXwcAAAAujIQNAIAfIGEDAOAHSNgAAPgBEjYAAH6AhA0AgB8gYQMA4AdI2AAA+AESNgAAfoCEjXqz2Wx1WrZs2eLrUF22bNniFlNubq6eeeaZGsd36dJF48aNa5LYfGXZsmXKzs72aJuafkcAjcvGq0lRXx9++KHp87x58/T+++9r8+bNpvXdu3dXWFhYU4ZWq4qKCu3du9cU09SpU7V06VLV9J9CQUGBwsLCdNVVVzV1qE0mLi5O7dq18yj51vQ7AmhczXwdAPxXv379TJ/bt2+voKAgt/U/9t1336lly5aNGVqtwsLCLhjfuXr27NmI0fif06dPy2azefw7AvAeLXE0qptuuklxcXHatm2bkpKS1LJlSz344IOSpJycHKWkpKhjx45q0aKFYmNj9cQTT+jkyZOmfYwbN06tW7fWF198oeHDh6t169aKiorSo48+qsrKStPY5cuX64YbblDr1q3Vpk0bdevWTTNnznR9/+NW7rhx47R06VJJ5hb/oUOHJNXcEi8qKtL999+vDh06yG63KzY2VgsXLpTT6XSNOXTokGw2m5577jktWrRIMTExat26tRITE906EzXJzs6WzWbT5s2bNXHiRLVt21ZhYWEaO3asTp48qdLSUo0ePVqXXHKJOnbsqMcee0ynT5827WPOnDnq27evLrvsMoWFhalXr1565ZVXTJ2ELl266B//+Ie2bt3qOvcuXbqYfqvf//73evTRR3X55ZfLbrfriy++cPsdjx49qqioKCUlJZni2Lt3r1q1aqXU1NQLnjOA86PCRqMrKSnR/fffr1/96leaP3++goLO/D3x888/1/DhwzV9+nS1atVK//znP7VgwQJ99NFHbm3106dP66c//anGjx+vRx99VNu2bdO8efMUHh6up556SpK0du1apaWl6eGHH9Zzzz2noKAgffHFF9q7d2+tsc2ePVsnT57UG2+8oZ07d7rWd+zYscbxX3/9tZKSklRVVaV58+apS5cu+utf/6rHHntM//rXv7Rs2TLT+KVLl6pbt27KyspyHW/48OE6ePCgwsPDL/jbTZgwQbfffrvWrl2rgoICzZw5U9XV1dq/f79uv/12TZo0Se+++64WLFigTp06KT093bXtoUOH9NBDD+mKK66QdOYSxsMPP6wjR464frO33npLd955p8LDw12x2+12UwwZGRlKTEzUihUrFBQUpA4dOqi0tNQ0pl27dlq7dq1uuukmPf7441q0aJG+++473XXXXbriiiu0YsWKC54rgAswgAbywAMPGK1atTKtGzhwoCHJeO+99867rdPpNE6fPm1s3brVkGTs2bPHtF9Jxp/+9CfTNsOHDzeuueYa1+epU6cal1xyyXmP8/777xuSjPfff9+1bsqUKUZt/ylER0cbDzzwgOvzE088YUgydu3aZRr3i1/8wrDZbMb+/fsNwzCMgwcPGpKM6667zqiurnaN++ijjwxJxpo1a84b52uvvWZIMh5++GHT+ttuu82QZCxatMi0vkePHkavXr1q3Z/D4TBOnz5tzJ0712jbtq3hdDpd31177bXGwIED3bY5+1sNGDCg1u/O/R0NwzAWLFhgSDLeeust44EHHjBatGhhfPrpp+c9VwB1Q0scje7SSy/VLbfc4rb+yy+/1L333qvIyEgFBwerefPmGjhwoCRp3759prE2m02jRo0yrbv++ut1+PBh1+c+ffro22+/1T333KP169fr6NGjDX4umzdvVvfu3dWnTx/T+nHjxskwDLfOwIgRIxQcHGyKWZIp7vMZOXKk6XNsbKxrvz9e/+N9bt68WYMHD1Z4eLjr933qqad07NgxlZWV1en4knTHHXfUeewvf/lLjRgxQvfcc49ef/11LVmyRNddd12dtwdQOxI2Gl1N7eUTJ06of//+2rVrl379619ry5Yt+vjjj/Xmm29Kkr7//nvT+JYtWyo0NNS0zm6369SpU67PqampevXVV3X48GHdcccd6tChg/r27au8vLwGO5djx47VeD6dOnVyfX+utm3busUsuZ9fbS677DLT55CQkFrXn/tb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K1fq+uuv93UolvPNN98oOTlZzZs31zvvvKO9e/dq4cKFuuSSS3wdmqUsWLBAK1as0Isvvqh9+/bpt7/9rX73u99pyZIlvg4NAcIvH+vydL5SSF9//bU6dOigrVu3asCAAb4Ox1JOnDihXr16admyZfr1r3+tHj16KCsry9dhWcYTTzyhv//973SxLmDkyJGKiIjQK6+84lp3xx13qGXLlvr973/vw8gQKPyuwq7PfKWQysvLJUmXXXaZjyOxnilTpmjEiBEaPHiwr0OxpA0bNighIUF33XWXOnTooJ49e+rll1/2dViWc+ONN+q9997TgQMHJEl79uzRBx98oOHDh/s4MgQKv3s1aX3mK73YGYah9PR03XjjjYqLi/N1OJaydu1affLJJ/r44499HYplffnll1q+fLnS09M1c+ZMffTRR3rkkUdkt9s1duxYX4dnGY8//rjKy8vVrVs3BQcHy+Fw6Nlnn9U999zj69AQIPwuYZ/VEHOLXiymTp2qTz/91OMXzQe64uJiTZs2TZs2bWryWYH8idPpVEJCgubPny9J6tmzp/7xj39o+fLlJOxz5OTk6A9/+INWr16ta6+9VoWFhZo+fbo6deqkBx54wNfhIQD4XcKuz3ylF7OHH35YGzZs0LZt2xp0WtNAkJ+fr7KyMsXHx7vWORwObdu2TS+++KIqKysVHBzswwitoWPHjurevbtpXWxsrNatW+ejiKzpl7/8pZ544gndfffdkqTrrrtOhw8fVmZmJgkbDcLvrmGfO1/pufLy8jyeWzSQGYahqVOn6s0339TmzZsVExPj65AsZ9CgQfrss89UWFjoWhISEnTfffepsLCQZP2D5ORkt0cCDxw44Jq9CGd89913Cgoy/y81ODiYx7rQYPyuwpYuPF8pztxItXr1aq1fv15t2rRxdSTCw8PVokULH0dnDW3atHG7pt+qVSu1bduWa/3nmDFjhpKSkjR//nyNHj1aH330kVauXKmVK1f6OjRLGTVqlJ599lldccUVuvbaa1VQUKBFixbpwQcf9HVoCBSGn1q6dKkRHR1thISEGL169TK2bt3q65AsRVKNy2uvvebr0Cxt4MCBxrRp03wdhuW8/fbbRlxcnGG3241u3boZK1eu9HVIllNRUWFMmzbNuOKKK4zQ0FDjyiuvNGbNmmVUVlb6OjQECL98DhsAgIuN313DBgDgYkTCBgDAD5CwAQDwAyRsAAD8AAkbAAA/QMIGAMAPkLABAPADJGygCXXp0oW5tgHUCwkb+JFx48bJZrPpN7/5jWn9X/7yF2aEA+AzJGygBqGhoVqwYIG++eYbX4cCAJJI2ECNBg8erMjISGVmZtY6Zt26dbr22mtlt9vVpUsXLVy40PR9WVmZRo0apRYtWigmJkZ//OMf3fZRXl6uSZMmqUOHDgoLC9Mtt9yiPXv2NPj5APB/JGygBsHBwZo/f76WLFmif//7327f5+fna/To0br77rv12Wef6ZlnntHs2bOVnZ3tGjNu3DgdOnRImzdv1htvvKFly5aprKzM9b1hGBoxYoRKS0uVm5ur/Px89erVS4MGDdJ//vOfpjhNAH7EL6fXBJrCz372M/Xo0UNPP/20XnnlFdN3ixYt0qBBgzR79mxJUteuXbV371797ne/07hx43TgwAG98847+vDDD9W3b19J0iuvvKLY2FjXPt5//3199tlnKisrk91ulyQ999xz+stf/qI33nhDkyZNaqIzBeAPqLCB81iwYIFef/117d2717R+3759Sk5ONq1LTk7W559/LofDoX379qlZs2ZKSEhwfd+tWzddcsklrs/5+fk6ceKE2rZtq9atW7uWgwcP6l//+lejnhcA/0OFDZzHgAEDNHToUM2cOVPjxo1zrTcMw+2O8XNnqj37z+e7q9zpdKpjx47asmWL23fnJnYAkEjYwAX95je/UY8ePdS1a1fXuu7du+uDDz4wjduxY4e6du2q4OBgxcbGqrq6Wrt371afPn0kSfv379e3337rGt+rVy+VlpaqWbNm6tKlS1OcCgA/RkscuIDrrrtO9913n5YsWeJa9+ijj+q9997TvHnzdODAAb3++ut68cUX9dhjj0mSrrnmGv3kJz/RxIkTtWvXLuXn52vChAlq0aKFax+DBw9WYmKibrvtNm3cuFGHDh3Sjh079OSTT2r37t1Nfp4ArI2EDdTBvHnzTC3vXr166U9/+pPWrl2ruLg4PfXUU5o7d66pbf7aa68pKipKAwcO1O233+56fOssm82m3NxcDRgwQA8++KC6du2qu+++W4cOHVJERERTnh4AP2Azzv2/EAAAsCQqbAAA/AAJGwAAP0DCBgDAD5CwAQDwAyRsAAD8AAkbAAA/QMIGAMAPkLABAPADJGwAAPwACRsAAD9AwgYAwA+QsAEA8AP/D7uZAo+xRNH3AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(T.todense())\n", "plt.colorbar()\n", "plt.xlabel(\"Node\")\n", "plt.title(\"Transition matrix\")\n", "plt.show()" ], "id": "68bdd3c0" }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "starting_node = 0\n", "time = 10000\n", "visited_nodes_over_time = random_walk(HG, starting_node, time)" ], "id": "ab039dc6" }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# how many times each node was visited\n", "visited_nodes = Counter(visited_nodes_over_time)\n", "# list to append the relative frequency of each node\n", "relative_frequency = []\n", "for k in set(visited_nodes.keys() ):\n", " relative_frequency.append(visited_nodes[k] / time)" ], "id": "1bad41b2" }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "starting_density = np.random.rand(HG.num_nodes())\n", "starting_density = starting_density / np.sum(starting_density)\n", "density_over_time = random_walk_density(HG, starting_density, time)" ], "id": "8bab2198" }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "stationary_state = RW_stationary_state(HG)" ], "id": "5401d173" }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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atWqSZIqVqxo82va5s2bq3nz5tbnb7/9tjZs2KBNmzbplVdeUeXKleXi4qLy5cvf9te7s2bNUlRUlIYMGSJJiouL0969ezVr1iy1bdvW2i8qKkovvviiJGnatGl6//33tW/fPj355JNyc3PTpEmTrH0DAwO1e/durV27Vj169LC2lytXTh9++KHNVoaOHTtq2bJleuihG3/st2zZMrVp00ZBQUEF1puWlqaWLVsqNDRUkmxWY2++V1WqVLGZ8xNPPGEzxgcffKBKlSpp586deuqpp275Hk+dOlWjRo1S//79JUlBQUGaMmWK3njjDU2YMOGW72lp9fnnn8vb21u5ubn67bffJEmzZ8+2vj5lyhS9++67evbZZyXd+JzcDGY33+P/dafPlbe3t7y8vJSdnX3bz3ifPn00e/ZsnT59Wv7+/srLy9OaNWs0ZswYSdJXX32lw4cPKysrSx4eHpJufF9s3LhRn376qV5++eV8Y9aoUUOurq7y9va2nvvs2bOSpBEjRljnWJh5r1q1Srm5uVq6dKnKli2rxo0b69///rcGDx5ciHf9/yns5/V238vz5s2Tj4+P1qxZY/1hpX79+tZjo6OjtWzZMr3++uuSpC+++EJXr161+T4H7hYrvIAJPffcc/rpp5+0adMmdezYUTt27FCrVq20fPny2x535coVvfHGG2rUqJEqVqwob29v/eMf/7Cu8BZWamqqWrdubdPWunVrpaam2rTdDODSjeBavnx5ZWVlWdsWLlyo0NBQVatWTd7e3lq8eHG+Wpo2bZpv3+7AgQP1ySef6LffftO1a9e0atUqDRgw4Jb1Dh48WGvWrFGLFi30xhtvaPfu3XecY1ZWlgYNGqT69evLx8dHPj4+unz58h3fq5u/sr65Eu/t7a2BAwcqIyNDV69eveN5S5u2bdsqJSVF3333nV599VV17NhRr776qiTp559/1pkzZxQdHW3zfr799ts6fvz4LccszOfqTlq2bKmGDRta9xLv3LlTWVlZ1pCWnJysy5cvq0qVKja1nTx58ra13crNH8YKO+/U1FQ1b95cZcuWtR4XFhZm93kL+3m93fdySkqKIiIibrnvOCoqSv/617+0d+9eSdLSpUvVo0cPlStXzu56gVthhRcwKU9PT3Xo0EEdOnTQW2+9pZiYGE2YMOGWv9aXpNdff11btmzRrFmzVK9e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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# column plot\n", "plt.figure(figsize=(8, 5))\n", "# I have to plot two bar plots to have two different colors, bars one next to the other\n", "\n", "\n", "plt.bar(range(HG.num_nodes()), stationary_state, alpha=0.7)\n", "plt.bar(range(HG.num_nodes()), relative_frequency, alpha=0.7)\n", "# one tick per node\n", "plt.xticks(range(HG.num_nodes()), range(HG.num_nodes()));\n", "plt.xlabel(\"Node\")\n", "plt.ylabel(\"Stationary state\")\n", "# label on top out of the plot\n", "plt.legend([\"Stationary state\", \"Relative frequency\"], bbox_to_anchor=(.8, 1.1), frameon=False, ncol=2)\n", "\n", "#plt.column(range(HG.num_nodes()), stationary_state)\n", "plt.show()" ], "id": "c4a3d035" } ], "metadata": { "kernelspec": { "display_name": "hgx-installation", "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.9.17" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 5 }