diff --git a/examples/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb b/examples/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb index e5d4d9a2af3..359c0b9c4d6 100644 --- a/examples/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb +++ b/examples/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb @@ -13,34 +13,130 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-10-16T08:29:53.853532Z", + "start_time": "2024-10-16T08:29:51.015398Z" + } + }, "source": [ "%matplotlib inline\n", "\n", - "from epstein_civil_violence.model import EpsteinCivilViolence" - ] + "from model import EpsteinCivilViolence" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ], + "application/javascript": "\n window.jupyter_python_executable = '\\r\\r';\n window.jupyter_widget_checks_silent = true;\n window.jupyter_widget_checks_libraries = [{\"python\": \"ipyvuetify\", \"classic\": \"jupyter-vuetify/extension\", \"lab\": \"jupyter-vuetify\"}, {\"python\": \"ipyvue\", \"classic\": \"jupyter-vue/extension\", \"lab\": \"jupyter-vue\"}];\n " + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "
\n", + " \n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 1 }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-10-16T08:32:17.393104Z", + "start_time": "2024-10-16T08:32:12.659183Z" + } + }, "source": [ "model = EpsteinCivilViolence(\n", - " height=40,\n", - " width=40,\n", - " citizen_density=0.7,\n", - " cop_density=0.074,\n", - " citizen_vision=7,\n", - " cop_vision=7,\n", - " legitimacy=0.8,\n", - " max_jail_term=1000,\n", - " max_iters=1000,\n", + " max_iters=100,\n", ") # cap the number of steps the model takes\n", - "model.run_model()" - ] + "while model.running:\n", + " model.step()" + ], + "outputs": [], + "execution_count": 8 }, { "cell_type": "markdown", @@ -51,45 +147,53 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-10-16T08:32:17.404310Z", + "start_time": "2024-10-16T08:32:17.394119Z" + } + }, "source": [ "model_out = model.datacollector.get_model_vars_dataframe()" - ] + ], + "outputs": [], + "execution_count": 9 }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-10-16T08:32:17.546891Z", + "start_time": "2024-10-16T08:32:17.413616Z" + } + }, + "source": [ + "ax = model_out.plot()\n", + "ax.set_title(\"Citizen Condition Over Time\")\n", + "ax.set_xlabel(\"Step\")\n", + "ax.set_ylabel(\"Number of Citizens\")\n", + "_ = ax.legend(bbox_to_anchor=(1.35, 1.025))" + ], "outputs": [ { "data": { - "image/png": "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\n", "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAusAAAHHCAYAAAAGfxbtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZwklEQVR4nO3dd3hU1dr38d+kh1RqioYkFIHQi0IERSESQDgiIKJRaYIHg4CgCEdpClJsSBdfFHwERSwIHGlSVUKAIL1jKAohSEhCQknb7x88zMMQkAxMmEny/VzXXDprrb33vdeQ7Dtr1l7bZBiGIQAAAAAOx8neAQAAAAC4MZJ1AAAAwEGRrAMAAAAOimQdAAAAcFAk6wAAAICDIlkHAAAAHBTJOgAAAOCgSNYBAAAAB0WyDgAAADgoknXgLgkLC1P37t0L1PaRRx7RI488UqjxFDdz5syRyWTS0aNHzWXW9GP37t0VFhZWKLGVVEePHpXJZNKcOXPsHQoAFFkk68AdOnLkiF566SVVqlRJHh4e8vX1VdOmTfXxxx/r4sWLN91u7969GjVqlEVyWZTc7nnb08mTJzVq1Cht377d3qHkc/bsWb3++uuqVq2aPDw8VKZMGUVHR2vp0qX2Ds3CqFGjZDKZbvnij00AsA0XewcAFGX//e9/9dRTT8nd3V0vvPCCatWqpaysLP366696/fXXtWfPHs2aNUuSdODAATk5/d/fx3v37tXo0aP1yCOP5BvRXbly5d08DatZc972dH0/njx5UqNHj1ZYWJjq1atnUffpp58qLy/vLkb3fw4cOKCWLVvqzJkz6tGjhxo1aqTU1FTNmzdP7du312uvvab33nvPLrFdr2PHjqpSpYr5fUZGhvr27asnn3xSHTt2NJcHBAQoNDRUFy9elKurqz1CBYBigWQduE2JiYnq2rWrQkNDtWbNGgUFBZnrYmNjdfjwYf33v/81l7m7uxd4325ubjaN1ZasPW97sqYf7ZVQZmdnq3Pnzjp37pw2bNigxo0bm+teffVVxcTE6P3331ejRo309NNP37W4cnJylJeXl68P69Spozp16pjf//333+rbt6/q1Kmj5557Lt9+PDw8Cj1WACjOmAYD3KaJEycqIyNDs2fPtkhYr6pSpYoGDBhgfn/tnPU5c+boqaeekiQ9+uij5qkD69atk5R/rnVYWNhNpxtc3UaS/vrrL/Xs2VMBAQFyd3dXzZo19dlnn1nEtW7dOplMJn3zzTcaO3as7r33Xnl4eKhly5Y6fPiwzc87JydH77zzjipXrix3d3eFhYXpP//5jy5fvmyxXVhYmNq1a6dff/1VDzzwgDw8PFSpUiV98cUX+Y6xZ88etWjRQp6enrr33ns1ZsyYG46KX9uP69at0/333y9J6tGjh7n/rs6nvtGc9czMTA0ePFghISFyd3dXtWrV9P7778swDIt2JpNJ/fr106JFi1SrVi1z3y9fvvyW/fndd99p9+7dGjp0qEWiLknOzs765JNP5O/vr1GjRkmSTp8+LRcXF40ePTrfvg4cOCCTyaSpU6eay1JTUzVw4EDzOVSpUkUTJkyw6K+rc8vff/99TZo0yfxZ7d2795bx/5MbzVnv3r27vL29dfz4cbVr107e3t665557NG3aNEnSrl271KJFC3l5eSk0NFTz58/Pt9+CnBMAFBeMrAO3acmSJapUqZIefPBBq7d9+OGH1b9/f02ePFn/+c9/VKNGDUky//d6kyZNUkZGhkXZRx99pO3bt6ts2bKSriRxTZo0MSeO5cuX17Jly9SrVy+lp6dr4MCBFtuPHz9eTk5Oeu2115SWlqaJEycqJiZG8fHxNj3vF198UXPnzlXnzp01ePBgxcfHa9y4cdq3b59++OEHi7aHDx9W586d1atXL3Xr1k2fffaZunfvroYNG6pmzZqSpKSkJD366KPKycnR0KFD5eXlpVmzZsnT0/Mf46hRo4befvttjRgxQn369NFDDz0kSTc9D8Mw9K9//Utr165Vr169VK9ePa1YsUKvv/66/vrrL3300UcW7X/99Vd9//33evnll+Xj46PJkyerU6dOOn78uPkzupElS5ZIkl544YUb1vv5+emJJ57Q3LlzdfjwYVWpUkXNmzfXN998o5EjR1q0XbBggZydnc1/CF64cEHNmzfXX3/9pZdeekkVK1bUxo0bNWzYMJ06dUqTJk2y2P7zzz/XpUuX1KdPH7m7u6tMmTI379A7kJubqzZt2ujhhx/WxIkTNW/ePPXr109eXl568803FRMTo44dO2rmzJl64YUXFBkZqfDw8Ns6JwAo8gwAVktLSzMkGU888USBtwkNDTW6detmfr9w4UJDkrF27dp8bZs3b240b978pvv65ptvDEnG22+/bS7r1auXERQUZPz9998Wbbt27Wr4+fkZFy5cMAzDMNauXWtIMmrUqGFcvnzZ3O7jjz82JBm7du266XGtPe/t27cbkowXX3zRovy1114zJBlr1qwxl4WGhhqSjA0bNpjLkpOTDXd3d2Pw4MHmsoEDBxqSjPj4eIt2fn5+hiQjMTHRXH59P27ZssWQZHz++ef5Yu3WrZsRGhpqfr9o0SJDkjFmzBiLdp07dzZMJpNx+PBhc5kkw83NzaJsx44dhiRjypQpN+8gwzDq1atn+Pn5/WObDz/80JBkLF682DAMw/jkk09u+FlFREQYLVq0ML9/5513DC8vL+PgwYMW7YYOHWo4Ozsbx48fNwzDMBITEw1Jhq+vr5GcnPyPsVzvzJkzhiRj5MiR+equ7vfa/u7WrZshyXj33XfNZefOnTM8PT0Nk8lkfP311+by/fv359t3Qc8JAIoLpsEAtyE9PV2S5OPjc9ePvXfvXvXs2VNPPPGE3nrrLUlXRoG/++47tW/fXoZh6O+//za/oqOjlZaWpm3btlnsp0ePHhbzka+ONP/xxx83Pba15/3TTz9JkgYNGmRRPnjwYEnKN7c9IiLCHIcklS9fXtWqVbOI6aefflKTJk30wAMPWLSLiYkpUEwF9dNPP8nZ2Vn9+/fPF7thGFq2bJlFeVRUlCpXrmx+X6dOHfn6+v5jf0rS+fPnb9mfV+uv9n/Hjh3l4uKiBQsWmNvs3r1be/futZjXvnDhQj300EMqXbq0xb+JqKgo5ebmasOGDRbH6dSpk8qXL/+PsdjKiy++aP5/f39/VatWTV5eXurSpYu5vFq1avL397foQ2vPCQCKOqbBALfB19dX0pVE625KT09Xx44ddc899+iLL76QyWSSJJ05c0apqamaNWvWTVdhSU5OtnhfsWJFi/elS5eWJJ07d+6mx7f2vI8dOyYnJyeL1UMkKTAwUP7+/jp27Ng/xnQ1rmtjOnbsWL653dKVxM6Wjh07puDg4HyJ9NWpSrcT+434+Pjo77///sc2V/v7aizlypVTy5Yt9c033+idd96RdGUKjIuLi8WKLIcOHdLOnTtvmoBf/2/i6lSTwubh4ZEvJj8/P917773mf9PXll/bh9aeEwAUdSTrwG3w9fVVcHCwdu/efVeP2717d508eVKbN282J86SzDfWPffcc+rWrdsNt712BQ/pys2LN2Jcd/PktW73vK9PwG7mdmJyFLcbe40aNbR9+3YdP378hgm/JO3cuVPSlW8eruratat69Oih7du3q169evrmm2/UsmVLlStXztwmLy9Pjz32mIYMGXLD/d53330W7281799WbtZXBelDa88JAIo6knXgNrVr106zZs1SXFycIiMjrd6+oAnsVePHj9eiRYv0/fffq3r16hZ15cuXl4+Pj3JzcxUVFWV1LNaw5rxDQ0OVl5enQ4cOWdw8e/r0aaWmpio0NNTq44eGhurQoUP5yg8cOHDLba3p89DQUP3888/5pqns37/fXG8L7dq101dffaUvvvjCPK3pWunp6frxxx9VvXp1i28oOnTooJdeesk8FebgwYMaNmyYxbaVK1dWRkZGof+buJuK4zkBwD9hzjpwm4YMGSIvLy+9+OKLOn36dL76I0eO6OOPP77p9l5eXpKuLEN3Kz///LPeeustvfnmm+rQoUO+emdnZ3Xq1Mm8DOD1zpw5c8tjFJQ15922bVtJyrdCx4cffihJevzxx60+ftu2bbVp0yZt3rzZXHbmzBnNmzfvltta0+dt27ZVbm6uxTKI0pVVeEwmk9q0aWNd4DfRuXNnRUREaPz48dq6datFXV5envr27atz587lW/nF399f0dHR+uabb/T111/Lzc0t37+NLl26KC4uTitWrMh33NTUVOXk5NjkHO6m4nhOAPBPGFkHblPlypU1f/58Pf3006pRo4bFkzw3btyohQsXmtdVv5F69erJ2dlZEyZMUFpamtzd3dWiRQtVqFAhX9tnnnlG5cuXV9WqVfXll19a1D322GMKCAjQ+PHjtXbtWjVu3Fi9e/dWRESEUlJStG3bNv38889KSUm56+ddt25ddevWTbNmzVJqaqqaN2+uzZs3a+7cuerQoYMeffRRq48/ZMgQ/c///I9at26tAQMGmJduDA0NNU8X+afY/f39NXPmTPn4+MjLy0uNGze+4Vzt9u3b69FHH9Wbb76po0ePqm7dulq5cqV+/PFHDRw40OJm0jvh5uamb7/9Vi1btlSzZs0snmA6f/58bdu2TYMHD1bXrl3zbfv000/rueee0/Tp0xUdHS1/f3+L+tdff12LFy9Wu3btzEtgZmZmateuXfr222919OhRi2kzRUFxPCcA+Ed2XIkGKBYOHjxo9O7d2wgLCzPc3NwMHx8fo2nTpsaUKVOMS5cumdtdv3SjYRjGp59+alSqVMlwdna2WMbx+iUHJd30de3Sj6dPnzZiY2ONkJAQw9XV1QgMDDRatmxpzJo1y9zm6tKNCxcutIjlRsvs2eK8s7OzjdGjRxvh4eGGq6urERISYgwbNsyizdX+efzxx/Md50bLWO7cudNo3ry54eHhYdxzzz3GO++8Y8yePfuWSzcahmH8+OOPRkREhOHi4mJxvtcv3WgYhnH+/Hnj1VdfNYKDgw1XV1ejatWqxnvvvWfk5eVZtJNkxMbG5ov9Rp/5zSQnJxuDBg0yqlSpYri7uxv+/v5GVFSUebnGG0lPTzc8PT0NScaXX355wzbnz583hg0bZlSpUsVwc3MzypUrZzz44IPG+++/b2RlZRmG8X+f/XvvvVegWK91O0s3enl55WvbvHlzo2bNmvnKb/TvoiDnBADFhckwisCdWwAAAEAJxJx1AAAAwEGRrAMAAAAOimQdAAAAcFAk6wAAAICDYulGAAAAB5aXl6esrCx7hwEbcXV1vekTm2+EZB0AAMBBZWVlKTExUXl5efYOBTbk7++vwMDAAj1Zm2S9APLy8nTy5En5+PhY/Yh4AABgH4Zh6Pz58woODpaTU9Gb+WsYhk6dOiVnZ2eFhIQUyXOAJcMwdOHCBSUnJ0uSgoKCbrkNyXoBnDx5UiEhIfYOAwAA3IYTJ07o3nvvtXcYVsvJydGFCxcUHBysUqVK2Tsc2Iinp6ckKTk5WRUqVLjllBi7JusbNmzQe++9p4SEBJ06dUo//PCDOnToIEnKzs7WW2+9pZ9++kl//PGH/Pz8FBUVpfHjxys4ONi8j5SUFL3yyitasmSJnJyc1KlTJ3388cfy9vY2t9m5c6diY2O1ZcsWlS9fXq+88oqGDBlS4Dh9fHwkXflh9/X1tc3JAwCAQpWenq6QkBDzdbyoyc3NlSS5ubnZORLY2tU/vrKzsx07Wc/MzFTdunXVs2dPdezY0aLuwoUL2rZtm4YPH666devq3LlzGjBggP71r39p69at5nYxMTE6deqUVq1apezsbPXo0UN9+vTR/PnzJV35QW3VqpWioqI0c+ZM7dq1Sz179pS/v7/69OlToDivTn3x9fUlWQcAoIgp6lNYi3r8yM+az9RkGIZRiLEUmMlkshhZv5EtW7bogQce0LFjx1SxYkXt27dPERER2rJlixo1aiRJWr58udq2bas///xTwcHBmjFjht58800lJSWZ/zIdOnSoFi1apP379xcotvT0dPn5+SktLY1kHQCAIqKoX78vXbqkxMREhYeHy8PDw97hwIas+WyL1J0KaWlpMplM8vf3lyTFxcXJ39/fnKhLUlRUlJycnBQfH29u8/DDD1t8hRQdHa0DBw7o3LlzNzzO5cuXlZ6ebvECAADA3XX06FGZTCZt377d3qHYTZFJ1i9duqQ33nhDzzzzjPmv46SkJFWoUMGinYuLi8qUKaOkpCRzm4CAAIs2V99fbXO9cePGyc/Pz/zi5lIAAADrnDhxQj179lRwcLDc3NwUGhqqAQMG6OzZswXeR0hIiE6dOqVatWoVYqS29cgjj2jgwIE221+RSNazs7PVpUsXGYahGTNmFPrxhg0bprS0NPPrxIkThX5MAACA4uKPP/5Qo0aNdOjQIX311Vc6fPiwZs6cqdWrVysyMlIpKSkF2o+zs7MCAwPl4lJyFzB0+GT9aqJ+7NgxrVq1ymLOWWBgoHmdyqtycnKUkpKiwMBAc5vTp09btLn6/mqb67m7u5tvJuWmUgAAAOvExsbKzc1NK1euVPPmzVWxYkW1adNGP//8s/766y+9+eabkq7cs7ho0SKLbf39/TVnzhxJN54Gs3v3brVp00be3t4KCAjQ888/r7///ttc/+2336p27dry9PRU2bJlFRUVpczMTHP9Z599ppo1a8rd3V1BQUHq16+fuS41NVUvvviiypcvL19fX7Vo0UI7duww148aNUr16tXT//zP/ygsLEx+fn7q2rWrzp8/L0nq3r271q9fr48//lgmk0kmk0lHjx69o7506GT9aqJ+6NAh/fzzzypbtqxFfWRkpFJTU5WQkGAuW7NmjfLy8tS4cWNzmw0bNig7O9vcZtWqVapWrZpKly59d04EAADgDhmGoQtZOXZ5WbMeSUpKilasWKGXX37ZvKb4VYGBgYqJidGCBQus2udVqampatGiherXr6+tW7dq+fLlOn36tLp06SJJOnXqlJ555hn17NlT+/bt07p169SxY0fzsWbMmKHY2Fj16dNHu3bt0uLFi1WlShXz/p966iklJydr2bJlSkhIUIMGDdSyZUuLbwKOHDmiRYsWaenSpVq6dKnWr1+v8ePHS5I+/vhjRUZGqnfv3jp16pROnTp1x9Op7fqdQkZGhg4fPmx+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vd1JSYqbuLg4NWvWTK1bt9Z///vfAm8XFhamgQMHauDAgeayp59+Wm3bti2EKB0fPxkOpmODe9Wxwb32DgMAAOCOzJ49W6+88opmz56tkydPKjg4+Lb35enpKU9PTxtGV3QwaRcAAKAoMAwpK9M+L8O6r0syMjK0YMEC9e3bV48//rjmzJljUb9kyRLdf//98vDwULly5fTkk09Kkh555BEdO3ZMr776qkwmk0z/e//DnDlz5O/vL0k6ePCgTCaT9u/fb7HPjz76SJUrVza/3717t9q0aSNvb28FBATo+eef199//21lp9sfI+sAAABFQfYF6d3bH52+I/85Kbl5Fbj5N998o+rVq6tatWp67rnnNHDgQA0bNkwmk0n//e9/9eSTT+rNN9/UF198oaysLP3000+SpO+//15169ZVnz591Lt37xvu+7777lOjRo00b948vfPOO+byefPm6dlnn5UkpaamqkWLFnrxxRf10Ucf6eLFi3rjjTfUpUsXrVmz5g464u4jWQcAAIBNzZ49W88995wkqXXr1kpLS9P69ev1yCOPaOzYseratatGjx5tbl+3bl1JUpkyZeTs7CwfHx8FBgbedP8xMTGaOnWqOVk/ePCgEhIS9OWXX0qSpk6dqvr16+vdd981b/PZZ58pJCREBw8e1H333Wfzcy4sJOsAAABFgWupKyPc9jp2AR04cECbN2/WDz/8IElycXHR008/rdmzZ+uRRx7R9u3bbzpqXlBdu3bVa6+9pk2bNqlJkyaaN2+eGjRooOrVq0uSduzYobVr18rb2zvftkeOHCFZBwAAgI2ZTFZNRbGX2bNnKycnx+KGUsMw5O7urqlTp9rkRtHAwEC1aNFC8+fPV5MmTTR//nz17dvXXJ+RkaH27dtrwoQJ+bYNCgq64+PfTSTrAAAAsImcnBx98cUX+uCDD9SqVSuLug4dOuirr75SnTp1tHr1avXo0eOG+3Bzc1Nubu4tjxUTE6MhQ4bomWee0R9//KGuXbua6xo0aKDvvvtOYWFhcnEp2ukuq8EAAADAJpYuXapz586pV69eqlWrlsWrU6dOmj17tkaOHKmvvvpKI0eO1L59+7Rr1y6LEfCwsDBt2LBBf/311z+u3tKxY0edP39effv21aOPPmoxkh8bG6uUlBQ988wz2rJli44cOaIVK1aoR48eBfpDwJGQrAMA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" }, + "metadata": {}, "output_type": "display_data" } ], - "source": [ - "ax = model_out.plot()\n", - "ax.set_title(\"Citizen Condition Over Time\")\n", - "ax.set_xlabel(\"Step\")\n", - "ax.set_ylabel(\"Number of Citizens\")\n", - "_ = ax.legend(bbox_to_anchor=(1.35, 1.025))" - ] + "execution_count": 10 }, { - "cell_type": "code", - "execution_count": null, "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [] + "execution_count": null, + "source": "" } ], "metadata": { diff --git a/examples/advanced/epstein_civil_violence/Readme.md b/examples/advanced/epstein_civil_violence/Readme.md index 2e715b33b99..84ac40ac6aa 100644 --- a/examples/advanced/epstein_civil_violence/Readme.md +++ b/examples/advanced/epstein_civil_violence/Readme.md @@ -18,8 +18,9 @@ Then open your browser to [http://127.0.0.1:8521/](http://127.0.0.1:8521/) and p ## Files -* ``EpsteinCivilViolence.py``: Core model and agent code. -* ``EpsteinCivilViolenceServer.py``: Sets up the interactive visualization. +* ``model.py``: Core model code. +* ``agent.py``: Agent classes. +* ``app.py``: Sets up the interactive visualization. * ``Epstein Civil Violence.ipynb``: Jupyter notebook conducting some preliminary analysis of the model. ## Further Reading diff --git a/examples/advanced/epstein_civil_violence/epstein_civil_violence/agent.py b/examples/advanced/epstein_civil_violence/agents.py similarity index 100% rename from examples/advanced/epstein_civil_violence/epstein_civil_violence/agent.py rename to examples/advanced/epstein_civil_violence/agents.py diff --git a/examples/advanced/epstein_civil_violence/app.py b/examples/advanced/epstein_civil_violence/app.py new file mode 100644 index 00000000000..f182570770d --- /dev/null +++ b/examples/advanced/epstein_civil_violence/app.py @@ -0,0 +1,70 @@ +from mesa.visualization import SolaraViz, Slider, make_space_matplotlib, make_plot_measure + +from agents import Citizen, Cop +from model import EpsteinCivilViolence + +COP_COLOR = "#000000" +AGENT_QUIET_COLOR = "#648FFF" +AGENT_REBEL_COLOR = "#FE6100" +JAIL_COLOR = "#808080" +JAIL_SHAPE = "rect" + + +def citizen_cop_portrayal(agent): + if agent is None: + return + + portrayal = { + "shape": "circle", + "x": agent.pos[0], + "y": agent.pos[1], + "filled": True, + } + + if isinstance(agent, Citizen): + color = AGENT_QUIET_COLOR if agent.condition == "Quiescent" else AGENT_REBEL_COLOR + color = JAIL_COLOR if agent.jail_sentence else color + shape = JAIL_SHAPE if agent.jail_sentence else "circle" + portrayal["color"] = color + portrayal["shape"] = shape + if shape == "rect": + portrayal["w"] = 0.9 + portrayal["h"] = 0.9 + else: + portrayal["r"] = 0.5 + portrayal["filled"] = False + portrayal["layer"] = 0 + + elif isinstance(agent, Cop): + portrayal["color"] = COP_COLOR + portrayal["r"] = 0.9 + portrayal["layer"] = 1 + + return portrayal + + +model_params = { + "height": 40, + "width": 40, + "citizen_density": Slider("Initial Agent Density", 0.7, 0.0, 0.9, 0.1), + "cop_density": Slider("Initial Cop Density", 0.04, 0.0, 0.1, 0.01), + "citizen_vision": Slider("Citizen Vision", 7, 1, 10, 1), + "cop_vision": Slider("Cop Vision", 7, 1, 10, 1), + "legitimacy": Slider("Government Legitimacy", 0.82, 0.0, 1, 0.01), + "max_jail_term": Slider("Max Jail Term", 30, 0, 50, 1), +} + +# space_component = make_space_matplotlib(citizen_cop_portrayal) +chart_component = make_plot_measure(["Quiescent", "Active", "Jailed"]) + +epstein_model = EpsteinCivilViolence() + +page = SolaraViz( + epstein_model, + components=[ + # space_component, + chart_component], + model_params=model_params, + name="Epstein Civil Violence", +) +page # noqa diff --git a/examples/advanced/epstein_civil_violence/epstein_civil_violence/__init__.py b/examples/advanced/epstein_civil_violence/epstein_civil_violence/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/examples/advanced/epstein_civil_violence/epstein_civil_violence/portrayal.py b/examples/advanced/epstein_civil_violence/epstein_civil_violence/portrayal.py deleted file mode 100644 index 80134adcc79..00000000000 --- a/examples/advanced/epstein_civil_violence/epstein_civil_violence/portrayal.py +++ /dev/null @@ -1,33 +0,0 @@ -from .agent import Citizen, Cop - -COP_COLOR = "#000000" -AGENT_QUIET_COLOR = "#0066CC" -AGENT_REBEL_COLOR = "#CC0000" -JAIL_COLOR = "#757575" - - -def citizen_cop_portrayal(agent): - if agent is None: - return - - portrayal = { - "Shape": "circle", - "x": agent.pos[0], - "y": agent.pos[1], - "Filled": "true", - } - - if isinstance(agent, Citizen): - color = ( - AGENT_QUIET_COLOR if agent.condition == "Quiescent" else AGENT_REBEL_COLOR - ) - color = JAIL_COLOR if agent.jail_sentence else color - portrayal["Color"] = color - portrayal["r"] = 0.8 - portrayal["Layer"] = 0 - - elif isinstance(agent, Cop): - portrayal["Color"] = COP_COLOR - portrayal["r"] = 0.5 - portrayal["Layer"] = 1 - return portrayal diff --git a/examples/advanced/epstein_civil_violence/epstein_civil_violence/server.py b/examples/advanced/epstein_civil_violence/epstein_civil_violence/server.py deleted file mode 100644 index 560b94e5468..00000000000 --- a/examples/advanced/epstein_civil_violence/epstein_civil_violence/server.py +++ /dev/null @@ -1,81 +0,0 @@ -import mesa - -from .agent import Citizen, Cop -from .model import EpsteinCivilViolence - -COP_COLOR = "#000000" -AGENT_QUIET_COLOR = "#648FFF" -AGENT_REBEL_COLOR = "#FE6100" -JAIL_COLOR = "#808080" -JAIL_SHAPE = "rect" - - -def citizen_cop_portrayal(agent): - if agent is None: - return - - portrayal = { - "Shape": "circle", - "x": agent.pos[0], - "y": agent.pos[1], - "Filled": "true", - } - - if type(agent) is Citizen: - color = ( - AGENT_QUIET_COLOR if agent.condition == "Quiescent" else AGENT_REBEL_COLOR - ) - color = JAIL_COLOR if agent.jail_sentence else color - shape = JAIL_SHAPE if agent.jail_sentence else "circle" - portrayal["Color"] = color - portrayal["Shape"] = shape - if shape == "rect": - portrayal["w"] = 0.9 - portrayal["h"] = 0.9 - else: - portrayal["r"] = 0.5 - portrayal["Filled"] = "false" - portrayal["Layer"] = 0 - - elif type(agent) is Cop: - portrayal["Color"] = COP_COLOR - portrayal["r"] = 0.9 - portrayal["Layer"] = 1 - - return portrayal - - -model_params = { - "height": 40, - "width": 40, - "citizen_density": mesa.visualization.Slider( - "Initial Agent Density", 0.7, 0.0, 0.9, 0.1 - ), - "cop_density": mesa.visualization.Slider( - "Initial Cop Density", 0.04, 0.0, 0.1, 0.01 - ), - "citizen_vision": mesa.visualization.Slider("Citizen Vision", 7, 1, 10, 1), - "cop_vision": mesa.visualization.Slider("Cop Vision", 7, 1, 10, 1), - "legitimacy": mesa.visualization.Slider( - "Government Legitimacy", 0.82, 0.0, 1, 0.01 - ), - "max_jail_term": mesa.visualization.Slider("Max Jail Term", 30, 0, 50, 1), -} -canvas_element = mesa.visualization.CanvasGrid(citizen_cop_portrayal, 40, 40, 480, 480) -chart = mesa.visualization.ChartModule( - [ - {"Label": "Quiescent", "Color": "#648FFF"}, - {"Label": "Active", "Color": "#FE6100"}, - {"Label": "Jailed", "Color": "#808080"}, - ], - data_collector_name="datacollector", -) -server = mesa.visualization.ModularServer( - EpsteinCivilViolence, - [ - canvas_element, - chart, - ], - "Epstein Civil Violence", - model_params, -) diff --git a/examples/advanced/epstein_civil_violence/epstein_civil_violence/model.py b/examples/advanced/epstein_civil_violence/model.py similarity index 91% rename from examples/advanced/epstein_civil_violence/epstein_civil_violence/model.py rename to examples/advanced/epstein_civil_violence/model.py index 8bf06bf1540..1761f80cd72 100644 --- a/examples/advanced/epstein_civil_violence/epstein_civil_violence/model.py +++ b/examples/advanced/epstein_civil_violence/model.py @@ -1,6 +1,6 @@ import mesa -from .agent import Citizen, Cop +from agents import Citizen, Cop class EpsteinCivilViolence(mesa.Model): @@ -43,8 +43,9 @@ def __init__( arrest_prob_constant=2.3, movement=True, max_iters=1000, + seed=None ): - super().__init__() + super().__init__(seed=seed) self.width = width self.height = height self.citizen_density = citizen_density @@ -59,9 +60,7 @@ def __init__( self.max_iters = max_iters self.iteration = 0 - self.grid = mesa.experimental.cell_space.OrthogonalMooreGrid( - (width, height), capacity=1, torus=True - ) + self.grid = mesa.experimental.cell_space.OrthogonalMooreGrid((width, height), capacity=1, torus=True, random=self.random) model_reporters = { "Quiescent": lambda m: self.count_type_citizens(m, "Quiescent"), @@ -144,3 +143,17 @@ def count_cops(model): Helper method to count jailed agents. """ return len(model.agents_by_type[Cop]) + + +if __name__ == "__main__": + + import mesa.experimental as experimental + + import sys + + print(sys.getrecursionlimit()) + + model = EpsteinCivilViolence() + import copy + # copy.deepcopy(model) + copy.deepcopy(experimental.cell_space.OrthogonalMooreGrid((100,100), torus=True, random=model.random)) \ No newline at end of file diff --git a/examples/advanced/epstein_civil_violence/requirements.txt b/examples/advanced/epstein_civil_violence/requirements.txt deleted file mode 100644 index da2b9972efd..00000000000 --- a/examples/advanced/epstein_civil_violence/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -jupyter -matplotlib -mesa~=2.0 diff --git a/examples/advanced/epstein_civil_violence/run.py b/examples/advanced/epstein_civil_violence/run.py deleted file mode 100644 index a4b62c855d8..00000000000 --- a/examples/advanced/epstein_civil_violence/run.py +++ /dev/null @@ -1,3 +0,0 @@ -from epstein_civil_violence.server import server - -server.launch(open_browser=True) diff --git a/examples/advanced/pd_grid/pd_grid/agent.py b/examples/advanced/pd_grid/agents.py similarity index 100% rename from examples/advanced/pd_grid/pd_grid/agent.py rename to examples/advanced/pd_grid/agents.py diff --git a/examples/advanced/pd_grid/analysis.ipynb b/examples/advanced/pd_grid/analysis.ipynb index e3f52170a1c..f8741fba07e 100644 --- a/examples/advanced/pd_grid/analysis.ipynb +++ b/examples/advanced/pd_grid/analysis.ipynb @@ -30,16 +30,16 @@ }, { "cell_type": "code", - "execution_count": 1, "metadata": {}, - "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "from pd_grid.model import PdGrid\n", + "from model import PdGrid\n", "\n", "%matplotlib inline" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -50,9 +50,7 @@ }, { "cell_type": "code", - "execution_count": 2, "metadata": {}, - "outputs": [], "source": [ "bwr = plt.get_cmap(\"bwr\")\n", "\n", @@ -73,13 +71,13 @@ " ax.pcolormesh(grid, cmap=bwr, vmin=0, vmax=1)\n", " ax.axis(\"off\")\n", " ax.set_title(f\"Steps: {model.steps}\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 3, "metadata": {}, - "outputs": [], "source": [ "def run_model(model):\n", " \"\"\"\n", @@ -98,17 +96,19 @@ " model.run(10)\n", " draw_grid(model, ax3)\n", " model.datacollector.get_model_vars_dataframe().plot(ax=ax4)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 4, "metadata": {}, - "outputs": [], "source": [ "# Set the random seed\n", "seed = 21" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -119,24 +119,13 @@ }, { "cell_type": "code", - "execution_count": 5, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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W878SjcAK9dtavJIJElSO/rpT3/KxIkTOf/883dPO+qoo1i0aBEf/ehHOeKII3jpS1/KkiVLgGrwHmz6LbfcwgknnMBZZ53FYYcdxvnnn8+uXbsA+PGPf8xxxx3HggULeNvb3samTdXcMnfuXC699FIWLVrEd77zHb761a/yile8giOPPJK3vOUtbN68mdtuu43rr7+ej370oxx11FHcf//9vPvd7+bqq6/evY2LL76YBQsW8NKXvnT31eT169dzyimnsGDBAt7//vdzyCGH8Pjjjw95HDZt2sQvfvELLr/88ucF6V27dvGBD3yAww8/nDPOOIPTTz99977vvPNOXvWqV3H00Ufzute9jsceewyAE088kQsuuIBjjjmG3t5e/v3f/51t27Zx0UUXsWTJEo466iiWLFnCz372M4466iiOOuooXv7yl7NxY/2qDEZsfxcRVwBnAOtSSkdk0z4HvAHYBtwPvCel9FQ272PA+4CdwH9MKf0om34q8N+A8cDXUkr/XPunUxu9WZBesWYjC14wrcmjkSRJRX3yf9/Lskefqek2DztwHy5+w+HDLnPPPfdw9NFH7zH9mmuu4e677+a3v/0tjz/+OK94xSs44YQTuO222wadDvDrX/+aZcuWccghh3DqqadyzTXXcOKJJ/LpT3+am266ialTp/KZz3yGL3zhC1x00UVAtVfyrbfeCsCGDRv467/+awA+8YlPcPnll/OhD32IN77xjZxxxhm89a1vHfQ5zJgxg7vuuot/+7d/4/Of/zxf+9rX+OQnP8lJJ53Exz72MX74wx9y2WWXDXscrrvuOk499VR6e3vZf//9ueuuu1iwYAHXXHMNDz74IL///e9Zt24dL3nJS3jve9/L9u3b+dCHPsT3vvc9Zs6cyZIlS/j4xz/OFVdcAcCOHTv49a9/zQ033MAnP/lJbrrpJi699FKWLl3Kv/7rvwLwhje8gS9/+cscf/zxbNq0iSlTpgw7xjJG00f6SuBfga/3m3Yj8LGU0o6I+AzwMeCCiDgMOBs4HDgQuCkierN1vgycAqwG7oiI61NKy2hBc6btxV4Tx7NirVekJUlS7dx6662cc845jB8/nkqlwqte9SruuOOOIafvs88+HHPMMRx66KEAnHPOOdx6661MmTKFZcuWcfzxxwOwbds2jjvuuN37+au/+qvd9++55x4+8YlP8NRTT7Fp0yZe97rXjWqsb37zmwE4+uijueaaa3aP/9prrwXg1FNPZdq04S84Ll68mA9/+MMAnH322SxevJgFCxZw66238ra3vY1x48Yxe/ZsXv3qVwOwfPly7rnnHk455RSgWppywAEHDDqmBx98cNB9Hn/88XzkIx/hne98J29+85uZM2fOqJ5vESMG6ZTSzyNi7oBpP+738Hag70+ZM4FvpZS2An+MiFXAMdm8VSmlBwAi4lvZsi0ZpMeNC3oqXaxc5wcOJUlqZyNdOa6Xww8/fHepQn8ppUGXH2o67NmuLSJIKXHKKaewePHiQdeZOnXq7vvvfve7ue666zjyyCO58sorueWWW0bxDGDy5MkAjB8/nh07dow4zoE2bNjAT37yE+655x4igp07dxIRfPaznx32OBx++OH88pe/HPWYBrrwwgt5/etfzw033MCxxx7LTTfdxItf/OJRjzuPWtRIvxf4QXb/IOCRfvNWZ9OGmt6yemZ1s9zOHZIkqYCTTjqJrVu38tWvfnX3tDvuuINp06axZMkSdu7cyfr16/n5z3/OMcccwwknnDDodKiWdvzxj39k165dLFmyhEWLFnHsscfyi1/8glWrVgGwefPmITuCbNy4kQMOOIDt27fzjW98Y/f07u7u3PXDixYt4tvf/jZQrdF+8sknh1z26quv5l3vehcPPfQQDz74II888gjz5s3j1ltvZdGiRXz3u99l165drF27dne4nz9/PuvXr98dpLdv386999477JgGPo/777+fl770pVxwwQUsXLiwbt1CoGSQjoiPAzuAvn+VwTpcp2GmD7bN8yJiaUQsXb9+fZnhldJb6WLdxq08vdnOHZIkKZ+I4Nprr+XGG2/khS98IYcffjiXXHIJ73jHO3jZy17GkUceyUknncRnP/tZZs+ezVlnnTXodIDjjjuOCy+8kCOOOIJ58+Zx1llnMXPmTK688krOOeccXvayl3HssccOGRg/9alP8cpXvpJTTjnleVdmzz77bD73uc/x8pe/nPvvv39Uz+viiy/mxz/+MQsWLOAHP/gBBxxwAN3d3YMuu3jxYs4666znTXvLW97CN7/5Td7ylrcwZ84cjjjiCN7//vfzyle+kn333ZdJkyZx9dVXc8EFF3DkkUdy1FFHcdtttw07ple/+tUsW7Zs94cNv/SlL3HEEUdw5JFHstde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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "m = PdGrid(50, 50, \"Sequential\", seed=seed)\n", "run_model(m)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -147,24 +136,13 @@ }, { "cell_type": "code", - "execution_count": 6, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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/oQQJsUYy9PZpuhnpC9/eBrT56/M6j5H7dSdS48fvc3rp06dyr777vuZ5ffffz+TJ0/m7bff5pNPPmG//fZjzJgxvPzyyw0uB3j99deZPn06u+yyC+PHj+f+++9n7Nix/OIXv+Dpp5+mS5cuXH311VxzzTVccsklQF2v5AkTJgBQWVnJt771LQAuvvhibrrpJs477zxOOOGEzYVzQ3r27Mmbb77J9ddfz29+8xv+8pe/cPnll3P44Ydz0UUX8fjjj3PjjTc2+jg9+OCDjB8/nmHDhrHjjjvy5ptvss8++3D//fczd+5cpkyZwuLFixk5ciRnn302Gzdu5LzzzuMf//gHvXr14q677uJnP/sZN998MwDV1dW8/vrrPProo1x++eU8/fTTXHHFFUycOJE//vGPABx//PFcd911HHLIIaxevZpOnTo1OkZJUm7U1kYq12yoK47rFcVb/7xy/Wdnkbt2bEef7h3p26MTB+1WtrlQ3lQ09+vRibKuHSktsThWYSv6QrqQTJgwgTPOOIPS0lL69OnDF77wBd54441tLu/evTv7778/u+66KwBnnHEGEyZMoFOnTkyfPp1DDjkEgA0bNnDQQQdtvp3TTjtt889Tp07l4osvZvny5axevZqjjz66WWM9+eSTAdh33325//77N4//gQceAGD8+PHssMMOje7jjjvu4IILLgDg9NNP54477mCfffZhwoQJfPnLX6akpIS+ffty2GGHAfDuu+8ydepUxo0bB9RFU/r169fgmObOndvgbR5yyCH84Ac/4Gtf+xonn3wyAwYMaNb9lSQls2LtRmYuXMm7i1YxY8EqZi9exfzl61m8aj0ba7acRS4J0LNrXYE8qKwLB+5atsWMcp/U964dLT/UOhT9K7mxmeNcGT16NPfee+9nlm8rJtNYfGbrt6JCCMQYGTduHHfccUeD23Tp0mXzz9/4xjd48MEH2XPPPbnlllt4/vnnm3EPoGPHjgCUlpZSXV3d5Di3VllZybPPPsvUqVMJIVBTU0MIgf/+7/9u9HEYPXo0r7zySrPHtLULL7yQY489lkcffZQDDzyQp59+OicfcpSktmZDdS3vf7KamQtWMXPhqrrieeEqFqz4tDd/j+3aM7xPN/YfvGOqQO64RYHcq2tH2pU26xQVUqvgqz2Bww8/nKqqKv785z9vXvbGG2+www47cNddd1FTU8OSJUt48cUX2X///RkzZkyDy6Eu2vHBBx9QW1vLXXfdxaGHHsqBBx7ISy+9xOzZswFYu3Yts2bNanAsq1atol+/fmzcuJHbbrtt8/Ju3bqxatWqtO7XoYceyt133w3Ak08+ybJly7a57r333suZZ57Jhx9+yNy5c5k3bx6DBw9mwoQJHHroodx3333U1tayaNGizcX98OHDWbJkyeZCeuPGjUyb1ngHxK3vx5w5c9hjjz34yU9+Qnl5+eZctiSpeWKMzF++judmLub652dz/p1vcfRvX2TUJY8z/tp/ccFdk7lpwvssXLGeAwZkxGrAAAAgAElEQVTvyE/Gj+Cv39yPVy46nMmXjOPu7xzEb0/biwu/OIJvHDKY8bv3Y++BO9Cvx3YW0Wpzin5GOh9CCDzwwANccMEFXHXVVXTq1Glz+7vVq1ez5557bp6d7du3LyeddBKvvPLKZ5bPnDmTgw46iAsvvJApU6YwZswYTjrpJEpKSrjllls444wzqKqqAuAXv/hFgx1BrrzySg444AB22WUX9thjj81F5+mnn863vvUtfv/73zc4e96QSy+9lDPOOIO77rqLL3zhC/Tr1+8zH+Tb5I477uDCCy/cYtkpp5zC7bffznXXXcczzzzD7rvvzrBhwzjggAPo0aMHHTp04N577+U//uM/WLFiBdXV1VxwwQWMHr3tdxUOO+wwrrrqKvbaay8uuugiJkyYwHPPPUdpaSmjRo3ii1/8YrPumyS1RavWb2TWotQM84JVvJuaaa6fW96pRydG9OvO4SN7M6JvN0b07c7gnl3o0M6iWGqKXTvy6Pnnn+c3v/kNjzzySL6HAkBVVRWlpaW0a9eOV155he9+97tMnjy56Q0bsHr1arp27UplZSX7778/L730En379s3yiBvWWl4fktRc1TW1fPDJmi0iGTMXrqJi2brN63Tt2I7hfbuliuVujOjXnWF9utFju/Z5HLlUONpk1w5lz0cffcRXvvIVamtr6dChwxbRlXQdd9xxLF++nA0bNvDzn/+8xYpoSWrtYoy8U7GC1z6o3DzTPHvJ6s1n5SstCezaswt77bw9Z+w/kOF9ujG8bzcG7LCdLeKkLLOQzqOxY8cyduzYfA9js6FDh/LWW29tsayyspIjjjjiM+s+88wzlJWVbXNfzf3QoySpaTFG3q5YwaNTFvDolAWbZ5r7dO/I8L7dOXRoT0b0rSuYh/TuSsd2npxDagkW0mpUWVlZ4niHJCm5+sXzP99ZwMfL19G+NHDIkJ6cf8RQDh/Rm7KuHfM9TKlNK9pCOsboW1T6jELP/EtSYzYVz/98Zz6PTlm4uXg+dEhPLjhyKEeN6kuPzmaapUJRlIV0p06dqKyspKyszGJam8UYqays9GyHkopKjJHJ85anYhtbFs/fHzeMcSP7WDxLBaooC+kBAwZQUVHBkiVL8j0UFZhOnTp5tkNJBW9bxfPnh/ayeJaKSJOFdAhhZ+BWoC9QC9wYY/xdCOHXwPHABmAO8M0Y4/IQwiBgBvBuahevxhi/k9rXvsAtwHbAo8D5McF78e3bt2fw4MHpbiZJUt5sKp7/+c4CHpu6ZfH8g3HDOHJUH1vRSUWmOTPS1cAPY4xvhhC6AZNCCE8BTwEXxRirQwhXAxcBP0ltMyfGuFcD+7oBOAd4lbpCejzwWKZ3QpKkQhRj5K15y3l0q+J5jMWz1Co0WUjHGBcAC1I/rwohzAD6xxifrLfaq8Cpje0nhNAP6B5jfCV1+VbgRCykJUmtyKbi+Z/vLOCxKQuYv2I9HUpL+PzQnhbPUiuTVkY6FdvYG3htq6vOBu6qd3lwCOEtYCVwcYzxX0B/oKLeOhWpZZIkFbXa2tTM85Qti+cxw3ryo6OHc+SoPnTvZPEstTbNLqRDCF2B+4ALYowr6y3/GXXxj9tSixYAA2OMlalM9IMhhNFAQ+01GsxHhxDOoS4CwsCBA5s7REmSWsy2Zp4tnqW2o1mFdAihPXVF9G0xxvvrLT8LOA44YtOHBmOMVUBV6udJIYQ5wDDqZqDrt1MYAMxv6PZijDcCNwKUl5fbGFiSVBBijMxcuIqH3p7Pw2/Pp2LZus3F84/HD+eIkRbPUlvSnK4dAbgJmBFjvKbe8vHUfbjwCzHGtfWW9wKWxhhrQgi7AkOB92OMS0MIq0IIB1IXDTkT+EN2744kSdn3UeVaHnr7Y/4xeT7vLV5NaUmqz/ORwxg32uJZaquaMyN9CPB1YEoIYdO5on8K/B7oCDyVOinKpjZ3Y4ArQgjVQA3wnRjj0tR23+XT9neP4QcNJUkFavHK9Tz8zgIeens+b89bDsB+g3bgyhN355jd+3p6bkmEQj+lcnl5eZw4cWK+hyFJagNWrN3IY1PriudX3q8kRhi9U3dO2HMnjttzJ/pvv12+hygpR0IIk2KM5elsU5RnNpQkKVvWbqjmqemLePjt+bwwawkbayKDe3bhvMOHcsKeOzGkd9d8D1FSgbKQliS1ORuqa3lx1hIeens+T01fxLqNNfTt3olvHDyIE/bsz+79u5OKLUrSNllIS5LahJrayGsfVPLQ5Pk8NnUhK9ZtZPvO7Tlpn/6csOdO7D9oR0pKLJ4lNZ+FtCSp1Yox8nbFCh6aPJ9H3pnP4lVVdO5QylGj+vClvfpz6NCetC8tyfcwJRUpC2lJUqvz3qK6Xs8PvT2fDyvX0qG0hLHDe3HCXjtxxIg+bNehNN9DlNQKWEhLklqFeUvX8vA783lo8nxmLlxFSYCDd+vJ98YO4ejd+9JjO3s9S8ouC2lJUtFasW4jD789nwfe+phJHy4DYJ+B23PZ8aM45nP96N2tU55HKKk1s5CWJBWV2trIS3M+4Z6JFTwxbSFV1bUM69OVHx89nBP23Imdd+yc7yFKaiMspCVJReGjyrXcO2ke906qYP6K9XTv1I7T9tuZL++7s+3qJOWFhbQkqWCt3VDNo1MWcs/Eebz2wVJCgM8P7cVFx4xk3Kg+dGrvhwYl5Y+FtCSpoMQYmfjhMu6ZOI9/vrOANRtqGFTWmR8fPZyT9+lPvx6epltSYbCQliQVhIUr1nPfmxXcO6mCDz5ZQ+cOpRy7Rz++st/OlO+yg9ENSQXHQlqSlDdV1TU8NX0R90ys4F/vLaE2wv6Dd+Tfx+7GMXv0o0tH/5uSVLj8DSVJalExRqbNX8k9E+fx4OT5rFi3kX49OvG9w4Zw6r4D2KWsS76HKEnNYiEtSWoRlaureHDyfO6ZOI+ZC1fRoV0JR4/uy5f3HcAhQ3pSWmJ0Q1JxabKQDiHsDNwK9AVqgRtjjL8LIewI3AUMAuYCX4kxLgt1IbbfAccAa4FvxBjfTO3rLODi1K5/EWP8W3bvjiSpkFTX1PLCrCXcPXEez85czMaayJ4DenDlibtzwud2okdnzzYoqXg1Z0a6GvhhjPHNEEI3YFII4SngG8AzMcarQggXAhcCPwG+CAxNfR0A3AAckCq8LwXKgZjaz0MxxmXZvlOSpPyavXgV90ys4P63PmbJqip6du3ANw4exKn77szwvt3yPTxJyoomC+kY4wJgQernVSGEGUB/4EvA2NRqfwOep66Q/hJwa4wxAq+GELYPIfRLrftUjHEpQKoYHw/ckcX7I0nKk5Xr607Xfc/ECibPW067ksBhI3rz5X0HcNiI3rQvLcn3ECUpq9LKSIcQBgF7A68BfVJFNjHGBSGE3qnV+gPz6m1WkVq2reWSpCK1cMV6npqxiKemL+LVOZVsqKlleJ9uXHzsSE7cuz89u3bM9xAlKWeaXUiHELoC9wEXxBhXNtLPs6ErYiPLG7qtc4BzAAYOHNjcIUqScizGyMyFq3hqel3xPOXjFQAMKuvMWQfvwnGf24nPDehhz2dJbUKzCukQQnvqiujbYoz3pxYvCiH0S81G9wMWp5ZXADvX23wAMD+1fOxWy59v6PZijDcCNwKUl5c3WGxLklrGxppa3pi7dHPxXLFsHSHAXjtvz3+OH85Ro/qwW6+uFs+S2pzmdO0IwE3AjBjjNfWuegg4C7gq9f0f9ZafG0K4k7oPG65IFdtPAP8VQtghtd5RwEXZuRuSpGxaXVXNC+8u4anpC3nu3SWsWLeRDu1KOHRIT7532BCOGNmb3t065XuYkpRXzZmRPgT4OjAlhDA5teyn1BXQd4cQ/g34CPhy6rpHqWt9N5u69nffBIgxLg0hXAm8kVrvik0fPJQk5d+mvPPT0xfxSirvvEPn9hw5sg/jRvVhzLCedO7g6QckaZNQ11yjcJWXl8eJEyfmexiS1OrEGHl30SqemraIp2Ys4p2KurzzLmWdGZcqnvfdZQfa2W1DUhsQQpgUYyxPZxunFiSpDamuqeX1VN756RmLmLd0HVCXd/7x0XV55yG9zTtLUnNYSEtSK7cp7/z0jEU8O3PxFnnn735hCEeO7E3v7uadJSldFtKS1AotWrl+c5eNTXnn7Tu354iRvTlqVB8+P7QXXTr6X4AkZcLfopLUSsQYeXzqQv70whzeTuWdB+7Yma8ftAvjRvWh3LyzJGWVhbQktQIzF67k8oem88r7lQzp3ZUfHz2ccaP6MNS8syTljIW0JBWxZWs2cM1Ts7jttQ/pvl17rvzSaM7Yf6Azz5LUAiykJakIVdfUcvvrH3HNU7NYuW4j/+fAXfj+kcPYoUuHfA9NktoMC2lJKjIvz/mEKx6ezsyFqzho1zIuPWEUI/p2z/ewJKnNsZCWpCIxb+la/uvRGTw2dSH9t9+OG762D+N372sGWpLyxEJakgrc2g3V/On5Ofy/F9+nJAR+OG4Y3xqzK53al+Z7aJLUpllIS1KBijHy8DsL+NWjM1iwYj0n7LkTF35xBDttv12+hyZJwkJakgrS1I9XcMXD03l97lJG79Sd35+xN/sN2jHfw5Ik1WMhLUkFpHJ1Fb95chZ3vvERO3TuwK9O3oOvlO9MaYk5aEkqNBbSklQANtbUcusrH3Lt07NYt6GGbx48mPOPHEqP7drne2iSpG2wkJakPHtx1hKueGQ6sxev5vNDe3Lp8aMY0rtbvoclSWpCk4V0COFm4DhgcYxx99Syu4DhqVW2B5bHGPcKIQwCZgDvpq57Ncb4ndQ2+wK3ANsBjwLnxxhj1u6JJBWZDyvXcOUjM3h6xiJ2KevMX84s54iRvW1nJ0lFojkz0rcAfwRu3bQgxnjapp9DCP8DrKi3/pwY414N7OcG4BzgVeoK6fHAY+kPWZKK25qqav743Gxu+tcHtC8N/GT8CM4+dBAd29nOTpKKSZOFdIzxxdRM82eEummTrwCHN7aPEEI/oHuM8ZXU5VuBE7GQltSG1NZGHpz8MVc9NpPFq6o4eZ/+/GT8CPp075TvoUmSEsg0I/15YFGM8b16ywaHEN4CVgIXxxj/BfQHKuqtU5Fa1qAQwjnUzV4zcODADIcoSfn39rzlXPbwNN76aDl7DujBn76+L/sM3CHfw5IkZSDTQvoM4I56lxcAA2OMlalM9IMhhNFAQ4G/beajY4w3AjcClJeXm6OWVLQWr1rPrx9/l3smVdCza0d+fernOGWfAZTYzk6Sil7iQjqE0A44Gdh307IYYxVQlfp5UghhDjCMuhnoAfU2HwDMT3rbklToNlTXcsvLH/D7Z2ZTVV3Dt8fsyrmHD6FbJ9vZSVJrkcmM9JHAzBjj5shGCKEXsDTGWBNC2BUYCrwfY1waQlgVQjgQeA04E/hDJgOXpEL1/LuLueLh6bz/yRqOGNGbnx07kl17dc33sCRJWdac9nd3AGOBniGECuDSGONNwOlsGesAGANcEUKoBmqA78QYl6au+y6ftr97DD9oKKmV+ahyLVf+czpPTV/E4J5d+Os39+Ow4b3zPSxJUo6EQm/lXF5eHidOnJjvYUjSNq3bUMMNz8/mTy++T7uSwHmHD7WdnSQVmRDCpBhjeTrbeGZDSUooxshjUxfyy3/O4OPl6/jSXjtx0RdH0reH7ewkqS2wkJakBN5btIrLHp7GS7MrGdG3G3d/+yD2H7xjvoclSWpBFtKSlIaV6zfyu6ff428vz6Vzh1Ku+NJovrr/QNqVluR7aJKkFmYhLUnNUFsbuf+turMSVq6p4vT9duZHRw2nrGvHfA9NkpQnFtKS1ISpH6/gkn9M5c2PlrP3wO25+RvlfG7A9vkeliQpzyykJWkblq7ZwK+feJc73/iIsi4dPCuhJGkLFtKStJWa2sjtr33Ib56cxeqqas4+ZDDnHzmU7p6VUJJUj4W0JNXzxtylXPKPacxYsJKDdyvjshNGM6xPt3wPS5JUgCykJQlYtHI9v3p0Bg9Ons9OPTpx/df24Yu79yUEYxySpIZZSEtq0zZU13LzSx/wh2feY2Nt5LzDh/DdsbvRuYO/HiVJjfN/Cklt1guzlnD5Q9N4/5M1HDmyNz8/bhS7lHXJ97AkSUXCQlpSmzNv6VqueGQ6T01fxOCeXfjrN/fjsOG98z0sSVKRsZCW1Gas21DDDS/M4U8vzKFdSeA/xw/n3w4dTMd2pfkemiSpCFlIS2r1Yow8MW0hVz4yg4+Xr+OEPXfiomNG0K/HdvkemiSpiJU0tUII4eYQwuIQwtR6yy4LIXwcQpic+jqm3nUXhRBmhxDeDSEcXW/5+NSy2SGEC7N/VyTps2YvXsXXb3qd7/zvm3Tr1I47zzmQ35+xt0W0JCljzZmRvgX4I3DrVst/G2P8Tf0FIYRRwOnAaGAn4OkQwrDU1dcB44AK4I0QwkMxxukZjF2Stmn52g387pn3+PsrH9K5QymXnzCarx0wkHalTc4fSJLULE0W0jHGF0MIg5q5vy8Bd8YYq4APQgizgf1T182OMb4PEEK4M7WuhbSkrNpYU8vtr33Eb5+excp1Gzltv4H86KhhlHXtmO+hSZJamUwy0ueGEM4EJgI/jDEuA/oDr9ZbpyK1DGDeVssPyOC2Jekznnt3Mb94ZDpzlqzhkCFlXHzsKEb2657vYUmSWqmkhfQNwJVATH3/H+BsoKFTgEUazmLHbe08hHAOcA7AwIEDEw5RUlvx3qJV/OKfM3hh1hIG9+zCn88s58iRvT0roSQppxIV0jHGRZt+DiH8GXgkdbEC2LneqgOA+amft7W8of3fCNwIUF5evs2CW1LbtnTNBq59eha3vfYRnTuUcvGxIznzoEF0aGcOWpKUe4kK6RBCvxjjgtTFk4BNHT0eAm4PIVxD3YcNhwKvUzdTPTSEMBj4mLoPJH41k4FLars2VNfy91c/5HdPz2LNhhq+uv9Avj9uGDt26ZDvoUmS2pAmC+kQwh3AWKBnCKECuBQYG0LYi7p4xlzg2wAxxmkhhLup+xBhNfC9GGNNaj/nAk8ApcDNMcZpWb83klq1GCPPzFjMLx+dwQefrOHzQ3vy8+NGMaxPt3wPTZLUBoUYCzs5UV5eHidOnJjvYUjKs5kLV/KLR2YwYfYn7NarCxcfO4qxw3uZg5YkZUUIYVKMsTydbTyzoaSC9snqKq55ahZ3vv4R3Tq157LjR/G1A3ehvf2gJUl5ZiEtqSBVVdfwt5fn8odnZrNuYw1nHTyI848YyvadzUFLkgqDhbSkghJj5Ilpi/jVYzP4sHIth4/ozU+PGcmQ3l3zPTRJkrZgIS2pYEybv4IrH5nOq+8vZVifrtx69v6MGdYr38OSJKlBFtKS8m7xqvVc8+Qs7po4j+23a8+VJ+7OGfvtTDtz0JKkAmYhLSlv1m+s4eaXPuC6Z2ezoaaW/3voYM49fCg9tmuf76FJktQkC2lJLS7GyKNTFvKrx2ZQsWwd40b14afHjGRwzy75HpokSc1mIS2pRU2pWMEVj0zjjbnLGNG3G7f/3wM4eEjPfA9LkqS0WUhLahGLVq7n10+8y31vVlDWpQO/OnkPvlK+M6UlnlBFklScLKQl5dSyNRv460sf8JcJH1BdE/n2mN343mG70a2TOWhJUnGzkJaUE4tXrufP/3qf2177iLUbajhmj75cOH4kA8s653tokiRlhYW0pKyat3Qtf3phDvdMqqCmNnLCnjvx3bG7MaxPt3wPTZKkrLKQlpQVsxev4vrn5/CPyfMpDYFT9h3Ad7+wmzPQkqRWy0JaUkamfryC656bzePTFtKpXSnfOHgQ3/r8rvTt0SnfQ5MkKacspCUl8sbcpfzx2dm8MGsJ3Tq149zDhvCNgwdR1rVjvocmSVKLaLKQDiHcDBwHLI4x7p5a9mvgeGADMAf4ZoxxeQhhEDADeDe1+asxxu+kttkXuAXYDngUOD/GGLN5ZyTlVoyRF9/7hOuenc3rc5dS1qUDPz56OF8/aBe624VDktTGNGdG+hbgj8Ct9ZY9BVwUY6wOIVwNXAT8JHXdnBjjXg3s5wbgHOBV6grp8cBjCcctqQXV1kaenL6Q656bw5SPV9CvRycuPX4Up+83kO06lOZ7eJIk5UWThXSM8cXUTHP9ZU/Wu/gqcGpj+wgh9AO6xxhfSV2+FTiRAi2kH5+6gI7tSzlseO98D0XKq+qaWh5+Zz7XPzeH9xavZpeyzlx18h6cvM8AOrQryffwJEnKq2xkpM8G7qp3eXAI4S1gJXBxjPFfQH+got46FallBSfGyE0TPuCNucs4ZZ8B/Py4kWzfuUO+hyW1qKrqGu6dVMGfXpjDvKXrGN6nG787fS+O3aMf7UotoCVJggwL6RDCz4Bq4LbUogXAwBhjZSoT/WAIYTTQ0DmAt5mPDiGcQ10MhIEDB2YyxLSFEPjf/3sAf3x2Ntc/P4cX31vCL07cnaNH923RcUj5sHZDNbe/9hF//tf7LFpZxZ47b88lx43miBG9KfFU3pIkbSFxIR1COIu6DyEeselDgzHGKqAq9fOkEMIcYBh1M9AD6m0+AJi/rX3HGG8EbgQoLy9v8Q8kdmxXyg+PGs7Ro/vy43vf4dt/n8Rxn+vH5SeMtiOBWqUV6zbyt5fn8teXPmDZ2o0ctGsZ13xlLw7erYwQLKAlSWpIokI6hDCeug8XfiHGuLbe8l7A0hhjTQhhV2Ao8H6McWkIYVUI4UDgNeBM4A+ZDz+3du/fg4fOPYQ/PT+H3z/7Hi/PqeSyE0Zz/Of6WVyoVViyqoqbX/qAv7/yIaurqjl8RG++d9gQ9t1lh3wPTZKkghea6kAXQrgDGAv0BBYBl1LXpaMjUJla7dUY43dCCKcAV1AX96gBLo0xPpzaTzmftr97DDivOe3vysvL48SJE9O+Y9k2a9EqfnzP27xdsYJxo/rwyxN3p3d3Tzih4jR/+TpufPF97nj9IzbU1HLMHv3497G7MXqnHvkemiRJeRFCmBRjLE9rm0Jv5VwohTTUdTC4+aUP+J8nZ9GxXQk/P24Up+47wNlpFY0PPlnDDc/P5oG3PiZGOGnv/nx37G7s2qtrvocmSVJeWUi3kPeXrOYn973DG3OXMWZYL3518h703367fA9L2qaNNbVc99xs/vDsbEpLAqfvtzPnjNmVATt0zvfQJEkqCBbSLai2NvL3Vz/k6sdnEoCLjhnJV/cfaGcDFZzZi1fxg7vf5p2KFZy410789NiR9O5mLEmSpPospPNg3tK1XHj/O7w0u5KDdi3jqlP2YJeyLvkelkRtbeSWl+dy9eMz6dyhlF+etAfH7NEv38OSJKkgWUjnSYyRu96Yxy//OYPq2siPjx7OWQcPotTZaeXJx8vX8aO73+aV9ys5YkRvfnXKHs5CS5LUiCSFdDbObNjmhRA4ff+BfGF4L372wFSueGQ6/5yygKtP+RxDevshLrWcGCP3vfkxlz80jdoYufqUPfhK+c5+IFaSpBzwXL9Z1K/Hdtx0VjnXnrYXc5as5pjf/4sbnp9DdU1tvoemNuCT1VV8+++T+NE9bzOyX3ceO38Mp+030CJakqQccUY6y0IInLh3fw4Z0pNL/jGVqx+fyaNTFvDrL3+OEX2753t4aqWemLaQn94/hVXrq/npMSP4t0N3NVokSVKOOSOdI726deSG/7Mv139tHxasWMfxf5jAtU/PYkO1s9PKnpXrN/LDu9/m23+fRJ/unXj4vEM5Z8xuFtGSJLUAZ6Rz7Jg9+nHgrmVc8fA0rn36PR6fupBfn7onewzwDHLKzMtzPuHH97zDghXrOO/wIZx3+FA6tPNvY0mSWor/67aAHbt04NrT9+YvZ5azbO0GTrz+Ja5+fCbrN9bke2gqQus31nDFw9P56p9fo0O7Eu797sH88KjhFtGSJLUwZ6Rb0JGj+rDf4B35r3/O4Ibn5/DEtIX8+tTPse8uO+Z7aCoS71Qs5/t3TWbOkjWcedAuXPjFEXTu4GEsSVI+OIXVwnps156rT/0cf/+3/anaWMupf3qFKx6eztoN1fkemgrYxppafvvULE66/mXWVNXw93/bnyu+tLtFtCRJeeT/wnny+aG9eOL7Y/jvx2dy80sf8PSMRVx1yh4cvFvPfA9NBWb24lV8/663mfLxCk7auz+XHT+aHp3b53tYkiS1ec5I51HXju244ku7c9c5B1IS4Kt/fo2LH5zCRvtOi7pTfN884QOO/f0EKpat5fqv7cNvT9vLIlqSpALhjHQBOGDXMh47fwz/8+S7/GXCB5R16cj3xw3L97CURxXL1vLje97xFN+SJBWwZs1IhxBuDiEsDiFMrbdsxxDCUyGE91Lfd0gtDyGE34cQZocQ3gkh7FNvm7NS678XQjgr+3eneG3XoZSLjxvFSXv357rnZjNt/op8D0l5EGPknonzGH/tv3inYjlXn7IHfzmr3CJakqQC1Nxoxy3A+K2WXQg8E2McCjyTugzwRWBo6usc4AaoK7yBS4EDgP2BSzcV3/rUpcePYocuHfjh3W978pY2ZtMpvn987zuM6tedxy/wFN+SJBWyZhXSMcYXgaVbLf4S8LfUz38DTqy3/NZY51Vg+xBCP+Bo4KkY49IY4zLgKT5bnLd523fuwK9O2oOZC1fxx+dm53s4aiFPTFvI0b99keffXcLPjhnJHeccyM47ds73sCRJUiMyyUj3iTEuAIgxLggh9E4t7w/Mq7deRWrZtpZ/RgjhHOpmsxk4cGAGQyxOR47qw8mpiMdRo/qwe3/PgtharVy/kcsfms59b1Yweqfu3P6tvRjet1u+hyVJkpohF107GnofOjay/LMLY7wxxlgeYyzv1atXVgdXLC49fjRlXTrwo3uMeLRWL8/5hC9e+y8eeKuC8w4fwgP/fohFtCRJRSSTQnpRKrJB6vvi1PIKYOd66w0A5jeyXA3o0bk9vzq5LuLxh2ffy/dwlEXrN9Zw+cPTPMNlHD0AABF5SURBVMW3JElFLpP/uR8CNnXeOAv4R73lZ6a6dxwIrEhFQJ4Ajgoh7JD6kOFRqWXahiNG9uGUfQZw/fNzmFJhF4/WYN7StZx8/cv89aW5nHXQLjz6H59nn4F+5laSpGLU3PZ3dwCvAMNDCBUhhH8DrgLGhRDeA8alLgM8CrzP/2/v3qOkKM88jn+fuXEXud9HQFFEREJaGC6auCYKKBLFC7hGJGbRNRg9JxrdXDxustlE1NzEkIWIGGOImsQNZjWCRqNgEAcEvDEyMCAIMigKAuLcnv2ja5LO2D3SM5Op7q7f55w6XVP11swzz3m7+jnVT1dDObAQuAbA3fcC3wVeDJbvBNukEbdMGUb3jvEWj49qasMOR5rhuU17mDJvBdvfO8SiK2L859ThtCvKDzssERERaSJzT9qmnDFisZiXlpaGHUaont5YyazFLzLnjOO44ewTwg5H0uTuLHh2C7f9aSPH9ezIgi/GGNi9Q9hhiYiISAIzW+PusXSOUVNmFjhjaE8u/HR/5v9lMxt2vB92OJKGQ1U1zFnyEt9/fCMTh/fmkWvGq4gWERHJESqks8S3zx1Gj45t1OKRRba9e5ALfvY8j7+8i5snDeXuS0fRoU1z7jgpIiIimUSFdJbo3K6Q7087mTd2H+CnT+kuHpnumbJKpty1gl37DrN41miu/syx+oZCERGRHKNCOouccUJPLvp0f37+ly1q8chQ7s7dT5cza/GL9D26HY/OmcDpx0fzXugiIiK5ToV0lvlW0OLxtYfU4pFpDnxUw7//ai23P1HGlBF9+f014yjupq/5FhERyVUqpLNMfYvHpsoD/PhJtXhkii17DnD+3StZ9trbfOucE/nJ9JG0L1I/tIiISC5TIZ2FzjihJxfH+vM/f9nMuu1q8QjbU6/vZuq8lbx7sIpfXTmGL582WP3QIiIiEaBCOkt969xh9DqqLTc8vJ7D1WrxCENdnfOTJzdx5X2lHNO9PUvnjGfccd3DDktERERaiQrpLHVU20J+MG0E5WrxCMX+w9XMvn8NP3ryDS4Y1Y/fXj2O/l3UDy0iIhIlauLMYp85vgfTTx3Agmc3c/ZJvfhUcZewQ4qE8soPmH3/Gra9e4hbpwxj5riBauUQERGJIF2RznLfPOdEeqvFo9U88erbTJ23kv0fVvPAl8dwxfhBKqJFREQiSoV0lusUtHhs3nOQHz35Rtjh5Ky6OufOZWVcdf8ajuvZkUevnUDJ4G5hhyUiIiIhUiGdA04/vgczRg9g4bNbWPvme2GHk3P2fVjNlfe9yF1/LufiWH8evGosfTq3CzssERERCZkK6Rzxjckn0qdzO25Ui0eLKnv7A6bOW8GK8nf4ry8M57ZpI2hbmB92WCIiIpIBmlxIm9kJZrYuYdlvZteb2a1m9lbC9skJx/yHmZWbWZmZnd0y/4JAfYvHyfEWj+Vq8WgJj728i/N/tpKDVbUs+bcSLis5Rv3QIiIi8jdNvmuHu5cBIwHMLB94C3gEmAX8yN3vSBxvZsOA6cBJQF/gSTM73t11+bSFnDakBzNGF7PwuS2cPbw3o3QXjyaprXPuWFbG/Gc2M6r4aOZf9ml6HdU27LBEREQkw7RUa8eZwGZ339bImKnAb9z9I3evAMqB0S309yXwjclD6dO5ne7i0UTvH6riintXM/+ZzVw6ppgls0tURIuIiEhSLVVITweWJPw8x8w2mNkiM6u/LNoP2J4wZkewTVpQp7aF3DZtBFv2HOTOZWVhh5NVXtu5nynzVvDClr384IKT+e/zT6ZNgfqhRUREJLlmF9JmVgScBzwcbJoPHEu87WMXcGf90CSHe4rfOdvMSs2sdM+ePc0NMXImDOnOpWOK+cWKCtZs2xt2OFlh6fqdXDB/JVU1dTx4VQnTRxeHHZKIiIhkuJa4Ij0JWOvuuwHcfbe717p7HbCQv7dv7AAGJBzXH9iZ7Be6+wJ3j7l7rEePHi0QYvR8Y/KJ9O3cjhsf3qAWj0bU1Nbxvf97ja8ueYmT+3Xm0Wsn6BsiRURE5Ii0RCE9g4S2DjPrk7DvfOCVYH0pMN3M2pjZIGAIsLoF/r4k0bFNAbdfOIIt7xzkjifU4pHM3oNVXL5oNQufq2Dm2GN44Msl9OykfmgRERE5Mk2+aweAmbUHPg9clbB5rpmNJN62sbV+n7u/amYPAa8BNcBXdMeOf65xx3XnspJi7llZwcThvYkN7Bp2SBnh/UNVLFm9nXtXVvD+h9XcfuEILooN+OQDRURERBKYe9I25YwRi8W8tLQ07DCy1sGPajj7x89SmJ/HY189jXZF0f3wXHnlAe5dWcHv1u7gcHUdE47rzk0Th3Jy/85hhyYiIiIhM7M17h5L55hmXZGWzNehTQFzLxzBpQtf4I5lZXz73GFhh9Sq3J3nNr3DopUVPFO2h6KCPM4f2Y9ZEwYytPdRYYcnIiIiWUyFdASMO7Y7Xyw5hkVBi8epEWjxOFxdyyMvvcWiFRVsqjxAj05t+Nrnj+fSMcV069gm7PBEREQkB6iQjoibJw3lmTcqufHh9Tx+3ek52+Lx9r7D3L9qK79+4U3eO1TNSX2P4ocXn8I5I/rontAiIiLSolRIR0SHNgXMnXYKMxau4vYnyrhlSm61eGzY8T6LVlTwxw27qHXnrGG9uHLCYE4d2AWzZLcwFxEREWkeFdIRMvbYblw+9hjufT7e4jF6UHa3eNTU1rH8td3cs6KC0m3v0bFNATPHDWTm2IEUd2sfdngiIiKS41RIR8xNE4fydFklN/52PY9fdxrti7JvCuz7sJqHXtzO4ue38tb7H1LctT23nDuMi2L96dS2MOzwREREJCKyr4qSZunQpoDbLzyF6QtWMfdPZdx63klhh3TEKt45yOKVFTy8ZgeHqmoZM6grt0wZxudO7EV+nto3REREpHWpkI6gksHduGLcQBY/v5VJw3szZnC3sENKyd356+Z3WbSygqc2VlKQZ5x3Sj9mjR/I8H66/7OIiIiER4V0RH194glBi8cG/nR95rV4HK6uZen6nSxaUcHGtz+gW4cirv2XIVxWUqyv8RYREZGMkFnVk7Sa9kUFzJ02gksyrMWj8oPD/GrVmzywahvvHqxiaO9OzJ02gvNG9qVtoW5fJyIiIplDhXSEjUlo8Zg4vDclIbZ4vLpzH4tWbOXR9TuprqvjzKE9+dL4QYw9tptuXyciIiIZSYV0xNW3eHw9ocXD3ampc2pqnaraOmpq66iudapr64Ll7+s1dU51TR3VwWNNXR1Vtf+4XtPguJrgsSpYL9v9Aasr9tK+KJ8ZowdwxfhBDOreIezUiIiIiDTK3D3sGBoVi8W8tLQ07DBy2uqKvVyy4K8U5ufh7lTX/nPnRH6eUZBnFOXnUViQR5f2hVxy6gAuiRXTub1uXyciIiKtz8zWuHssnWN0RVoYPagr82aM4qU336MgP4+ifKMgP4/C/DwK8y14zKMgP178FgTbEtcTx9WvFwTrRQnrhXl55OlWdSIiIpIDVEgLAOeM6MM5I/qEHYaIiIhI1shr7i8ws61m9rKZrTOz0mBbVzNbbmabgscuwXYzs5+aWbmZbTCzUc39+yIiIiIiYWh2IR04w91HJvSV3Aw85e5DgKeCnwEmAUOCZTYwv4X+voiIiIhIq2qpQrqhqcB9wfp9wBcStv/S41YBR5uZ+glEREREJOu0RCHtwDIzW2Nms4Ntvdx9F0Dw2DPY3g/YnnDsjmCbiIiIiEhWaYkPG453951m1hNYbmYbGxmb7HYNH7vXWlCQzwYoLi5ugRBFRERERFpWs69Iu/vO4LESeAQYDeyub9kIHiuD4TuAAQmH9wd2JvmdC9w95u6xHj16NDdEEREREZEW16xC2sw6mFmn+nXgLOAVYCkwMxg2E/hDsL4UuDy4e0cJsK++BUREREREJJs065sNzWww8avQEG8T+bW7f8/MugEPAcXAm8BF7r7XzAyYB0wEDgGz3L3Rry00sz3AtiYH2XTdgXdC+LvZSvlKj/KVHuUrPcpXepSv9Cln6VG+0hNWvo5x97RaITL+K8LDYmal6X5NZJQpX+lRvtKjfKVH+UqP8pU+5Sw9yld6silf/6zb34mIiIiI5DQV0iIiIiIiTaBCOrUFYQeQZZSv9Chf6VG+0qN8pUf5Sp9ylh7lKz1Zky/1SIuIiIiINIGuSIuIiIiINEHkC2kzm2hmZWZWbmY3J9nfxsweDPa/YGYDWz/KzGBmA8zsaTN73cxeNbPrkoz5rJntM7N1wXJLGLFmCjPbamYvB7n42K0eg3uq/zSYXxvMbFQYcWYCMzshYd6sM7P9ZnZ9gzGRnl9mtsjMKs3slYRtXc1suZltCh67pDh2ZjBmk5nNTDYm16TI1+1mtjF4vj1iZkenOLbR526uSpGzW83srYTn3eQUxzb6epqLUuTrwYRcbTWzdSmOjdQcS1VDZP05zN0juwD5wGZgMFAErAeGNRhzDfDzYH068GDYcYeYrz7AqGC9E/BGknx9Fvhj2LFmygJsBbo3sn8y8DhgQAnwQtgxZ8ISPDffJn5Pz8TtkZ5fwOnAKOCVhG1zgZuD9ZuB25Ic1xXYEjx2Cda7hP3/hJSvs4CCYP22ZPkK9jX63M3VJUXObgVu+ITjPvH1NBeXZPlqsP9O4JYU+yI1x1LVENl+Dov6FenRQLm7b3H3KuA3wNQGY6YC9wXrvwXODL5YJnLcfZe7rw3WPwBeB/qFG1XWmwr80uNWAUebWZ+wg8oAZwKb3T2ML2PKWO7+LLC3webEc9R9wBeSHHo2sNzd97r7e8By4l+MldOS5cvdl7l7TfDjKqB/qweWwVLMsSNxJK+nOaexfAW1wsXAklYNKkM1UkNk9Tks6oV0P2B7ws87+Hhh+Lcxwcl3H9CtVaLLYEGLy6eAF5LsHmtm683scTM7qVUDyzwOLDOzNWY2O8n+I5mDUTSd1C8+ml//qJe774L4CxXQM8kYzbPkvkT8HaFkPum5GzVzgnaYRSneetcc+7jTgN3uvinF/sjOsQY1RFafw6JeSCe7stzwNiZHMiZSzKwj8Dvgenff32D3WuJvx58C3AX8b2vHl2HGu/soYBLwFTM7vcF+za8GzKwIOA94OMluza+m0TxrwMy+CdQAD6QY8knP3SiZDxwLjAR2EW9XaEhz7ONm0PjV6EjOsU+oIVIelmRbRsyvqBfSO4ABCT/3B3amGmNmBUBnmva2V04ws0LiT4AH3P33Dfe7+353PxCsPwYUmln3Vg4zY7j7zuCxEniE+NufiY5kDkbNJGCtu+9uuEPzK6nd9e1AwWNlkjGaZwmCDyqdC/yrBw2YDR3Bczcy3H23u9e6ex2wkOS50BxLENQLFwAPphoTxTmWoobI6nNY1AvpF4EhZjYouAo2HVjaYMxSoP7ToRcCf0514s11Qb/XPcDr7v7DFGN61/eQm9lo4nPs3daLMnOYWQcz61S/TvxDTq80GLYUuNziSoB99W9xRVjKqziaX0klnqNmAn9IMuYJ4Cwz6xK8LX9WsC1yzGwicBNwnrsfSjHmSJ67kdHgcxvnkzwXR/J6GiWfAza6+45kO6M4xxqpIbL7HBb2px3DXojfNeEN4p82/maw7TvET7IAbYm/xVwOrAYGhx1ziLmaQPytlA3AumCZDFwNXB2MmQO8SvwT26uAcWHHHWK+Bgd5WB/kpH5+JebLgLuD+fcyEAs77pBz1p54Ydw5YZvm199zsYT4W+vVxK/QXEn8MxtPAZuCx67B2Bjwi4RjvxScx8qBWWH/LyHmq5x4r2X9Oaz+rkx9gceC9aTP3SgsKXJ2f3B+2kC86OnTMGfBzx97Pc31JVm+gu2L689bCWMjPccaqSGy+hymbzYUEREREWmCqLd2iIiIiIg0iQppEREREZEmUCEtIiIiItIEKqRFRERERJpAhbSIiIiISBOokBYRERERaQIV0iIiIiIiTaBCWkRERESkCf4fmWiLNPVe5dQAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "m = PdGrid(50, 50, \"Random\", seed=seed)\n", "run_model(m)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -177,38 +155,20 @@ }, { "cell_type": "code", - "execution_count": 7, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "m = PdGrid(50, 50, \"Simultaneous\", seed=seed)\n", "run_model(m)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, + ], "outputs": [], - "source": [] + "execution_count": null } ], "metadata": { "kernelspec": { - "display_name": "Python [conda env:mesa]", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "conda-env-mesa-py" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/examples/advanced/pd_grid/app.py b/examples/advanced/pd_grid/app.py new file mode 100644 index 00000000000..3259b642069 --- /dev/null +++ b/examples/advanced/pd_grid/app.py @@ -0,0 +1,45 @@ +import mesa +from mesa.visualization import SolaraViz +from mesa.visualization.UserParam import Slider +# Import make_space_altair +from mesa.visualization import make_space_altair, make_plot_measure + +from model import PdGrid + +def portray_pd_agent(agent): + """This function is called to portray each agent in the visualization.""" + if agent is None: + return {} + return { + "shape": "rect", + "w": 1, + "h": 1, + "color": "blue" if agent.isCooroperating else "red", + } + +# Define model parameters +model_params = { + "height": Slider("Grid Height", 50, 10, 100, 1), + "width": Slider("Grid Width", 50, 10, 100, 1), + # TODO: Implement Choice in UserParam. See https://github.com/projectmesa/mesa/issues/2376 + # "activation_order": Choice( + # "Activation regime", + # value="Random", + # choices=PdGrid.activation_regimes, + # ), +} + +# Create the model instance +pd_model = PdGrid() + +coop_plot = make_plot_measure("cooperating_agents") + +# Create the SolaraViz instance +page = SolaraViz( + pd_model, + # TODO: Support the Cell Space in SolaraViz. + components=[coop_plot], # [make_space_altair(portray_pd_agent)], + model_params=model_params, + name="Prisoner's Dilemma" +) +page # noqa diff --git a/examples/advanced/pd_grid/pd_grid/model.py b/examples/advanced/pd_grid/model.py similarity index 96% rename from examples/advanced/pd_grid/pd_grid/model.py rename to examples/advanced/pd_grid/model.py index 38ef5f5b945..fa2aef3b1a5 100644 --- a/examples/advanced/pd_grid/pd_grid/model.py +++ b/examples/advanced/pd_grid/model.py @@ -1,7 +1,7 @@ import mesa from mesa.experimental.cell_space import OrthogonalMooreGrid -from .agent import PDAgent +from agents import PDAgent class PdGrid(mesa.Model): @@ -41,7 +41,7 @@ def __init__( self.datacollector = mesa.DataCollector( { - "Cooperating_Agents": lambda m: len( + "cooperating_agents": lambda m: len( [a for a in m.agents if a.move == "C"] ) } diff --git a/examples/advanced/pd_grid/pd_grid/__init__.py b/examples/advanced/pd_grid/pd_grid/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/examples/advanced/pd_grid/pd_grid/portrayal.py b/examples/advanced/pd_grid/pd_grid/portrayal.py deleted file mode 100644 index a7df44a439f..00000000000 --- a/examples/advanced/pd_grid/pd_grid/portrayal.py +++ /dev/null @@ -1,19 +0,0 @@ -def portrayPDAgent(agent): - """ - This function is registered with the visualization server to be called - each tick to indicate how to draw the agent in its current state. - :param agent: the agent in the simulation - :return: the portrayal dictionary - """ - if agent is None: - raise AssertionError - return { - "Shape": "rect", - "w": 1, - "h": 1, - "Filled": "true", - "Layer": 0, - "x": agent.pos[0], - "y": agent.pos[1], - "Color": "blue" if agent.isCooroperating else "red", - } diff --git a/examples/advanced/pd_grid/pd_grid/server.py b/examples/advanced/pd_grid/pd_grid/server.py deleted file mode 100644 index 57785acccac..00000000000 --- a/examples/advanced/pd_grid/pd_grid/server.py +++ /dev/null @@ -1,21 +0,0 @@ -import mesa - -from .model import PdGrid -from .portrayal import portrayPDAgent - -# Make a world that is 50x50, on a 500x500 display. -canvas_element = mesa.visualization.CanvasGrid(portrayPDAgent, 50, 50, 500, 500) - -model_params = { - "height": 50, - "width": 50, - "activation_order": mesa.visualization.Choice( - "Activation regime", - value="Random", - choices=PdGrid.activation_regimes, - ), -} - -server = mesa.visualization.ModularServer( - PdGrid, [canvas_element], "Prisoner's Dilemma", model_params -) diff --git a/examples/advanced/pd_grid/readme.md b/examples/advanced/pd_grid/readme.md index 51b91fd4287..00c96d93a41 100644 --- a/examples/advanced/pd_grid/readme.md +++ b/examples/advanced/pd_grid/readme.md @@ -27,9 +27,10 @@ Launch the ``Demographic Prisoner's Dilemma Activation Schedule.ipynb`` notebook ## Files -* ``run.py`` is the entry point for the font-end simulations. -* ``pd_grid/``: contains the model and agent classes; the model takes a ``activation_order`` string as an argument, which determines in which order agents are activated: Sequential, Random or Simultaneous. -* ``Demographic Prisoner's Dilemma Activation Schedule.ipynb``: Jupyter Notebook for running the scheduling experiment. This runs the model three times, one for each activation type, and demonstrates how the activation regime drives the model to different outcomes. +* ``model.py``: contains the model, which takes a ``activation_order`` string as an argument, which determines in which order agents are activated: Sequential, Random or Simultaneous. +* ``agents.py``: contains the agent class, which has a strategy and a score. +* ``app.py``: contains the interactive visualization of the model. +* ``analysis.ipynb``: Jupyter Notebook for running the scheduling experiment. This runs the model three times, one for each activation type, and demonstrates how the activation regime drives the model to different outcomes. ## Further Reading diff --git a/examples/advanced/pd_grid/requirements.txt b/examples/advanced/pd_grid/requirements.txt deleted file mode 100644 index da2b9972efd..00000000000 --- a/examples/advanced/pd_grid/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -jupyter -matplotlib -mesa~=2.0 diff --git a/examples/advanced/pd_grid/run.py b/examples/advanced/pd_grid/run.py deleted file mode 100644 index ae142aaaeea..00000000000 --- a/examples/advanced/pd_grid/run.py +++ /dev/null @@ -1,3 +0,0 @@ -from pd_grid.server import server - -server.launch(open_browser=True) diff --git a/mesa/experimental/cell_space/cell.py b/mesa/experimental/cell_space/cell.py index 4bc6e874a64..2215d39832b 100644 --- a/mesa/experimental/cell_space/cell.py +++ b/mesa/experimental/cell_space/cell.py @@ -40,15 +40,6 @@ class Cell: "__dict__", ] - # def __new__(cls, - # coordinate: tuple[int, ...], - # capacity: float | None = None, - # random: Random | None = None,): - # if capacity != 1: - # return object.__new__(cls) - # else: - # return object.__new__(SingleAgentCell) - def __init__( self, coordinate: Coordinate,