Skip to content

Instantly share code, notes, and snippets.

@balouf
Created June 10, 2024 14:52
Show Gist options
  • Save balouf/39c050b693c2c7680f331cccf6a0482f to your computer and use it in GitHub Desktop.
Save balouf/39c050b693c2c7680f331cccf6a0482f to your computer and use it in GitHub Desktop.
Constellations - figure 3
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"id": "df9a5ef5",
"cell_type": "markdown",
"source": "# Reproduction figure 3 en modèle fluide"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2024-06-10T14:49:38.884513Z",
"end_time": "2024-06-10T14:49:39.257500Z"
},
"trusted": true
},
"id": "ef015159",
"cell_type": "code",
"source": "import numpy as np\nfrom matplotlib import pyplot as plt",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2024-06-10T14:49:39.259562Z",
"end_time": "2024-06-10T14:49:39.262555Z"
},
"trusted": true
},
"id": "7bfc74d2",
"cell_type": "code",
"source": "n = 50\nx = np.arange(1, n+1)",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"id": "c55258eb",
"cell_type": "markdown",
"source": "Approche fluide : il y a $x$ groupes de taille $n/x$ aux déviations près.\n- Communications intra-groupe : chaque groupe fait du total broadcast. Disons $(n/x)^2$ messages échangés pour chaque groupe, soit un total $n^2/x$.\n- Intergroupe : disons $x^2$.\n- On rajoute un $l$ (stretch factor underlay/overlay)"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2024-06-10T14:49:39.264566Z",
"end_time": "2024-06-10T14:49:39.356360Z"
},
"trusted": true
},
"id": "d275c577",
"cell_type": "code",
"source": "l = 2.1\ndef msg(g):\n return l*n**2/g+g**2\nplt.plot(x, [msg(g) for g in x], label='Modèle Fluide')\nxm = (l*n**2/2)**(1/3)\nplt.plot([xm], [msg(xm)], marker='x', linestyle='none', markersize=10, label='Minimum')\nplt.legend()\nplt.xlim([x[0], x[-1]])\nplt.ylim([0, None])\nplt.xlabel('x (# de groupes)')\nplt.ylabel('# Transmissions')\nplt.show()",
"execution_count": 3,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 640x480 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAGwCAYAAAC0HlECAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABivklEQVR4nO3deVxU1f8/8NfMwAzbzLAzrIIiCIqamoqWuSUZ2eLWomYulYaV2mL+zKVVs8x2rSzx8y0zNbXcIxdcwA1FUREFQVA2UWFYZJu5vz+IyRGXGRgcYF7Px2MeMfeeubyHUXl1zrnniARBEEBEREREdyQ2dwFEREREzQFDExEREZEBGJqIiIiIDMDQRERERGQAhiYiIiIiAzA0ERERERmAoYmIiIjIAFbmLqA50Gq1yM7Ohlwuh0gkMnc5REREZABBEFBcXAwvLy+IxQ3vJ2JoMkB2djZ8fX3NXQYRERHVQ1ZWFnx8fBp8HYYmA8jlcgA1P3SFQmHmaoiIiMgQarUavr6+ut/jDcXQZIDaITmFQsHQRERE1MyYamoNJ4ITERERGYChiYiIiMgADE1EREREBuCcJiIiMjuNRoOqqipzl0HNkFQqNclyAoZgaCIiIrMRBAG5ubkoLCw0dynUTInFYgQEBEAqlTb692JoIiIis6kNTO7u7rCzs+MCwmSU2sWnc3Jy4Ofn1+h/fhiaiIjILDQajS4wubi4mLscaqbc3NyQnZ2N6upqWFtbN+r34kRwIiIyi9o5THZ2dmauhJqz2mE5jUbT6N+LoYmIiMyKQ3LUEPfyzw9DExEREZEBGJqIiIiagaSkJCxcuPCeDEPRrTE0GeFqSYW5SyAiIguwe/duiEQivaUY2rdvj/j4eMyePfuWr/H398cXX3zRaDVlZGRAJBIhMTHR4NfMmzcPnTt3vmObF154AU8++WSDartXGJqMsO1UrrlLICIiM3vhhRcgEokwadKkOueioqIgEonwwgsvmPz7isVirFy5Env37sXmzZtNfn2gZn7QzY8HHnig3td78803sWPHDhNWaF5ccsAIxeXV5i6BiIiaAF9fX6xatQqLFy+Gra0tAKC8vBwrV66En59fo31fW1tb7N27t9GuDwDLly/HI488onvekEUjHRwc4ODgYIqymgT2NBmhpIKhiYioMQmCgLLK6nv+EATBqDq7dOkCX19frFu3Tnds3bp18PPzw3333afXtqKiAq+99hrc3d1hY2ODBx54AIcPH9Zrs2XLFgQFBcHW1hb9+vVDRkZGne+5b98+PPjgg7C1tYWPjw+ioqJQXFx82xoLCwsxceJEuLm5QaFQoH///jh+/Phd35ujoyNUKpXu4ezsfMt20dHRcHR01Du2YcMGvbvZbh6e02g0mD59OhwdHeHi4oK33367zs9eq9Vi/vz5CAgIgK2tLTp16oS1a9fete57gT1NRmBoIiJqXNerNAids/2ef9/T70fATmrcr8Tx48dj+fLlGDVqFADg559/xrhx47B79269dm+//Tb++OMPrFixAq1atcLChQsRERGB1NRUODs7IysrC0OHDkVUVBReeuklHDlyBG+88YbeNdLS0jB48GB89NFHWL58OS5fvozXXnsNL7/8MlauXHnL+kaMGAFbW1ts3boVSqUS33//PQYMGICzZ8/eNgg1tkWLFiE6Oho///wzQkJCsGjRIqxfvx79+/fXtZk/fz5++eUXLF26FG3btsWePXswevRouLm54aGHHjJL3bXY02SEEg7PERHRv0aPHo19+/bhwoULuHDhAvbv34/Ro0frtSktLcWSJUvw6aefYvDgwQgNDcWPP/4IW1tb/PTTTwCAJUuWoE2bNli0aBGCg4MxatSoOnOi5s+fjzFjxuC1115DYGAgwsPD8eWXX2LVqlUoLS2tU9u+fftw6NAhrFmzBt26dUPbtm3x2WefwdHR8a69Ns8++6xuWM3BwQEbNmxo0M/pRl988QVmzpyJoUOHIiQkBEuXLoVSqdSdr6iowMcff4yff/4ZERERaN26NV544QWMHj0a33//vcnqqC/2NBmhuII7cBMRNSZbawlOvx9hlu9rLDc3N0RGRiI6OhqCICAyMhKurq56bdLS0lBVVYXevXvrjllbW6N79+5ITk4GACQnJ6NHjx56rwsPD9d7fvz4cRw5cgRLliypU0d6ejo6dOhQp31JSUmd7WmuX7+OtLS0O76vxYsXY+DAgbrnnp6ed2xvqKKiIuTk5Oi9VysrK3Tr1k03RJeamoqysjI8/PDDeq+trKysM+xpDgxNRigt59oYRESNSSQSGT1MZk7jx4/HlClTAADffvtto32fkpISzJkzB++9957B7T09PesMFQKoMw/pZiqVCoGBgXf9HmKxuM58pNqtceqrpKQE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//XXX2PJkiV4/vnndccef/xxtG/fHvPmzbO40GQnlUAsArRCzRAdQxMREVHLZPTwXE5ODnr16lXneK9evZCTk2OSopoTkUgEBxnnNREREbV0RoemwMBArF69us7x33//HW3btjVJUc0Nt1IhIiJq+YweS3rvvffw9NNPY8+ePbo5Tfv378eOHTtuGaYsAVcFJyIiavmM7mkaNmwYDh48CFdXV2zYsAEbNmyAq6srDh06hKeeeqoxamzyakNTCRe4JCIiarHqNWu5a9eu+OWXX0xdS7PF4TkiIqKWz6DQpFaroVAodF/fSW07S8LhOSIiopbPoNDk5OSEnJwcuLu7w9HRESKRqE4bQRAgEomg0WhMXmRTx7vniIiIWj6DQtPOnTvh7OwMANi1a1ejFtQc/Tc8x9BERETUUhkUmh566KFbfk01uGkvERFRy2f03XPbtm3Dvn37dM+//fZbdO7cGc899xyuXbtm0uKaC949R0RE1PIZHZreeust3WTwpKQkTJ8+HY8++ijS09Mxffp0kxfYHHAiOBERUctn9JID6enpCA0NBQD88ccfGDJkCD7++GMcPXoUjz76qMkLbA7kMi45QERE1NIZ3dMklUpRVlYGAPjnn38waNAgAICzs/NdlyNoqRxqe5o4PEdERNRiGd3T9MADD2D69Ono3bs3Dh06hN9//x0AcPbsWfj4+Ji8wOaAw3NEREQtn9E9Td988w2srKywdu1aLFmyBN7e3gCArVu34pFHHjHqWkuWLEHHjh2hUCigUCgQHh6OrVu36s6Xl5cjKioKLi4ucHBwwLBhw5CXl6d3jczMTERGRsLOzg7u7u546623UF2tH152796NLl26QCaTITAwENHR0ca+7TtScEVwIiKiFs/oniY/Pz9s2rSpzvHFixcb/c19fHywYMECtG3bFoIgYMWKFXjiiSdw7NgxtG/fHtOmTcPmzZuxZs0aKJVKTJkyBUOHDsX+/fsBABqNBpGRkVCpVIiLi0NOTg6ef/55WFtb4+OPPwZQMwcrMjISkyZNwq+//oodO3Zg4sSJ8PT0REREhNE130rt4pblVVpUabSwlhidRYmIiKiJEwmCIBjzgqNHj8La2hphYWEAgD///BPLly9HaGgo5s2bB6lU2qCCnJ2d8emnn2L48OFwc3PDypUrMXz4cADAmTNnEBISgvj4ePTs2RNb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"
},
"metadata": {}
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2024-06-10T14:49:39.358717Z",
"end_time": "2024-06-10T14:49:39.376047Z"
},
"trusted": true
},
"id": "1ae338b4",
"cell_type": "code",
"source": "print(f\"Valeur optimale : {xm} -> {msg(xm):.1f} messages.\")",
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": "Valeur optimale : 13.794620881905601 -> 570.9 messages.\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"id": "fc2d0021",
"cell_type": "markdown",
"source": "# Remarques"
},
{
"metadata": {},
"id": "d8b5e400",
"cell_type": "markdown",
"source": "- C'est un modèle grossier, mais qui capture l'essence de la figure 3. \n- D'un point de vue externe, il est dérangeant que les performances en $x=1$ soient $l$ fois moins bonnes que pour $x=50$. En effet, il n'est pas facile de comprendre la différence, du point de vue messages échangés, entre 1 groupe de 50 individus et 50 groupes résuits à un individu.\n - Est-ce que les simus prennent bien en compte les messages inter-groupes physiques (underlay), et pas juste les messages logiques (overlay) ?\n - Si oui, est-ce que l'algo de communication inter-groupe ne pourrait pas s'appliquer en intra-groupe ?\n- Sur un unit disc graph, il peut sembler pertinent de réaliser une partition géométrique. Typiquement, je soupçonne qu'un K-means serait particulièrement adapté ici.\n- Si l'on suppose aucune perte, la solution optimale est de construire un spanning-tree, soit n-1 messages (voire moins si broadcast autorisé). Selon le modèle de pertes envisagé, il doit être possible de construire une version robuste (e.g. k-connecté) qui devrait être plus efficace que la version hiérachique présentée (typiquement $O(n)$ messages au lieu de $O(n^{4/3})$)"
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3 (ipykernel)",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.11.5",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"gist": {
"id": "",
"data": {
"description": "Constellations - figure 3",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment