From ddf4ba0e376cdf58ba72b70710dd7b7fcd091f18 Mon Sep 17 00:00:00 2001 From: Kees van Kempen Date: Mon, 3 Oct 2022 14:28:26 +0200 Subject: [PATCH] 04: My god, please don't fuck with argument names --- Exercise sheet 4/exercise_sheet_04.ipynb | 46 ++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/Exercise sheet 4/exercise_sheet_04.ipynb b/Exercise sheet 4/exercise_sheet_04.ipynb index c9f60e4..3843be8 100644 --- a/Exercise sheet 4/exercise_sheet_04.ipynb +++ b/Exercise sheet 4/exercise_sheet_04.ipynb @@ -474,9 +474,22 @@ "task": false } }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEICAYAAABF82P+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfl0lEQVR4nO3dfZyVc/7H8denW0WJGiuVZnYlwm406XbbKDe5y22KRLsrIYRdi0Wkxe4Pm3bTjZv1E9ZNWLFZN5GkpIlQjZhfRbOypmgqU2ry+f1xrtozc66ZrqauOafp/Xw85jHnXN/v9zqfc5rmPdfd9zJ3R0REpLxa6S5AREQykwJCRERCKSBERCSUAkJEREIpIEREJFSddBewMzVr1syzs7PTXYaIyC5j3rx5K909K6ytRgVEdnY2eXl56S5DRGSXYWafV9SmXUwiIhJKASEiIqEUECIiEkoBISIioRQQIiISSgEhIiKhFBAiIhJKASEiIqEUECIiEqpGXUktsjt5bvGKanutM9s2r7bXqgmq898G4vv3UUCISI1RU34xZ4oaFRCLFy+mZ8+eZZb169ePyy67jJKSEk466aSUMRdddBEXXXQRK1eu5Oyzz05pv/TSSzn33HNZvnw5F1xwQUr7tddey6mnnsrixYu55JJLUtpvuukmevfuzfz58xk+fHhK+x133EHXrl2ZNWsWN954Y0r76NGjad++Pa+//jqjRo1KaZ8wYQJt27blxRdf5J577klpnzRpEq1ateKpp55i3LhxKe2TJ0+mWbNmPPLIIzzyyCMp7VOnTqVhw4bcf//9PP300ynt06dPB+Duu+/mpZdeKtPWoEEDXn75ZQBuv/12pk2bVqa9adOmPPvsswDccMMNzJ49u0x7y5YteeyxxwAYPnw48+fPL9N+8MEHM3HiRACGDBnCp59+Wqa9ffv2jB49GoCBAwdSWFhYpr1Lly7ceeedAJx11lmsWrWqTHuvXr24+eabAejTpw/r169nZcnGre0devam768uBeCWC84q/9HQtc+pnHjeRXy/voQ/DEn92el5Rj+OPfNc1ny7iruvHJLSfsKAQdxz9dAKf/a6nDuYjscez7+XFDBhxO9S2s+69Cp+1rUHS/MX8Lc7RqS0n3f19RxyVEc+eX8uT/z5rpT2wTfeRs6hh/PhrBmMuST1ZycTf/a2/PvU22MPbnrgcQCeuf/PfDx7ZpmxezXZh+v+8iAAj91zB5/On1emven+zbnqf/4KwMN33MKy/IVl2ptn/5hLb/8fIPxnb6/WbfjljSMBuO+3w1j1VdngOrh9BwZem/j//qcrfs261d+WaT+iS3fOuexqAEZdfD4bN2wo017+Z29Mw3pl2rfn915lalRArFu3jrfeeguA1q1bo5ldd8zKko288OkK6jdoyPz/FJf55bjFlr/YPv56TUp7vR9qbW1ftHJtSvuGehu2ti9eta7SWgq+/S5lfN3VJVvHL11dktJe8O13W9uXr1nPqnLti1et29r+77UbWBe0Nyv3n02kpvnHP/7B4MGDtzztUFE/c/fqqaga5ObmumZz3XkyaXM9U/a36zPJbJny75MpdURhZvPcPTesrUZtQYhI9duVfhnK9lFABPTXmIhIWboOQkREQmkLIsNoc11EMoW2IEREJJQCQkREQikgREQklAJCRERCKSBERCSUAkJEREIpIEREJJQCQkREQikgREQklAJCRERCKSBERCRUrAFhZiea2WIzKzCz60PaDzGz2Wb2vZn9ZnvGiohIvGILCDOrDYwF+gDtgAFm1q5ct2+AK4G7qzBWRERiFOcWxNFAgbsvcfeNwJNA3+QO7v61u88FNm3vWBERiVecAdECWJ70vDBYtlPHmtkQM8szs7yioqIqFSoiIqniDAgLWRb1BtiRx7r7RHfPdffcrKysyMWJiEjl4gyIQqBV0vOWwJfVMFZERHaCOANiLtDGzHLMrB7QH5hSDWNFRGQniO2Wo+5eambDgFeA2sDD7r7QzIYG7ePNbH8gD2gM/GBmw4F27r4mbGxctYqISKpY70nt7lOBqeWWjU96/BWJ3UeRxoqISPXRldQiIhJKASEiIqEUECIiEkoBISIioRQQIiISSgEhIiKhFBAiIhJKASEiIqEUECIiEkoBISIioRQQIiISSgEhIiKhFBAiIhJKASEiIqEUECIiEkoBISIioRQQIiISSgEhIiKhFBAiIhJKASEiIqEUECIiEkoBISIioRQQIiISSgEhIiKhFBAiIhJKASEiIqEUECIiEkoBISIioWINCDM70cwWm1mBmV0f0m5mNiZo/8jMjkpqu9rMFprZAjP7u5ntEWetIiJSVmwBYWa1gbFAH6AdMMDM2pXr1gdoE3wNAcYFY1sAVwK57n44UBvoH1et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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "def chain_P_histogram(graph,start,n):\n", + "def chain_P_histogram(graph,start,k):\n", " '''Produce a histogram of the states visited (excluding initial state) \n", " by the P Markov chain in the first n steps when started at start.'''\n", " n = graph.number_of_nodes()\n", @@ -501,12 +514,20 @@ " P[y, x] = 1 - np.sum([Q[x, z]*acceptance_probability(graph, x, z) if z != x else 0 for z in range(n)])\n", " else:\n", " P[y, x] = Q[x, y]*acceptance_probability(graph, x, y)\n", - " \n", " return P\n", "\n", "# plotting\n", - "# YOUR CODE HERE\n", - "#raise NotImplementedError()" + "x_start = 1\n", + "k = 40000\n", + "\n", + "plt.figure()\n", + "x_list = list(range(example_graph.number_of_nodes()))\n", + "plt.bar(x_list, chain_P_histogram(example_graph, x_start, k)/k, color=\"lightblue\", label=\"sampled\")\n", + "plt.axhline(y = 1/example_graph.number_of_nodes(), marker=\"_\", linestyle = \"dashed\", color=\"black\", label=\"theoretical\")\n", + "plt.ylabel(\"visiting density\")\n", + "plt.xlabel(\"node $x$\")\n", + "plt.legend()\n", + "plt.show()" ] }, { @@ -555,20 +576,7 @@ "task": false } }, - "outputs": [ - { - "ename": "AssertionError", - "evalue": "11133.0 != 2222 within 180 delta (8911.0 difference)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [12]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(chain_P_histogram(example_graph,\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m100\u001b[39m)) \u001b[38;5;241m==\u001b[39m example_graph\u001b[38;5;241m.\u001b[39mnumber_of_nodes()\n\u001b[0;32m----> 2\u001b[0m \u001b[43massert_almost_equal\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchain_P_histogram\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexample_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m20000\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m8\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m2222\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mdelta\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m180\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/jupyter-conda/lib/python3.9/unittest/case.py:891\u001b[0m, in \u001b[0;36mTestCase.assertAlmostEqual\u001b[0;34m(self, first, second, places, msg, delta)\u001b[0m\n\u001b[1;32m 885\u001b[0m standardMsg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m != \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m within \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m places (\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m difference)\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (\n\u001b[1;32m 886\u001b[0m safe_repr(first),\n\u001b[1;32m 887\u001b[0m safe_repr(second),\n\u001b[1;32m 888\u001b[0m places,\n\u001b[1;32m 889\u001b[0m safe_repr(diff))\n\u001b[1;32m 890\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_formatMessage(msg, standardMsg)\n\u001b[0;32m--> 891\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfailureException(msg)\n", - "\u001b[0;31mAssertionError\u001b[0m: 11133.0 != 2222 within 180 delta (8911.0 difference)" - ] - } - ], + "outputs": [], "source": [ "assert len(chain_P_histogram(example_graph,0,100)) == example_graph.number_of_nodes()\n", "assert_almost_equal(chain_P_histogram(example_graph,0,20000)[8],2222,delta=180)"