{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Discrete Bayes Animations" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib.pyplot as plt\n", "import sys\n", "sys.path.insert(0,'..') # allow us to format the book\n", "import book_format\n", "book_format.set_style()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook creates the animations for the Discrete Bayesian filters chapter. It is not really intended to be a readable part of the book, but of course you are free to look at the source code, and even modify it. However, if you are interested in running your own animations, I'll point you to the examples subdirectory of the book, which contains a number of python scripts that you can run and modify from an IDE or the command line. This module saves the animations to GIF files, which is quite slow and not very interactive. \n", "\n", "On Windows you need to install ffmpeg with\n", "\n", " $ conda install -c conda-forge ffmpeg\n", " \n", "I don't know what to do for linux or MaxOS." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from matplotlib import animation\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from kf_book.book_plots import bar_plot\n", "%matplotlib inline\n", "\n", "# the predict algorithm of the discrete bayesian filter\n", "def predict(pos, move, p_correct, p_under, p_over):\n", " n = len(pos)\n", " result = np.array(pos, dtype=float)\n", " for i in range(n):\n", " result[i] = \\\n", " pos[(i-move) % n] * p_correct + \\\n", " pos[(i-move-1) % n] * p_over + \\\n", " pos[(i-move+1) % n] * p_under \n", " return result\n", "\n", "\n", "def normalize(p):\n", " s = sum(p)\n", " for i in range (len(p)):\n", " p[i] = p[i] / s\n", " \n", "# the update algorithm of the discrete bayesian filter\n", "def update(pos, measure, p_hit, p_miss):\n", " q = np.array(pos, dtype=float)\n", " for i in range(len(hallway)):\n", " if hallway[i] == measure:\n", " q[i] = pos[i] * p_hit\n", " else:\n", " q[i] = pos[i] * p_miss\n", " normalize(q)\n", " return q" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc\n" ] }, { "data": { "text/plain": [ "'ffmpeg'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib\n", "# make sure our matplotlibrc has been edited to use imagemagick\n", "print(matplotlib.matplotlib_fname())\n", "matplotlib.rcParams['animation.writer']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAARNUlEQVR4nO3df6zddX3H8efLlo7flkl12NaJWQWrQcAr4lTGZGqrRnQxBnQw2FhHAk6dyWAmaozJoonbiBNtKjLwF8QfODvWiTqHxjkct4LQimAFhGtBykBAMGLhvT/Ot+5wub3nUM899X54PpKTnu/3+7nn/T7t7et+7uec7/ekqpAkzX9P2N0NSJJGw0CXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQNW8leXGSbyW5J8ldSf4ryfO7Y6ck+eYc1n5DV/uBJJfPcPzwJBu74xuTHD5XvUg7GOial5LsD1wK/BPw28BS4D3AL8bUwl3AOcD7ZuhtEfBF4JPAAcCFwBe7/dKcMdA1Xz0ToKouqqqHqurnVfXlqromybOAtcALk/wsyU8BkvxWkg8kuSXJT5KsTbJXd+zYJFNJ3pHkziQ3J3nTzopX1Ver6jPA1hkOHwssBM6pql9U1QeBAC8d5V+ANJ2BrvnqBuChJBcmWZ3kgB0Hquo64HTgv6tq36pa3B16P70fBIcDv0dvVv+uvsf8HeDAbv+fAuuSHLILvT0buKYeeV2Na7r90pwx0DUvVdW9wIuBAj4KbEuyPslTZhqfJMBfAG+rqruq6j7g74ATpg19Zzer/jrwb8AbdqG9fYF7pu27B9hvFx5LGtrC3d2AtKu6mfgpAEkOpbdmfQ5w4gzDlwB7Axt72Q70lkEW9I25u6ru79v+EfDUXWjtZ8D+0/btD9y3C48lDc0ZuppQVd8HLgCes2PXtCF3Aj8Hnl1Vi7vbE6tq374xByTZp2/7acy8Rj7IZuCw9P3kAA7r9ktzxkDXvJTk0CRvT7Ks215Ob2Z+RTfkJ8CyHe8sqaqH6S3N/GOSJ3dfszTJK6Y99HuSLEryEuDVwGd3Un9Bkj3p/Zb7hCR7JtmjO3w58BDwV90LsWd2+7/26z9zaecMdM1X9wEvAL6d5H56Qb4JeHt3/Gv0ZsS3J7mz23cWsAW4Ism9wFeB/hc9bwfupjcr/xRwejfzn8lJ9Gb8HwFe0t3/KEBVPQi8FjgZ+CnwZ8Bru/3SnIkfcCH13rYIfLKqlu3mVqRd5gxdkhoxMNCTnJ/kjiSbdnI8ST6YZEuSa5IcOfo2JUmDDDNDvwBYNcvx1cCK7raG3pqiNK9U1eUut2i+GxjoVfUNetet2JnjgY9XzxXA4iQHjapBSdJwRnFi0VLg1r7tqW7fbdMHJllDbxbPPvvs87xDDz10BOUl6fFj48aNd1bVkpmOjSLQM8O+Gd86U1XrgHUAExMTNTk5OYLykvT4keRHOzs2ine5TAHL+7aXsWtn10mSfg2jCPT1wMndu12OBu6pqkctt0iS5tbAJZckF9G7vvOBSaaAdwN7AFTVWmAD8Ep6Z+A9AJw6V81KknZuYKBX1UxXrus/XsAZI+tIkrRLPFNUkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqxFCBnmRVkuuTbEly9gzHn5jkX5N8N8nmJKeOvlVJ0mwGBnqSBcC5wGpgJXBikpXThp0BfK+qngscC/x9kkUj7lWSNIthZuhHAVuq6saqehC4GDh+2pgC9ksSYF/gLmD7SDuVJM1qmEBfCtzatz3V7ev3IeBZwFbgWuAtVfXw9AdKsibJZJLJbdu27WLLkqSZDBPomWFfTdt+BXA18FTgcOBDSfZ/1BdVrauqiaqaWLJkyWNsVZI0m2ECfQpY3re9jN5MvN+pwCXVswW4CTh0NC1KkoYxTKBfCaxIcnD3QucJwPppY24BjgNI8hTgEODGUTYqSZrdwkEDqmp7kjOBy4AFwPlVtTnJ6d3xtcB7gQuSXEtvieasqrpzDvuWJE0zMNABqmoDsGHavrV997cCLx9ta5Kkx8IzRSWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1YqhAT7IqyfVJtiQ5eydjjk1ydZLNSb4+2jYlSYMsHDQgyQLgXOBlwBRwZZL1VfW9vjGLgQ8Dq6rqliRPnqN+JUk7McwM/ShgS1XdWFUPAhcDx08b80bgkqq6BaCq7hhtm5KkQYYJ9KXArX3bU92+fs8EDkhyeZKNSU6e6YGSrEkymWRy27Ztu9axJGlGwwR6ZthX07YXAs8DXgW8Anhnkmc+6ouq1lXVRFVNLFmy5DE3K0nauYFr6PRm5Mv7tpcBW2cYc2dV3Q/cn+QbwHOBG0bSpSRpoGFm6FcCK5IcnGQRcAKwftqYLwIvSbIwyd7AC4DrRtuqJGk2A2foVbU9yZnAZcAC4Pyq2pzk9O742qq6LsmXgGuAh4HzqmrTXDYuSXqkVE1fDh+PiYmJmpyc3C21JWm+SrKxqiZmOuaZopLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiOGCvQkq5Jcn2RLkrNnGff8JA8lef3oWpQkDWNgoCdZAJwLrAZWAicmWbmTce8HLht1k5KkwYaZoR8FbKmqG6vqQeBi4PgZxr0Z+Dxwxwj7kyQNaZhAXwrc2rc91e37lSRLgdcBa2d7oCRrkkwmmdy2bdtj7VWSNIthAj0z7Ktp2+cAZ1XVQ7M9UFWtq6qJqppYsmTJkC1KkoaxcIgxU8Dyvu1lwNZpYyaAi5MAHAi8Msn2qvqXUTQpSRpsmEC/EliR5GDgx8AJwBv7B1TVwTvuJ7kAuNQwl6TxGhjoVbU9yZn03r2yADi/qjYnOb07Puu6uSRpPIaZoVNVG4AN0/bNGORVdcqv35Yk6bHyTFFJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGDHW1RUl6vDjiEz+Y8xpXnbRiTh7XGbokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEbMy4+gm88fESVpMP+P7xpn6JLUiKECPcmqJNcn2ZLk7BmOvynJNd3tW0meO/pWJUmzGRjoSRYA5wKrgZXAiUlWTht2E/AHVXUY8F5g3agblSTNbpgZ+lHAlqq6saoeBC4Gju8fUFXfqqq7u80rgGWjbVOSNMgwgb4UuLVve6rbtzN/Dvz7TAeSrEkymWRy27Ztw3cpSRpomEDPDPtqxoHJH9IL9LNmOl5V66pqoqomlixZMnyXkqSBhnnb4hSwvG97GbB1+qAkhwHnAaur6n9H054kaVjDzNCvBFYkOTjJIuAEYH3/gCRPAy4BTqqqG0bfpiRpkIEz9KranuRM4DJgAXB+VW1Ocnp3fC3wLuBJwIeTAGyvqom5a1uSNN1QZ4pW1QZgw7R9a/vunwacNtrWJEmPhWeKSlIjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqxFAfQaf/d8QnfjDnNa46acWc15AG8Xt9/nGGLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AivtjjPzPUV8Lz63W8Wr3iox8IZuiQ1wkCXpEYMFehJViW5PsmWJGfPcDxJPtgdvybJkaNvVZI0m4GBnmQBcC6wGlgJnJhk5bRhq4EV3W0N8JER9ylJGmCYF0WPArZU1Y0ASS4Gjge+1zfmeODjVVXAFUkWJzmoqm4becfabR6vL8j6wqTmi/QyeJYByeuBVVV1Wrd9EvCCqjqzb8ylwPuq6pvd9n8AZ1XV5LTHWkNvBg9wCHD9qJ7IEA4E7hxjPWtb29rWngu/W1VLZjowzAw9M+yb/lNgmDFU1Tpg3RA1Ry7JZFVNWNva1rZ2K7WnG+ZF0Slged/2MmDrLoyRJM2hYQL9SmBFkoOTLAJOANZPG7MeOLl7t8vRwD2un0vSeA1ccqmq7UnOBC4DFgDnV9XmJKd3x9cCG4BXAluAB4BT567lXbZblnqsbW1rW3tcBr4oKkmaHzxTVJIaYaBLUiOaD/RBly2Y49rnJ7kjyaZx1u1qL0/yn0muS7I5yVvGWHvPJP+T5Ltd7feMq3ZXf0GSq7rzI8Yqyc1Jrk1ydZLJwV8x0tqLk3wuyfe7f/cXjqnuId3z3XG7N8lbx1G7q/+27vtsU5KLkuw5xtpv6epuHudz3qmqavZG70XcHwLPABYB3wVWjrH+McCRwKbd8NwPAo7s7u8H3DCu507vvIR9u/t7AN8Gjh7jc/9r4NPApbvh7/1m4MBx1+1qXwic1t1fBCzeDT0sAG6nd/LLOOotBW4C9uq2PwOcMqbazwE2AXvTe4PJV4EVu+Pffset9Rn6ry5bUFUPAjsuWzAWVfUN4K5x1ZtW+7aq+k53/z7gOnrf/OOoXVX1s25zj+42llffkywDXgWcN456vymS7E9vAvExgKp6sKp+uhtaOQ74YVX9aIw1FwJ7JVlIL1zHdQ7Ms4ArquqBqtoOfB143Zhqz6j1QF8K3Nq3PcWYQu03SZKnA0fQmymPq+aCJFcDdwBfqapx1T4H+Bvg4THVm66ALyfZ2F3qYlyeAWwD/rlbbjovyT5jrL/DCcBF4ypWVT8GPgDcAtxG7xyYL4+p/CbgmCRPSrI3vbduLx/wNXOq9UAf6pIELUuyL/B54K1Vde+46lbVQ1V1OL2zho9K8py5rpnk1cAdVbVxrmvN4kVVdSS9K5CekeSYMdVdSG957yNVdQRwPzDu14wWAa8BPjvGmgfQ+637YOCpwD5J/mQctavqOuD9wFeAL9Fb0t0+jto703qgP64vSZBkD3ph/qmqumR39ND92n85sGoM5V4EvCbJzfSW116a5JNjqPsrVbW1+/MO4Av0lv3GYQqY6vtN6HP0An6cVgPfqaqfjLHmHwE3VdW2qvolcAnw++MqXlUfq6ojq+oYesurc39pzlm0HujDXLagSUlCbz31uqr6hzHXXpJkcXd/L3r/6b4/13Wr6m+rallVPZ3ev/XXqmosszWAJPsk2W/HfeDl9H4tn3NVdTtwa5JDul3H8chLXI/DiYxxuaVzC3B0kr277/nj6L1eNBZJntz9+TTgjxn/83+Epj8kunZy2YJx1U9yEXAscGCSKeDdVfWxMZV/EXAScG23lg3wjqraMIbaBwEXdh+O8gTgM1U19rcQ7gZPAb7QyxUWAp+uqi+Nsf6bgU91k5cbGeMlOLo15JcBfzmumgBV9e0knwO+Q2+54yrGeyr+55M8CfglcEZV3T3G2o/iqf+S1IjWl1wk6XHDQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmN+D813WlzoLZHIQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from kf_book.gif_animate import animate\n", "\n", "pos = [1.0,0,0,0,0,0,0,0,0,0]\n", "def bar_animate(nframe):\n", " global pos\n", " plt.cla()\n", " bar_plot(pos)\n", " plt.title('Step {}'.format(nframe + 1))\n", " pos = predict(pos, 1, .8, .1, .1)\n", "\n", "for i in range(10):\n", " bar_animate(i)\n", "\n", "fig = plt.figure(figsize=(6.5, 2.5))\n", "animate('02_no_info.gif', bar_animate, fig=fig, frames=75, interval=75);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pos = np.array([.1]*10)\n", "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])\n", "\n", "def bar_animate(nframe):\n", " global pos\n", " #if nframe == 0:\n", " # return\n", "\n", " bar_plot(pos, ylim=(0,1.0))\n", " plt.title('Step {}'.format(nframe + 1))\n", " if nframe % 2 == 0:\n", " pos = predict(pos, 1, .9, .05, .05)\n", " else:\n", " x = int((nframe/2) % len(hallway))\n", " z = hallway[x]\n", " pos = update(pos, z, .9, .2)\n", " \n", "\n", "fig = plt.figure(figsize=(6.5, 2.5))\n", "animate('02_simulate.gif', bar_animate, fig=fig, frames=40, interval=85);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 1 }