From d0b4a1f4bc2c7e8bd800f8b75490c8b5c6af97f9 Mon Sep 17 00:00:00 2001 From: Roger Labbe Date: Sun, 17 Jan 2016 12:02:00 -0800 Subject: [PATCH] Generalized discrete Bayes with likelihood. All my code in this chapter hard coded the computation of the likelihood inside the update() function, where it had no business. Also, my treatment of the likelihood was rather hand wavey. By pulling it out of update() and maing it explicit I have created a firm foundation for the rest of the book. --- 02-Discrete-Bayes.ipynb | 1125 ++++++++++++++++++++------------------- book_format.py | 3 +- code/book_plots.py | 59 +- code/custom.css | 11 +- code/mkf_internal.py | 10 +- 5 files changed, 647 insertions(+), 561 deletions(-) diff --git a/02-Discrete-Bayes.ipynb b/02-Discrete-Bayes.ipynb index 1fb7082..dd8b822 100644 --- a/02-Discrete-Bayes.ipynb +++ b/02-Discrete-Bayes.ipynb @@ -28,7 +28,7 @@ "@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n", "@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n", "@import url('http://fonts.googleapis.com/css?family=Arimo');\n", - "@import url('http://fonts.googleapis.com/css?family=Fira_sans');\n", + "@import url('http://fonts.googleapis.com/css?family=Fira+sans');\n", "\n", ".CodeMirror pre {\n", " font-family: 'Source Code Pro', Consolas, monocco, monospace;\n", @@ -42,7 +42,7 @@ " background: transparent;\n", " color: #000000;\n", " font-weight: 600;\n", - " font-size: 11pt;\n", + " font-size: 12pt;\n", " font-style: bold;\n", " font-family: 'Source Code Pro', Consolas, monocco, monospace;\n", " }\n", @@ -123,11 +123,10 @@ " white-space: nowrap;\n", " }\n", " div.text_cell_render{\n", - " font-family: 'Fira sans', verdana,arial,sans-serif;\n", + " /*font-family: 'Vollkorn', verdana,arial,sans-serif;*/\n", " line-height: 150%;\n", - " font-size: 110%;\n", - " font-weight: 400;\n", - " text-align:justify;\n", + " font-size: 130%;\n", + " text-align: justify;\n", " text-justify:inter-word;\n", " }\n", " div.output_subarea.output_text.output_pyout {\n", @@ -299,15 +298,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's begin with a simple problem. We have a dog friendly workspace, and so people bring their dogs to work. Occasionally the dogs wander out of offices and down the halls. We want to be able to track them. So during a hackathon somebody created a little sonar sensor to attach to the dog's collar. It emits a signal, listens for the echo, and based on how quickly an echo comes back we can tell whether the dog is in front of an open doorway or not. It also senses when the dog walks, and reports in which direction the dog has moved. It connects to our network via wifi and sends an update once a second.\n", + "Let's begin with a simple problem. We have a dog friendly workspace, and so people bring their dogs to work. Occasionally the dogs wander out of offices and down the halls. We want to be able to track them. So during a hackathon somebody invented a sonar sensor to attach to the dog's collar. It emits a signal, listens for the echo, and based on how quickly an echo comes back we can tell whether the dog is in front of an open doorway or not. It also senses when the dog walks, and reports in which direction the dog has moved. It connects to the network via wifi and sends an update once a second.\n", "\n", - "I want to track my dog Simon, so I attach the device to his collar and then fire up Python, ready to write code to track him through the building. At first blush this may appear impossible. If I start listening to the sensor of Simon's collar I might read 'door', 'hall', 'hall', and so on. How can I use that information to determine where Simon is?\n", + "I want to track my dog Simon, so I attach the device to his collar and then fire up Python, ready to write code to track him through the building. At first blush this may appear impossible. If I start listening to the sensor of Simon's collar I might read **door**, **hall**, **hall**, and so on. How can I use that information to determine where Simon is?\n", "\n", - "To keep the problem small enough to plot easily we will assume that there are only 10 positions in a single hallway to consider, which we will number 0 to 9, where 1 is to the right of 0, 2 is to the right of 1, and so on. For reasons that will be clear later, we will also assume that the hallway is circular or rectangular. If you move right from position 9, you will be at position 0. \n", + "To keep the problem small enough to plot easily we will assume that there are only 10 positions in the hallway, which we will number 0 to 9, where 1 is to the right of 0. For reasons that will be clear later, we will also assume that the hallway is circular or rectangular. If you move right from position 9, you will be at position 0. \n", "\n", - "When I begin listening to the sensor I have no reason to believe that Simon is at any particular position in the hallway. He is equally likely to be in any position. Their are 10 positions, so the probability that he is in any given position is 1/10. \n", + "When I begin listening to the sensor I have no reason to believe that Simon is at any particular position in the hallway. From my perspective he is equally likely to be in any position. Their are 10 positions, so the probability that he is in any given position is 1/10. \n", "\n", - "Let's represent our belief of his position at any time in a NumPy array. I could use a Python list, but NumPy arrays offer a lot of functionality that we will be using soon." + "Let's represent our belief of his position in a NumPy array. I could use a Python list, but NumPy arrays offer functionality that we will be using soon." ] }, { @@ -328,7 +327,8 @@ "source": [ "import numpy as np\n", "belief = np.array([1/10]*10)\n", - "np.set_printoptions(precision=3, linewidth=50)\n", + "np.set_printoptions(precision=3, linewidth=70,\n", + " formatter={'float':lambda x:' {:.3}'.format(x)})\n", "print(belief)" ] }, @@ -336,17 +336,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In Bayesian statistics this is called our *prior*. It is the probability prior to incorporating measurements or other information. More completely, this is called the *prior probability distribution*. A *probability distribution* is a collection of all possible probabilities for an event. Probability distributions always to sum to 1 because something had to happen; the distribution lists all the different somethings and the probability of each.\n", + "In Bayesian statistics this is called a *prior*. It is the probability prior to incorporating measurements or other information. More completely, this is called the *prior probability distribution*. A *probability distribution* is a collection of all possible probabilities for an event. Probability distributions always to sum to 1 because something had to happen; the distribution lists all possible events and the probability of each.\n", "\n", - "I'm sure you've used probabilities before - as in \"the probability of rain today is 30%\". The last paragraph sounds like more of that. But Bayesian statistics was a revolution in probability because it treats the probability as a belief about a single event. Let's take an example. I know that if I flip a fair coin infinitely many times I will get 50% heads and 50% tails. This is called *frequentist statistics* to distinguish it from Bayesian statistics. \n", + "I'm sure you've used probabilities before - as in \"the probability of rain today is 30%\". The last paragraph sounds like more of that. But Bayesian statistics was a revolution in probability because it treats probability as a belief about a single event. Let's take an example. I know that if I flip a fair coin infinitely many times I will get 50% heads and 50% tails. This is called *frequentist statistics* to distinguish it from Bayesian statistics. Computations are based on the frequency in which events occur.\n", "\n", "I flip the coin one more time and let it land. Which way do I believe it landed? Frequentist probability has nothing to say about that; it will merely state that 50% of coin flips land as heads. In some ways it is meaningless to to assign a probability to the current state of the coin. It is either heads or tails, we just don't know which. Bayes treats this as a belief about a single event - the strength of my belief or knowledge that this specific coin flip is heads is 50%.\n", "\n", - "Bayesian statistics takes past information (the prior) into account. We observe that it rains 4 times every 100 days. From this I state the chance of rain tomorrow to be 1/25. This is not how weather prediction is done. If I know it is raining today, and there are no weather patterns to move this storm system, I predict that it is likely to rain tomorrow. Weather prediction is Bayesian.\n", + "Bayesian statistics takes past information (the prior) into account. We observe that it rains 4 times every 100 days. From this I could state that the chance of rain tomorrow is 1/25. This is not how weather prediction is done. If I know it is raining today and the storm front is stalled, it is likely to rain tomorrow. Weather prediction is Bayesian.\n", "\n", - "In practice statisticians use a mix of frequentist and Bayesian techniques. In some areas finding the prior is difficult or impossible, and frequentist techniques rule. But in this book we can find the prior. When I talk about the probability of something I am referring to the probability that some specific thing is true given past events. When I do that I'm taking the Bayesian approach.\n", + "In practice statisticians use a mix of frequentist and Bayesian techniques. Sometimes finding the prior is difficult or impossible, and frequentist techniques rule. In this book we can find the prior. When I talk about the probability of something I am referring to the probability that some specific thing is true given past events. When I do that I'm taking the Bayesian approach.\n", "\n", - "Now let's create a map of the hallway in another list. We'll place the first two doors close together, and then another door further away. We will use 1 to denote a door, and 0 to denote a wall:" + "Now let's create a map of the hallway. We'll place the first two doors close together, and then another door further away. We will use 1 for doors, and 0 for walls:" ] }, { @@ -364,7 +364,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "I start listening to Simon's transmissions on the network, and the first data I get from the sensor is \"door\". For the moment assume the sensor always returns the correct answer. From this I conclude that he is in front of a door, but which one? I have no reason to believe he is in front of the first, second, or third door. What I can do is assign a probability to each door. All doors are equally likely, and there are three of them, so I assign a probability of 1/3 to each door. " + "I start listening to Simon's transmissions on the network, and the first data I get from the sensor is **door**. For the moment assume the sensor always returns the correct answer. From this I conclude that he is in front of a door, but which one? I have no reason to believe he is in front of the first, second, or third door. What I can do is assign a probability to each door. All doors are equally likely, and there are three of them, so I assign a probability of 1/3 to each door. " ] }, { @@ -376,9 +376,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACeCAYAAADnjxZjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGXdJREFUeJzt3X9QVXX+x/EXv0zwB6PDCiikwrj+wii5lIJ9tR3QMdfN\n3ZK0NiXaNapVCUeT1qZapKzcZUOFZtUF03VkZ2u3tpXybuEPQmcEwwlXzdIyx3vv5lr4o0z0nu8f\nTXf2dkkueuDcuzwfM87gh8/xvO57mOHF8XBuiGEYhgAAAACYJtTqAAAAAMD/Gko2AAAAYDJKNgAA\nAGAySjYAAABgMko2AAAAYDJKNgAAAGAySjYAAABgMr9K9q5du3THHXcoISFBoaGhevnll9s9prm5\nWZMmTVJUVJQSExNVXFx8zWEBAACAYOBXyT537pzGjBmjsrIyRUVFtbv/7Nmzys7OVnx8vBobG/Xi\niy/qhRdeUGlp6TUHBgAAAAJdSEff8bFPnz5as2aN5syZ8717KioqVFRUpH//+9/q0aOHJKmkpEQv\nvfSSPv3002tLDAAAAAS4Trkne8+ePbr11ls9BVuSpkyZopMnT+qTTz7pjFMCAAAAASO8M/5Rp9Op\nxMREr7XY2FgZhiGn06nBgwd71ltaWjojAgAAANAloqOjfdZ4uggAAABgsk4p2XFxcXK5XF5rLpdL\nISEhiouL64xTAgAAAAGjU24XGT9+vJYuXaqLFy967svetm2bBg4c6HWryHe1dandbA0NDZIkm83W\n6ecKFszEFzPxxUx8MRNfzMQb8/DFTHwxE1/BMJP2bnn260r2+fPntX//fjU1Ncntduv48ePav3+/\n50khRUVFysrK8uy/5557FBUVpdzcXB04cECvvvqqnnvuOS1atOgaXgoAAAAQHPwq2Q0NDbrpppuU\nlpamCxcu6Mknn9TYsWP15JNPSvrmFx2PHTvm2d+3b1/Z7XadPHlS6enpmj9/vhYvXqyCgoLOeRUA\nAABAAPHrdpGJEyfK7XZ/7+crKyt91kaPHq3t27dfdTAAAAAgWPF0EQAAAMBklGwAAADAZJRsAAAA\nwGSUbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADA\nZJRsAAAAwGSUbAAAAMBkfpfs8vJyJSUlKTIyUjabTXV1dVfc/9ZbbykjI0N9+/bVD37wA82YMUNH\njhy55sAAAABAoPOrZFdXV6ugoEDLli1TU1OTMjIyNHXqVJ04caLN/R9//LFmzJihiRMnqqmpSW+/\n/bYuXLigadOmmRoeAAAACER+lezS0lLl5eUpLy9Pw4cPV1lZmeLj41VRUdHm/sbGRl26dEnPPPOM\nkpKSdMMNN2jp0qX66KOPdPr0aVNfAAAAABBo2i3Zra2tamxsVHZ2ttf65MmTVV9f3+Yx6enpioiI\n0Lp16+R2u3X27FlVVVXp5ptvVv/+/c1JDgAAAASoEMMwjCttcDgcGjRokHbu3KkJEyZ41ouLi7V5\n82YdPHiwzePq6uo0c+ZMnTp1Sm63W2PHjlVNTY1iYmK89rW0tHg+5p5tAAAABINhw4Z5Po6Ojvb5\nfKc8XcTlcumBBx7Q3Llz1dDQoB07dqhPnz6aOXNmZ5wOAAAACCjh7W2IiYlRWFiYXC6X17rL5VJc\nXFybx6xZs0a9e/fWihUrPGsbN25UYmKi6uvrlZGR0eZxNputI9mvSkNDQ5edK1gwE1/MxBcz8cVM\nfDETb8zDFzPxxUx8BcNM/vtujLa0eyU7IiJCaWlpstvtXut2u12ZmZltHvPll18qLCzM+0Sh35zK\n7Xa3d0oAAAAgqPl1u0hhYaGqqqq0fv16HTp0SAsXLpTD4VB+fr4kqaioSFlZWZ7906ZN0759+1Rc\nXKwPP/xQ+/bt0/3336/rr79eaWlpnfNKAAAAgADR7u0ikpSTk6PTp0+rpKREDodDKSkpqqmpUUJC\ngiTJ6XTq2LFjnv233XabNm/erOeff14vvPCCoqKiNG7cOL355puKjIzsnFcCAAAABAi/SrYk5efn\ne65cf1dlZaXPWk5OjnJycq4+GQAAABCkOuXpIgAAAEB3RskGAAAATEbJBgAAAExGyQYAAABMRskG\nAAAATEbJBgAAAExGyQYAAABMRskGAAAATEbJBgAAAExGyQYAAABMRskGAAAATEbJBgAAAExGyQYA\nAABM5nfJLi8vV1JSkiIjI2Wz2VRXV9fuMb///e81cuRI9ezZU4MGDdLjjz9+TWEBAACAYBDuz6bq\n6moVFBTopZdeUmZmptasWaOpU6fq4MGDSkhIaPOYwsJCbd26VStXrlRKSopaWlrkcDhMDQ8AAAAE\nIr9KdmlpqfLy8pSXlydJKisr05tvvqmKigqVlJT47D98+LBWr16t5uZm/fCHP/Ssp6ammhQbAAAA\nCFzt3i7S2tqqxsZGZWdne61PnjxZ9fX1bR7z+uuvKzk5WVu3blVycrKGDh2q3NxcffbZZ+akBgAA\nAAJYiGEYxpU2OBwODRo0SDt37tSECRM868XFxdq8ebMOHjzoc8xDDz2kqqoq3XjjjVq5cqUkadGi\nRQoJCdHu3bu99ra0tHg+PnLkyDW9GAAAAKArDBs2zPNxdHS0z+f9ul2ko9xuty5evKhNmzYpOTlZ\nkrRx40YNHz5ce/fuVXp6emecFgAAAAgI7ZbsmJgYhYWFyeVyea27XC7FxcW1eUx8fLzCw8M9BVv6\npu2HhYXp+PHj31uybTZbR7JflYaGhi47V7BgJr6YiS9m4ouZ+GIm3piHL2bii5n4CoaZ/PfdGG1p\n957siIgIpaWlyW63e63b7XZlZma2eUxmZqYuXbqkY8eOedY++ugjXb58WYMHD/YnNwAAABC0/HpO\ndmFhoaqqqrR+/XodOnRICxculMPhUH5+viSpqKhIWVlZnv1ZWVkaO3as8vLy1NTUpPfee08PPPCA\nxo8fH9A/kQAAAABm8Oue7JycHJ0+fVolJSVyOBxKSUlRTU2N5xnZTqfT66p1SEiI3njjDS1YsEAT\nJ05UZGSkJk+erN/+9red8yoAAACAAOL3Lz7m5+d7rlx/V2Vlpc9abGysqqurrz4ZAAAAEKT8flt1\nAAAAAP6hZAMAAAAmo2QDAAAAJqNkAwAAACajZAMAAAAmo2QDAAAAJqNkAwAAACajZAMAAAAmo2QD\nAAAAJqNkAwAAACajZAMAAAAmo2QDAAAAJqNkAwAAACbzu2SXl5crKSlJkZGRstlsqqur8+u4I0eO\nqE+fPurbt+9VhwQAAACCiV8lu7q6WgUFBVq2bJmampqUkZGhqVOn6sSJE1c8rrW1VbNnz9akSZPM\nyAoAAAAEBb9KdmlpqfLy8pSXl6fhw4errKxM8fHxqqiouOJxS5YsUWpqqu666y5TwgIAAADBoN2S\n3draqsbGRmVnZ3utT548WfX19d973D/+8Q9t3bpVq1atuvaUAAAAQBAJb2/DqVOndPnyZcXGxnqt\nx8bG6u23327zmJMnT2revHl67bXXFBUV5XeYhoYGv/deq648V7BgJr6YiS9m4ouZ+GIm3piHL2bi\ni5n4CuSZDBs27Iqf75Sni9x33316+OGHZbPZJEmGYXTGaQAAAICA1O6V7JiYGIWFhcnlcnmtu1wu\nxcXFtXlMbW2tdu3apaeeekrSNyXb7XarR48eKi8v1y9+8Ys2j/u2lHemb38i6opzBQtm4ouZ+GIm\nvpiJL2bijXn4Yia+mImvYJhJS0vLFT/fbsmOiIhQWlqa7Ha77rzzTs+63W7XzJkz2zymubnZ6+9/\n+9vf9Mwzz2jv3r0aOHCgP7kBAACAoNVuyZakwsJCzZkzR+np6crMzFRFRYUcDofy8/MlSUVFRdq7\nd6/++c9/SpJGjRrldfzevXsVGhqqkSNHmhwfAAAACDx+leycnBydPn1aJSUlcjgcSklJUU1NjRIS\nEiRJTqdTx44d69SgAAAAQLDwq2RLUn5+vufK9XdVVlZe8di5c+dq7ty5HUsGAAAABKlOeboIAAAA\n0J1RsgEAAACT+X27SFeo++TzTj/H2Z4Duuxc34rvFa7kmD4dOuajU2flOH+pkxJ56+qZXM08AADo\nal31vThYugk6JqBK9vydp7rwbF932ZlW/V+MkmM6dozj/KUunofUVTO5mnkAANDVuv57cWB3E3QM\nt4sAAAAAJqNkAwAAACajZAMAAAAmo2QDAAAAJqNkAwAAACajZAMAAAAmo2QDAAAAJqNkAwAAACaj\nZAMAAAAm87tkl5eXKykpSZGRkbLZbKqrq/vevTt27NCMGTM0cOBA9erVS6mpqaqsrDQlMAAAABDo\n/CrZ1dXVKigo0LJly9TU1KSMjAxNnTpVJ06caHN/fX29brjhBr3yyis6cOCAHnroIc2bN09btmwx\nNTwAAAAQiML92VRaWqq8vDzl5eVJksrKyvTmm2+qoqJCJSUlPvuLioq8/p6fn6/a2lq98sormjVr\nlgmxAQAAgMDV7pXs1tZWNTY2Kjs722t98uTJqq+v9/tEZ86cUb9+/TqeEAAAAAgy7V7JPnXqlC5f\nvqzY2Fiv9djYWL399tt+neSNN97QO++806FS/r/k7Nmzamj4qGPH9BzQSWmsdzXzsEpDQ4PVEQIO\nM/HFTHwxE2/Mw1cwzITvxdYL5K+TYcOGXfHznf50kXfffVf33nuvVq1apbS0tM4+HQAAAGC5dq9k\nx8TEKCwsTC6Xy2vd5XIpLi7uisfW1dVp2rRpWr58uebNm3dtSYNYnz59ZEu5vkPH1H3yuaSvOyeQ\nxa5mHl3t25+cbTabxUkCBzPxxUx8MRNvzMNXMM2E78XWCYavk5aWlit+vt0r2REREUpLS5Pdbvda\nt9vtyszM/N7jdu7cqdtvv12/+c1vNH/+fD/jAgAAAMHPr9tFCgsLVVVVpfXr1+vQoUNauHChHA6H\n8vPzJX3zNJGsrCzP/u3bt+v222/XQw89pFmzZsnlcsnlcunUqVOd8yoAAACAAOLXI/xycnJ0+vRp\nlZSUyOFwKCUlRTU1NUpISJAkOZ1OHTt2zLN/w4YN+uqrr7Ry5UqtXLnSsz548GAdPXrU5JcAAAAA\nBBa/Srb0zbOuv71y/V3ffTfHyspK3uERAAAA3VanP10EAAAA6G4o2QAAAIDJKNkAAACAySjZAAAA\ngMko2QAAAIDJKNkAAACAySjZAAAAgMko2QAAAIDJKNkAAACAySjZAAAAgMko2QAAAIDJKNkAAACA\nySjZAAAAgMn8Ltnl5eVKSkpSZGSkbDab6urqrri/ublZkyZNUlRUlBITE1VcXHzNYQEAAIBg4FfJ\nrq6uVkFBgZYtW6ampiZlZGRo6tSpOnHiRJv7z549q+zsbMXHx6uxsVEvvviiXnjhBZWWlpoaHgAA\nAAhEfpXs0tJS5eXlKS8vT8OHD1dZWZni4+NVUVHR5v5Nmzbpq6++0oYNGzRy5Ej97Gc/02OPPabf\n/e53poYHAAAAAlG7Jbu1tVWNjY3Kzs72Wp88ebLq6+vbPGbPnj269dZb1aNHD8/alClTdPLkSX3y\nySfXGBkAAAAIbCGGYRhX2uBwODRo0CDt3LlTEyZM8KwXFxdr8+bNOnjwoM8xU6ZMUWJiotatW+dZ\n+/TTTzV48GDt3r1bt9xyi2e9paXFjNcBAAAAWCI6OtpnjaeLAAAAACZrt2THxMQoLCxMLpfLa93l\ncikuLq7NY+Li4trcHxIS8r3HAAAAAP8rwtvbEBERobS0NNntdt15552edbvdrpkzZ7Z5zPjx47V0\n6VJdvHjRc1/2tm3bNHDgQA0ePNhrb1uX1wEAAIBg5tftIoWFhaqqqtL69et16NAhLVy4UA6HQ/n5\n+ZKkoqIiZWVlefbfc889ioqKUm5urg4cOKBXX31Vzz33nBYtWtQ5rwIAAAAIIO1eyZaknJwcnT59\nWiUlJXI4HEpJSVFNTY0SEhIkSU6nU8eOHfPs79u3r+x2ux555BGlp6erX79+Wrx4sQoKCjrnVQAA\nAAABpN2niwAAAADomG71dJGOvjX8/7pdu3bpjjvuUEJCgkJDQ/Xyyy9bHclSzz77rG6++WZFR0dr\nwIAB+slPfqIDBw5YHctS5eXlSk1NVXR0tKKjo5WRkaGtW7daHSugPPvsswoNDdWCBQusjmKZp59+\nWqGhoV5/Bg4caHUsyzmdTuXm5mrAgAGKjIxUSkqKdu3aZXUsywwdOtTn6yQ0NFTTp0+3Oppl3G63\nnnjiCU83SUpK0hNPPCG32211NEudO3dOBQUFGjJkiKKiojRhwgQ1NDRYHavDuk3J7uhbw3cH586d\n05gxY1RWVqaoqCir41hu586d+tWvfqXdu3ertrZW4eHhysrK0hdffGF1NMskJibq+eef13vvvafG\nxkb96Ec/0owZM9Tc3Gx1tICwZ88erV27VqmpqVZHsdyIESPkcrnkdDrldDr1/vvvWx3JUi0tLcrM\nzFRISIhqamp06NAhrVq1SgMGDLA6mmUaGho8Xx9Op1P79u1TSEiI7r77bqujWWbFihWqqKjQ6tWr\ndfjwYZWVlam8vFzPPvus1dEs9cADD8hut2vjxo1qbm5Wdna2srKy5HA4rI7WMUY3ccsttxgPPvig\n19qwYcOMxx9/3KJEgaV3797Ghg0brI4RUM6dO2eEhYUZb7zxhtVRAkr//v2NP/zhD1bHsNwXX3xh\nJCcnG9u3bzcmTZpkzJ8/3+pIlnnqqaeMMWPGWB0joBQVFRkTJkywOkZAW758udGvXz/jwoULVkex\nzI9//GMjNzfXa23u3LnG9OnTLUpkva+++soIDw83/v73v3utp6WlGU888YRFqa5Ot7iSfTVvDQ+c\nOXNGbrdb/fr1szpKQHC73dqyZYvOnz+vjIwMq+NYbt68ecrJydHEiROtjhIQjh49qkGDBikpKUmz\nZ8/2+mX47ui1117TLbfcolmzZik2NlY33XST1qxZY3WsgPLHP/5R9913n6677jqro1hmwoQJqq2t\n1eHDhyVJ//rXv/TOO+9o2rRpFiezzqVLl3T58mWfr4vIyMigu823W5TsU6dO6fLly4qNjfVaj42N\nldPptCgVAt3ChQs1duxYjR8/3uoolmpublafPn103XXX6eGHH9Zf//pXjR492upYllq7dq2OHj2q\n5cuXWx0lIIwbN05VVVV66623tG7dOjmdTmVkZOjzzz+3Oppljh49qvLyciUnJ2vbtm0qKCjQ0qVL\nVV5ebnW0gLBt2zZ9/PHH+uUvf2l1FEs99thj+vnPf65Ro0apR48eGjNmjHJzc/Xggw9aHc0yvXv3\n1vjx47V8+XKdPHlSbrdbmzZt0u7du4PudhG/HuEHdDeFhYWqr6/Xu+++q5CQEKvjWGrEiBHav3+/\nWlpa9Je//EVz5szRjh07NGrUKKujWeKDDz7Qr3/9a7377rsKDe0W1ynaNWXKFK+/jxs3TkOHDtWG\nDRu67aNb3W63br75ZpWUlEiSUlNT9cEHH2jNmjV6+OGHLU5nvbVr1yo9PV0pKSlWR7HUli1btHHj\nRm3ZskWjRo1SU1OTFixYoKFDh+r++++3Op5lNm3apLy8PCUkJCg8PFxjx47VPffco8bGRqujdUi3\n+A5xNW8Nj+7r0UcfVXV1tWpra33eobQ7Cg8PV1JSkm666SaVlJToxhtvVGlpqdWxLLN792795z//\n0ahRoxQREaGIiAjt2LFDa9asUY8ePdTa2mp1RMtFRUVp9OjROnLkiNVRLBMfH6+RI0d6rY0cOVLH\njx+3KFHg+Oyzz/T6669r3rx5Vkex3JIlS7R48WLNnDlTo0eP1r333qvCwsJu/4uPQ4cOVW1trc6f\nP69PP/1Ue/bs0cWLF5WUlGR1tA7pFiX7v98a/r/Z7XZlZmZalAqBaOHChZ6CPWzYMKvjBCS3262v\nv/7a6hiW+elPf6r3339f+/fv9/yx2WyaPXu29u/fr4iICKsjWu7ChQs6dOiQ4uPjrY5imczMTM99\ntt86fPgwP7hLqqysVM+ePTVr1iyro1juyy+/9PkfsdDQ0G7/CL9vRUZGKjY2Vp9//rneeustzZgx\nw+pIHdJtbhcpLCzUnDlzlJ6erszMTFVUVMjhcHTr+57Onz+vDz/8UIZhyO126/jx49q/f7/69++v\nxMREq+N1uUceeUSbNm3Sa6+9pujoaM//fPTu3Vu9evWyOJ01ioqKNG3aNCUmJurs2bP605/+pB07\ndnTrZ2X37dvX51aZXr16qX///j5XLruLxYsXa/r06br++uvlcrlUXFysL7/8UnPnzrU6mmUeffRR\nZWZm6plnntHdd9+tffv2adWqVVqxYoXV0Sy3fv16zZ49m0fHSpo+fbpWrFihIUOGaPTo0dq3b59K\nS0uVm5trdTRLbdu2TW63WyNGjNCRI0e0ZMkSjRo1KvjmYvXjTbpSRUWFMXToUKNnz56GzWYz6urq\nrI5kqe3btxshISFGaGio15/777/f6miWaGsWoaGhxtNPP211NMvk5uYaQ4YMMXr27GnExsYa2dnZ\nht1utzpWwLntttu69SP8Zs2aZQwaNMi47rrrjISEBOOuu+4yDh48aHUsy23dutVITU01IiMjjeHD\nhxurV6+2OpLlamtrjdDQUKOhocHqKAHh3LlzxqOPPmoMGTLEiIqKMpKTk41ly5YZX3/9tdXRLPXn\nP//ZSE5ONnr27GkMHDjQWLBggXHmzBmrY3UYb6sOAAAAmKxb3JMNAAAAdCVKNgAAAGAySjYAAABg\nMko2AAAAYDJKNgAAAGAySjYAAABgMko2AAAAYDJKNgAAAGCy/weZfX90eh3ZMgAAAABJRU5ErkJg\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -399,7 +399,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This distribution is called a *categorical distribution*, which is a discrete distribution describing the probability of observing $n$ outcomes. It is a *multimodal distribution* because we have multiple beliefs about the position of our dog. Of course we are not saying that we think he is simultaneously in three different locations, merely that so far we have narrowed down our knowledge in his position to be one of these three locations. My (Bayesian) belief is that there is a 33.3% chance of being at door 0, 33.3% at door 1, and a 33.3% chance of being at door 8.\n", + "This distribution is called a *categorical distribution*, which is a discrete distribution describing the probability of observing $n$ outcomes. It is a *multimodal distribution* because we have multiple beliefs about the position of our dog. Of course we are not saying that we think he is simultaneously in three different locations, merely that we have narrowed down our knowledge to one of these three locations. My (Bayesian) belief is that there is a 33.3% chance of being at door 0, 33.3% at door 1, and a 33.3% chance of being at door 8.\n", + "\n", + "This is an improvement in two ways. I've rejected a number of hallway positions as impossible, and the strength of my belief in the remaining positions has increased from 10% to 33%. This will always happen. As our knowledge improves the probabilities will get closer to 100%.\n", "\n", "A few words about the *mode* of a distribution. Given a set of numbers, such as {1, 2, 2, 2, 3, 3, 4}, the *mode* is the number that occurs most often. For this set the mode is 2. A set can contain more than one mode. The set {1, 2, 2, 2, 3, 3, 4, 4, 4} contains the modes 2 and 4, because both occur three times. We say the former set is *unimodal*, and the latter is *multimodal*.\n", "\n", @@ -417,21 +419,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ 0.333 0.333 0. 0. 0. 0. 0. 0.\n", - " 0.333 0. ]\n" + "[ 0.333 0.333 0.0 0.0 0.0 0.0 0.0 0.0 0.333 0.0]\n" ] } ], "source": [ - "pbelief = hallway * (1/3)\n", - "print(pbelief)" + "belief = hallway * (1./3)\n", + "print(belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Extracting Information from Multiple Sensor Readings" + "## Extracting Information from Sensor Readings" ] }, { @@ -445,7 +446,7 @@ " * door\n", " \n", "\n", - "Can we deduce Simon's location? Of course! Given the hallway's layout there is only one place from which you can get this sequence, and that is at the left end. Therefore we can confidently state that Simon is in front of the second doorway. If this is not clear, suppose Simon had started at the second or third door. After moving to the right, his sensor would have returned 'wall'. That doesn't match the sensor readings, so we know he didn't start there. We can continue with that logic for all the remaining starting positions. The only possibility is that he is now in front of the second door. We represent this in Python with:" + "Can we deduce Simon's location? Of course! Given the hallway's layout there is only one place from which you can get this sequence, and that is at the left end. Therefore we can confidently state that Simon is in front of the second doorway. If this is not clear, suppose Simon had started at the second or third door. After moving to the right, his sensor would have returned 'wall'. That doesn't match the sensor readings, so we know he didn't start there. We can continue with that logic for all the remaining starting positions. The only possibility is that he is now in front of the second door. Our belief is:" ] }, { @@ -463,7 +464,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Obviously I carefully constructed the hallway layout and sensor readings to give us an exact answer quickly. Real problems will not be so clear cut. But this should trigger your intuition - the first sensor reading only gave us very low probabilities (0.333) for Simon's location, but after a position update and another sensor reading we knew much more about where he is. You might suspect, correctly, that if you had a very long hallway with a large number of doors that after several sensor readings and positions updates we would either be able to know where Simon was, or have the possibilities narrowed down to a small number of possibilities. For example, suppose we had a long sequence of \"door, right, door, right, wall, right, wall, right, door, right, door, right, wall, right, wall, right, wall, right, wall, right, door\". Simon could only have started in a location where his movements had a door sequence of [1,1,0,0,1,1,0,0,0,0,1] in the hallway. There might be only one match for that, or at most a few. Either way we will be far more certain about his position then when we started.\n", + "I designed the hallway layout and sensor readings to give us an exact answer quickly. Real problems are not so clear cut. But this should trigger your intuition - the first sensor reading only gave us low probabilities (0.333) for Simon's location, but after a position update and another sensor reading we know more about where he is. You might suspect, correctly, that if you had a very long hallway with a large number of doors that after several sensor readings and positions updates we would either be able to know where Simon was, or have the possibilities narrowed down to a small number of possibilities. This is possible because a specific pattern of sensor readings can only match a one to a few starting locations.\n", "\n", "We could implement this solution now, but instead let us consider a real world complication to the problem." ] @@ -472,22 +473,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Noisy Sensors" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Perfect sensors are rare. Perhaps the sensor would not detect a door if Simon sat in front of it while scratching himself, or it might report there is a door if he is facing towards the wall instead of down the hallway. So in practice when I get a report 'door' I cannot assign 1/3 as the probability for each door. I have to assign something less than 1/3 to each door, and then assign a small probability to each blank wall position. \n", + "## Noisy Sensors\n", "\n", - "At this point it doesn't matter exactly what numbers we assign; let's say the sensor is 3 times more likely to be right than wrong. How would we do this?\n", + "Perfect sensors are rare. Perhaps the sensor would not detect a door if Simon sat in front of it while scratching himself, or misread if he is not facing down the hallway. Thus when I get **door** I cannot use 1/3 as the probability. I have to assign less than 1/3 to each door, and assign a small probability to each blank wall position. Something like\n", "\n", - "At first this may seem like an insurmountable problem. If the sensor is noisy it casts doubt on every piece of data. How can we conclude anything if we are always unsure?\n", + "```Python\n", + "[.31, .31, .01, .01, .01, .01, .01, .01, .31, .01]\n", + "```\n", "\n", - "The answer, as with the problem abovef, is probabilities. We are already comfortable assigning a probabilistic belief about the location of the dog; now we have to incorporate the additional uncertainty caused by the sensor noise. Lets say we get a reading of 'door'. We already said that the sensor is three times as likely to be correct as incorrect, so we should scale the probability distribution by 3 where there is a door. If we do that the result will no longer be a probability distribution, but we will learn how to correct that in a moment.\n", + "At first this may seem insurmountable. If the sensor is noisy it casts doubt on every piece of data. How can we conclude anything if we are always unsure?\n", "\n", - "Let's look at that in Python code. Here I use the variable `z` to denote the measurement as that is the customary choice in the literature (`y` is also commonly used). " + "The answer, as for the problem above, is with probabilities. We are already comfortable assigning a probabilistic belief to the location of the dog; now we have to incorporate the additional uncertainty caused by the sensor noise. \n", + "\n", + "Lets say we get a reading of **door**, and suppose that testing shows that the sensor is 3 times more likely to be right than wrong. We should scale the probability distribution by 3 where there is a door. If we do that the result will no longer be a probability distribution, but we will learn how to correct that in a moment.\n", + "\n", + "Let's look at that in Python code. Here I use the variable `z` to denote the measurement as that is a customary choice in the literature. " ] }, { @@ -495,7 +495,7 @@ "execution_count": 7, "metadata": { "collapsed": false, - "scrolled": true + "scrolled": false }, "outputs": [ { @@ -507,9 +507,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -517,14 +517,14 @@ } ], "source": [ - "def update(map_, belief, z, correct_scale):\n", - " for i, val in enumerate(map_):\n", + "def update_belief(hall, belief, z, correct_scale):\n", + " for i, val in enumerate(hall):\n", " if val == z:\n", " belief[i] *= correct_scale\n", "\n", "belief = np.array([0.1] * 10)\n", "reading = 1 # 1 is 'door'\n", - "update(hallway, belief, z=reading, correct_scale=3.)\n", + "update_belief(hallway, belief, z=reading, correct_scale=3.)\n", "print('sum =', sum(belief))\n", "bp.bar_plot(belief)" ] @@ -533,14 +533,85 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can see that this is not a probability distribution because it does not sum to 1.0. But we can see that the code is doing mostly the right thing - the doors are assigned a number (0.3) that is 3 times higher than the walls (0.1). All we need to do is normalize the result so that the probabilities correctly sum to 1.0. Normalization is done by dividing each element by the sum of all elements in the list. \n", - "\n", - "Also, it is a bit odd to be talking about \"3 times as likely to be right as wrong\". We are working in probabilities, so let's specify the probability of the sensor being correct, and computing the scale factor from that." + "This is not a probability distribution because it does not sum to 1.0. But the code is doing mostly the right thing - the doors are assigned a number (0.3) that is 3 times higher than the walls (0.1). All we need to do is normalize the result so that the probabilities correctly sum to 1.0. Normalization is done by dividing each element by the sum of all elements in the list. That is easy with NumPy:" ] }, { "cell_type": "code", "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.188, 0.188, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625,\n", + " 0.0625, 0.188, 0.0625])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "belief / sum(belief)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "FilterPy implements this in the `normalize` function:\n", + "\n", + "```Python\n", + "from filterpy.discrete_bayes import normalize\n", + "```\n", + "\n", + "It is a bit odd to be talking about \"3 times as likely to be right as wrong\". We are working in probabilities, so let's specify the probability of the sensor being correct, and computing the scale factor from that. \n", + "\n", + "Also, the for loop is cumbersome. NumPy lets you index arrays with boolean arrays. You create a boolean array with logical operators:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, True, False, False, False, False, False, False, True,\n", + " False], dtype=bool)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hallway == 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When you use the boolean array as an index to another array it returns only the elements where the index is `True`. Thus we can replace the `for` loop with\n", + "\n", + "```python\n", + "belief[hall==z] *= scale\n", + "```\n", + "and only the elements which equal `z` will be multiplied by `scale`. This is roughly 100 times faster than the `for` loop because the operation is implemented in C, not Python." + ] + }, + { + "cell_type": "code", + "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true @@ -557,9 +628,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nxz3x1113nex2ux5++GGlpqZq8uTJKi0tVVFRkScmLi5O9fX1Ki4uVm1traKjo1VVVaXFixeP8BYB\nAACAwDPkXVMAAAAAjDzumnKB6upqxcfHy2KxyGazqbm52XRKRr3xxhv6p3/6J8XGxio4OFjbt283\nnZJRTzzxhL7xjW9o0qRJmjJliv7xH/9RR44cMZ2WUdXV1UpOTtakSZM0adIkpaWlqb6+3nRaAeWJ\nJ55QcHCwHnnkEdOpGPOTn/xEwcHBXo/o6GjTaRnndDqVl5enKVOmyGKxKCkpSW+88YbptIyZPn26\nz/skODhYd955p+nUjBkYGNCaNWs8vUl8fLzWrFmjgYEB06kZc/r0aRUVFSkuLk7h4eHKyMhQa2ur\n6bSGhUb8b9TV1amoqEjl5eVqb29XWlqaFixYoK6uLtOpGXP69Gndcsst2rBhg8LDw02nY1xTU5N+\n+MMf6s0339TevXsVGhqqzMxM/elPfzKdmjFTp07Vv//7v+vgwYNqa2vT7bffrsWLF+vw4cOmUwsI\nBw4c0LPPPqvk5GTTqRh30003yeVyyel0yul06ve//73plIzq6elRenq6goKCtHv3bnV2dqqqqkpT\npkwxnZoxra2tnveH0+nU22+/raCgIH33u981nZoxTz75pGpqavSLX/xC7777rjZs2KDq6mo98cQT\nplMz5l/+5V9kt9v13HPP6fDhw8rKylJmZqYcDofp1C6fGx5z5sxxP/jgg15jM2fOdP/oRz8ylFFg\nufbaa93btm0znUZAOX36tDskJMT96quvmk4loFx//fXu//iP/zCdhnF/+tOf3DNmzHDv27fPPX/+\nfHdhYaHplIz513/9V/ctt9xiOo2AUlZW5s7IyDCdRkBbu3ate/Lkye6//OUvplMx5o477nDn5eV5\njd13333uO++801BGZp09e9YdGhrq/tWvfuU1npKS4l6zZo2hrIaPM+J/1dfXp7a2NmVlZXmNZ2dn\nq6WlxVBWCHSffvqpBgYGNHnyZNOpBISBgQHt3LlTZ86cUVpamul0jFuxYoWWLl2qf/iHfzCdSkA4\nduyYYmJiFB8fr7vvvtvrS/5Xo5dffllz5sxRbm6urFarbr31Vm3cuNF0WgHlP//zP/X9739f11xz\njelUjMnIyNDevXv17rvvSpLeeecd/fa3v9WiRYsMZ2bG+fPn1d/f7/OesFgsY/JyYhrxv+ru7lZ/\nf7+sVqvXuNVqldPpNJQVAt3KlSv19a9/XXPnzjWdilGHDx/WxIkTdc011+gHP/iBdu3apcTERNNp\nGfXss8/q2LFjWrt2relUAsJtt92mrVu36je/+Y02bdokp9OptLQ0ffLJJ6ZTM+bYsWOqrq7WjBkz\n1NDQoKKiIq1evVrV1dWmUwsIDQ0NOnHihB544AHTqRj12GOP6Xvf+55mz56tcePG6ZZbblFeXp4e\nfPBB06kZce2112ru3Llau3atPv74Yw0MDGjHjh168803x+SlKX7dvhCAr5KSErW0tGj//v0KCgoy\nnY5RN910kw4dOqSenh7993//t5YtW6bGxkbNnj3bdGpGHD16VD/+8Y+1f/9+BQdzvkOScnJyvJ7f\ndtttmj59urZt2+Z1a9urycDAgL7xjW+ooqJCkpScnKyjR49q48aN+sEPfmA4O/OeffZZpaamKikp\nyXQqRu3cuVPPPfecdu7cqdmzZ6u9vV2PPPKIpk+frvvvv990ekbs2LFD+fn5io2NVWhoqL7+9a/r\nnnvuUVtbm+nULhufEH8VERGhkJAQuVwur3GXy6XIyEhDWSFQFRcXq66uTnv37vX8WuzVLDQ0VPHx\n8br11ltVUVGhr33ta6qsrDSdljFvvvmm/u///k+zZ89WWFiYwsLC1NjYqI0bN2rcuHHq6+sznaJx\n4eHhSkxM1HvvvWc6FWOioqJ08803e43dfPPN+vDDDw1lFDj+93//V6+88opWrFhhOhXjVq1apdLS\nUi1ZskSJiYm69957VVJSclV/WXP69Onau3evzpw5oz/+8Y86cOCAent7FR8fbzq1y0Yj/ldhYWFK\nSUmR3W73Grfb7UpPTzeUFQLRypUrPU34zJkzTacTkAYGBnTu3DnTaRjz7W9/W7///e916NAhz8Nm\ns+nuu+/WoUOHFBYWZjpF4/7yl7+os7NTUVFRplMxJj093XPd7+feffdd/riXtGXLFo0fP165ubmm\nUzHuz3/+s8+/rAUHB1/Vty/8nMVikdVq1SeffKLf/OY3Y/JHIbk05W+UlJRo2bJlSk1NVXp6umpq\nauRwOK7a67Ak6cyZM3r//ffldrs1MDCgDz/8UIcOHdL111+vqVOnmk5v1D388MPasWOHXn75ZU2a\nNMnzLyjXXnutJkyYYDg7M8rKyrRo0SJNnTpVp06d0n/913+psbHxqr6X+HXXXedzWc6ECRN0/fXX\n+5wBvVqUlpbqzjvv1Fe+8hW5XC49/vjj+vOf/6z77rvPdGrGFBcXKz09Xf/2b/+m7373u3r77bdV\nVVWlJ58xUHatAAABbElEQVR80nRqxm3evFl33303t82VdOedd+rJJ59UXFycEhMT9fbbb6uyslJ5\neXmmUzOmoaFBAwMDuummm/Tee+9p1apVmj179tisienbtgSampoa9/Tp093jx49322w2d3Nzs+mU\njNq3b587KCjIHRwc7PW4//77TadmxGC1CA4Odv/kJz8xnZoxeXl57ri4OPf48ePdVqvVnZWV5bbb\n7abTCjjf/OY3r+rbF+bm5rpjYmLc11xzjTs2Ntb9z//8z+6Ojg7TaRlXX1/vTk5OdlssFndCQoL7\nF7/4hemUjNu7d687ODjY3draajqVgHD69Gl3cXGxOy4uzh0eHu6eMWOGu7y83H3u3DnTqRnzy1/+\n0j1jxgz3+PHj3dHR0e5HHnnE/emnn5pOa1j4iXsAAADAAK4RBwAAAAygEQcAAAAMoBEHAAAADKAR\nBwAAAAygEQcAAAAMoBEHAAAADKARBwAAAAygEQcAAAAM+H/Uw0AYefrvSAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -567,25 +638,20 @@ } ], "source": [ - "def normalize(distribution):\n", - " assert distribution.dtype.kind == 'f'\n", - " \"\"\" Normalize distribution so it sums to 1.0\"\"\"\n", - " distribution /= sum(distribution.astype(float)) \n", + "from filterpy.discrete_bayes import normalize\n", "\n", - "def update(map_, belief, z, prob_correct):\n", - " scale = prob_correct / (1. - prob_correct)\n", - " for i, val in enumerate(map_):\n", - " if val == z:\n", - " belief[i] *= scale\n", + "def scaled_update(hall, belief, z, z_prob): \n", + " scale = z_prob / (1. - z_prob)\n", + " belief[hall==z] *= scale\n", " normalize(belief)\n", "\n", "belief = np.array([0.1] * 10)\n", - "update(hallway, belief, 1, prob_correct=.75)\n", + "scaled_update(hallway, belief, z=1, z_prob=.75)\n", "\n", "print('sum =', sum(belief))\n", "print('probability of door =', belief[0])\n", "print('probability of wall =', belief[2])\n", - "bp.bar_plot(belief)" + "bp.bar_plot(belief, ylim=(0, .3))" ] }, { @@ -598,186 +664,42 @@ "\n", "$$\\mathtt{posterior} = \\frac{\\mathtt{prior}\\times \\mathtt{likelihood}}{\\mathtt{normalization}}$$ \n", "\n", - "It is very important to learn and internalize these terms as most of the literature uses them extensively." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Incorporating Movement Data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Recall how quickly we were able to find an exact solution to our dog's position when we incorporated a series of measurements and movement updates. However, that occurred in a fictional world of perfect sensors. Might we be able to find an exact solution even in the presence of noisy sensors?\n", + "It is very important to learn and internalize these terms as most of the literature uses them extensively.\n", "\n", - "Unfortunately, the answer is no. Even if the sensor readings perfectly match an extremely complicated hallway map we could not say that we are 100% sure that the dog is in a specific position - there is, after all, the possibility that every sensor reading was wrong! Naturally, in a more typical situation most sensor readings will be correct, and we might be close to 100% sure of our answer, but never 100% sure. This may seem complicated, but lets go ahead and program the math, which as we have seen is quite simple.\n", - "\n", - "First let's deal with the simple case - assume the movement sensor is perfect, and it reports that the dog has moved one space to the right. How would we alter our `belief` array?\n", - "\n", - "I hope after a moment's thought it is clear that we should shift all the values one space to the right. If we previously thought there was a 50% chance of Simon being at position 3, then after the move to the right we should believe that there is a 50% chance he is at position 4. So let's implement that. Recall that the hallway is circular, so we will use modulo arithmetic to perform the shift correctly." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAACrCAYAAACt8bDOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtUVFX7B/DvGRAYlFBC7iSgiDdEBSlGTCvEl8xLr4la\nqZBlUJpKF6MsL5Gmtig10d40REuzlmYXyVdMAVFMEaa8p5JkC4YCFYi8Afv3Ry/zcxwuQxw5g3w/\na7EW7LP32c95BlzPHPfsIwkhBIiIiIiIqNlUSgdARERERHSnYHFNRERERCQTFtdERERERDJhcU1E\nREREJBMW10REREREMmFxTUREREQkExbXRNQmpaWlITQ0FA4ODlCpVHjggQeUDqnVO3/+PFQqFaKj\now3ao6KioFKp8Ouvv96WedPT06FSqbBgwYLbcn4ioqZgcU1EZkOlUhl92djYwNvbG1FRUTh16pQs\n85w/fx6jRo3CiRMnMGnSJMyfP9+oIKR/TpIko59vbWuK2uK5sdeoOXMQEcnFUukAiIhuJkkS5s2b\np/+5rKwMP/zwAzZs2ICtW7ciKysLAQEBzZpj9+7duHbtGhYsWIBXXnmluSFTIxYvXoz4+Hi4ubk1\n6zz1Fc/33nsvTp06BUdHx2adn4hIDiyuicjsvPnmm0ZtL7zwAj744AO8//77SE5Obtb5CwsLAQDO\nzs7NOg+ZxsXFBS4uLs0+T30PFFar1ejevXuzz09EJAcuCyGiVmHYsGEAgJKSkjqPb926FWFhYXBw\ncICNjQ26d++O+Ph4VFRU6PvULi+YP38+ACA6Olq//CQzM1PfLz8/H9HR0fDw8IC1tTVcXFwwfvx4\nHD161Gje9evX69f7Hjx4EBEREejUqRNUKhXKy8sBADU1NVi7di0GDRoEe3t7qNVq+Pv745133sGN\nGzdMzkHt2uWMjAwkJyejX79+sLW1hYuLC5555hn8/vvvRmOGDh0KlUqFX375BcuXL0efPn2gVqvx\n6KOP6vvodDrMmjULvr6+UKvVcHBwwPDhw7Fnz54646ioqEBcXBw8PDygVqvRs2dPvPfee6ipqWkw\n7rrWXB8+fBgTJkyAu7s7rK2t4erqioceeggbNmwAAMyfPx8PPvggACAlJcVgyVBKSgqAhtdc/9PX\nUqvVYsSIEejYsSPat2+PoUOHIjs7u87rIyK6Ge9cE1GrsHv3bgBAcHCw0bHnnnsOa9asgaenJ8aO\nHYtOnTohOzsbS5YsQWpqKvbv348OHTrA29sb8+bNQ3p6OjIyMjBmzBj069cPAODl5QUAyM3NxUMP\nPYTy8nI88sgj8Pf3x9mzZ7Ft2zZ88803+Oqrr/SF/s0OHDiARYsWYejQoZg2bRqKiopgYWGBqqoq\n/Pvf/8a3334LPz8/PPHEE7CxsUF6ejpee+01fP/999i5cycsLCxMzkViYiJ2796NCRMmYMSIEcjI\nyMC6deuwd+9eHDp0CA4ODkZjZsyYgQMHDuCRRx7ByJEjYWdnBwA4evQohg0bhj/++APDhw/Ho48+\nipKSEmzfvh3Dhg3D2rVrDdY6X7t2DQ899BBycnLQt29fTJo0CZcvX0ZCQgLS09PrjbmuJR1r165F\nTEwMLC0tMXLkSPj5+aGkpARHjhzB8uXLMXnyZDzwwAMoKChASkoK+vXrhzFjxujH9+/fv8E5/ulr\nmZOTg6VLl0Kj0WDatGkoKCjA1q1b8dBDD0Gr1fIuORE1TBARmQlJkoQkSWL+/Pli3rx5Yt68eWL2\n7NkiNDRUqFQqMWbMGFFZWWkwZuPGjUKSJDF27Fhx9epVg2MJCQlCkiTx4osvGrTPmzdPSJIkUlJS\nDNprampEr169hCRJYsOGDQbHdu/eLVQqlXBychJ//fWXvj05OVkf90cffWR0TW+99ZaQJEnMmDFD\n1NTUGMw1bdo0IUmSWLlypUn5mTJlipAkSVhbWwutVmtwbMaMGUKSJPHss88atA8ZMkRIkiQ8PDxE\nQUGBwbGqqirRvXt3oVarRWZmpsGxoqIi4enpKWxtbcXvv/+ub3/77beFJEni0UcfNehfUFAgHB0d\nhSRJIjo6us64b57/+PHjwtLSUnTq1EkcO3bM6Fp/++03/ffp6el1nrfW3r17hSRJYsGCBfq25r6W\nt/5ufPjhh0KSJPHcc8/VGQMRUS0W10RkNmoLm7q+evfuLTZt2mQ0ZsCAAaJdu3bi0qVLRseqqqqE\no6OjcHFxMWivr7jOysoSkiSJe++9t874xo4dKyRJEps3b9a31RZkAwYMMOpfXV2tn7+6utro+KVL\nl4RKpap3vlvVFqlPP/200bGLFy+K9u3biw4dOogbN27o22uL6xUrVhiN+frrr+t881FrxYoVQpIk\nkZSUpG/r1q2bsLCwED///LNR/4ULF5pcXE+fPl1IkiTefffdRq+7tnhuSnHdnNdy8ODBRv1v3Lgh\nLC0txcCBAxuNl4jaNi4LISKzIkkSqqur9T9fuXIFx44dw6uvvoonnngCx48fR0JCAgDgr7/+Ql5e\nHu6++268//77dZ7PysoKRUVFuHTpEjp16tTg3Lm5uQCgX+N7q7CwMGzbtg15eXmYMGGCwbG6lqv8\n/PPPKC0tRdeuXbFw4cI6z2ljY4MTJ040GNethgwZYtTWqVMn+Pv744cffsDp06fRu3fvRuPbv38/\nAKCgoEC/Dv1mZ86cAQCcPHkSwN9rrc+dOwc3Nzf4+voa9b///vtNvoaDBw8CACIiIkwe0xTNeS2D\ngoKM+ltaWsLZ2RmXLl2SP1giuqOwuCYis6ZWqzFw4EBs27YNHh4eWLp0KWJiYuDh4aEvdEpLS+st\nXoG/C/Y///yz0eK6rKwMAOrd2aK2/fLly/Ueu1lpaSkA4Ny5c43G1xT17XJS2177QUpT49u6dSu2\nbt1ab2yVlZUA/j8/jc1visuXL0OSJLi7u5s8pima81p27NixzjGWlpYGb/yIiOrC3UKIqFWwt7dH\n9+7dUVVVpb8raW9vDwDo27cvampq6v2qrq6Gp6enSXMAf++eUZeioiKDfjerq0Cu7Tdq1KhG42uK\n4uLiBtubGt+2bdsajG3dunUG/Rub3xQdO3aEEAK//fabyWOaojmvJRFRc7C4JqJWo/ZOtfjffscd\nOnRAnz59cPLkSf1d2OYIDAwEgHq3oPv+++8N+jWmZ8+e6NixI3744YcmbbnXmLp25bh06RKOHj2K\n9u3bw8/Pz6TzaDQaADDYhrAhdnZ26NatG4qKivRLRm6WkZFh0nkAICQkBADw3XffNdq3dieVprwJ\nkfu1JCIyFYtrImoVtm/fjvPnz8PKykpfFALAiy++iBs3biA6OrrO9bAVFRU4dOiQSXNoNBr07NkT\nhw4dwqeffmpwbM+ePdi2bRs6d+6M0aNHm3Q+CwsLzJw5E8XFxXj++edx5coVoz4lJSX48ccfTTpf\nrY0bN0Kr1Rq0vfnmm/jrr7/wxBNPGG3rV9+yk1GjRqFbt25Ys2YNvvnmmzr75OXl4eLFi/qfo6Oj\nIYTAK6+8YvBQl4KCAqxYscLka4iNjYWlpSXefvttHD9+3Oj4zXe07777bv0cppL7tSQiMhXXXBOR\nWRFCYMGCBfrCrbKyEidOnMB3330HSZKwaNEidO7cWd9/ypQpyM3NxcqVK9G1a1cMHz4cXbp0weXL\nl3H+/Hns27cPw4cPx7Zt20yaPyUlBWFhYZg8eTI+//xz9OnTB+fOncPWrVthY2ODDRs2wMbGxuTr\nmTt3Lo4ePYq1a9dix44dePDBB+Hh4YE//vgD586dw/79+zF9+nQkJiaafM6IiAgMGjQI48ePh7Oz\nMzIzM5GdnY2uXbti0aJFRv1FPU82tLS0xJdffonw8HCMHj0a9957L/r3748OHTrgwoULyMvLw88/\n/wytVqvfO/vFF1/E9u3b8dVXX6F///4YPnw4ysrK8MUXX2Dw4MH4+uuvTbqGnj17IikpCTExMQgM\nDMTIkSPRvXt3XLx4EXl5ebh+/bp++U+PHj3g6emJffv24cknn4Svry8sLCwwevRo+Pv71zuH3K8l\nEZFJGttOJCMjQ4wcOVK4u7sLSZLE+vXrG92C5KeffhL333+/UKvVwt3dXSxcuLB5e5oQUZsgSZJQ\nqVQGW/BZWloKNzc3MWbMGLF79+56x+7cuVOMHj1auLi4CCsrK+Hs7CwCAwPFK6+8YrQn9Pz584VK\npTLaiq/W2bNnRVRUlHB3d9efKzIyUvz4449GfdevXy9UKpXBNnB12bx5swgPDxd33323sLKyEm5u\nbiIkJETMnz9fnD171oTs/P+WdhkZGeLjjz8WAQEBQq1WC2dnZ/H0008b7Edda+jQoUKlUhntcX2z\nkpISMXfuXNG3b1/Rvn17YWtrK7p16yZGjx4tPv74Y3HlyhWD/uXl5SIuLk64u7sLGxsb0bNnT5GY\nmCjy8/Pr3DIvKiqq3hgOHjwoHnvsMf3r5ubmJsLCwsQnn3xi0C83N1cMGzZMdOzYUahUKoPXr66t\n+GrJ+Vp6eXkJb2/vevNIRCSEEJIQ9dzS+J/vvvsO+/fvR//+/TF58mSsXr0akydPrrd/eXk5unfv\njqFDh+LNN9/EyZMnER0djfnz5yMuLk72NwdERG1FVFQUNmzYgPT09CZte0dERC2n0WUhERER+n1I\no6KiGj3hp59+iqtXryIlJQXW1tbo1asXTp06hcTERBbXRERERHRHk/0DjdnZ2Rg8eDCsra31beHh\n4SgsLGzSh1GIiIiIiFob2T/QqNPpcM899xi01T5YQKfToUuXLvr22k3+iYiocTdu3NA/EIf/fhIR\nmYdb98uX/c51U580RkREpklKSsLFixcxaNAgpUMhIqJ6yF5cu7i4GD0Rq/apXfU9hpaIiIiI6E4g\n+7KQkJAQzJkzB9euXdOvu05LS4O7u7vBkpBb3e5H0Obk5AAAgoKCbus8rQlzYow5McacGGNOjDEn\nxpgTY8yJMebEUGvJR0NL8xq9c11ZWQmtVgutVouamhoUFBRAq9XiwoULAID4+HiEhYXp+z/++OOw\ntbVFVFQUjh8/jm3btmHJkiXcKYSIiIiI7niNFteHDx/GgAEDMGDAAFy9ehXz5s3DgAEDMG/ePAB/\nf0gxPz9f3/+uu+5CWloaCgsLERQUhBkzZuCll17C7Nmzb99VEBERERGZgUaXhQwdOhQ1NTX1Hk9O\nTjZq69OnDzIyMpoXGRERERFRKyP7BxqJiIiIiNoqFtdERERERDJhcU1EREREJBMW10REREREMmFx\nTUREREQkExbXREREREQyYXFNRERERCQTFtdERERERDJhcU1EREREJBMW10REREREMmFxTUREREQk\nExbXREREREQyYXFNRERERCQTk4rrpKQkeHt7Q61WIygoCFlZWQ32/+9//4uQkBDcdddd6Ny5M8aM\nGYMzZ87IEjARERERkblqtLjesmULZs2ahblz50Kr1UKj0SAiIgIXLlyos/8vv/yC0aNHY8iQIdBq\ntdi9ezeuXr2Khx9+WPbgiYiIiIjMSaPFdWJiIqKjozF16lT4+flhxYoVcHV1xerVq+vsf+TIEVRV\nVWHx4sXw8fFBQEAA5syZg3PnzuHixYuyXwARERERkblosLi+fv06cnNzER4ebtAeHh6OAwcO1Dkm\nODgY7dq1w0cffYTq6mpUVFRg/fr1CA4OhoODg3yRExERERGZGUkIIeo7WFhYCA8PD2RmZiI0NFTf\nvnDhQmzatAmnTp2qc9y+ffswbtw4lJaWoqamBv3798d3332Hzp07G/QrKyvTf8812URERETUGvj6\n+uq/t7e3Nzgm+24hOp0OU6dOxZQpU5CTk4P09HTY2dkhMjISDdTxREREREStnmVDBx0dHWFhYYHi\n4mKD9uLiYri6utY5ZtWqVbCzs8OSJUv0bZ988gk8PT2RnZ0NjUZT57igoKCmxt4kOTk5LTJPa8Kc\nGGNOjDEnxpgTY8yJMebEGHNijDkx1FrycfPqi1s1eOfaysoKgYGB2LVrl0F7WlpavUXylStXoFIZ\nnrb255qaGpMCJiIiIiJqjRpdFhIXF4f169dj3bp1OHnyJGbOnAmdToeYmBgAQHx8PMLCwvT9R4wY\ngdzcXLz11ls4c+YMcnNzER0djXvuuQeBgYG370qIiIiIiBTW4LIQAIiMjERpaSkSEhJQVFQEf39/\npKamwtPTE8Dfa6zz8/P1/R944AFs2rQJS5cuxdKlS2Fra4uQkBDs3LkTarX69l0JEREREZHCGi2u\nASA2NhaxsbF1HktOTjZqGz9+PMaPH9+8yIiIiIiIWhnZdwshIiIiImqrWFwTEREREcmExTURERER\nkUxYXBMRERERyYTFNRERERGRTFhcExERERHJhMU1EREREZFMWFwTEREREcmExTURERERkUxYXBMR\nERERyYTFNRERERGRTFhcExERERHJhMU1EREREZFMTCquk5KS4O3tDbVajaCgIGRlZTU65v3330eP\nHj1gY2MDNzc3xMfHNztYIiIiIiJzZtlYhy1btmDWrFlYvXo1QkNDsWrVKkRERODEiRPw9PSsc0xc\nXBx27NiBd999F/7+/igrK0NRUZHswRMRERERmZNGi+vExERER0dj6tSpAIAVK1Zg586dWL16NRYt\nWmTU//Tp0/jggw9w9OhR+Pn56dsDAgJkDJuIiIiIyPw0uCzk+vXryM3NRXh4uEF7eHg4Dhw4UOeY\nr776Cj4+PkhNTYWPjw+8vb0RFRWFP/74Q76oiYiIiIjMkCSEEPUdLCwshIeHBzIzMxEaGqpvX7hw\nITZt2oRTp04ZjYmJiUFKSgr69euHZcuWAQBeeuklAEB2djYkSdL3LSsr039/5syZ5l8NEREREdFt\n5uvrq//e3t7e4Fijy0KaqqamBteuXcPGjRvRrVs3AMDGjRvh5+eHnJwcDBw4UO4piYiIiIjMQoPF\ntaOjIywsLFBcXGzQXlxcDFdX1zrHuLq6wtLSUl9YA0C3bt1gYWGBX3/9td7iOigoqKmxN0lOTk6L\nzNOaMCfGmBNjzIkx5sQYc2KMOTHGnBhjTgy1lnzcvPriVg2uubayskJgYCB27dpl0J6WlgaNRlPn\nmNDQUFRVVSE/P1/flp+fj+rqanTp0qUpcRMRERERtSqN7nMdFxeH9evXY926dTh58iRmzpwJnU6H\nmJgYAEB8fDzCwsL0/cPCwjBgwAA89dRT0Gq1yMvLw1NPPYX77rvP7N+FEBERERE1R6NrriMjI1Fa\nWoqEhAQUFRXB398fqamp+j2udTqdwV1qSZLw7bff4oUXXsD9998PtVqN8PBwJCYm3r6rICIiIiIy\nAyZ9oDE2NhaxsbF1HktOTjZqc3Fxweeff968yIiIiIiIWhmTHn9ORERERESNY3FNRERERCQTFtdE\nRERERDJhcU1EREREJBMW10REREREMmFxTUREREQkExbXREREREQyYXFNRERERCQTFtdERERERDJh\ncU1EREREJBMW10REREREMmFxTUREREQkExbXREREREQyMam4TkpKgre3N9RqNYKCgpCVlWXSyc+c\nOQM7OzvY2dk1K0giIiIiotag0eJ6y5YtmDVrFubOnQutVguNRoOIiAhcuHChwXHXr1/HhAkTMGTI\nEEiSJFvARERERETmqtHiOjExEdHR0Zg6dSr8/PywYsUKuLq6YvXq1Q2OmzNnDvr164dx48ZBCCFb\nwERERERE5qrB4vr69evIzc1FeHi4QXt4eDgOHDhQ77gdO3Zgx44dWLlyJQtrIiIiImozLBs6WFJS\ngurqajg7Oxu0Ozk5QafT1TmmsLAQ06ZNw/bt22Fra2tyIDk5OSb3bY6Wmqc1YU6MMSfGmBNjzIkx\n5sQYc2KMOTHGnBgy93z4+vrWe0z23UImTZqE2NhYDBw4UO5TExERERGZtQbvXDs6OsLCwgLFxcUG\n7cXFxXB1da1zzN69e5GZmYkFCxYAAIQQqKmpQbt27bB69Wo8/fTTdY4LCgr6J/GbrPYd0O2epzVh\nTowxJ8aYE2PMiTHmxBhzYow5McacGGot+SgrK6v3WIPFtZWVFQIDA7Fr1y6MHTtW356WloZx48bV\nOebYsWMGP2/fvh1vv/02Dh8+DDc3t6bETURERETUqjRYXANAXFwcJk2ahODgYGg0GqxZswY6nQ4x\nMTEAgPj4eBw+fBi7d+8GAPTq1ctg/KFDh6BSqYzaiYiIiIjuNI0W15GRkSgtLUVCQgKKiorg7++P\n1NRUeHp6AgB0Oh3y8/MbPAf3uSYiIiKitqDR4hoAYmNjERsbW+ex5OTkBsdGRUUhKiqqyYERERER\nEbU2JhXXLSGr4NJtPX+FjVOLzHMzt/aW8HHko9+JiIiI2gqzKa5nZJa00EzXWmgeYOX9jvBxbLHp\niIiIiEhhsu9zTURERETUVrG4JiIiIiKSCYtrIiIiIiKZsLgmIiIiIpKJ2XygkYhMl19SgcLKqhaZ\nizvtEBERmY7FNVErVFhZ1YI77NTiTjtERESN4bIQIiIiIiKZsLgmIiIiIpIJi2siIiIiIpmwuCYi\nIiIikgmLayIiIiIimZhcXCclJcHb2xtqtRpBQUHIysqqt296ejpGjx4NNzc3tG/fHgEBAUhOTpYl\nYCIiIiIic2VScb1lyxbMmjULc+fOhVarhUajQUREBC5cuFBn/+zsbAQEBGDr1q04fvw4YmNjMW3a\nNGzevFnW4ImIiIiIzIlJ+1wnJiYiOjoaU6dOBQCsWLECO3fuxOrVq7Fo0SKj/vHx8QY/x8TEYO/e\nvdi6dSsmTpwoQ9hEREREROan0TvX169fR25uLsLDww3aw8PDceDAAZMnKisrg4ODQ9MjJCIiIiJq\nJRq9c11SUoLq6mo4OzsbtDs5OUGn05k0ybfffos9e/Y0qRi/E1RUVCAn55zSYTQqJydH6RDMjrnn\npPaR5Hcq/u20XsyJMebEGHNijDkxZO758PX1rffYbX/8+f79+/HEE09g5cqVCAoKut3T0R1K2Dmi\n5MadubmNY7saSBUt/ShzIiIiuh0aLa4dHR1hYWGB4uJig/bi4mK4uro2ODYrKwsjRozAW2+9hWef\nfbZ5kbZCdnZ2COpzj9Jh1Kv2XWFreNOTVXAJrx26MwvQlfc7ItTPq0ljsgouAbh2W+IxB/zbaX2Y\nE2PMiTHmxBhzYqi15KOsrKzeY43eCrSyskJgYCB27dpl0J6WlgaNRlPvuMzMTDz88MNYsGABXnjh\nhSaES0RERETUOpm0LCQuLg6TJk1CcHAwNBoN1qxZA51Oh5iYGAB/7w5y+PBh7N69G8Df+1yPGDEC\n06dPx8SJE/Vrsy0sLNC5c+fbdClERERERMoyqbiOjIxEaWkpEhISUFRUBH9/f6SmpsLT0xMAoNPp\nkJ+fr++fkpKCq1evYtmyZVi2bJm+3cvLy6AfEREREdGdxOQPNMbGxiI2NrbOY7c+fTE5OZlPZCQi\nIiKiNufO3H6BiIiIiEgBLK6JiIiIiGTC4pqIiIiISCYsromIiIiIZMLimoiIiIhIJiyuiYiIiIhk\nYvJWfNRy8ksqUFhZddvnqbBxAlD7KO2W4dbeEj6Odi02HxEREVFLYnFthgorqzAjs6QFZ7zWYjOt\nvN8RPo4tNh0RERFRi+KyECIiIiIimbC4JiIiIiKSCYtrIiIiIiKZsLgmIiIiIpIJP9BIRERERA3i\nTmamM6m4TkpKwrJly6DT6dC7d2+8//77CA0Nrbf/0aNHMX36dBw+fBgODg549tln8cYbb8gWNBER\nERG1HO5kZrpGl4Vs2bIFs2bNwty5c6HVaqHRaBAREYELFy7U2b+8vBzDhg2Dq6srcnJysHz5cixb\ntgyJiYnyRU1EREREZIYaLa4TExMRHR2NqVOnws/PDytWrICrqytWr15dZ/9PP/0UV69eRUpKCnr1\n6oWxY8dizpw5LK6JiIiI6I7XYHF9/fp15ObmIjw83KA9PDwcBw4cqHNMdnY2Bg8eDGtra4P+hYWF\nKCgokCFkIiIiIiLzJAkhRH0HCwsL4eHhgczMTIM11gsXLsSmTZtw6tQpozHh4eG45557sHbtWn3b\nr7/+Ci8vL2RnZ+Pee+/Vt5eVlcl1HURERERELc7e3t7gZ9m34pMkSe5TEhERERG1Cg0W146OjrCw\nsEBxcbFBe3FxMVxdXesc4+LiAp1OZ9S/9hgRERER0Z2qwa34rKysEBgYiF27dmHs2LH69rS0NIwb\nN67OMSEhIZgzZw6uXbumX3edlpYGd3d3dOnSxaDvrbfRiYiIiIhas0aXhcTFxWH9+vVYt24dTp48\niZkzZ0Kn0yEmJgYAEB8fj7CwMH3/xx9/HLa2toiKisLx48exbds2LFmyBHFxcbfvKoiIiIiIzECj\nD5GJjIxEaWkpEhISUFRUBH9/f6SmpsLT0xMAoNPpkJ+fr+9/1113IS0tDc8//zyCgoLg4OCAl156\nCbNnz759V0FEREREZAYa3C2EiIiIiIhMJ/tuIeYqKSkJ3t7eUKvVCAoKQlZWltIhKSYzMxOjRo2C\nh4cHVCoVUlJSlA5JcYsXL8bAgQNhb28PJycnjBo1CsePH1c6LEWtWrUKAQEBsLe3h729PTQaDVJT\nU5UOy2wsXrwYKpUKM2bMUDoURc2fPx8qlcrgy83NTemwFFVUVIQpU6bAyckJarUavXv3RmZmptJh\nKcbLy8vod0SlUuGRRx5ROjTFVFdX44033oCPjw/UajV8fHzwxhtvoLq6WunQFFVRUYFZs2bBy8sL\ntra2GDRoEHJycpQOq8naRHHd1Ee43+kqKyvRt29fLF++HGq1mtsnAsjIyMD06dORnZ2NPXv2wNLS\nEmFhYbh06ZLSoSnG09MTS5cuRV5eHo4cOYIHH3wQY8aMwdGjR5UOTXEHDx7ERx99hL59+/LvB0CP\nHj2g0+n0X235d+Ty5csYNGgQJElCamoqTp06hQ8++ABOTk5Kh6aYI0eOGPx+5ObmQpIkjB8/XunQ\nFLNkyRIkJSVh5cqVOH36NJYvX46kpCQsXrxY6dAU9fTTTyMtLQ0bNmzAsWPHEB4ejrCwMBQWFiod\nWtOINiDrK8w1AAAGYElEQVQ4OFhMmzbNoM3X11fEx8crFJH56NChg0hJSVE6DLPz559/CgsLC/Ht\nt98qHYpZcXBwEP/5z3+UDkNRly9fFl27dhXp6eli6NChYsaMGUqHpKh58+aJPn36KB2G2YiPjxeh\noaFKh2HWEhISRKdOncTVq1eVDkUxI0aMEFFRUQZtkydPFiNHjlQoIuX99ddfwtLSUnz99dcG7YGB\ngWLu3LkKRfXP3PF3rv/JI9yJysvLUVNTg06dOikdilmorq7GZ599hsrKSmg0GqXDUdS0adMwbtw4\nDBkyBIIfWQEA5Ofnw93dHT4+Ppg4cSJ++eUXpUNSzPbt2xEcHIzx48fD2dkZ/fv3x6pVq5QOy2wI\nIbBu3To8+eST+u1626LBgwdjz549OH36NADgxIkT2Lt3Lx5++GGFI1NOVVUVqqurjX4vbGxsWt1S\n3kZ3C2ntSkpKUF1dDWdnZ4N2Jycno4fdENWaOXMm+vfvj5CQEKVDUdTRo0cREhKCa9euoUOHDvjy\nyy/Ru3dvpcNSzEcffYT8/Hxs2rQJAJ9ICwD33XcfUlJS0KNHDxQXFyMhIQEajQbHjx+Hg4OD0uG1\nuPz8fCQlJSEuLg6vvfYa8vLy9Ovyn3/+eYWjU15aWhrOnz+PZ555RulQFDVnzhyUl5ejV69esLCw\nQFVVFebOnavf5rgtsrOzQ0hICBISEtCnTx84Oztj8+bNOHjwIHx9fZUOr0nu+OKaqKni4uJw4MAB\nZGVltfniqUePHvjpp59QVlaGL774ApMnT0Z6enqbLLBPnz6N119/HVlZWbCwsADw9124tn73+l//\n+pf++z59+iAkJATe3t5ISUlpk1uw1tTUIDg4GG+//TYAICAgAGfOnMGqVatYXOPvN6jBwcHw9/dX\nOhRFffbZZ9i4cSM2b96M3r17Iy8vDzNnzoSXlxeeeuoppcNTzMaNG/HUU0/Bw8MDFhYWCAwMxMSJ\nE3HkyBGlQ2uSO764/iePcKe2a/bs2fj888+xd+9eeHl5KR2O4tq1awcfHx8AQP/+/XH48GG89957\nWLt2rcKRtbzs7GyUlJQYvLGorq7Gvn378OGHH6KyshLt2rVTMELzYGtri969e+Ps2bNKh6IINzc3\n9OrVy6CtR48e+PXXXxWKyHz8/vvv+Prrr5GUlKR0KIp7+eWX8corryAyMhIA0Lt3bxQUFGDx4sVt\nurj28fFBeno6rly5gvLycjg7O2P8+PHo2rWr0qE1yR2/5vrmR7jfLC0trc2vHSVDM2fOxJYtW7Bn\nzx50795d6XDMUnV1Na5fv650GIp49NFHcezYMfz444/48ccfodVqERQUhIkTJ0Kr1bKw/p+rV6/i\n5MmTbfbmxaBBg3Dq1CmDtp9//plv1gGsX78eNjY2mDhxotKhKO7KlStQqQxLMJVK1eb/J6yWWq2G\ns7MzLl26hF27dmH06NFKh9Qkd/yda+Dv/+afNGkSgoODodFosGbNGoNHuLc1lZWVOHPmDIC//wuz\noKAAWq0Wd999t/7Jm23N888/j08++QTbt2+Hvb29fj2+nZ0d2rdvr3B0ynj11VfxyCOPwMPDAxUV\nFdi0aRMyMjLa7F7Xtft938zW1hadOnUyulPZlrz00ksYNWoUPD098fvvv+Ott97ClStXMGXKFKVD\nU8Ts2bOh0WiwaNEiREZGIi8vDytXrmzzW6wJIbB27VpMmDABtra2SoejuJEjR+Kdd96Bt7c3evXq\nhby8PLz33ntt9u+m1q5du1BdXY0ePXrg7NmzePnll9GzZ09ER0crHVrTKLlVSUtKSkoSXl5ewtra\nWgQFBYl9+/YpHZJi9u7dKyRJEpIkCZVKpf8+Ojpa6dAUc2suar8WLFigdGiKiYqKEl26dBHW1tbC\nyclJDBs2TOzatUvpsMwKt+ITYsKECcLNzU1YWVkJd3d38dhjj4mTJ08qHZaiduzYIQICAoSNjY3w\n8/MTK1euVDokxe3Zs0eoVCpx+PBhpUMxCxUVFWLWrFmiS5cuQq1WCx8fH/H666+La9euKR2aoj7/\n/HPRtWtXYW1tLVxdXcWMGTNEeXm50mE1GR9/TkREREQkkzt+zTURERERUUthcU1EREREJBMW10RE\nREREMmFxTUREREQkExbXREREREQyYXFNRERERCQTFtdERERERDJhcU1EREREJJP/A+lnEWAAPLge\nAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def perfect_predict(belief, move):\n", - " \"\"\" move the position by 'move' spaces, where positive is \n", - " to the right, and negative is to the left\n", - " \"\"\"\n", - " n = len(belief)\n", - " result = np.zeros(n)\n", - " for i in range(n):\n", - " result[i] = belief[(i-move) % n]\n", - " belief[:] = result # copy back to original array\n", - " \n", - "belief = np.array([.35, .1, .2, .3, 0, 0, 0, 0, 0, .05])\n", - "bp.bar_plot(belief, title='Before prediction')\n", - "plt.show()\n", - "\n", - "perfect_predict(belief, 1)\n", - "bp.bar_plot(belief, title='After prediction')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that we correctly shifted all values one position to the right, wrapping from the end of the array back to the beginning.\n", - "\n", - "## Terminology\n", - "\n", - "I introduced this terminology in the last chapter, but let's review to help solidify your knowledge. \n", - "\n", - "The *system* is what we are trying to model or filter. Here the system is our dog. The state is its current configuration or value. In this chapter the state is our dog's position. We rarely know the actual state, so we say our filters produce the *estimated state* of the system. In practice this often gets called the state, so be careful to understand if the reference is to the state of the filter (which is the estimated state), or the state of the system (which is the actual state).\n", - " \n", - "One cycle of prediction and updating with a measurement is called the state or system *evolution*, which is short for *time evolution* [7]. Another term is *system propogation*. This term refers to how the state of the system changes over time. For filters, this time is usually discrete. For our dog tracking, the system state is the position of the dog, so the state evolution is the position after a discrete amount of time has passed.\n", - "\n", - "We model the system behavior with the *process model*. Here, our process model is that the dog moves one position at each time step. This is not a particularly accurate model of how dog's behave. The error in the model is called the *system error* or *process error*. \n", - "\n", - "More terminology - the prediction is our new *prior*. Time has moved forward and we made a prediction without benefit of knowing the measurements. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Adding Noise to the Prediction" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We want to solve real world problems, and we have already stated that all sensors have noise. Therefore the code above must be wrong since it assumes we have perfect measurements. What if the sensor reported that our dog moved one space, but he actually moved two spaces, or zero? Once again this may initially sound like an insurmountable problem, but let's model it and see what happens. Since this is an example we will create a simple noise model for the sensor - later in the book we will handle more difficult errors.\n", - "\n", - "We will say that when the sensor sends a movement update, it is 80% likely to be right, and it is 10% likely to overshoot one position to the right, and 10% likely to undershoot to the left. That is, if we say the movement was 4 (meaning 4 spaces to the right), the dog is 80% likely to have moved 4 spaces to the right, 10% to have moved 3 spaces, and 10% to have moved 5 spaces.\n", - "\n", - "This is slightly harder than the math we have done so far, but it is still tractable. Each result in the array now needs to incorporate probabilities for 3 different situations. For example, consider position 9 for the case where the reported movement is 2. It should be clear that after the move we need to incorporate the probability that was at position 7 (9-2). However, there is a small chance that our dog actually moved from either 1 or 3 spaces away due to the sensor noise, so we also need to use positions 6 and 8. How much? Well, we have the probabilities, so we can just multiply and add. It would be 80% of position 7 plus 10% of position 6 and 10% of position 8! Let's try coding that:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAACeCAYAAAD5RibQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGdVJREFUeJzt3X9UlvUd//EX4K+bIk6OIBAUKIdTiSl3LO4s2w7dZ2Zq\nO07MNgu0OTllIsfmWLZWUs7coakJbeVRsmm6U3OdZA06asSkMxFpZuosGrkD991wBswpfL25vn/0\n9f7u7kZ+5AXXDTwf53gOfK7PdV/v+30uz3ndF9f9uYIMwzAEAAAA4IoFW10AAAAAMFgQrgEAAACT\nEK4BAAAAkxCuAQAAAJMQrgEAAACTEK4BAAAAkxCuAQAAAJN0G64rKio0e/ZsxcbGKjg4WCUlJd2+\n6NGjRzV9+nSFhoYqNjZWa9asMaVYAAAAIJB1G67PnTunm266SRs2bJDNZlNQUFCX81taWnTnnXcq\nOjpa1dXV2rBhg9avX6/CwkLTigYAAAACUVBvntAYFhamzZs36/7777/snOLiYuXn58vtdmvkyJGS\npKefflrFxcX65z//eeUVAwAAAAHK9Huuq6qqdNttt3mDtSQ5nU41NDSovr7e7MMBAAAAAWOY2S/o\ncrk0duxYn7GoqCjvtnHjxnnHm5ubzT48AAAA0G/Cw8N9fjf9ynV392QDAAAAg5Xp4fr666+Xy+Xy\nGXO73d5tAAAAwGBl+m0h6enpWrVqldra2rz3XZeXl2vMmDE+t4R82ZcvqZuturpakmS32/v0OAMJ\nPfFHT/zRE3/0xB898UdP/NETf/TE10DpR1e3NvdoKb7a2lrV1taqo6ND9fX1qq2t1enTpyVJ+fn5\nysjI8M6/7777FBoaqqysLB07dkyvv/661q1bp7y8PBPeCgAAABC4ug3Xhw4d0tSpUzV16lRduHBB\nTzzxhKZOnaonnnhC0hdfUqyrq/POv+aaa1ReXq6GhgbZ7XYtW7ZMK1eu1IoVK/ruXQAAAAABoNvb\nQu644w51dHRcdvvWrVv9xiZPnqx33nnnyioDAAAABhjTv9AIAAAADFWEawAAAMAkhGsAAADAJIRr\nAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsA\nAADAJIRrAAAAwCQ9CtdFRUVKSEiQzWaT3W5XZWVll/P//Oc/Kz09Xddcc42uu+463XPPPTp16pQp\nBQMAAACBqttwvWvXLuXm5mr16tWqra2Vw+HQjBkzdPr06U7nf/LJJ5ozZ46mT5+u2tpavf3227pw\n4YLuuusu04sHAAAAAkm34bqwsFDZ2dlavHixkpKStHHjRkVHR6u4uLjT+YcPH9bFixe1du1aJSYm\nKiUlRatWrdLHH3+sf//736a/AQAAACBQdBmu29vbVVNTI6fT6TPudDp18ODBTvdJS0vT8OHD9eKL\nL8rj8ai1tVXbtm1TWlqaRo8ebV7lAAAAQIAJMgzDuNzGhoYGxcbGqqKiQtOmTfOOP/XUU9qxY4dO\nnDjR6X7vvvuu5s2bpzNnzqijo0NTpkzRn/70J1133XU+85qbm70/c082AAAABoLx48d7fw4PD/fZ\nNszsg7lcLi1evFgPPPCA7rvvPrW0tOjnP/+5MjMztW/fPgUFBZl9SABAJ4ywCDX9n8G5KFTE8A4F\ntTZZXQYA+OkyXEdERCgkJERut9tn3O12Kzo6utN9Nm/erLCwMK1bt8479sorryguLk5VVVVyOByd\n7me323tbe69UV1f3y3EGEnrij574oyf+BkpPKuvP6md/HZwBdNPtEZqWFG91GV0aKOdJf6In/uiJ\nr4HSj/+9++LLurykMWLECKWmpqqsrMxnvLy8/LIh+fz58woO9n3ZS793dHT0qGAAAABgIOr274V5\neXnatm2btmzZouPHj2v58uVyuVxaunSpJCk/P18ZGRne+TNnzlRNTY3WrFmjU6dOqaamRtnZ2Ro7\ndqxSU1P77p0AAAAAFuv2nuvMzEydOXNGBQUFamxsVHJyskpLSxUXFyfpi3us6+rqvPO//e1va8eO\nHXr22Wf17LPPKjQ0VOnp6Xrrrbdks9n67p0AAAAAFuvRFxpzcnKUk5PT6batW7f6jc2fP1/z58+/\nssoAAACAAWZwfo0cAAAAsADhGgAAADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAA\nMAnhGgAAADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAAMEmPwnVRUZESEhJks9lk\nt9tVWVnZ7T6//vWvNWHCBI0aNUoxMTHKz8+/4mIBAACAQDasuwm7du1Sbm6uiouLNW3aNG3evFkz\nZszQhx9+qLi4uE73ycvL0969e/WrX/1KycnJam5uVmNjo+nFAwAAAIGk23BdWFio7OxsLV68WJK0\nceNGvfXWWyouLtYzzzzjN//kyZN6/vnndfToUSUlJXnHU1JSTCwbAAAACDxd3hbS3t6umpoaOZ1O\nn3Gn06mDBw92us8f//hHJSYmqrS0VImJiUpISFBWVpb+9a9/mVc1AAAAEIC6vHLd1NQkj8ejqKgo\nn/HIyEi5XK5O96mrq1N9fb12796tl19+WZK0cuVKzZo1S1VVVQoKCup0v+rq6q9Sf6/113EGEnri\nj574oyf+Ar0nraMirS6hz7S2tqq6+mOry+iRQD9PrEBP/NETX4Hej/Hjx192W7e3hfRWR0eH2tra\ntH37dt14442SpO3btyspKUnV1dW6+eabzT4kAAAAEBC6DNcREREKCQmR2+32GXe73YqOju50n+jo\naA0bNswbrCXpxhtvVEhIiD799NPLhmu73d7b2nvl0iegvj7OQEJP/NETf/TE30DpSWX9WUltVpfR\nJ8LCwmSfPNbqMro0UM6T/kRP/NETXwOlH83NzZfd1uU91yNGjFBqaqrKysp8xsvLy+VwODrdZ9q0\nabp48aLq6uq8Y3V1dfJ4PBo3blxv6gYAAAAGlG7Xuc7Ly9O2bdu0ZcsWHT9+XMuXL5fL5dLSpUsl\nSfn5+crIyPDOz8jI0NSpU7Vo0SLV1tbqyJEjWrRokW655ZaA/xQCAAAAXIlu77nOzMzUmTNnVFBQ\noMbGRiUnJ6u0tNS7xrXL5fK5Sh0UFKQ333xTjzzyiG6//XbZbDY5nU4VFhb23bsAAAAAAkCPvtCY\nk5OjnJycTrdt3brVb+z666/X7t27r6wyAAAAYIDp0ePPAQAAAHSPcA0AAACYhHANAAAAmIRwDQAA\nAJiEcA0AAACYhHANAAAAmIRwDQAAAJiEcA0AAACYhHANAAAAmIRwDQAAAJiEcA0AAACYhHANAAAA\nmIRwDQAAAJikR+G6qKhICQkJstlsstvtqqys7NGLnzp1SmFhYQoLC7uiIgEAAICBoNtwvWvXLuXm\n5mr16tWqra2Vw+HQjBkzdPr06S73a29v17333qvp06crKCjItIIBAACAQNVtuC4sLFR2drYWL16s\npKQkbdy4UdHR0SouLu5yv1WrVumb3/ym5s2bJ8MwTCsYAAAACFRdhuv29nbV1NTI6XT6jDudTh08\nePCy++3du1d79+7Vpk2bCNYAAAAYMoZ1tbGpqUkej0dRUVE+45GRkXK5XJ3u09DQoCVLlmjPnj0K\nDQ3tcSHV1dU9nnsl+us4Awk98UdP/NETf4Hek9ZRkVaX0GdaW1tVXf2x1WX0SKCfJ1agJ/7oia9A\n78f48eMvu8301UIWLlyonJwc3XzzzWa/NAAAABDQurxyHRERoZCQELndbp9xt9ut6OjoTvfZv3+/\nKioq9OSTT0qSDMNQR0eHhg8fruLiYj344IOd7me3279K/T126RNQXx9nIKEn/uiJP3rib6D0pLL+\nrKQ2q8voE2FhYbJPHmt1GV0aKOdJf6In/uiJr4HSj+bm5stu6zJcjxgxQqmpqSorK9PcuXO94+Xl\n5Zo3b16n+3zwwQc+v+/Zs0dPP/20Dh06pJiYmN7UDQAAAAwoXYZrScrLy9PChQuVlpYmh8OhF154\nQS6XS0uXLpUk5efn69ChQ3r77bclSRMnTvTZ/69//auCg4P9xgEAAIDBpttwnZmZqTNnzqigoECN\njY1KTk5WaWmp4uLiJEkul0t1dXVdvgbrXAMAAGAo6DZcS1JOTo5ycnI63bZ169Yu983KylJWVlav\nCwMAAAAGGtNXCwEAAACGKsI1AAAAYBLCNQAAAGASwjUAAABgEsI1AAAAYBLCNQAAAGASwjUAAABg\nEsI1AAAAYBLCNQAAAGASwjUAAABgEsI1AAAAYBLCNQAAAGASwjUAAABgkh6H66KiIiUkJMhms8lu\nt6uysvKycw8cOKA5c+YoJiZGV111lVJSUrR161ZTCgYAAAACVY/C9a5du5Sbm6vVq1ertrZWDodD\nM2bM0OnTpzudX1VVpZSUFL322ms6duyYcnJytGTJEu3cudPU4gEAAIBAMqwnkwoLC5Wdna3FixdL\nkjZu3Ki33npLxcXFeuaZZ/zm5+fn+/y+dOlS7d+/X6+99poWLFhgQtkAAABA4On2ynV7e7tqamrk\ndDp9xp1Opw4ePNjjAzU3N2v06NG9rxAAAAAYILq9ct3U1CSPx6OoqCif8cjISLlcrh4d5M0339S+\nffu6DOPV1dU9eq0r1V/HGUjoiT964o+e+Av0nrSOirS6hD7T2tqq6uqPrS6jRwL9PLECPfFHT3wF\nej/Gjx9/2W19vlrIX/7yF/3gBz/Qpk2bZLfb+/pwAAAAgGW6vXIdERGhkJAQud1un3G3263o6Ogu\n962srNTMmTO1Zs0a/fjHP+5ybl8H70ufgAj4/x898UdP/NETfwOlJ5X1ZyW1WV1GnwgLC5N98lir\ny+jSQDlP+hM98UdPfA2UfjQ3N192W7dXrkeMGKHU1FSVlZX5jJeXl8vhcFx2v4qKCt1111168skn\n9cgjj/SiXAAAAGBg6tFqIXl5eVq4cKHS0tLkcDj0wgsvyOVyaenSpZK+WB3k0KFDevvttyV9sc71\nzJkz9fDDD2vBggXee7NDQkJ03XXX9dFbAQAAAKzVo3CdmZmpM2fOqKCgQI2NjUpOTlZpaani4uIk\nSS6XS3V1dd75JSUlunDhgtavX6/169d7x+Pj433mAQAAAINJj8K1JOXk5CgnJ6fTbV9++uLWrVt5\nIiMAAACGnD5fLQQAAAAYKgjXAAAAgEkI1wAAAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJerwUHwAE\nsrqmVjWcu9gvx2odFSnp0uPF+17MVcOUGBHWL8ca7DhPAPQ1wjWAQaHh3EUtq2jq56O29ctRNt0e\nocSIfjnUoMd5AqCvcVsIAAAAYBLCNQAAAGASwjUAAABgEsI1AAAAYBLCNQAAAGCSHoXroqIiJSQk\nyGazyW63q7Kyssv5R48e1fTp0xUaGqrY2FitWbPGlGIBAACAQNZtuN61a5dyc3O1evVq1dbWyuFw\naMaMGTp9+nSn81taWnTnnXcqOjpa1dXV2rBhg9avX6/CwkLTiwcAAAACSbfhurCwUNnZ2Vq8eLGS\nkpK0ceNGRUdHq7i4uNP5v/vd73ThwgWVlJRo4sSJmjt3rlatWkW4BgAAwKDXZbhub29XTU2NnE6n\nz7jT6dTBgwc73aeqqkq33XabRo4c6TO/oaFB9fX1JpQMAAAABKYgwzCMy21saGhQbGysKioqNG3a\nNO/4U089pR07dujEiRN++zidTo0dO1YvvfSSd+zTTz9VfHy8qqqq9K1vfcs73tzcbNb7AAAAAPpd\neHi4z++mrxYSFBRk9ksCAAAAA0KX4ToiIkIhISFyu90+4263W9HR0Z3uc/3118vlcvnNv7QNAAAA\nGKyGdbVxxIgRSk1NVVlZmebOnesdLy8v17x58zrdJz09XatWrVJbW5v3vuvy8nKNGTNG48aN85n7\n5cvoAAAAwEDW7W0heXl52rZtm7Zs2aLjx49r+fLlcrlcWrp0qSQpPz9fGRkZ3vn33XefQkNDlZWV\npWPHjun111/XunXrlJeX13fvAgAAAAgAXV65lqTMzEydOXNGBQUFamxsVHJyskpLSxUXFydJcrlc\nqqur886/5pprVF5eroceekh2u12jR4/WypUrtWLFir57FwAAAEAA6HK1EAAAAAA9Z/pqIYGqt49w\nH8wqKio0e/ZsxcbGKjg4WCUlJVaXZLm1a9fq5ptvVnh4uCIjIzV79mwdO3bM6rIstXnzZqWkpCg8\nPFzh4eFyOBwqLS21uqyAsXbtWgUHB2vZsmVWl2KpX/ziFwoODvb5FxMTY3VZlmpsbNQDDzygyMhI\n2Ww2TZo0SRUVFVaXZZn4+Hi/cyQ4OFh333231aVZxuPx6PHHH1diYqJsNpsSExP1+OOPy+PxWF2a\npVpbW5Wbm6v4+HiFhobq1ltvVXV1tdVl9dqQCNe9fYT7YHfu3DnddNNN2rBhg2w2G8snSnrnnXf0\n8MMPq6qqSvv27dOwYcOUkZGhs2fPWl2aZeLi4vTss8/qyJEjOnz4sL7zne/onnvu0dGjR60uzXLv\nvfeeXnzxRd100038/5E0YcIEuVwu77+hfI58/vnnuvXWWxUUFKTS0lKdOHFCzz//vCIjI60uzTKH\nDx/2OT9qamoUFBSk+fPnW12aZdatW6eioiJt2rRJJ0+e1IYNG1RUVKS1a9daXZqlHnzwQZWXl+vl\nl1/WBx98IKfTqYyMDDU0NFhdWu8YQ0BaWpqxZMkSn7Hx48cb+fn5FlUUOK6++mqjpKTE6jICzn/+\n8x8jJCTEePPNN60uJaCMHj3a+O1vf2t1GZb6/PPPjRtuuME4cOCAcccddxjLli2zuiRLPfHEE8bk\nyZOtLiNg5OfnG9OmTbO6jIBWUFBgXHvttcaFCxesLsUyM2fONLKysnzG7r//fmPWrFkWVWS9//73\nv8awYcOMN954w2c8NTXVWL16tUVVfTWD/sr1V3mEO9DS0qKOjg5de+21VpcSEDwej1599VWdO3dO\nDofD6nIstWTJEs2bN0/Tp0+XwVdWJEl1dXUaM2aMEhMTtWDBAn3yySdWl2SZPXv2KC0tTfPnz1dU\nVJSmTJmizZs3W11WwDAMQ1u2bNEPf/hD73K9Q9Ftt92mffv26eTJk5KkDz/8UPv379ddd91lcWXW\nuXjxojwej995MWrUqAF3K2+3q4UMdE1NTfJ4PIqKivIZj4yM9HvYDXDJ8uXLNWXKFKWnp1tdiqWO\nHj2q9PR0tbW16eqrr9Yf/vAHTZo0yeqyLPPiiy+qrq5OO3bskMQTaSXplltuUUlJiSZMmCC3262C\nggI5HA4dO3ZMo0ePtrq8fldXV6eioiLl5eXpZz/7mY4cOeK9L/+hhx6yuDrrlZeX6x//+Id+9KMf\nWV2KpVatWqWWlhZNnDhRISEhunjxolavXu1d5ngoCgsLU3p6ugoKCjR58mRFRUVp586deu+99zR+\n/Hiry+uVQR+ugd7Ky8vTwYMHVVlZOeTD04QJE/S3v/1Nzc3N+v3vf6/7779fBw4cGJIB++TJk3rs\nscdUWVmpkJAQSV9chRvqV6+/+93ven+ePHmy0tPTlZCQoJKSkiG5BGtHR4fS0tL09NNPS5JSUlJ0\n6tQpbd68mXCtLz6gpqWlKTk52epSLPXqq69q+/bt2rlzpyZNmqQjR45o+fLlio+P16JFi6wuzzLb\nt2/XokWLFBsbq5CQEKWmpmrBggU6fPiw1aX1yqAP11/lEe4YulasWKHdu3dr//79io+Pt7ocyw0f\nPlyJiYmSpClTpujQoUN67rnn9NJLL1lcWf+rqqpSU1OTzwcLj8ejd999V7/5zW907tw5DR8+3MIK\nA0NoaKgmTZqkjz76yOpSLBETE6OJEyf6jE2YMEGffvqpRRUFjs8++0xvvPGGioqKrC7Fco8++qh+\n8pOfKDMzU5I0adIk1dfXa+3atUM6XCcmJurAgQM6f/68WlpaFBUVpfnz5+uGG26wurReGfT3XP/v\nI9z/V3l5+ZC/dxS+li9frl27dmnfvn36+te/bnU5Acnj8ai9vd3qMizxve99Tx988IHef/99vf/+\n+6qtrZXdbteCBQtUW1tLsP5/Lly4oOPHjw/Zixe33nqrTpw44TP297//nQ/rkrZt26ZRo0ZpwYIF\nVpdiufPnzys42DeCBQcHD/m/hF1is9kUFRWls2fPqqysTHPmzLG6pF4Z9FeupS/+zL9w4UKlpaXJ\n4XDohRde8HmE+1Bz7tw5nTp1StIXf8Ksr69XbW2tvva1r3mfvDnUPPTQQ3rllVe0Z88ehYeHe+/H\nDwsL01VXXWVxddb46U9/qrvvvluxsbFqbW3Vjh079M477wzZta4vrff9v0JDQ3Xttdf6XakcSlau\nXKnZs2crLi5On332mdasWaPz58/rgQcesLo0S6xYsUIOh0PPPPOMMjMzdeTIEW3atGnIL7FmGIZe\neukl3XvvvQoNDbW6HMvNmjVLv/zlL5WQkKCJEyfqyJEjeu6554bs/5tLysrK5PF4NGHCBH300Ud6\n9NFH9Y1vfEPZ2dlWl9Y7Vi5V0p+KioqM+Ph4Y+TIkYbdbjfeffddq0uyzP79+42goCAjKCjICA4O\n9v6cnZ1tdWmW+XIvLv178sknrS7NMllZWca4ceOMkSNHGpGRkcadd95plJWVWV1WQGEpPsO49957\njZiYGGPEiBHGmDFjjO9///vG8ePHrS7LUnv37jVSUlKMUaNGGUlJScamTZusLsly+/btM4KDg41D\nhw5ZXUpAaG1tNXJzc41x48YZNpvNSExMNB577DGjra3N6tIstXv3buOGG24wRo4caURHRxvLli0z\nWlparC6r13j8OQAAAGCSQX/PNQAAANBfCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASQjXAAAA\ngEkI1wAAAIBJCNcAAACASf4vBMiTyFnMqREAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def predict(belief, move, p_correct, p_under, p_over):\n", - " n = len(belief)\n", - " result = np.zeros(n)\n", - " for i in range(n):\n", - " result[i] = (\n", - " belief[(i-move) % n] * p_correct +\n", - " belief[(i-move-1) % n] * p_over +\n", - " belief[(i-move+1) % n] * p_under) \n", - " belief[:] = result\n", - "\n", - "belief = np.array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0.])\n", - "predict(belief, move=2, p_correct=.8, p_under=.1, p_over=.1)\n", - "bp.bar_plot(belief)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The simple test case that we ran appears to work correctly. We initially believed that the dog was in position 3 with 100% certainty; after the movement update we now give an 80% probability to the dog being in position 5, and a 10% chance to undershooting to position 4, and a 10% chance of overshooting to position 6. Let us look at a case where we have multiple beliefs:" + "Does `scaled_update()` perform this computation? It does. Let me recast it into this form:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, - "outputs": [ - { - "data": { - "image/png": "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\nnz5dKSkpVpdiqcOHDyslJUVtbW266qqr9Mc//lFTp061uizLbNmyRfX19dq5c6cknkgrSTfffLNK\nSko0efJkud1u5efny+Fw6MiRIxo7dqzV5Q24+vp6FRUVKTc3V7/4xS906NAhz7r8Rx55xOLqrFde\nXq5//vOf+ulPf2p1KZZauXKlzp49qylTpigoKEgXLlzQqlWrPNscD0UhISFKSUlRfn6+pk2bpoiI\nCL3yyit6//33NXHiRKvL65MrPlwDfZWbm6sDBw6osrJyyIenyZMn6+9//7uam5v1hz/8QQ888ID2\n798/JAP28ePH9cQTT6iyslJBQUGSvrwLN9TvXv/gBz/wfD5t2jSlpKQoLi5OJSUlQ3IL1s7OTiUn\nJ+vZZ5+VJCUmJurEiRMqLCwkXOvLX1CTk5OVkJBgdSmWevXVV7Vjxw698sormjp1qg4dOqRly5Yp\nNjZWixYtsro8y+zYsUOLFi1SdHS0goKClJSUpAULFujgwYNWl9YnV3y4/iaPcMfQtXz5cr322mva\nt2+fYmNjrS7HcsOHD1d8fLwkafr06aqurtbzzz+vl156yeLKBl5VVZVOnTrl9YtFR0eH3nvvPf3m\nN79Ra2urhg8fbmGF/iE4OFhTp07Vxx9/bHUploiKitKUKVO8xiZPnqzPPvvMoor8x+eff64333xT\nRUVFVpdiuccff1w/+9nPlJ6eLkmaOnWqGhoatHbt2iEdruPj47V//36dO3dOZ8+eVUREhObPn6/r\nrrvO6tL65Ipfc/3VR7h/VXl5+ZBfOwpvy5Yt065du7R37159+9vftrocv9TR0aH29nary7DED3/4\nQ3344Yf64IMP9MEHH6iurk52u10LFixQXV0dwfr/OX/+vI4ePTpkb17ccsstOnbsmNfYP/7xD35Z\nl7R9+3aNGjVKCxYssLoUy507d06Bgd4RLDAwcMj/Jewim82miIgInTlzRmVlZbr77rutLqlPrvg7\n19KXf+ZfuHChkpOT5XA4tHnzZq9HuA81ra2tOnHihKQv/4TZ0NCguro6fetb3/I8eXOoeeSRR/Ty\nyy9r9+7dCg0N9azHDwkJ0ejRoy2uzho///nPdeeddyo6OlotLS3auXOn3n333SG71/XF/b6/Kjg4\nWGPGjPG5UzmUrFixQnPnzlVMTIw+//xzrV69WufOndODDz5odWmWWL58uRwOh9asWaP09HQdOnRI\nmzZtGvJbrBmGoZdeekn33XefgoODrS7HcnfddZd+9atfKS4uTlOmTNGhQ4f0/PPPD9mfm4vKysrU\n0dGhyZMn6+OPP9bjjz+u73znO8rMzLS6tL6xcquSgVRUVGTExsYaI0eONOx2u/Hee+9ZXZJl9u3b\nZwQEBBgBAQFGYGCg5/PMzEyrS7PM13tx8ePpp5+2ujTLZGRkGBMmTDBGjhxphIeHG3fccYdRVlZm\ndVl+ha34DOO+++4zoqKijBEjRhjjxo0zfvSjHxlHjx61uixL7dmzx0hMTDRGjRplTJo0ydi0aZPV\nJVlu7969RmBgoFFdXW11KX6hpaXFyMnJMSZMmGDYbDYjPj7eeOKJJ4y2tjarS7PUa6+9Zlx33XXG\nyJEjjcjISGPp0qXG2bNnrS6rz3j8OQAAAGCSK37NNQAAADBQCNcAAACASQjXAAAAgEkI1wAAAIBJ\nCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASf4PE02hwBbwK9sAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "belief = np.array([0, 0, .4, .6, 0, 0, 0, 0, 0, 0])\n", - "predict(belief, move=2, p_correct=.8, p_under=.1, p_over=.1)\n", - "bp.bar_plot(belief)" + "def scaled_update(hall, belief, z, z_prob): \n", + " scale = z_prob / (1. - z_prob)\n", + " likelihood = np.ones(len(hall))\n", + " likelihood[hall==z] *= scale\n", + " return normalize(likelihood * belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here the results are more complicated, but you should still be able to work it out in your head. The 0.04 is due to the possibility that the 0.4 belief undershot by 1. The 0.38 is due to the following: the 80% chance that we moved 2 positions (0.4 $\\times$ 0.8) and the 10% chance that we undershot (0.6 $\\times$ 0.1). Overshooting plays no role here because if we overshot both 0.4 and 0.6 would be past this position. **I strongly suggest working some examples until all of this is very clear, as so much of what follows depends on understanding this step.**\n", + "This function is not fully general. It contains knowledge about the hallway, and how we match measurements to it. We always strive to write general functions. Here we will remove the computation of the likelihood from the function, and require the caller to compute the likelihood themselves.\n", "\n", - "If you look at the probabilities after performing the update you probably feel dismay. In the example above we started with probabilities of 0.4 and 0.6 in two fields; after performing the update the probabilities are not only lowered, but they are strewn out across the map." + "Here is a full implementation of the algorithm:\n", + "\n", + "```python\n", + "def update(likelihood, prior):\n", + " return normalize(likelihood * prior)\n", + "```\n", + "\n", + "Computation of the likelihood varies per problem. For example, the sensor might not return just 1 or 0, but a `float` between 0 and 1 indicating the probability of being in front of a door. It might use computer vision and report a blob shape that you then probabilistically match to a door. It might use sonar and return a distance reading. In each case the computation of the likelihood will be different. We will see many examples of this throughout the book.\n", + "\n", + "FilterPy implements `update`. Here is the previous example in a fully general form:" ] }, { @@ -789,24 +711,51 @@ "outputs": [ { "data": { - "image/png": "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\nnz5dKSkpVpdiqcOHDyslJUVtbW266qqr9Mc//lFTp061uizLbNmyRfX19dq5c6cknkgrSTfffLNK\nSko0efJkud1u5efny+Fw6MiRIxo7dqzV5Q24+vp6FRUVKTc3V7/4xS906NAhz7r8Rx55xOLqrFde\nXq5//vOf+ulPf2p1KZZauXKlzp49qylTpigoKEgXLlzQqlWrPNscD0UhISFKSUlRfn6+pk2bpoiI\nCL3yyit6//33NXHiRKvL65MrPlwDfZWbm6sDBw6osrJyyIenyZMn6+9//7uam5v1hz/8QQ888ID2\n798/JAP28ePH9cQTT6iyslJBQUGSvrwLN9TvXv/gBz/wfD5t2jSlpKQoLi5OJSUlQ3IL1s7OTiUn\nJ+vZZ5+VJCUmJurEiRMqLCwkXOvLX1CTk5OVkJBgdSmWevXVV7Vjxw698sormjp1qg4dOqRly5Yp\nNjZWixYtsro8y+zYsUOLFi1SdHS0goKClJSUpAULFujgwYNWl9YnV3y4/iaPcMfQtXz5cr322mva\nt2+fYmNjrS7HcsOHD1d8fLwkafr06aqurtbzzz+vl156yeLKBl5VVZVOnTrl9YtFR0eH3nvvPf3m\nN79Ra2urhg8fbmGF/iE4OFhTp07Vxx9/bHUploiKitKUKVO8xiZPnqzPPvvMoor8x+eff64333xT\nRUVFVpdiuccff1w/+9nPlJ6eLkmaOnWqGhoatHbt2iEdruPj47V//36dO3dOZ8+eVUREhObPn6/r\nrrvO6tL65Ipfc/3VR7h/VXl5+ZBfOwpvy5Yt065du7R37159+9vftrocv9TR0aH29nary7DED3/4\nQ3344Yf64IMP9MEHH6iurk52u10LFixQXV0dwfr/OX/+vI4ePTpkb17ccsstOnbsmNfYP/7xD35Z\nl7R9+3aNGjVKCxYssLoUy507d06Bgd4RLDAwcMj/Jewim82miIgInTlzRmVlZbr77rutLqlPrvg7\n19KXf+ZfuHChkpOT5XA4tHnzZq9HuA81ra2tOnHihKQv/4TZ0NCguro6fetb3/I8eXOoeeSRR/Ty\nyy9r9+7dCg0N9azHDwkJ0ejRoy2uzho///nPdeeddyo6OlotLS3auXOn3n333SG71/XF/b6/Kjg4\nWGPGjPG5UzmUrFixQnPnzlVMTIw+//xzrV69WufOndODDz5odWmWWL58uRwOh9asWaP09HQdOnRI\nmzZtGvJbrBmGoZdeekn33XefgoODrS7HcnfddZd+9atfKS4uTlOmTNGhQ4f0/PPPD9mfm4vKysrU\n0dGhyZMn6+OPP9bjjz+u73znO8rMzLS6tL6xcquSgVRUVGTExsYaI0eONOx2u/Hee+9ZXZJl9u3b\nZwQEBBgBAQFGYGCg5/PMzEyrS7PM13tx8ePpp5+2ujTLZGRkGBMmTDBGjhxphIeHG3fccYdRVlZm\ndVl+ha34DOO+++4zoqKijBEjRhjjxo0zfvSjHxlHjx61uixL7dmzx0hMTDRGjRplTJo0ydi0aZPV\nJVlu7969RmBgoFFdXW11KX6hpaXFyMnJMSZMmGDYbDYjPj7eeOKJJ4y2tjarS7PUa6+9Zlx33XXG\nyJEjjcjISGPp0qXG2bNnrS6rz3j8OQAAAGCSK37NNQAAADBQCNcAAACASQjXAAAAgEkI1wAAAIBJ\nCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASf4PE02hwBbwK9sAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "array([ 0.188, 0.188, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625,\n", + " 0.0625, 0.188, 0.0625])" ] }, + "execution_count": 12, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "bp.bar_plot(belief)" + "from filterpy.discrete_bayes import update\n", + "\n", + "def lh_hallway(hall, z, z_prob):\n", + " \"\"\" compute likelihood that a measurement matches\n", + " positions in the hallway.\"\"\"\n", + " \n", + " scale = z_prob / (1. - z_prob)\n", + "\n", + " likelihood = np.ones(len(hall))\n", + " likelihood[hall==z] *= scale\n", + " return likelihood\n", + "\n", + "belief = np.array([0.1] * 10)\n", + "update(lh_hallway(hallway, z=1, z_prob=.75), belief) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This is not a coincidence, or the result of a carefully chosen example - it is always true of the evolution (predict step). This is inevitable; if our sensor is noisy we will lose a bit of information on every prediction. Suppose we were to perform the prediction an infinite number of times - what would the result be? If we lose information on every step, we must eventually end up with no information at all, and our probabilities will be equally distributed across the `belief` array. Let's try this with 500 iterations." + "## Incorporating Movement" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Recall how quickly we were able to find an exact solution when we incorporated a series of measurements and movement updates. However, that occurred in a fictional world of perfect sensors. Might we be able to find an exact solution with noisy sensors?\n", + "\n", + "Unfortunately, the answer is no. Even if the sensor readings perfectly match an extremely complicated hallway map, we cannot be 100% certain that the dog is in a specific position - there is, after all, the possibility that every sensor reading was wrong! Naturally, in a more typical situation most sensor readings will be correct, and we might be close to 100% sure of our answer, but never 100% sure. This may seem complicated, but lets go ahead and program the math.\n", + "\n", + "First let's deal with the simple case - assume the movement sensor is perfect, and it reports that the dog has moved one space to the right. How would we alter our `belief` array?\n", + "\n", + "I hope after a moment's thought it is clear that we should shift all the values one space to the right. If we previously thought there was a 50% chance of Simon being at position 3, then after the move to the right we should believe that there is a 50% chance he is at position 4. The hallway is circular, so we will use modulo arithmetic to perform the shift." ] }, { @@ -818,9 +767,166 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAACeCAYAAAD5RibQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGXdJREFUeJzt3X9MVff9x/EX4K9Li0SnIggKtE6nIlWurFyxdgu9mdra\nbk6s3VTQzkGsFYmdY7VxKtVZFzq1QrfWKLOjtUs71yjrwKilDJqJSKdWHR2dusC9na5F51QinO8f\n/fbG60V+1KPnIs9HQnL5nM/hvO87EF8cP3xOgGEYhgAAAADctECrCwAAAADuFIRrAAAAwCSEawAA\nAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJO2G67KyMk2fPl2RkZEKDAxUYWFhu1/0yJEj\nmjx5soKDgxUZGak1a9aYUiwAAADgz9oN1xcvXtTYsWO1ceNG2Ww2BQQEtDn//PnzeuihhxQeHq6q\nqipt3LhRGzZsUF5enmlFAwAAAP4ooDNPaAwJCdGWLVs0d+7cG84pKChQTk6O3G63evfuLUl6/vnn\nVVBQoH/96183XzEAAADgp0xfc11ZWalJkyZ5grUkOZ1O1dfX69SpU2ZfDgAAAPAbPcz+gi6XS0OH\nDvUaCwsL8xwbNmyYZ7yxsdHsywMAAAC3TWhoqNfnpt+5bm9NNgAAAHCnMj1cDx48WC6Xy2vM7XZ7\njgEAAAB3KtOXhSQlJWn58uW6cuWKZ911aWmphgwZ4rUk5HrX31I3W1VVlSTJbrff0ut0JfTEFz3x\nRU980RNf9MQXPfFFT3zRE29dpR9tLW3u0FZ8NTU1qqmpUUtLi06dOqWamhqdOXNGkpSTk6OUlBTP\n/CeeeELBwcFKS0vTsWPH9Pbbb2v9+vXKzs424a0AAAAA/qvdcH3w4EGNHz9e48eP1+XLl7Vy5UqN\nHz9eK1eulPTFHynW1dV55vft21elpaWqr6+X3W7X4sWLtWzZMi1duvTWvQsAAADAD7S7LOTBBx9U\nS0vLDY9v27bNZ2zMmDF67733bq4yAAAAoIsx/Q8aAQAAgO6KcA0AAACYhHANAAAAmIRwDQAAAJiE\ncA0AAACYhHANAAAAmIRwDQAAAJiEcA0AAACYhHANAAAAmIRwDQAAAJiEcA0AAACYhHANAAAAmIRw\nDQAAAJikQ+E6Pz9fMTExstlsstvtKi8vb3P+n//8ZyUlJalv374aOHCgHnvsMdXW1ppSMAAAAOCv\n2g3XO3fuVFZWllasWKGamho5HA5NmTJFZ86caXX+J598okcffVSTJ09WTU2N9u7dq8uXL2vq1Kmm\nFw8AAAD4k3bDdV5entLT07VgwQKNGDFCmzZtUnh4uAoKClqdf+jQIV29elXr1q1TbGys4uPjtXz5\ncv3jH//Qf/7zH9PfAAAAAOAv2gzXTU1Nqq6ultPp9Bp3Op2qqKho9ZzExET17NlTr7zyipqbm3Xh\nwgVt375diYmJ6t+/v3mVAwAAAH4mwDAM40YH6+vrFRkZqbKyMiUnJ3vGV69eraKiIp04caLV895/\n/33NnDlT586dU0tLi8aNG6c//elPGjhwoNe8xsZGz2vWZAMAAKArGD58uOd1aGio1zHTdwtxuVxa\nsGCB5s2bp6qqKh04cEAhISFKTU1VGzkeAAAA6PJ6tHVwwIABCgoKktvt9hp3u90KDw9v9ZwtW7Yo\nJCRE69ev94y99tprioqKUmVlpRwOR6vn2e32ztbeKVVVVbflOl0JPfFFT3zRE1/0xBc98UVPfNET\nX/TEW1fpx7WrL67X5p3rXr16KSEhQSUlJV7jpaWlNwzJly5dUmCg95f98vOWlpYOFQwAAAB0Re0u\nC8nOztb27du1detWHT9+XEuWLJHL5VJGRoYkKScnRykpKZ7506ZNU3V1tdasWaPa2lpVV1crPT1d\nQ4cOVUJCwq17JwAAAIDF2lwWIkmpqak6d+6ccnNz1dDQoLi4OBUXFysqKkrSF2us6+rqPPO/9a1v\nqaioSC+88IJeeOEFBQcHKykpSe+++65sNtuteycAAACAxdoN15KUmZmpzMzMVo9t27bNZ2zWrFma\nNWvWzVUGAAAAdDGm7xYCAAAAdFeEawAAAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJIRr\nAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCQdCtf5+fmKiYmR\nzWaT3W5XeXl5u+f86le/0siRI9WnTx9FREQoJyfnposFAAAA/FmP9ibs3LlTWVlZKigoUHJysrZs\n2aIpU6boo48+UlRUVKvnZGdna8+ePfrlL3+puLg4NTY2qqGhwfTiAQAAAH/SbrjOy8tTenq6FixY\nIEnatGmT3n33XRUUFGjt2rU+80+ePKmXXnpJR44c0YgRIzzj8fHxJpYNAAAA+J82l4U0NTWpurpa\nTqfTa9zpdKqioqLVc/74xz8qNjZWxcXFio2NVUxMjNLS0vTvf//bvKoBAAAAPxRgGIZxo4P19fWK\njIxUWVmZkpOTPeOrV69WUVGRTpw44XNORkaGCgsLdd9992nDhg2SpGXLlkmSKisrFRAQ4Jnb2Njo\neV1bW3vz7wYAAAC4xYYPH+55HRoa6nWs3WUhndXS0qIrV65ox44duvfeeyVJO3bs0IgRI1RVVaUJ\nEyaYfUkAAADAL7QZrgcMGKCgoCC53W6vcbfbrfDw8FbPCQ8PV48ePTzBWpLuvfdeBQUF6fTp0zcM\n13a7vbO1d0pVVdVtuU5XQk980RNf9MQXPfFFT3zRE1/0xBc98dZV+nHt6ovrtbnmulevXkpISFBJ\nSYnXeGlpqRwOR6vnJCcn6+rVq6qrq/OM1dXVqbm5WcOGDetM3QAAAECX0u4+19nZ2dq+fbu2bt2q\n48ePa8mSJXK5XMrIyJAk5eTkKCUlxTM/JSVF48eP1/z581VTU6PDhw9r/vz5uv/++/3+txAAAADg\nZrS75jo1NVXnzp1Tbm6uGhoaFBcXp+LiYs8e1y6Xy+sudUBAgHbv3q2nn35aDzzwgGw2m5xOp/Ly\n8m7duwAAAAD8QIf+oDEzM1OZmZmtHtu2bZvP2ODBg/Xmm2/eXGUAAABAF9Ohx58DAAAAaB/hGgAA\nADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAA\nMAnhGgAAADAJ4RoAAAAwCeEaAAAAMEmHwnV+fr5iYmJks9lkt9tVXl7eoS9eW1urkJAQhYSE3FSR\nAAAAQFfQbrjeuXOnsrKytGLFCtXU1MjhcGjKlCk6c+ZMm+c1NTXp8ccf1+TJkxUQEGBawQAAAIC/\najdc5+XlKT09XQsWLNCIESO0adMmhYeHq6CgoM3zli9frvvuu08zZ86UYRimFQwAAAD4qzbDdVNT\nk6qrq+V0Or3GnU6nKioqbnjenj17tGfPHm3evJlgDQAAgG6jR1sHz549q+bmZoWFhXmNDxo0SC6X\nq9Vz6uvrtXDhQu3atUvBwcEdLqSqqqrDc2/G7bpOV0JPfNETX/TEFz3xRU980RNf9MQXPfHm7/0Y\nPnz4DY+ZvlvInDlzlJmZqQkTJpj9pQEAAAC/1uad6wEDBigoKEhut9tr3O12Kzw8vNVz9u/fr7Ky\nMq1atUqSZBiGWlpa1LNnTxUUFOjJJ59s9Ty73f5V6u+wL38DutXX6UroiS964oue+KInvuiJL3ri\ni574oifeuko/Ghsbb3iszXDdq1cvJSQkqKSkRDNmzPCMl5aWaubMma2ec/ToUa/Pd+3apeeff14H\nDx5UREREZ+oGAAAAupQ2w7UkZWdna86cOUpMTJTD4dDLL78sl8uljIwMSVJOTo4OHjyovXv3SpJG\njRrldf5f//pXBQYG+owDAAAAd5p2w3VqaqrOnTun3NxcNTQ0KC4uTsXFxYqKipIkuVwu1dXVtfk1\n2OcaAAAA3UG74VqSMjMzlZmZ2eqxbdu2tXluWlqa0tLSOl0YAAAA0NWYvlsIAAAA0F0RrgEAAACT\nEK4BAAAAkxCuAQAAAJMQrgEAAACTEK4BAAAAkxCuAQAAAJMQrgEAAACTEK4BAAAAkxCuAQAAAJMQ\nrgEAAACTEK4BAAAAkxCuAQAAAJN0OFzn5+crJiZGNptNdrtd5eXlN5x74MABPfroo4qIiNBdd92l\n+Ph4bdu2zZSCAQAAAH/VoXC9c+dOZWVlacWKFaqpqZHD4dCUKVN05syZVudXVlYqPj5eb731lo4d\nO6bMzEwtXLhQr7/+uqnFAwAAAP6kR0cm5eXlKT09XQsWLJAkbdq0Se+++64KCgq0du1an/k5OTle\nn2dkZGj//v166623NHv2bBPKBgAAAPxPu3eum5qaVF1dLafT6TXudDpVUVHR4Qs1Njaqf//+na8Q\nAAAA6CICDMMw2ppQX1+vyMhIlZWVKTk52TO+evVqFRUV6cSJE+1eZPfu3fre976niooK2e12z3hj\nY6PndW1t7VepHwAAALithg8f7nkdGhrqdeyW7xbyl7/8RT/4wQ+0efNmr2ANAAAA3GnaXXM9YMAA\nBQUFye12e4273W6Fh4e3eW55ebmmTZumNWvW6Mc//nGbc2918K6qqrot1+lK6IkveuKLnviiJ77o\niS964oue+KIn3rpKP65dfXG9du9c9+rVSwkJCSopKfEaLy0tlcPhuOF5ZWVlmjp1qlatWqWnn366\nE+UCAAAAXVOHdgvJzs7WnDlzlJiYKIfDoZdfflkul0sZGRmSvtgd5ODBg9q7d6+kL/a5njZtmp56\n6inNnj1bLpdLkhQUFKSBAwfeorcCAAAAWKtD4To1NVXnzp1Tbm6uGhoaFBcXp+LiYkVFRUmSXC6X\n6urqPPMLCwt1+fJlbdiwQRs2bPCMR0dHe80DAAAA7iQdCteSlJmZqczMzFaPXf/0xW3btvFERgAA\nAHQ7t3y3EAAAAKC7IFwDAAAAJiFcAwAAACYhXAMAAAAmIVwDAAAAJiFcAwAAACYJMAzDsOri1z46\n8sjnLbf0WhcuXJAkhYSE3NLrXCvirh6KHdD569WdvaD6i1dvQUXe6ImvrtKT29UPiZ605nb3xN9/\nbiR60hp64oue+KIn3rrKvznXZtjQ0FCvYx3e5/pWW1x29jZd6cptuo60+YEBih3Q+fPqL169jf2Q\n6Elr/Lsnt78fEj1pze3pSdf5uZHoSWvoiS964oueePPvf3PawrIQAAAAwCSEawAAAMAkhGsAAADA\nJIRrAAAAwCSEawAAAMAkHQrX+fn5iomJkc1mk91uV3l5eZvzjxw5osmTJys4OFiRkZFas2aNKcUC\nAAAA/qzdcL1z505lZWVpxYoVqqmpkcPh0JQpU3TmzJlW558/f14PPfSQwsPDVVVVpY0bN2rDhg3K\ny8szvXgAAADAn7QbrvPy8pSenq4FCxZoxIgR2rRpk8LDw1VQUNDq/N/97ne6fPmyCgsLNWrUKM2Y\nMUPLly8nXAMAAOCO12a4bmpqUnV1tZxOp9e40+lURUVFq+dUVlZq0qRJ6t27t9f8+vp6nTp1yoSS\nAQAAAP/U5uPP6+vrFRkZqbKyMiUnJ3vGV69eraKiIp04ccLnHKfTqaFDh+rVV1/1jJ0+fVrR0dGq\nrKzUN7/5Tc/4tY+OBAAAALqa6x9/bvpuIQEBAWZ/SQAAAKBLaDNcDxgwQEFBQXK73V7jbrdb4eHh\nrZ4zePBguVwun/lfHgMAAADuVD3aOtirVy8lJCSopKREM2bM8IyXlpZq5syZrZ6TlJSk5cuX68qV\nK55116WlpRoyZIiGDRvmNff62+gAAABAV9buspDs7Gxt375dW7du1fHjx7VkyRK5XC5lZGRIknJy\ncpSSkuKZ/8QTTyg4OFhpaWk6duyY3n77ba1fv17Z2dm37l0AAAAAfqDNO9eSlJqaqnPnzik3N1cN\nDQ2Ki4tTcXGxoqKiJEkul0t1dXWe+X379lVpaakWLVoku92u/v37a9myZVq6dOmtexcAAACAH2hz\ntxAAAAAAHWf6biH+qrOPcL+TlZWVafr06YqMjFRgYKAKCwutLsly69at04QJExQaGqpBgwZp+vTp\nOnbsmNVlWWrLli2Kj49XaGioQkND5XA4VFxcbHVZfmPdunUKDAzU4sWLrS7FUj//+c8VGBjo9RER\nEWF1WZZqaGjQvHnzNGjQINlsNo0ePVplZWVWl2WZ6Ohon++RwMBAPfzww1aXZpnm5mY999xzio2N\nlc1mU2xsrJ577jk1NzdbXZqlLly4oKysLEVHRys4OFgTJ05UVVWV1WV1WrcI1519hPud7uLFixo7\ndqw2btwom83G9omS3nvvPT311FOqrKzUvn371KNHD6WkpOizzz6zujTLREVF6YUXXtDhw4d16NAh\nffvb39Zjjz2mI0eOWF2a5T744AO98sorGjt2LD8/kkaOHCmXy+X56M7fI59//rkmTpyogIAAFRcX\n68SJE3rppZc0aNAgq0uzzKFDh7y+P6qrqxUQEKBZs2ZZXZpl1q9fr/z8fG3evFknT57Uxo0blZ+f\nr3Xr1lldmqWefPJJlZaW6re//a2OHj0qp9OplJQU1dfXW11a5xjdQGJiorFw4UKvseHDhxs5OTkW\nVeQ/7r77bqOwsNDqMvzOf//7XyMoKMjYvXu31aX4lf79+xu/+c1vrC7DUp9//rlxzz33GAcOHDAe\nfPBBY/HixVaXZKmVK1caY8aMsboMv5GTk2MkJydbXYZfy83NNfr162dcvnzZ6lIsM23aNCMtLc1r\nbO7cucYjjzxiUUXW+9///mf06NHDeOedd7zGExISjBUrVlhU1Vdzx9+5/iqPcAfOnz+vlpYW9evX\nz+pS/EJzc7PeeOMNXbx4UQ6Hw+pyLLVw4ULNnDlTkydPlsGfrEiS6urqNGTIEMXGxmr27Nn65JNP\nrC7JMrt27VJiYqJmzZqlsLAwjRs3Tlu2bLG6LL9hGIa2bt2qH/7wh57terujSZMmad++fTp58qQk\n6aOPPtL+/fs1depUiyuzztWrV9Xc3OzzfdGnT58ut5S33d1CurqzZ8+qublZYWFhXuODBg3yedgN\n8KUlS5Zo3LhxSkpKsroUSx05ckRJSUm6cuWK7r77bv3hD3/Q6NGjrS7LMq+88orq6upUVFQkiSfS\nStL999+vwsJCjRw5Um63W7m5uXI4HDp27Jj69+9vdXm3XV1dnfLz85Wdna2f/exnOnz4sGdd/qJF\niyyuznqlpaX65z//qR/96EdWl2Kp5cuX6/z58xo1apSCgoJ09epVrVixwrPNcXcUEhKipKQk5ebm\nasyYMQoLC9Prr7+uDz74QMOHD7e6vE6548M10FnZ2dmqqKhQeXl5tw9PI0eO1N/+9jc1Njbq97//\nvebOnasDBw50y4B98uRJPfvssyovL1dQUJCkL+7Cdfe719/5znc8r8eMGaOkpCTFxMSosLCwW27B\n2tLSosTERD3//POSpPj4eNXW1mrLli2Ea33xC2piYqLi4uKsLsVSb7zxhnbs2KHXX39do0eP1uHD\nh7VkyRJFR0dr/vz5VpdnmR07dmj+/PmKjIxUUFCQEhISNHv2bB06dMjq0jrljg/XX+UR7ui+li5d\nqjfffFP79+9XdHS01eVYrmfPnoqNjZUkjRs3TgcPHtSLL76oV1991eLKbr/KykqdPXvW6xeL5uZm\nvf/++/r1r3+tixcvqmfPnhZW6B+Cg4M1evRoffzxx1aXYomIiAiNGjXKa2zkyJE6ffq0RRX5j08/\n/VTvvPOO8vPzrS7Fcs8884x+8pOfKDU1VZI0evRonTp1SuvWrevW4To2NlYHDhzQpUuXdP78eYWF\nhWnWrFm65557rC6tU+74NdfXPsL9WqWlpd1+7Si8LVmyRDt37tS+ffv09a9/3epy/FJzc7Oampqs\nLsMS3/3ud3X06FF9+OGH+vDDD1VTUyO73a7Zs2erpqaGYP3/Ll++rOPHj3fbmxcTJ07UiRMnvMb+\n/ve/88u6pO3bt6tPnz6aPXu21aVY7tKlSwoM9I5ggYGB3f5/wr5ks9kUFhamzz77TCUlJXr00Uet\nLqlT7vg719IX/80/Z84cJSYmyuFw6OWXX/Z6hHt3c/HiRdXW1kr64r8wT506pZqaGn3ta1/zPHmz\nu1m0aJFee+017dq1S6GhoZ71+CEhIbrrrrssrs4aP/3pT/Xwww8rMjJSFy5cUFFRkd57771uu9f1\nl/t9Xys4OFj9+vXzuVPZnSxbtkzTp09XVFSUPv30U61Zs0aXLl3SvHnzrC7NEkuXLpXD4dDatWuV\nmpqqw4cPa/Pmzd1+izXDMPTqq6/q8ccfV3BwsNXlWO6RRx7RL37xC8XExGjUqFE6fPiwXnzxxW77\nc/OlkpISNTc3a+TIkfr444/1zDPP6Bvf+IbS09OtLq1zrNyq5HbKz883oqOjjd69ext2u914//33\nrS7JMvv37zcCAgKMgIAAIzAw0PM6PT3d6tIsc30vvvxYtWqV1aVZJi0tzRg2bJjRu3dvY9CgQcZD\nDz1klJSUWF2WX2ErPsN4/PHHjYiICKNXr17GkCFDjO9///vG8ePHrS7LUnv27DHi4+ONPn36GCNG\njDA2b95sdUmW27dvnxEYGGgcPHjQ6lL8woULF4ysrCxj2LBhhs1mM2JjY41nn33WuHLlitWlWerN\nN9807rnnHqN3795GeHi4sXjxYuP8+fNWl9VpPP4cAAAAMMkdv+YaAAAAuF0I1wAAAIBJCNcAAACA\nSQjXAAAAgEkI1wAAAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJ/g/+l91sT+d4dwAAAABJRU5ErkJg\ngg==\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def perfect_predict(belief, move):\n", + " \"\"\" move the position by `move` spaces, where positive is \n", + " to the right, and negative is to the left\n", + " \"\"\"\n", + " n = len(belief)\n", + " result = np.zeros(n)\n", + " for i in range(n):\n", + " result[i] = belief[(i-move) % n]\n", + " belief[:] = result # copy back to original array\n", + " \n", + "belief = np.array([.35, .1, .2, .3, 0, 0, 0, 0, 0, .05])\n", + "plt.subplot(121)\n", + "bp.bar_plot(belief, title='Before prediction', ylim=(0, .4))\n", + "\n", + "perfect_predict(belief, 1)\n", + "plt.subplot(122)\n", + "bp.bar_plot(belief, title='After prediction', ylim=(0, .4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that we correctly shifted all values one position to the right, wrapping from the end of the array back to the beginning." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Terminology\n", + "\n", + "I introduced this terminology in the last chapter, but let's review to help solidify your knowledge. \n", + "\n", + "The *system* is what we are trying to model or filter. Here the system is our dog. The *state* is its current configuration or value. In this chapter the state is our dog's position. We rarely know the actual state, so we say our filters produce the *estimated state* of the system. In practice this often gets called the state, so be careful to understand the context.\n", + " \n", + "One cycle of prediction and updating with a measurement is called the state or system *evolution*, which is short for *time evolution* [7]. Another term is *system propogation*. It refers to how the state of the system changes over time. For filters, time is usually a discrete step, such as 1 second. For our dog tracker the system state is the position of the dog, and the state evolution is the position after a discrete amount of time has passed.\n", + "\n", + "We model the system behavior with the *process model*. Here, our process model is that the dog moves one or more positions at each time step. This is not a particularly accurate model of how dog's behave. The error in the model is called the *system error* or *process error*. \n", + "\n", + "The prediction is our new *prior*. Time has moved forward and we made a prediction without benefit of knowing the measurements. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adding Noise to the Prediction\n", + "\n", + "We want to solve real world problems, and we have already stated that all sensors have noise. Therefore the code above is incorrect since it assumes we have perfect measurements for the movement. What if the sensor reported that our dog moved one space, but he actually moved two spaces, or zero? Once again this may initially sound like an insurmountable problem, but let's model it and see what happens. We will create a simple noise model for the sensor. Later we will handle more complicated error models.\n", + "\n", + "Assume that the sensor's movement measurement is 80% likely to be correct, 10% likely to overshoot one position to the right, and 10% likely to undershoot to the left. That is, if the movement measurement is 4 (meaning 4 spaces to the right), the dog is 80% likely to have moved 4 spaces to the right, 10% to have moved 3 spaces, and 10% to have moved 5 spaces.\n", + "\n", + "Each result in the array now needs to incorporate probabilities for 3 different situations. For example, consider the reported movement of 2. If we are 100% certain the dog started from position 3, then there is an 80% chance he is at 5, and a 10% chance for either 4 or 6. Let's try coding that:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nnNChQ4e0ceNGxcbGNvqhFl+sWLFCaWlp+sUvfqGFCxfq1ltvVefOnfXFF19o165dKi8v13//93+r\nR48eVh4+AFwzfM37y5Wdna21a9dq7dq1uummm3T33XertrZWq1evVmVlpcaPH6+f/exnFh0N8B2f\nzmRv2rRJP/3pTxUTEyOn06k333yzyW127typ1NRUhYWFqUePHpozZ06LF4trg8PhUOfOnVVSUqIb\nb7xRr7/+upYvX674+HitXLlSkydP9pqfnZ2tzZs365577tH//u//Kjc3VytXrtSBAwf04IMPNvqE\nrsautXM4HA3Gu3btqrKyMs2fP18hISFauXKlXnnlFZWUlKhLly5auHChhg0b5tP+gbaIfEdr69Sp\nk89531hOX+jC14OCgvTee+9p/vz5ateunfLy8rR48WLFxMRo0aJFev31133aD9BcDnP+72cuorCw\nUJs3b9bAgQP10EMPKS8vTw899NBF5x89elTXX3+9UlNT9cwzz6iiokITJkzQ7Nmz9eSTT1p6AACA\ny0e+o7UcPHhQsbGxSk1N1fvvv9/aywEs59PlIiNHjtTIkSMlSePHj29y/vLly3XixAm98cYbCg4O\nVr9+/VRRUaGXX36ZEAaANoR8BwB72PLBx48++ki33XabgoODPWN33nmnKisrdfDgQTtKAgD8gHwH\nAN/Y8sHHqqqqBh8Ei4qKkjFGVVVVXk92uvAm8wBwNbvwnr9XGvIdVqmpqZHD4VBdXR1/V3DFayzb\nubsIAADwu549e+rw4cOtvQzANrZcLhIdHd3gCU5ut1sOh6NZj0MFALQt5DsA+MaWM9lDhgzRtGnT\ndPr0ac91e++99566devm9avEC/n6a9SysjJJrfOEptasbXX9koNH9MTGr1q8n0tZ+MMIDe3VqcX7\nuZred2pfGfWtrH01/SqcfL/6ard2/Wu1dmvXv1ZrW1m/qWz36Uz28ePH9fHHH6u8vFz19fU6dOiQ\nPv74Y8+T7qZPn660tDTP/Pvvv19hYWGaMGGCdu3apbfeeksvvviipk6d2oJDAQBYjXwHAHv41GSX\nlZVpwIABSkxM1MmTJ/XLX/5SAwcO1C9/+UtJZz8Is3//fs/8jh07qqioSJWVlRo0aJCeeOIJPfXU\nU8rKyrLnKAAAl4V8BwB7+HS5yLBhw1RfX3/R15csWdJg7Pvf/742bNhw2QsDANiPfAcAe9jywUcA\n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\nv/Aai4+PNzNmzPDrOtq3b2/eeOMNv9Y837Fjx0xAQIB55513Wm0NnTt3Nr/97W/9Uuubb74xffr0\nMRs2bDCpqanmiSee8EvdZ5991tx0001+qXWh6dOnm6FDh7ZK7cY8//zzplOnTubkyZO217r77rvN\nhAkTvMbGjx9vfvzjH9te+8SJEyYwMND86U9/8hpPTEw0s2bNsr3+tYx8P6u1892f2W4M+d4WkO/2\n5fsVcyb7ch7/e7WqqalRfX29OnXq5Pfa9fX1WrlypY4fP67k5GS/1Jw0aZLS09M1bNgwv9Q732ef\nfabu3bsrLi5O48aN8/oAmJ3efvttDR48WGPHjlVUVJQGDBig1157zS+1G/P666/rwQcfVLt27Wyv\nNXToUBUXF2vPnj2SpP/7v//T+++/r1GjRtle+8yZM6qrq2twnKGhoX67dOFaRL5/p7XyvTWyXSLf\nyferPN9tad1tUFlZaRwOh9m0aZPX+HPPPWduuOEGv66ltc90jBkzxiQmJpr6+nq/1dyxY4dp3769\nCQwMNJ06dTJr1qzxS93f/va3JikpydTV1RljjF/PdKxdu9b8/ve/Nzt27DDr1683qampJjo62hw+\nfNj22iEhISY0NNTMmDHDlJeXm6VLl5r27dub1157zfbaF1q3bp1xOp1mx44dfqv57//+78bpdJqg\noCDjdDr9ehY5OTnZ/PCHPzRffPGFqaurM8uWLTMBAQF+z5lrCfn+HX/ne2tluzHkO/l+9ec7TfZl\naM0QfvLJJ0337t3NgQMH/Fq3trbW7Nu3z2zbts3MmDHDREREmF27dtlac8+ePaZLly7m008/9Yz5\nM4QvdPz4cRMZGWlycnJsrxUcHNzg14kzZswwN954o+21L3TfffeZwYMH+63ef/3Xf5mePXuaVatW\nmZ07d5rly5ebzp07m9dff90v9T/77DOTmppqHA6HCQoKMoMHDzYPPvhgq7z31wry/azWyPfWyHZj\nyHfy/drI9yumyT59+rQJDAw0f/jDH7zGH3/8cZOamurXtbRWCGdlZZlu3bp5hVJrSUtLM4888oit\nNZYuXWqcTqcJDAz0/HE4HJ6fgE+fPm1r/cbcfvvt5rHHHrO9Tq9evcw///M/e40tW7bMtG/f3vba\n5/vyyy9NcHCwWbx4sd9q9ujRwyxcuNBr7Pnnnzfx8fF+W4Mxxnz77bemqqrKGGPMz3/+c3P33Xf7\ntf61hHxvO/nuj2w3hnwn379zNef7FXNN9vmP/z1fUVGRUlJSWmlV/jNlyhQVFBSouLhY8fHxrb0c\n1dfX69QHNkNDAAACt0lEQVSpU7bWuOeee7Rjxw59/PHHnj9JSUkaN26cPv74YwUFBdla/0InT57U\n7t271bVrV9trpaSkeK5ZO2fPnj0NHltttyVLligkJERjx471W81vv/1WTqd3NDmdTr/d4umc0NBQ\nRUVF6ciRI1q3bp1Gjx7t1/rXEvK97eS7P7JdIt/J9+9c1fluS+tuk4KCAtOuXTuzaNEiU1FRYSZP\nnmw6dOhgDh06ZHvtY8eOmfLycrN9+3YTFhZm5syZY8rLy/1S+7HHHjMdO3Y0xcXFpqqqyvPn2LFj\nttc2xphp06aZTZs2mQMHDpgdO3aYadOmmYCAALNu3Tq/1D+fP3+d+K//+q/mgw8+MPv37zcfffSR\nGTVqlAkPD/fLf/MtW7aY4OBgM3fuXPPXv/7VrFq1yoSHh5v8/Hzba5/v+uuvb3DHB7tNmDDB9OjR\nw7z77rvmwIED5q233jJdunQxTz31lF/qr1u3zhQWFpr9+/eb9957z9xyyy0mOTnZnDlzxi/1r1Xk\nu//zvS1luzHkO/luP3/n+xXVZBtjTH5+vomNjTUhISEmKSnJlJSU+KXuhg0bPL/KOv/Pww8/bHvt\nxuo6nU4ze/Zs22sbc/Z/it69e5uQkBATFRVlhg8fboqKivxS+0K3336730J47Nixpnv37qZdu3Ym\nJibG3HfffaaiosIvtY0xZs2aNaZ///4mNDTU9O3b17z66qt+q22MMcXFxcbpdJqysjK/1j127Jh5\n8sknTe/evU1YWJjp06ePmTlzpjl16pRf6q9atcr06dPHhISEmG7dupnJkyebmpoav9S+1pHv/s33\ntpTtxpDv/kS++yffeaw6AAAAYLEr5ppsAAAA4EpBkw0AAABYjCYbAAAAsBhNNgAAAGAxmmwAAADA\nYjTZAAAAgMVosgEAAACL0WQDAAAAFvt/qGgp0KrjpusAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def predict_move(belief, move, p_under, p_correct, p_over):\n", + " n = len(belief)\n", + " prior = np.zeros(n)\n", + " for i in range(n):\n", + " prior[i] = (\n", + " belief[(i-move) % n] * p_correct +\n", + " belief[(i-move-1) % n] * p_over +\n", + " belief[(i-move+1) % n] * p_under) \n", + " return prior\n", + "\n", + "belief = [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]\n", + "prior = predict_move(belief, 2, .1, .8, .1)\n", + "bp.plot_belief_vs_prior(belief, prior)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It appears to work correctly. Now what happens when our belief is not 100% certain?" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X9cVXWex/H3vfwQSGV0EFDxB7hktpQpOCZYUoO2ZDNj\nM8lYPUrD1qHalHDb1NUmM0ebcXIHE3rMaFq6jjhju+2UaKziD7R2RaPURWvMH1NcmDEN0Ez58d0/\nfHgTQbnAOfeivJ6PB4/sy/ec9/cAfvh47rnnOIwxRgAAAAAs4/T1AgAAAIDrDU02AAAAYDGabAAA\nAMBiNNkAAACAxWiyAQAAAIvRZAMAAAAWo8lGu3Ls2DE5nU7dfffdtmUkJyfL6Wz4o79t2zY5nU69\n+OKLbd5/bW2t5s6dq4EDByo4OFhOp1Nvvvlmm/cLALi6/v37KyYmxtfLACRJ/r5eAOBtDodDDofD\n4/GWWrRokebOnav4+HhNnz5dgYGBuu2229q8XwDA1VlVxwEr0GQDkoYPH67S0lKFhYW1eV/vvvuu\nHA6HNmzYoB49eliwOgCAJ7Zs2eLrJQBuNNmApKCgIN14442W7KusrEySaLABwMuio6N9vQTAjWuy\n0W6VlZXp4YcfVnh4uEJCQjRs2DCtW7euybmFhYX64Q9/qPDwcHXq1En9+/fXU089pYqKCo+yrnZN\ndlVVlZ5//nndcsstuuGGG9S1a1fdcccd+uMf/9hg3mOPPSan06mjR49KkpxOp5xOJ9cHAkATLn0P\njif1/mKdTk9P1yeffKLx48crPDxcfn5++vjjjyVd+Zrsmpoa/epXv9KQIUPcdXzEiBFasWJFk2u7\nWLurqqqUmZmp/v37KyAgQNnZ2dZ/IXDd4kw22qVTp04pKSlJ3bt31+TJk3Xq1CmtW7dOEyZMkMvl\n0rRp09xzX375Zc2cOVPf/e53NXbsWEVGRurjjz9Wbm6u/vSnP+mDDz5Qr169WrWOsrIyJScn6/Dh\nw7rjjjs0ZswYnTlzRu+++67S0tL0wgsv6Pnnn5ck3X///YqOjtbixYtVVVWluXPnyhij73znO5Z8\nTQDgetSSei9Jn376qYYPH66bb75Zjz76qKqqqhQSEiJJTV6PXVtbq3/4h39QYWGhBg4cqCeffFLn\nz5/XW2+9pcmTJ2vnzp1atmxZo+3OnTunu+++W5WVlbr33nsVEhKiqKgoe74IuD4ZoB05evSocTgc\n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\n6Kc//ant2QsXLlRubq5effVVHTp0SNnZ2crJydGCBQtsz5akyZMnq6CgQKtWrdL+/fs1evRopaSk\nyOVyeSW/o6K+e7++t4faLlHfqe/XcX0315Dhw4ebn/3sZw3GYmNjzaxZs7y6js6dO5s33njDq5mX\nOn36tPHz8zPvvPOOz9bQvXt389vf/tYrWV999ZUZMGCA2bp1q0lOTjZPP/20V3JfeOEFc8stt3gl\n63IzZ840I0eO9El2U1566SXTrVs3880339iedd9995lJkyY1GJs4caL5wQ9+YHv22bNnjb+/v/nT\nn/7UYDw+Pt7MmTPH9vyOjPp+ga/ruzdruzHU9/aA+m5ffb9mzmS35vG/16uqqirV19erW7duXs+u\nr6/X2rVrdebMGSUmJnolc8qUKUpLS9OoUaO8knepzz77TL1791ZMTIwefPDBBm8As9Pbb7+t4cOH\na8KECYqIiNCQIUO0dOlSr2Q35fXXX9cjjzyiTp062Z41cuRIFRYW6tChQ5Kk//u//9OWLVs0duxY\n27Nra2tVV1fX6DiDg4O9dulCR0R9/5av6rsvartEfae+X+f13ZbW3QZlZWXG4XCYHTt2NBh/8cUX\nzU033eTVtfj6TMf48eNNfHy8qa+v91rmvn37TOfOnY2/v7/p1q2b2bBhg1dyf/vb35qEhARTV1dn\njDFePdOxceNG84c//MHs27fPbN682SQnJ5vIyEhz8uRJ27ODgoJMcHCwmTVrlikpKTErV640nTt3\nNkuXLrU9+3KbNm0yTqfT7Nu3z2uZ//qv/2qcTqcJCAgwTqfTq2eRExMTzZ133mm++OILU1dXZ1at\nWmX8/Py8Xmc6Eur7t7xd331V242hvlPfr//6TpPdCr4sws8884zp3bu3OXr0qFdza2pqzOHDh83e\nvXvNrFmzTFhYmDlw4ICtmYcOHTI9evQwn3zyiXvMm0X4cmfOnDHh4eFm8eLFtmcFBgY2ejlx1qxZ\n5uabb7Y9+3IPPPCAGT58uNfyfv/735u+ffuadevWmf3795vVq1eb7t27m9dff90r+Z999plJTk42\nDofDBAQEmOHDh5tHHnnEJ1/7joL6foEv6rsvarsx1Hfqe8eo79dMk33+/Hnj7+9v/vjHPzYYf+qp\np0xycrJX1+KrIpyZmWl69erVoCj5SkpKinn88cdtzVi5cqVxOp3G39/f/eFwONz/Aj5//ryt+U25\n6667zJNPPml7Tr9+/cw//uM/NhhbtWqV6dy5s+3Zl/rrX/9qAgMDzfLly72W2adPH7NkyZIGYy+9\n9JKJjY35swd8AAADDklEQVT12hqMMebrr7825eXlxhhjfvrTn5r77rvPq/kdCfW9/dR3b9R2Y6jv\n1PdvXc/1/Zq5JvvSx/9eqqCgQElJST5alfdMmzZNeXl5KiwsVGxsrK+Xo/r6ep07d87WjPvvv1/7\n9u3TRx995P5ISEjQgw8+qI8++kgBAQG25l/um2++0cGDB9WzZ0/bs5KSktzXrF106NChRo+tttuK\nFSsUFBSkCRMmeC3z66+/ltPZsDQ5nU6v3eLpouDgYEVEROjUqVPatGmTxo0b59X8joT63n7quzdq\nu0R9p75/67qu77a07jbJy8sznTp1MsuWLTOlpaVm6tSppkuXLub48eO2Z58+fdqUlJSYDz/80ISE\nhJh58+aZkpISr2Q/+eSTpmvXrqawsNCUl5e7P06fPm17tjHGzJgxw+zYscMcPXrU7Nu3z8yYMcP4\n+fmZTZs2eSX/Ut58OfGf//mfzbZt28yRI0fMBx98YMaOHWtCQ0O98j3fvXu3CQwMNPPnzzd//vOf\nzbp160xoaKjJzc21PftSN954Y6M7Ptht0qRJpk+fPubdd981R48eNW+99Zbp0aOHefbZZ72Sv2nT\nJpOfn2+OHDli3nvvPXPbbbeZxMREU1tb65X8jor67v363p5quzHUd+q7/bxd36+pJtsYY3Jzc010\ndLQJCgoyCQkJpqioyCu5W7dudb+UdenHY489Znt2U7lOp9PMnTvX9mxjLvyl6N+/vwkKCjIRERFm\n9OjRpqCgwCvZl7vrrru8VoQnTJhgevfubTp16mSioqLMAw88YEpLS72SbYwxGzZsMIMHDzbBwcFm\n4MCB5tVXX/VatjHGFBYWGqfTaYqLi72ae/r0afPMM8+Y/v37m5CQEDNgwAAze/Zsc+7cOa/kr1u3\nzgwYMMAEBQWZXr16malTp5qqqiqvZHd01Hfv1vf2VNuNob57E/XdO/Wdx6oDAAAAFrtmrskGAAAA\nrhU02QAAAIDFaLIBAAAAi9FkAwAAABajyQYAAAAsRpMNAAAAWIwmGwAAALAYTTYAAABgsf8HnzST\nnMT13NcAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "belief = [0, 0, .4, .6, 0, 0, 0, 0, 0, 0]\n", + "prior = predict_move(belief, 2, .1, .8, .1)\n", + "bp.plot_belief_vs_prior(belief, prior)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the results are more complicated, but you should still be able to work it out in your head. The 0.04 is due to the possibility that the 0.4 belief undershot by 1. The 0.38 is due to the following: the 80% chance that we moved 2 positions (0.4 $\\times$ 0.8) and the 10% chance that we undershot (0.6 $\\times$ 0.1). Overshooting plays no role here because if we overshot both 0.4 and 0.6 would be past this position. **I strongly suggest working some examples until all of this is very clear, as so much of what follows depends on understanding this step.**\n", + "\n", + "If you look at the probabilities after performing the update you probably feel dismay. In the example above we started with probabilities of 0.4 and 0.6 in two positions; after performing the update the probabilities are not only lowered, but they are strewn out across the map." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is not a coincidence, or the result of a carefully chosen example - it is always true of the evolution (predict step). If the sensor is noisy we lose some information on every prediction. Suppose we were to perform the prediction an infinite number of times - what would the result be? If we lose information on every step, we must eventually end up with no information at all, and our probabilities will be equally distributed across the `belief` array. Let's try this with 500 iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nAElFTkSuQmCC\n", + "text/plain": [ + "" ] }, "metadata": {}, @@ -830,7 +936,7 @@ "source": [ "belief = np.array([1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n", "for i in range(500):\n", - " predict(belief, move=1, p_correct=.8, p_under=.1, p_over=.1)\n", + " belief = predict_move(belief, 1, .1, .8, .1)\n", "bp.bar_plot(belief)" ] }, @@ -838,8 +944,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "After 500 iterations we have lost all information, even though we were 100% sure that we started in position 1. Feel free to play with the numbers to see the effect of differing number of updates. For example, after 100 updates we have a small amount of information left.\n" + "After 500 iterations we have lost all information, even though we were 100% sure that we started in position 0. Feel free to play with the numbers to see the effect of differing number of updates. For example, after 100 updates a small amount of information is left." ] }, { @@ -856,183 +961,69 @@ "source": [ "## Generalizing with Convolution\n", "\n", - "In the code above we made the assumption that the movement error is only one position. In any real problem it will almost always be possible for the error to be two, three, or more positions. \n", + "We made the assumption that the movement error is at most one position. But it is possible for the error to be two, three, or more positions. \n", "\n", - "This is easily solved with *convolution*. Convolution is the mathematical technique we use to modify one function with another function. In our case we are modifying our probability distribution with the error function that represents the probability of a movement error. In fact, the implementation of `predict()` is a convolution, though we did not call it that. Formally, convolution is defined as\n", + "This is easily solved with *convolution*. Convolution modifies one function with another function. In our case we are modifying a probability distribution with the error function of the sensor. The implementation of `predict_move()` is a convolution, though we did not call it that. Formally, convolution is defined as\n", "\n", "$$ (f \\ast g) (t) = \\int_0^t \\!f(\\tau) \\, g(t-\\tau) \\, \\mathrm{d}\\tau$$\n", "\n", "where $f\\ast g$ is the notation for convolving f by g. It does not mean multiply.\n", "\n", - "Integrals are for continuous functions, but we are using discrete functions, so we replace the integral with a summation, and the parenthesis with array brackets.\n", + "Integrals are for continuous functions, but we are using discrete functions. We replace the integral with a summation, and the parenthesis with array brackets.\n", "\n", "$$ (f \\ast g) [t] = \\sum\\limits_{\\tau=0}^t \\!f[\\tau] \\, g[t-\\tau]$$\n", "\n", - "If you look at that equation and compare it to the `predict()` function you can see that they are doing the same thing. \n", + "Comparison shows that `predict_move()` is computing this equation.\n", "\n", - "I would love to go on and on about convolution, but we have a filter to implement. Khan Academy [4] has a good mathematical introduction to convolution, and Wikipedia has some excellent animations of convolutions [5]. But the general idea is already clear to you. You slide across an array, multiplying the neighbors of the current cell with the values of a second array. This second array is called the *kernel*. In our example above we used 0.8 for the probability of moving to the correct location, 0.1 for undershooting, and 0.1 for overshooting. We make a kernel of this with the array `[0.1, 0.8, 0.1]`. So all we need to do is write a loop that goes over each element of our array, multiplying by the kernel, and summing the results. To emphasize that the belief is a probability distribution I have named the belief `distribution`." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def predict(distribution, offset, kernel):\n", - " N = len(distribution)\n", - " kN = len(kernel)\n", - " width = int((kN - 1) / 2)\n", - "\n", - " result = np.zeros(N)\n", - " for i in range(N):\n", - " for k in range (kN):\n", - " index = (i + (width-k) - offset) % N\n", - " result[i] += distribution[index] * kernel[k]\n", - " distribution[:] = result[:] # update belief" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We should test that this is correct:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAACeCAYAAAD5RibQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGiFJREFUeJzt3X9U1vX9//EH4C8o4ugQAkGBcjqRSLlicUnZdvA6M8va\naaK2maDN4JSJHJtj2Wkl6ZQdSk1wK48ym2U7NddJ1qCjhkw6A5Fmps6iqTtwXU1XyJjKEd6fP/p6\nfbu6kB/5hvcF3G/neA683q837+f1PFf54O3rer39DMMwBAAAAOCa+VtdAAAAADBQEK4BAAAAkxCu\nAQAAAJMQrgEAAACTEK4BAAAAkxCuAQAAAJMQrgEAAACTdBmuKyoqNHv2bEVFRcnf318lJSVd/tAj\nR45o+vTpCgoKUlRUlFavXm1KsQAAAIAv6zJct7S06JZbbtGGDRsUGBgoPz+/TuefP39eM2bMUERE\nhGpqarRhwwYVFBSosLDQtKIBAAAAX+TXkyc0BgcHa/PmzXrooYeuOqe4uFh5eXlyuVwaPny4JOm5\n555TcXGx/vWvf117xQAAAICPMn3NdVVVle644w53sJYkh8OhhoYGnTp1yuzLAQAAAD5jiNk/0Ol0\nauzYsR5j4eHh7mPjxo1zjzc1NZl9eQAAAKDPhISEeHxv+p3rrtZkAwAAAAOV6eH6xhtvlNPp9Bhz\nuVzuYwAAAMBAZfqykJSUFK1cuVKXLl1yr7suLy/XmDFjPJaEfN3Xb6mbraamRpJks9l69Tr9CT3x\nRk+80RNv9MQbPfFGT7zRE2/0xFN/6UdnS5u7tRVfXV2d6urq1N7erlOnTqmurk5nzpyRJOXl5Skt\nLc09/8EHH1RQUJAyMjJ09OhRvfnmm1q3bp1yc3NNeCkAAACA7+oyXFdXV2vq1KmaOnWqLl68qKef\nflpTp07V008/LenLDynW19e7599www0qLy9XQ0ODbDabli5dqhUrVmj58uW99yoAAAAAH9DlspC7\n7rpL7e3tVz2+bds2r7HJkyfrvffeu7bKAAAAgH7G9A80AgAAAIMV4RoAAAAwCeEaAAAAMAnhGgAA\nADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAA\nMAnhGgAAADBJt8J1UVGRYmNjFRgYKJvNpsrKyk7n/+Uvf1FKSopuuOEGjR49Wvfff79OnjxpSsEA\nAACAr+oyXO/atUs5OTlatWqV6urqZLfbNXPmTJ05c6bD+Z9++qnuu+8+TZ8+XXV1dXr33Xd18eJF\n3X333aYXDwAAAPiSLsN1YWGhMjMztXjxYk2YMEEbN25URESEiouLO5x/6NAhXb58WWvXrlVcXJwS\nExO1cuVKffLJJ/rPf/5j+gsAAAAAfEWn4bq1tVW1tbVyOBwe4w6HQwcPHuzwnOTkZA0dOlQvvfSS\n2tra1NzcrO3btys5OVmjRo0yr3IAAADAx/gZhmFc7WBDQ4OioqJUUVGh1NRU9/izzz6rnTt36vjx\n4x2ed+DAAc2ZM0fnzp1Te3u7pkyZoj//+c8aPXq0x7ympib316zJBgAAQH8wfvx499chISEex0zf\nLcTpdGrx4sVauHChampqtH//fgUHBys9PV2d5HgAAACg3xvS2cHQ0FAFBATI5XJ5jLtcLkVERHR4\nzubNmxUcHKx169a5x1555RVFR0erqqpKdru9w/NsNltPa++RmpqaPrlOf0JPvNETb/TEGz3xRk+8\n0RNv9MQbPfHUX/rx1dUXX9fpnethw4YpKSlJZWVlHuPl5eVXDckXLlyQv7/nj73yfXt7e7cKBgAA\nAPqjLpeF5Obmavv27dq6dauOHTumZcuWyel0KisrS5KUl5entLQ09/xZs2aptrZWq1ev1smTJ1Vb\nW6vMzEyNHTtWSUlJvfdKAAAAAIt1uixEktLT03Xu3Dnl5+ersbFRCQkJKi0tVXR0tKQv11jX19e7\n53/ve9/Tzp07tX79eq1fv15BQUFKSUnRO++8o8DAwN57JQAAAIDFugzXkpSdna3s7OwOj23bts1r\nbO7cuZo7d+61VQYAAAD0M6bvFgIAAAAMVoRrAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCSEawAA\nAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJN0K10VF\nRYqNjVVgYKBsNpsqKyu7POeFF17QxIkTNWLECEVGRiovL++aiwUAAAB82ZCuJuzatUs5OTkqLi5W\namqqNm/erJkzZ+qjjz5SdHR0h+fk5uZqz549+vWvf62EhAQ1NTWpsbHR9OIBAAAAX9JluC4sLFRm\nZqYWL14sSdq4caPeeecdFRcXa82aNV7zT5w4oRdffFFHjhzRhAkT3OOJiYkmlg0AAAD4nk6XhbS2\ntqq2tlYOh8Nj3OFw6ODBgx2e86c//UlxcXEqLS1VXFycYmNjlZGRoX//+9/mVQ0AAAD4ID/DMIyr\nHWxoaFBUVJQqKiqUmprqHn/22We1c+dOHT9+3OucrKwslZSU6NZbb1VBQYEkacWKFZKkqqoq+fn5\nuec2NTW5vz558uS1vxoAAACgl40fP979dUhIiMexLpeF9FR7e7suXbqkHTt26Oabb5Yk7dixQxMm\nTFBNTY1uu+02sy8JAAAA+IROw3VoaKgCAgLkcrk8xl0ulyIiIjo8JyIiQkOGDHEHa0m6+eabFRAQ\noNOnT181XNtstp7W3iM1NTV9cp3+hJ54oyfe6Ik3euKNnnijJ97oiTd64qm/9OOrqy++rtM118OG\nDVNSUpLKyso8xsvLy2W32zs8JzU1VZcvX1Z9fb17rL6+Xm1tbRo3blxP6gYAAAD6lS73uc7NzdX2\n7du1detWHTt2TMuWLZPT6VRWVpYkKS8vT2lpae75aWlpmjp1qhYtWqS6ujodPnxYixYt0u233+7z\nv4UAAAAA16LLNdfp6ek6d+6c8vPz1djYqISEBJWWlrr3uHY6nR53qf38/PT222/r8ccf15133qnA\nwEA5HA4VFhb23qsAAAAAfEC3PtCYnZ2t7OzsDo9t27bNa+zGG2/U66+/fm2VAQAAAP1Mtx5/DgAA\nAKBrhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJIRrAAAAwCSEawAAAMAkhGsAAADAJIRrAAAA\nwCSEawAAAMAkhGsAAADAJIRrAAAAwCRDrC4AANA76s82q6Hlcp9cq3lEmCSp8tTnfXK9yOuGKC40\nuE+uBQA90a1wXVRUpIKCAjmdTsXHx+uFF15Qampql+edPHlSU6dOlSQ1NzdfW6UAgB5paLmspRVn\n+/iql/rkKpvuDFVcaJ9cCgB6pMtlIbt27VJOTo5WrVqluro62e12zZw5U2fOnOn0vNbWVs2bN0/T\np0+Xn5+faQUDAAAAvqrLcF1YWKjMzEwtXrxYEyZM0MaNGxUREaHi4uJOz1u5cqVuvfVWzZkzR4Zh\nmFYwAAAA4Ks6Ddetra2qra2Vw+HwGHc4HDp48OBVz9uzZ4/27NmjTZs2EawBAAAwaHS65vrs2bNq\na2tTeHi4x3hYWJicTmeH5zQ0NGjJkiXavXu3goKCul1ITU1Nt+dei766Tn9CT7zRE2/0xJuv9+TK\nhwwHoubmZtXUfGJ1Gd3i6+8TK9ATb/TEk6/3Y/z48Vc9ZvpWfAsWLFB2drZuu+02s380AAAA4NM6\nvXMdGhqqgIAAuVwuj3GXy6WIiIgOz9m3b58qKir0zDPPSJIMw1B7e7uGDh2q4uJiPfzwwx2eZ7PZ\nvkn93XblN6Devk5/Qk+80RNv9MRbf+nJl9vi9c3uHX0tODhYtsljrS6jU/3lfdKX6Ik3euKpv/Sj\nqanpqsc6DdfDhg1TUlKSysrK9MADD7jHy8vLNWfOnA7P+fDDDz2+3717t5577jlVV1crMjKyJ3UD\nAAAA/UqX+1zn5uZqwYIFSk5Olt1u15YtW+R0OpWVlSVJysvLU3V1td59911J0qRJkzzO/9vf/iZ/\nf3+vcQAAAGCg6TJcp6en69y5c8rPz1djY6MSEhJUWlqq6OhoSZLT6VR9fX2nP4N9rgEAADAYdOsJ\njdnZ2crOzu7w2LZt2zo9NyMjQxkZGT0uDAAAAOhvTN8tBAAAABisCNcAAACASQjXAAAAgEkI1wAA\nAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASQjXAAAA\ngEkI1wAAAIBJuh2ui4qKFBsbq8DAQNlsNlVWVl517v79+3XfffcpMjJS1113nRITE7Vt2zZTCgYA\nAAB8VbfC9a5du5STk6NVq1aprq5OdrtdM2fO1JkzZzqcX1VVpcTERL3xxhs6evSosrOztWTJEr36\n6qumFg8AAAD4kiHdmVRYWKjMzEwtXrxYkrRx40a98847Ki4u1po1a7zm5+XleXyflZWlffv26Y03\n3tD8+fNNKBsAAADwPV3euW5tbVVtba0cDofHuMPh0MGDB7t9oaamJo0aNarnFQIAAAD9RJd3rs+e\nPau2tjaFh4d7jIeFhcnpdHbrIm+//bb27t3baRivqanp1s+6Vn11nf6EnnijJ97oiTdf70nziDCr\nS+g1zc3Nqqn5xOoyusXX3ydWoCfe6IknX+/H+PHjr3qs13cL+etf/6of//jH2rRpk2w2W29fDgAA\nALBMl3euQ0NDFRAQIJfL5THucrkUERHR6bmVlZWaNWuWVq9erUceeaTTub0dvK/8BkTA///oiTd6\n4o2eeOsvPak89bmkS1aX0SuCg4NlmzzW6jI61V/eJ32JnnijJ576Sz+ampqueqzLO9fDhg1TUlKS\nysrKPMbLy8tlt9uvel5FRYXuvvtuPfPMM3r88cd7UC4AAADQP3Vrt5Dc3FwtWLBAycnJstvt2rJl\ni5xOp7KysiR9uTtIdXW13n33XUlf7nM9a9YsPfbYY5o/f757bXZAQIBGjx7dSy8FAAAAsFa3wnV6\nerrOnTun/Px8NTY2KiEhQaWlpYqOjpYkOZ1O1dfXu+eXlJTo4sWLKigoUEFBgXs8JibGYx4AAAAw\nkHQrXEtSdna2srOzOzz29acvbtu2jScyAgAAYNDp9d1CAAAAgMGCcA0AAACYhHANAAAAmIRwDQAA\nAJiEcA0AAACYhHANAAAAmKTbW/EBgC+rP9ushpbLfXKt5hFhkq48Xrz3RV43RHGhwX1yrYGO9wmA\n3ka4BjAgNLRc1tKKs3181Ut9cpVNd4YqLrRPLjXg8T4B0NtYFgIAAACYhHANAAAAmIRwDQAAAJiE\ncA0AAACYxGc+0Njbn6bu609tS9/8k9t99Wl2euKtv/RkIO94ILHrAdCXBvL/T3z97xyJnnzdQPg7\np1vhuqioSAUFBXI6nYqPj9cLL7yg1NTUq84/cuSIHnvsMVVXV2vUqFF65JFH9NRTT3V6jb779Hbf\nfGpb+uaf3O77T7PTE2++3ZOBvOOBxK4HQF8ayP8/6T9/50j05Ov67985XS4L2bVrl3JycrRq1SrV\n1dXJbrdr5syZOnPmTIfzz58/rxkzZigiIkI1NTXasGGDCgoKVFhYaF7VAAAAgA/qMlwXFhYqMzNT\nixcv1oQJE7Rx40ZFRESouLi4w/m///3vdfHiRZWUlGjSpEl64IEHtHLlSsI1AAAABrxOw3Vra6tq\na2vlcDg8xh0Ohw4ePNjhOVVVVbrjjjs0fPhwj/kNDQ06deqUCSUDAAAAvsnPMAzjagcbGhoUFRWl\niooKjzXWzz77rHbu3Knjx497neNwODR27Fi9/PLL7rHTp08rJiZGVVVV+u53v+seb2pqMut1AAAA\nAH0uJCTE43vTt+Lz8/Mz+0cCAAAA/UKn4To0NFQBAQFyuVwe4y6XSxERER2ec+ONN8rpdHrNv3IM\nAAAAGKg63Ypv2LBhSkpKUllZmR544AH3eHl5uebMmdPhOSkpKVq5cqUuXbrkXnddXl6uMWPGaNy4\ncR5zv34bHQAAAOjPulwWkpubq+3bt2vr1q06duyYli1bJqfTqaysLElSXl6e0tLS3PMffPBBBQUF\nKSMjQ0ePHtWbb76pdevWKTc3t/deBQAAAOADunyITHp6us6dO6f8/Hw1NjYqISFBpaWlio6OliQ5\nnU7V19e7599www0qLy/Xo48+KpvNplGjRmnFihVavnx5770KAAAAwAd0ulsIAAAAgO4zfbcQX1VU\nVKTY2FgFBgbKZrOpsrLS6pIsU1FRodmzZysqKkr+/v4qKSmxuiTLrV27VrfddptCQkIUFham2bNn\n6+jRo1aXZanNmzcrMTFRISEhCgkJkd1uV2lpqdVl+Yy1a9fK399fS5cutboUS/3yl7+Uv7+/x5/I\nyEiry7JUY2OjFi5cqLCwMAUGBio+Pl4VFRVWl2WZmJgYr/eIv7+/7rnnHqtLs0xbW5ueeuopxcXF\nKTAwUHFxcXrqqafU1tZmdWmWam5uVk5OjmJiYhQUFKRp06appqbG6rJ6bFCE654+wn2ga2lp0S23\n3KINGzYoMDCQ7RMlvffee3rsscdUVVWlvXv3asiQIUpLS9Pnn39udWmWiY6O1vr163X48GEdOnRI\n3//+93X//ffryJEjVpdmuffff18vvfSSbrnlFv77kTRx4kQ5nU73n8H8Hvniiy80bdo0+fn5qbS0\nVMePH9eLL76osLAwq0uzzKFDhzzeH7W1tfLz89PcuXOtLs0y69atU1FRkTZt2qQTJ05ow4YNKioq\n0tq1a60uzVIPP/ywysvL9bvf/U4ffvihHA6H0tLS1NDQYHVpPWMMAsnJycaSJUs8xsaPH2/k5eVZ\nVJHvuP76642SkhKry/A5//3vf42AgADj7bfftroUnzJq1Cjjt7/9rdVlWOqLL74wbrrpJmP//v3G\nXXfdZSxdutTqkiz19NNPG5MnT7a6DJ+Rl5dnpKamWl2GT8vPzzdGjhxpXLx40epSLDNr1iwjIyPD\nY+yhhx4y7r33Xosqst7//vc/Y8iQIcZbb73lMZ6UlGSsWrXKoqq+mQF/5/qbPMIdOH/+vNrb2zVy\n5EirS/EJbW1teu2119TS0iK73W51OZZasmSJ5syZo+nTp8vgIyuSpPr6eo0ZM0ZxcXGaP3++Pv30\nU6tLsszu3buVnJysuXPnKjw8XFOmTNHmzZutLstnGIahrVu36ic/+Yl7u97B6I477tDevXt14sQJ\nSdJHH32kffv26e6777a4MutcvnxZbW1tXu+LESNG9LulvF3uFtLfnT17Vm1tbQoPD/cYDwsL83rY\nDXDFsmXLNGXKFKWkpFhdiqWOHDmilJQUXbp0Sddff73++Mc/Kj4+3uqyLPPSSy+pvr5eO3fulMQT\naSXp9ttvV0lJiSZOnCiXy6X8/HzZ7XYdPXpUo0aNsrq8PldfX6+ioiLl5ubqF7/4hQ4fPuxel//o\no49aXJ31ysvL9c9//lM//elPrS7FUitXrtT58+c1adIkBQQE6PLly1q1apV7m+PBKDg4WCkpKcrP\nz9fkyZMVHh6uV199Ve+//77Gjx9vdXk9MuDDNdBTubm5OnjwoCorKwd9eJo4caL+/ve/q6mpSX/4\nwx/00EMPaf/+/YMyYJ84cUJPPvmkKisrFRAQIOnLu3CD/e71D37wA/fXkydPVkpKimJjY1VSUjIo\nt2Btb29XcnKynnvuOUlSYmKiTp48qc2bNxOu9eUvqMnJyUpISLC6FEu99tpr2rFjh1599VXFx8fr\n8OHDWrZsmWJiYrRo0SKry7PMjh07tGjRIkVFRSkgIEBJSUmaP3++Dh06ZHVpPTLgw/U3eYQ7Bq/l\ny5fr9ddf1759+xQTE2N1OZYbOnSo4uLiJElTpkxRdXW1nn/+eb388ssWV9b3qqqqdPbsWY9fLNra\n2nTgwAH95je/UUtLi4YOHWphhb4hKChI8fHx+vjjj60uxRKRkZGaNGmSx9jEiRN1+vRpiyryHZ99\n9pneeustFRUVWV2K5Z544gn97Gc/U3p6uiQpPj5ep06d0tq1awd1uI6Li9P+/ft14cIFnT9/XuHh\n4Zo7d65uuukmq0vrkQG/5vqrj3D/qvLy8kG/dhSeli1bpl27dmnv3r369re/bXU5PqmtrU2tra1W\nl2GJH/7wh/rwww/1wQcf6IMPPlBdXZ1sNpvmz5+vuro6gvX/c/HiRR07dmzQ3ryYNm2ajh8/7jH2\nj3/8g1/WJW3fvl0jRozQ/PnzrS7FchcuXJC/v2cE8/f3H/T/EnZFYGCgwsPD9fnnn6usrEz33Xef\n1SX1yIC/cy19+c/8CxYsUHJysux2u7Zs2eLxCPfBpqWlRSdPnpT05T9hnjp1SnV1dfrWt77lfvLm\nYPPoo4/qlVde0e7duxUSEuJejx8cHKzrrrvO4uqs8fOf/1z33HOPoqKi1NzcrJ07d+q9994btHtd\nX9nv+6uCgoI0cuRIrzuVg8mKFSs0e/ZsRUdH67PPPtPq1at14cIFLVy40OrSLLF8+XLZ7XatWbNG\n6enpOnz4sDZt2jTot1gzDEMvv/yy5s2bp6CgIKvLsdy9996rX/3qV4qNjdWkSZN0+PBhPf/884P2\nv5srysrK1NbWpokTJ+rjjz/WE088oe985zvKzMy0urSesXKrkr5UVFRkxMTEGMOHDzdsNptx4MAB\nq0uyzL59+ww/Pz/Dz8/P8Pf3d3+dmZlpdWmW+Xovrvx55plnrC7NMhkZGca4ceOM4cOHG2FhYcaM\nGTOMsrIyq8vyKWzFZxjz5s0zIiMjjWHDhhljxowxfvSjHxnHjh2zuixL7dmzx0hMTDRGjBhhTJgw\nwdi0aZPVJVlu7969hr+/v1FdXW11KT6hubnZyMnJMcaNG2cEBgYacXFxxpNPPmlcunTJ6tIs9frr\nrxs33XSTMXz4cCMiIsJYunSpcf78eavL6jEefw4AAACYZMCvuQYAAAD6CuEaAAAAMAnhGgAAADAJ\n4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwCeEaAAAAMMn/AalIAVo5gS2GAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "belief = np.array([.05] * 10)\n", - "belief[4] = .55\n", - "predict(belief, offset=1, kernel=[.1, .8, .1])\n", - "bp.bar_plot(belief)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All of the elements are unchanged except the middle ones, which is correct. The value in position 4 should be $(0.1 \\times 0.05)+ (0.8 \\times 0.05) + (0.1 \\times 0.55) = 0.1$, which it does. Position 5 should be $(0.1 \\times 0.05) + (0.8 \\times 0.55)+ (0.1 \\times 0.05) = 0.45$, which it does. Finally, position 6 is computed the same as position 4, and it is also correct.\n", - "\n", - "Finally, let's ensure that it shifts the positions correctly for movements greater than one." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "belief = np.array([.05] * 10)\n", - "belief[4] = .55\n", - "predict(belief, offset=3, kernel=[.1, .8, .1])\n", - "bp.bar_plot(belief)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The position was correctly shifted by 3 positions, so the code seems to be correct.\n", - "\n", - "It will usually be true that a small error is very likely, and a large error is very unlikely. For example, a kernel might look like\n", - "\n", - " [.02, .1, .2, .36, .2, .1, .02]\n", - " \n", - "But maybe an overshoot is very likely, and and undershoot is impossible. That kernel might be\n", - "\n", - " [.0, .0, .5, .3, .2]\n", - " \n", - "You probably will never be able to compute exact probabilities for the kernel of a real problem. It is usually enough to be approximately right. What you *must* do is ensure that the terms of the kernel sum to 1. The kernel expresses the probability of any given move, and the sum of any probability distribution must be 1.\n", - "\n", - "An easy way to do this is to make each term *proportionally* correct and then normalize it to sum to 1." + "Khan Academy [4] has a good introduction to convolution, and Wikipedia has some excellent animations of convolutions [5]. But the general idea is already clear. You slide an array called the *kernel* across another array, multiplying the neighbors of the current cell with the values of the second array. In our example above we used 0.8 for the probability of moving to the correct location, 0.1 for undershooting, and 0.1 for overshooting. We make a kernel of this with the array `[0.1, 0.8, 0.1]`. All we need to do is write a loop that goes over each element of our array, multiplying by the kernel, and summing the results. To emphasize that the belief is a probability distribution I have named it `pdf`." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { - "collapsed": false + "collapsed": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.083 0.167 0.5 0.167 0.083]\n" - ] - } - ], + "outputs": [], "source": [ - "kernel = np.array([1, 2, 6, 2, 1], dtype=float)\n", - "normalize(kernel)\n", - "print(kernel)" + "def predict_move_convolution(pdf, offset, kernel):\n", + " N = len(pdf)\n", + " kN = len(kernel)\n", + " width = int((kN - 1) / 2)\n", + "\n", + " prior = np.zeros(N)\n", + " for i in range(N):\n", + " for k in range (kN):\n", + " index = (i + (width-k) - offset) % N\n", + " prior[i] += pdf[index] * kernel[k]\n", + " return prior" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Integrating Measurements and Movement Updates" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The problem of losing information during a prediction may make it seem as if our system would quickly devolve into no knowledge. However, recall that our process is not an endless series of predictions, but a cycle of predictions followed by updates. The output of the update step, where we measure the current position, is fed into the prediction. The prediction step, with a degraded certainty, is then fed back into the update step where we measure the position again.\n", + "This illustrates the algorithm, but it is slow. SciPy provides a convolution routine `convolve()` in the `ndimage.filters` module. We need to shift the pdf by `offset` before convolution; `np.roll()` does that. The move and predict algorithm can be implemented with one line:\n", "\n", - "Let's think about this intuitively. After the first update->predict round we have degraded the knowledge we gained by the measurement by a small amount. But now we take another measurement. When we try to incorporate that new measurement into our belief, do we become more certain, less certain, or equally certain? Consider a simple case - you are sitting in your office. A co-worker asks another co-worker where you are, and they report \"in his office\". You keep sitting there while they ask and answer \"has he moved\"? \"No\" \"Where is he\" \"In his office\". Eventually you get up and move, and lets say the person didn't see you move. At that time the questions will go \"Has he moved\" \"no\" (but you have!) \"Where is he\" \"In the kitchen\". Wow! At that moment the statement that you haven't moved conflicts strongly with the next measurement that you are in the kitchen. If we were modeling these with probabilities the probability that you are in your office would lower, and the probability that you are in the kitchen would go up a little bit. But now imagine the subsequent conversation: \"has he moved\" \"no\" \"where is he\" \"in the kitchen\". Pretty quickly the belief that you are in your office would fade away, and the belief that you are in the kitchen would increase to near certainty. The belief that you are in the office will never go to zero, nor will the belief that you are in the kitchen ever go to 1.0 because of the chances of error, but in practice your co-workers would be correct to be quite confident in their system.\n", + "```python\n", + "convolve(np.roll(pdf, offset), kernel, mode='wrap')\n", + "```\n", "\n", - "That is what intuition tells us. What does the math tell us?\n", - "\n", - "Well, we have already programmed the update step, and we have programmed the predict step. All we need to do is feed the result of one into the other, and we will have programmed our dog tracker!!! Let's see how it performs. We will input measurements as if the dog started at position 0 and moved right at each update. However, as in a real world application, we will start with no knowledge and assign equal probability to all positions. " + "FilterPy implements this with `discrete_bayes`' `predict()` function." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nFPnmarvZJpuIiIioOWrv6oHLdfK2GN1VtbC7Wi5rRnN11uOmppl9J7i6ukKlUsFgMJiMGwwGeHh4\nSLoYjUZj0byG//KwdL6UbJlt63yps/POXgZQLcm+bsfZ2RmaoD6t3k9Het3bS7at86XMrqioaPU+\n5MD6zmy58vPOXkZy7kVJ9nU7yx52xYP3+jWZbaufLbY87ubi+731+eZqu9lrsu3t7REaGgqdTmcy\nrtPpoNVqW7U4IiKyHdZ3IiL5WPQ7jcTEREyePBmDBw+GVqtFRkYG9Ho94uPjAQBJSUkoKCjArl27\njNuUlJSguroaFy9eRFVVFQ4fPgwACA4OluEwiIioJVjfiYjkYVGTHRMTg/LycqSkpECv1yMoKAjZ\n2dnw9vYGAJSVlaG0tNRkm5EjR+LcuXPGr0NCQqBQKFBXVyfh8omIqDVY34mI5GHx1fnx8fHGMxu3\nyszMbDR2a1EmIqK2ifWdiEh6Fj9WnYiIiIiILMMmm4iIiIhIYmyyiYiIiIgkxiabiIiIiEhibeqJ\njzduIG9ewyNTLZ3fwPMuO/i7OjcaP3XxCvRXa9t8dkvz22K2rXXm153vd+tnk7z1vSO83zvSvzWy\nnfbynuss7/c21WTPavZTkpr3RKdlD7vC37XxuP5qbTvLbl5+W8y2tc78uvP9bv1skre+d6z3e/v/\nt0a20/7ecx37/c7LRYiIiIiIJMYmm4iIiIhIYmyyiYiIiIgkZnGTnZ6eDj8/P6jVamg0GuTl5d1x\n/tGjRxEREQEnJyf07t0bCxcubPViiYhIeqzvRETSs6jJzsrKQkJCAubNm4fi4mKEhYVhxIgROH/+\nfJPzr1y5gqioKHh6eqKoqAgfffQR3n//faSmpkq6eCIiah3WdyIieVjUZKempiIuLg5xcXEIDAxE\nWloaPD09kZGR0eT89evX49q1a/jss89w77334umnn8Zrr72GDz/8UNLFExFR67C+ExHJw2yTXVNT\ng6KiIkRFRZmMR0dHIz8/v8ltvvvuOzz00ENwcHAwjj322GO4cOECzp4928olExGRFFjfiYjkoxBC\niDtN0Ov18PLyQm5uLsLDw43jCxcuxIYNG1BSUtJom8ceewy9e/fGypUrjWM//fQT+vbti2+//RZD\nhgwxjldUVEhxHERE7YKLi4utl2DE+k5EJI2majvvLkJEREREJDGzTbarqytUKhUMBoPJuMFggIeH\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1040,10 +1031,20 @@ } ], "source": [ - "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])\n", - "belief = np.array([.1] * 10)\n", - "update(hallway, belief, z=1, prob_correct=.75)\n", - "bp.bar_plot(belief)" + "from filterpy.discrete_bayes import predict\n", + "\n", + "belief = [.05, .05, .05, .05, .55, .05, .05, .05, .05, .05]\n", + "prior = predict(belief, offset=1, kernel=[.1, .8, .1])\n", + "bp.plot_belief_vs_prior(belief, prior, ylim=(0,0.6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All of the elements are unchanged except the middle ones. The values in position 4 and 6 should be $(0.1 \\times 0.05)+ (0.8 \\times 0.05) + (0.1 \\times 0.55) = 0.1$. Position 5 should be $(0.1 \\times 0.05) + (0.8 \\times 0.55)+ (0.1 \\times 0.05) = 0.45$. \n", + "\n", + "Let's ensure that it shifts the positions correctly for movements greater than one and for asymmetric kernels." ] }, { @@ -1055,9 +1056,9 @@ "outputs": [ { "data": { - "image/png": "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\nYII=\n", + "image/png": "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\n0mq3eKqnVqvh7u6OK1euYOfOnRg7dqxV8zsT1ve2U9+tUdsB1nfW9z916PouS+suk8zMTNGlSxex\natUqUVxcLObMmSOcnZ3F+fPnZc+urKwURUVF4vDhw8LJyUksWrRIFBUVWSV71qxZolu3biI7O1uU\nlpYaPyorK2XPFkKI119/XRw4cECcPXtWHD16VLz++utCpVKJnTt3WiX/Vtb8deL//d//if3794uS\nkhLx3XffidGjRwsXFxer/D/Pz88XDg4OIjk5Wfz4449i8+bNwsXFRaSnp8uefat+/fo1uOOD3KZN\nmyZ69+4ttm3bJs6ePSu+/PJL0bNnT/HKK69YJX/nzp0iKytLlJSUiF27don7779fhIWFiZqaGqvk\nd1as79av722ptgvB+s76Lj9r1/d21WQLIUR6errw9fUVjo6OQqPRiNzcXKvk7tu3z/irrFs/nnvu\nOdmzG8tVKpVi4cKFsmcLcfMvhY+Pj3B0dBTu7u4iMjJS6HQ6q2Tf7pFHHrFaEY6JiRFeXl6iS5cu\nwtvbW4wfP14UFxdbJVsIIbZv3y6Cg4OFWq0WgYGB4uOPP7ZathBCZGdnC6VSKQoKCqyaW1lZKV5+\n+WXh4+MjnJychL+/v5g/f76oqqqySv7mzZuFv7+/cHR0FL169RJz5swRFRUVVsnu7FjfrVvf21Jt\nF4L13ZpY361T3/lYdSIiIiIiibWba7KJiIiIiNoLNtlERERERBJjk01EREREJDE22UREREREEmOT\nTUREREQkMTbZREREREQSY5NNRERERCQxNtlERERERBL7fy5EskiexuadAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1065,30 +1066,45 @@ } ], "source": [ - "kernel = (.1, .8, .1)\n", - "predict(belief, 1, kernel)\n", - "bp.bar_plot(belief)" + "prior = predict(belief, offset=3, kernel=[.05, .05, .6, .2, .1])\n", + "bp.plot_belief_vs_prior(belief, prior, ylim=(0,0.6))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "So after the first update we have assigned a high probability to each door position, and a low probability to each wall position. The predict step shifted these probabilities to the right, smearing them about a bit. Now let's look at what happens at the next sense." + "The position was correctly shifted by 3 positions and we give more weight to the likelihood of an overshoot, so this looks correct." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Integrating Measurements and Movement Updates\n", + "\n", + "The problem of losing information during a prediction may make it seem as if our system would quickly devolve into no knowledge. However, we follow a prediction with an update step where we incorporate the measurement. The update improves our knowledge. The output of the update step is fed into the next prediction. The prediction degrades our certainty. That is passed into another update, where certainty is again increased.\n", + "\n", + "Let's think about this intuitively. Consider a simple case - you are tracking a dog while he sits still. During each prediction you predict he doesn't move. Your filter quickly *converges* on an accurate estimate of his position. Then the microwave in the kitchen turns on, and he goes streaking off. You don't know this, so at the next prediction you predict he is in the same spot. But the measurements tell a different story. As you incorporate the measurements your belief will be smeared along the hallway, leading towards the kitchen. On every epoch (cycle) your belief that he is sitting still will get smaller, and your belief that he is inbound towards the kitchen at a startling rate of speed increases.\n", + "\n", + "That is what intuition tells us. What does the math tell us?\n", + "\n", + "We have already programmed the update and predict steps. All we need to do is feed the result of one into the other, and we will have implemented a dog tracker!!! Let's see how it performs. We will input measurements as if the dog started at position 0 and moved right one position each epoch. As in a real world application, we will start with no knowledge of his position by assigning equal probability to all positions. " ] }, { "cell_type": "code", "execution_count": 20, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": false }, "outputs": [ { "data": { - "image/png": "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\n03X27Fnl5+ersbFRCQkJKi0t9exx7XK5VF9f75l//fXXq7y8XI899pjsdrtGjhypZcuWaenSpb33\nLgAAAAA/0OluIQAAAAC6z/TdQvxVUVGR4uLiZLPZZLfbVVlZaXVJlqmoqNCsWbMUHR2twMBAlZSU\nWF2S5VatWqXbbrtNoaGhCg8P16xZs3TkyBGry7JUYWGhEhMTFRoaqtDQUDkcDpWWllpdlt9YtWqV\nAgMDtXjxYqtLsdQvf/lLBQYGev2LioqyuixLNTY26uGHH1Z4eLhsNpsmTpyoiooKq8uyTGxsrM/P\nSGBgoO655x6rS7NMW1ubnn76acXHx8tmsyk+Pl5PP/202trarC7NUs3NzcrJyVFsbKyCg4N1xx13\nqKamxuqyemxAhOvLj3BfsWKF6urq5HA4NH36dJ0+fdrq0izR0tKiW265RevWrZPNZmP7REnvvfee\nHn/8cVVVVWnPnj0aNGiQ0tLS9Pnnn1tdmmViYmK0Zs0aHTx4UAcOHND3v/993X///Tp06JDVpVnu\ngw8+0KZNm3TLLbfw/0fS+PHj5XK5PP8G8s/IF198oTvuuEMBAQEqLS3V8ePH9fLLLys8PNzq0ixz\n4MABr5+P2tpaBQQEaM6cOVaXZpnVq1erqKhIGzZs0IkTJ7Ru3ToVFRVp1apVVpdmqUceeUTl5eX6\n3e9+p8OHD8vpdCotLU0NDQ1Wl9YzxgCQnJxsLFq0yGts7NixRl5enkUV+Y/rrrvOKCkpsboMv/Pf\n//7XCAoKMnbt2mV1KX5l5MiRxm9/+1ury7DUF198Ydx0003Gvn37jGnTphmLFy+2uiRLPfPMM8ak\nSZOsLsNv5OXlGampqVaX4dfy8/ONESNGGBcuXLC6FMvMnDnTyMjI8Bp76KGHjHvvvdeiiqz3v//9\nzxg0aJDx9ttve40nJSUZK1assKiqb+aav3P9TR7hDpw7d07t7e0aMWKE1aX4hba2Nr3++utqaWmR\nw+GwuhxLLVq0SLNnz9bUqVNl8CcrkqT6+nqNGjVK8fHxmjdvnj755BOrS7LMzp07lZycrDlz5igi\nIkKTJ09WYWGh1WX5DcMwtHnzZv3kJz/xbNc7EN15553as2ePTpw4IUk6evSo9u7dqxkzZlhcmXUu\nXbqktrY2n5+LYcOG9bulvF3uFtLfnTlzRm1tbYqIiPAaDw8P93nYDXDZkiVLNHnyZKWkpFhdiqUO\nHTqklJQUXbx4Udddd53++Mc/auLEiVaXZZlNmzapvr5e27dvl8QTaSXp9ttvV0lJicaPHy+32638\n/Hw5HA4dOXJEI0eOtLq8PldfX6+ioiLl5ubqF7/4hQ4ePOhZl//YY49ZXJ31ysvL9c9//lM//elP\nrS7FUsuXL9e5c+c0YcIEBQUF6dKlS1qxYoVnm+OBKCQkRCkpKcrPz9ekSZMUERGh1157TR988IHG\njh1rdXk9cs2Ha6CncnNztX//flVWVg748DR+/Hj9/e9/V1NTk/7whz/ooYce0r59+wZkwD5x4oSe\neuopVVZWKigoSNKXd+EG+t3rH/zgB56vJ02apJSUFMXFxamkpGRAbsHa3t6u5ORkPf/885KkxMRE\nnTx5UoWFhYRrffkBNTk5WQkJCVaXYqnXX39d27Zt02uvvaaJEyfq4MGDWrJkiWJjY7VgwQKry7PM\ntm3btGDBAkVHRysoKEhJSUmaN2+eDhw4YHVpPXLNh+tv8gh3DFxLly7VG2+8ob179yo2Ntbqciw3\nePBgxcfHS5ImT56s6upqvfjii3rllVcsrqzvVVVV6cyZM14fLNra2vT+++/rN7/5jVpaWjR48GAL\nK/QPwcHBmjhxoj766COrS7FEVFSUJkyY4DU2fvx4ffrppxZV5D8+++wzvf322yoqKrK6FMs9+eST\n+tnPfqb09HRJ0sSJE3Xq1CmtWrVqQIfr+Ph47du3T+fPn9e5c+cUERGhOXPm6KabbrK6tB655tdc\nf/UR7l9VXl4+4NeOwtuSJUu0Y8cO7dmzR9/+9retLscvtbW1qbW11eoyLPHDH/5Qhw8f1ocffqgP\nP/xQdXV1stvtmjdvnurq6gjW/+/ChQs6duzYgL15cccdd+j48eNeY//4xz/4sC5p69atGjZsmObN\nm2d1KZY7f/68AgO9I1hgYOCA/03YZTabTREREfr8889VVlam++67z+qSeuSav3Mtfflr/vnz5ys5\nOVkOh0MbN270eoT7QNPS0qKTJ09K+vJXmKdOnVJdXZ2+9a1veZ68OdA89thjevXVV7Vz506FhoZ6\n1uOHhIRo+PDhFldnjZ///Oe65557FB0drebmZm3fvl3vvffegN3r+vJ+318VHBysESNG+NypHEiW\nLVumWbNmKSYmRp999plWrlyp8+fP6+GHH7a6NEssXbpUDodDL7zwgtLT03Xw4EFt2LBhwG+xZhiG\nXnnlFc2dO1fBwcFWl2O5e++9V7/61a8UFxenCRMm6ODBg3rxxRcH7P+by8rKytTW1qbx48fro48+\n0pNPPqnvfOc7yszMtLq0nrFyq5K+VFRUZMTGxhpDhw417Ha78f7771tdkmX27t1rBAQEGAEBAUZg\nYKDn68zMTKtLs8zXe3H537PPPmt1aZbJyMgwxowZYwwdOtQIDw837r77bqOsrMzqsvwKW/EZxty5\nc42oqChjyJAhxqhRo4wf/ehHxrFjx6wuy1K7d+82EhMTjWHDhhnjxo0zNmzYYHVJltuzZ48RGBho\nVFdXW12KX2hubjZycnKMMWPGGDabzYiPjzeeeuop4+LFi1aXZqk33njDuOmmm4yhQ4cakZGRxuLF\ni41z585ZXVaP8fhzAAAAwCTX/JprAAAAoK8QrgEAAACTEK4BAAAAkxCuAQAAAJMQrgEAAACTEK4B\nAAAAkxCuAQAAAJMQrgEAAACT/B9Xd/Wb4vy4kAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1clHW+//H3DKDcqKgRN4J3uKb5wMiATHF30dSOZWcr\n865OSugWx1Yj261kdU+lputWbJjQo7XI8uGmu3Zqy9QdDVOizsHbox1SM29O68BmGoaZIn5/f/Rj\ncgRlwGtmxHk9H495JN/5XvP+XmN8+HjNxXXZjDFGAAAAACxj9/cCAAAAgCsNTTYAAABgMZpsAAAA\nwGI02QAAAIDFaLIBAAAAi9FkAwAAABajyUbA6datmxITE/29DABAC5CZmSm73a5Dhw75eyloYWiy\nEXBsNptsNpu/lwEAaKInn3xSdrtdr7/+us8y+ZmB5qLJRsD54IMPtG7dOn8vAwDQRP5oeOfPn6/y\n8nLFx8f7NBctX7C/FwD4Wvfu3f29BABAM/jjJtUxMTGKiYnxeS5aPo5k47J28OBB2e12DRkyRIcP\nH9a9996r6OhohYeHKy0tTStWrHCb/+GHH8putysrK0t79uzR6NGjFR0draCgIP3P//yPpAufk11T\nU6M//OEP6tevnyIiItSuXTsNGDBARUVFDa7NbrcrMTFRx48fV05Ojrp166aQkBDl5+db/0YAgJ80\ntQ7XWbx4sQYMGKB27dopIiJCN9xwg55//nmdOXOm3tydO3fqnnvuUWJiosLCwnT11VcrOTlZDz30\nkL799ltJ0uDBg/X0009L+vE8abvdrqCgILfzpY0xWrx4sQYNGqT27dsrLCxMffv21fz581VTU1Mv\nu7FafrFzst966y0NHjzYldOnTx/9x3/8h06cOFFvbkZGhux2uw4cOKAXXnhBffv2VVhYmO666y4P\n/hbQEnEkGy3CsWPHlJ6ero4dO2rSpEk6duyYVqxYoXHjxsnpdOrhhx92m7937171799fffr00YQJ\nE3T8+HGFh4dLUoMfNZ45c0b/8i//ouLiYvXq1UtTpkzR6dOn9dZbb2nSpEn66KOPtHjx4nrbnTp1\nSkOGDFFVVZVuvfVWhYeHKyEhwTtvAgD4UVPq8IQJE7R06VIlJCQoKytLISEhevfdd/XrX/9aDodD\nq1atkt3+w3G+nTt3qn///rLb7Ro5cqR69Oih6upq7d+/X0uWLNGjjz6qtm3b6v7775ckbdy4UXfc\ncYeuv/56ST/U9Pbt20uSamtrdeedd+q9995Tr169dM899yg0NFQffvihcnNz9cEHH2jNmjWu7DoX\nq+UXOkXld7/7nebMmaOrrrpK48ePV/v27eVwODR79my9++672rRpkyIiIlzz615n6tSpKi0t1W23\n3aaRI0eqbdu2Fv4t4bJigMvYgQMHjM1mM3a73YwfP97tuS+++MK0b9/ehIaGmkOHDhljjNmwYYNr\n/qxZsxp8zW7dupnu3bu7jc2fP9/YbDYzYsQIU1NT4xo/fvy4SUpKMna73axcudJtm7qcW265xZw8\nedKK3QWAy05T6/Cbb75pbDab6devn6murnbNrampMTfffLOx2+3mueeec40/+uijxm63m7/97W/1\nsqurq83p06ddXz/55JPGbrebJUuWNLjW2bNnG5vNZqZNm2bOnj3r9tyDDz5o7Ha7efHFF93GG6vl\nmZmZxm63m4MHD7rGPvnkE2Oz2UyXLl1MRUWF2/yJEycau91upk6d6jaekZFhbDabSUhIcL1XuLJx\nughahKCgIM2bN89trHv37q4jzkuXLnV7LiYmRrNmzfL49RcvXiybzabnn39ewcE/fsDTtm1bzZs3\nT8YY/elPf2pw22effVahoaFN2BsAaHk8rcN19XTevHluR3KDg4OVl5d3wXraUB2NiIhQSEiIR+sz\nxig/P18xMTHKy8urd/T597//vSTpjTfeaHD7ptTyun3Mzc2td772ggULFBoaqtdee021tbVuz9ls\nNj3++OPq3LmzRzlo2ThdBC1Cly5d1LVr13rjP//5zzVv3jxt27bNbTw5OdnjwlxdXa19+/YpNjZW\nvXv3rvf8zTffLEnaunVrvedCQ0OVlJTkUQ4AtGSe1uG6/2ZkZNSb27dvX0VHR2vPnj367rvvFB4e\nrrFjx+qFF17QL37xC40aNUo333yzBgwYoF69ejVpfXv27NGRI0f0k5/8RLNnz673vDFGYWFhKi8v\nr/dcU2t53T4OHjy43nPR0dHq27evysrKtGfPHl177bVuz6elpXmcg5aNJhstwoV+s7tuvKqqym08\nNjbW49eu2/ZC24SFhSkyMlLffPNNveeio6M9zgGAlszTOlxVVaXIyEi1bt26wflxcXH66quvVFVV\n5frlyY8++kjPPPOM3n77bS1btkzGGHXr1k2PP/64HnzwQY/W9/XXX0uS9u3b5/oFyYY0dH51U2t5\n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\nsxcAgGahvgOAdzR6JFuSxowZo6NHj2ru3LlyOp1KSkrS6tWrlZCQIEmqqKjQ/v37XfPbtWsnh8Oh\nhx56SGlpaerQoYN+85vfKCcnxzt7AQBoFuo7AHhHo1cXAQAAANA0Le7qIk29/a9VNm3apF/84hdK\nSEiQ3W7X66+/7pNcSZo3b55uvPFGRUZGKjo6Wv/6r/+qTz/91Gf5BQUFSk5OVmRkpCIjIzVw4EC9\n//77PsuvM2/ePNntdk2bNs0neU899ZTsdrvbo1OnTj7Jln44gpiZmano6GiFhYUpKSlJmzZt8kl2\n9+7d6+273W7X7bff7vXss2fPatasWa7v88TERM2aNUtnz571erYkVVdXKycnR926dVN4eLgGDRqk\nzZs3+yQ70FHffVvfL5faLlHfqe9XZn1vUU12U2//a6Xq6mr17dtX+fn5Cg8P93reuTZu3Khf/epX\n+vjjj1VcXKzg4GANHTpU33zzjU/yO3furAULFmjbtm3asmWLhgwZojvuuEO7du3ySb70ww0w/vSn\nPyk5OdlnmZLUu3dvVVZWqqKiQhUVFdq5c6dPcquqqpSeni6bzabVq1frs88+08KFCxUdHe2T/M2b\nN7v2uaKiQlu3bpXNZtPYsWO9nj1//nwVFhbqxRdf1O7du5Wfn6+CggLNmzfP69mSNGnSJDkcDr3x\nxhvatWuXhg0bpqFDh8rpdPokP1BR331f3y+H2i5R36nvV3B9Ny1I//79zYMPPug21rNnT5Obm+vT\ndbRp08YsWbLEp5nnqq6uNkFBQea9997z2xo6duxoXn75ZZ9kffPNN6ZHjx5mw4YNJiMjw0ydOtUn\nuU8++aTp27evT7LON2PGDDNo0CC/ZDdkzpw5pkOHDub777/3etbIkSNNZmam29jEiRPN7bff7vXs\nkydPmuDgYPPuu++6jaekpJhZs2Z5PT+QUd9/4O/67svabgz1/XJAffdefW8xR7Kbc/vfK9Xx48d1\n9uxZdejQwefZZ8+e1ZtvvqkTJ05o4MCBPsl84IEHNGbMGP385z/3Sd65vvjiC8XHxysxMVHjx493\n+wUwb3rnnXfUv39/jRs3TjExMerXr58WLVrkk+yGvPrqq7rvvvvUunVrr2cNGjRIxcXF2r17tyTp\nf//3f/XBBx/otttu83r2mTNnVFtbW28/w8LCfHbqQiCivv/IX/XdH7Vdor5T36/w+u6V1t0LDh8+\nbGw2m9m0aZPb+NNPP2169+7t07X4+0jH6NGjTUpKijl79qzPMnfu3GnatGljgoODTYcOHcz777/v\nk9yXX37++vw2AAAE5UlEQVTZpKammtraWmOM8emRjjVr1pi//OUvZufOnWb9+vUmIyPDxMbGmqNH\nj3o9OzQ01ISFhZnc3Fyzfft289prr5k2bdqYRYsWeT37fGvXrjV2u93s3LnTZ5m//e1vjd1uNyEh\nIcZut/v0KPLAgQPNz372M/OPf/zD1NbWmjfeeMMEBQX5vM4EEur7j3xd3/1V242hvlPfr/z6TpPd\nDP4swo888oiJj483Bw4c8GluTU2N2bdvn9m6davJzc01UVFR5tNPP/Vq5u7du83VV19t9uzZ4xrz\nZRE+34kTJ0x0dLTJy8vzelarVq3qfZyYm5tr+vTp4/Xs8919992mf//+Psv785//bLp06WJWrFhh\ndu3aZZYuXWo6duxoXn31VZ/kf/HFFyYjI8PYbDYTEhJi+vfvb+677z6/vPeBgvr+A3/Ud3/UdmOo\n79T3wKjvLabJPn36tAkODjZ//etf3cYfeughk5GR4dO1+KsI5+TkmE6dOrkVJX8ZOnSomTx5slcz\nXnvtNWO3201wcLDrYbPZXP8CPn36tFfzGzJ48GAzZcoUr+d07drV/PKXv3Qbe+ONN0ybNm28nn2u\nf/7zn6ZVq1bmlVde8Vlm586dzcKFC93G5syZY3r27OmzNRhjzHfffWcqKiqMMcaMHTvWjBw50qf5\ngYT6fvnUd1/UdmOo79T3H13J9b3FnJN97u1/z+VwOJSenu6nVfnOww8/rOXLl6u4uFg9e/b093J0\n9uxZnTp1yqsZd955p3bu3KkdO3a4HqmpqRo/frx27NihkJAQr+af7/vvv9dnn32muLg4r2elp6e7\nzlmrs3v37nq3rfa2oqIihYaGaty4cT7L/O6772S3u5cmu93us0s81QkLC1NMTIyOHTumtWvX6o47\n7vBpfiChvl8+9d0XtV2ivlPff3RF13evtO5esnz5ctO6dWuzePFiU15ebqZNm2batm1rDh065PXs\n6upqs337drNt2zYTHh5uZs+ebbZv3+6T7ClTpph27dqZ4uJiU1FR4XpUV1d7PdsYY5544gmzadMm\nc+DAAbNz507zxBNPmKCgILN27Vqf5J/Llx8n/vrXvzYffvih2b9/v/nkk0/MbbfdZiIjI33yd15W\nVmZatWpl5s6daz7//HOzYsUKExkZaQoLC72efa5rrrmm3hUfvC0zM9N07tzZrFq1yhw4cMC89dZb\n5uqrrza/+c1vfJK/du1as3r1arN//37z97//3Vx//fVm4MCB5syZMz7JD1TUd9/X98upthtDfae+\ne5+v63uLarKNMaawsNB0797dhIaGmtTUVFNSUuKT3A0bNrg+yjr3cf/993s9u6Fcu91unnrqKa9n\nG/PDN0W3bt1MaGioiYmJMcOGDTMOh8Mn2ecbPHiwz4rwuHHjTHx8vGndurVJSEgwd999tykvL/dJ\ntjHGvP/++yY5OdmEhYWZXr16mRdffNFn2cYYU1xcbOx2u9m8ebNPc6urq80jjzxiunXrZsLDw02P\nHj3MzJkzzalTp3ySv2LFCtOjRw8TGhpqOnXqZKZNm2aOHz/uk+xAR333bX2/nGq7MdR3X6K++6a+\nc1t1AAAAwGIt5pxsAAAAoKWgyQYAAAAsRpMNAAAAWIwmGwAAALAYTTYAAABgMZpsAAAAwGI02QAA\nAIDFaLIBAAAAi/0/+QltT6AhGHUAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1096,15 +1112,20 @@ } ], "source": [ - "update(hallway, belief, z=1, prob_correct=.75)\n", - "bp.bar_plot(belief)" + "from filterpy.discrete_bayes import update\n", + "\n", + "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])\n", + "prior = np.array([.1] * 10)\n", + "likelihood = lh_hallway(hallway, z=1, z_prob=.75)\n", + "posterior = update(likelihood, prior)\n", + "bp.plot_prior_vs_posterior(prior, posterior, ylim=(0,.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Notice the tall bar at position 1. This corresponds with the (correct) case of starting at position 0, sensing a door, shifting 1 to the right, and sensing another door. No other positions make this set of observations as likely. Now lets add an update and then sense the wall." + "After the first update we have assigned a high probability to each door position, and a low probability to each wall position. " ] }, { @@ -1116,9 +1137,9 @@ "outputs": [ { "data": { - "image/png": "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\n1ZBQAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt0VOW9xvFnJhdyAQIYcyHhFopBVjBiEimEtgEJHhRP\nVeSmNWCgmoMFI7YqKfSogFCqpgZJXBaNKIsKLVarCHRAEBA9J1wPeCIgcjmWSSqCwShCCO/5g5WR\nIYFMwp6ZXL6ftbIg77x7nncnmd/8smdnj80YYwQAAADAMnZ/LwAAAABoaWiyAQAAAIvRZAMAAAAW\no8kGAAAALEaTDQAAAFiMJhsAAACwGE02YJEJEybIbrfryJEj/l4KALRK3bt3V0JCgr+XAUiiyUYL\n9cQTT8hut+u1117zWabNZpPNZvNZHgDAHXUYTQlNNlokfxTaefPmqbS0VHFxcT7NBQCc9/7772vt\n2rX+XgYgSQr09wIAb/DHG5lGR0crOjra57kAgPN69Ojh7yUALhzJhmUOHz4su92uIUOG6OjRo7rn\nnnsUFRWlsLAwpaWlafny5XVut2jRIg0YMEDt27dXeHi4brjhBj333HM6e/Zsrbm7d+/W3XffrYSE\nBIWGhurqq69WcnKyHnzwQX3zzTeSpMGDB+upp56S9MN50na7XQEBAW7nSxtjtGjRIg0aNEgdOnRQ\naGio+vbtq3nz5qmqqqpWtt1uV0JCgk6ePKnc3Fx1795dQUFBKigocMuq65zsN998U4MHD3bl9OnT\nR//5n/+pb7/9ttbcjIwM2e12HTp0SM8//7z69u2r0NBQ3XnnnR58FwCgeWjoc8YHH3wgu92u7Oxs\n7du3T6NGjVJUVJQCAgL0P//zP5IufU52VVWV/vCHP6hfv34KDw9X+/btNWDAABUXF9e5tvrqPeAJ\njmTDcidOnFB6ero6deqkiRMn6sSJE1q+fLnGjh0rp9Ophx56yDU3KytLS5YsUXx8vLKzsxUUFKR3\n3nlHv/71r+VwOLRy5UrZ7ed/F9y9e7f69+8vu92uESNGqGfPnqqsrNTBgwe1ePFiPfLII2rXrp3u\nu+8+SdLGjRt1++236/rrr5d0/hSSDh06SJKqq6t1xx136N1331ViYqLuvvtuhYSE6IMPPlBeXp7e\nf/99rV692pVd4/Tp0xoyZIgqKip0yy23KCwsTPHx8a77r+sUld/97neaPXu2rrrqKo0bN04dOnSQ\nw+HQrFmz9M4772jTpk0KDw93za+5nylTpmjLli269dZbNWLECLVr187C7xIANA0Nec6QpP3796t/\n//7q06ePsrKydPLkSYWFhUlSnTX47Nmz+rd/+zetX79eiYmJmjx5ss6cOaM333xTEydO1IcffqhF\nixbV2u5y9R7wiAEscujQIWOz2Yzdbjfjxo1zu+3zzz83HTp0MCEhIebIkSPGGGPeeOMNY7PZTL9+\n/UxlZaVrblVVlbnpppuM3W43zz77rGv8kUceMXa73fz973+vlV1ZWWnOnDnj+vyJJ54wdrvdLF68\nuM61zpo1y9hsNjN16lRz7tw5t9seeOABY7fbzQsvvOA2XrNvN998szl16lSt+5wwYYKx2+3m8OHD\nrrGPP/7Y2Gw207VrV1NWVuY2f/z48cZut5spU6a4jWdkZBibzWbi4+NdXysAaGka+pyxYcMG1/yZ\nM2fWeZ/du3c3PXr0cBubN2+esdlsZvjw4aaqqso1fvLkSZOUlGTsdrtZsWKF2zb11XvAE5wuAssF\nBARo7ty5bmM9evRwHT1YsmSJpPOnidhsNs2dO9ftSG5gYKDy8/NljNGf/vSnWvcfEhJSayw8PFxB\nQUEerc8Yo4KCAkVHRys/P7/WkY/f//73kqTXX3+9zu2feeaZOtdQl5p9zMvLq3W+9vz58xUSEqJX\nX31V1dXVbrfZbDY99thj6tKli0c5ANBcefqcUSM6OlozZ870+P5r6vBzzz2nwMAfXsBv166d5s6d\ne8nnGqlh9R64GKeLwHJdu3ZVt27dao3/7Gc/09y5c7Vjxw5Jcv2bkZFRa27fvn0VFRWlffv26bvv\nvlNYWJjGjBmj559/Xj//+c81cuRI3XTTTRowYIASExMbtL59+/bp2LFj+tGPfqRZs2bVut0Yo9DQ\nUJWWlta6LSQkRElJSR5n1ezj4MGDa90WFRWlvn37qqSkRPv27dO1117rdntaWprHOQDQXHn6nFEj\nOTnZ44MqlZWVOnDggGJiYtS7d+9at990002SpO3bt9e6raH1HrgYTTYsd6krbNSMV1RUuP6NiIhQ\nmzZt6pwfGxurL7/8UhUVFa4/hPnwww/19NNP66233tLSpUtljFH37t312GOP6YEHHvBofV999ZUk\n6cCBA64/kKxLXef2RUVFeZRRo2ZfY2Ji6rw9NjZWkvT111/Xuu1S2wBAS+Lpc0aNhtTG+mpwaGio\nIiIi6qzBDa33wMU4XQSWKy8vv+x4RESE69+KigqdPn26zvlOp9NtviTdeOONeuutt3TixAl9/PHH\nmj17tr7//ntNnjy51kuKl1Jzf7fddpuqq6sv+VHX1U0aeu3tmqyysjKP97GxWQDQHHn6nFGjIbWx\nvhp86tQp1wGfi1GDcaVosmG5I0eO1HkZuw0bNkiSbrjhBrd/a8YvtGfPHv3rX/9SYmKi66/GLxQY\nGKi0tDTl5eVp8eLFMsbob3/7m+v2gIAASap1rrMk9e7dWx06dNB///d/19lIW6lmH9evX1/rti+/\n/FJ79uxReHh4g095AYCWwtPnjMZo27atfvSjH6m8vFyffvpprdvXrVsnSUpNTW10BnApNNmwXHV1\ntR577DG3N4Q5cOCAioqKFBwcrLvvvluSNHHiRBljlJeX53a96LNnz2ratGmy2WyaNGmSa/yjjz7S\n999/Xyuv5mjwhX88edVVV8kYU2fhDggI0EMPPaSysjJNnjxZp06dqjXnq6++0q5duxqx9+6ys7Nl\njNHTTz9d62jNo48+qu+++04TJkxw/VIAAK2Np88ZjVXzXPPII4+4HVg5efKk8vLyaj3XAFbhnGxY\n7rrrrtN//dd/KTU1VcOGDdNXX32lv/zlLzp58qTy8/PVtWtXSdKYMWP0zjvv6M9//rP69OmjO+64\nw3Wd7P3792vo0KHKzc113e/8+fO1bt06/eQnP1GPHj3Uvn177du3T++++67Cw8PdrqU6ZMgQ2e12\n/fGPf9SxY8dc5+NNnTpV7dq104wZM7Rnzx69/PLLWrlypW666SbFx8fryy+/1IEDB7R582b96le/\n0nPPPXdFX4sf//jHmj59uubNm6ekpCSNGjVKERERcjgc2r59u5KTk/X0009fUQYANGeePmc01rRp\n07R69WqtXr1affv21YgRI1RVVaUVK1bo6NGjGj9+PG/2Be/w9Fp/CxcuND169DAhISEmJSXFbNq0\n6ZJza659eeGH3W43a9asafS1BtH01XzfBw8ebP75z3+aX/ziFyYqKsqEhoaatLQ0s3z58jq3e+ml\nl0z//v1N27ZtTVhYmLn++uvNs88+63Y9U2OMcTgcZuLEiSYpKcl07NjRhIeHm2uuucY88MADZu/e\nvbXu94033jCpqakmPDzc2O32Wtewrplz8803m8jISNOmTRvTuXNnM2DAAPPkk0+azz77zG2uzWYz\n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\nQ3126kJrRH3/gb/quz9qu0R9p7638PruldbdC44ePWpsNpvZtGmT2/hTTz1levfu7dO1+PtIx6hR\no0xKSoq4+/EQAAAFBUlEQVQ5d+6czzJ3795t2rZtawIDA03Hjh3Ne++955Pcl156yaSmpprq6mpj\njPHpkY7Vq1ebv/zlL2b37t1m3bp1JiMjw8TExJjjx497PTskJMSEhoaavLw8s3PnTvPqq6+atm3b\nmoULF3o9+2Jr1qwxdrvd7N6922eZv/3tb43dbjdBQUHGbrf79CjywIEDzU9/+lPzz3/+01RXV5vX\nX3/dBAQE+LzOtCbU9x/4ur77q7YbQ32nvrf8+k6T3Qj+LMIPP/ywiYuLM4cOHfJpblVVlTlw4IDZ\nvn27ycvLM5GRkeaTTz7xaubevXvN1Vdfbfbt2+ca82URvti3335roqKiTH5+vtezgoODa72cmJeX\nZ/r06eP17Ivdddddpn///j7L+/Of/2y6du1qli9fbvbs2WOWLFliOnXqZF555RWf5H/++ecmIyPD\n2Gw2ExQUZPr372/uvfdev3ztWwvq+3n+qO/+qO3GUN+p762jvjebJvvMmTMmMDDQ/PWvf3Ubf/DB\nB01GRoZP1+KvIpybm2s6d+7sVpT8ZejQoWbSpElezXj11VeN3W43gYGBrg+bzeb6DfjMmTNeza/L\n4MGDzeTJk72e061bN/PLX/7Sbez11183bdu29Xr2hf71r3+Z4OBg8/LLL/sss0uXLmbBggVuY7Nn\nzza9evXy2RqMMea7774zZWVlxhhjxowZY0aMGOHT/NaE+t506rsvarsx1Hfq+w9acn1vNudkX/j2\nvxdyOBxKT0/306p856GHHtKyZcu0fv169erVy9/L0blz53T69GmvZtxxxx3avXu3du3a5fpITU3V\nuHHjtGvXLgUFBXk1/2Lff/+9Pv30U8XGxno9Kz093XXOWo29e/fWettqbysuLlZISIjGjh3rs8zv\nvvtOdrt7abLb7T67xFON0NBQRUdH68SJE1qzZo1uv/12n+a3JtT3plPffVHbJeo79f0HLbq+e6V1\n95Jly5aZNm3amEWLFpnS0lIzdepU065dO3PkyBGvZ1dWVpqdO3eaHTt2mLCwMDNr1iyzc+dOn2RP\nnjzZtG/f3qxfv96UlZW5PiorK72ebYwxjz/+uNm0aZM5dOiQ2b17t3n88cdNQECAWbNmjU/yL+TL\nlxN//etfmw8++MAcPHjQfPzxx+bWW281ERERPvmel5SUmODgYDNnzhzz2WefmeXLl5uIiAhTVFTk\n9ewLXXPNNbWu+OBtEyZMMF26dDErV640hw4dMm+++aa5+uqrzW9+8xuf5K9Zs8asWrXKHDx40Pzj\nH/8w119/vRk4cKA5e/asT/JbK+q77+t7U6rtxlDfqe/e5+v63qyabGOMKSoqMj169DAhISEmNTXV\nbN682Se5GzZscL2UdeHHfffd5/XsunLtdrt58sknvZ5tzPkHRffu3U1ISIiJjo42mZmZxuFw+CT7\nYoMHD/ZZER47dqyJi4szbdq0MfHx8eauu+4ypaWlPsk2xpj33nvPJCcnm9DQUJOYmGheeOEFn2Ub\nY8z69euN3W43W7du9WluZWWlefjhh0337t1NWFiY6dmzp5kxY4Y5ffq0T/KXL19uevbsaUJCQkzn\nzp3N1KlTzcmTJ32S3dpR331b35tSbTeG+u5L1Hff1HfeVh0AAACwWLM5JxsAAABoLmiyAQAAAIvR\nZAMAAAAWo8kGAAAALEaTDQAAAFiMJhsAAACwGE02AAAAYDGabAAAAMBi/w/fVMd4x7UVBQAAAABJ\nRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1126,16 +1147,16 @@ } ], "source": [ - "predict(belief, 1, kernel)\n", - "update(hallway, belief, z=0, prob_correct=.75)\n", - "bp.bar_plot(belief)" + "kernel = (.1, .8, .1)\n", + "prior = predict(posterior, 1, kernel)\n", + "bp.plot_prior_vs_posterior(prior, posterior, True, ylim=(0,.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This is exciting! We have a very prominent bar at position 2 with a value of around 35%. It is over twice the value of any other bar in the plot, and is about 4% larger than our last plot, where the tallest bar was around 31%. Let's see one more sense->update cycle." + "The predict step shifted these probabilities to the right, smearing them about a bit. Now let's look at what happens at the next sense." ] }, { @@ -1147,9 +1168,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAACeCAYAAAD5RibQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGh1JREFUeJzt3X9QlWX+//EX4K+DEZNLEAgKlKurEiknNk6U7g6dWbOs\nnVbMdlXQ1mDKRMZy2XTalHTNHUoNcNccZW0t26l1m2RdaPyBrDQLIq2Zura05g6c0+oWsqzKCPfn\nD7+eb6eD/Mhb7oM8HzPOwHVfN/f7vAdmXuf2OtcdYBiGIQAAAABXLdDqAgAAAIDrBeEaAAAAMAnh\nGgAAADAJ4RoAAAAwCeEaAAAAMAnhGgAAADAJ4RoAAAAwSZfhuqKiQtOmTVN0dLQCAwNVUlLS5Q89\nfPiwJk2apODgYEVHR2vFihWmFAsAAAD4sy7DdUtLi26//XatXbtWNptNAQEBnc4/e/as7rvvPkVG\nRqqmpkZr167VmjVrVFBQYFrRAAAAgD8K6MkTGkNCQlRYWKjZs2dfcU5xcbHy8vLkdrs1ePBgSdKL\nL76o4uJi/etf/7r6igEAAAA/Zfqa66qqKt1zzz2eYC1JTqdTDQ0NOnnypNmXAwAAAPzGALN/oMvl\n0ogRI7zGIiIiPMdGjhzpGW9qajL78gAAAECvCQ0N9fre9DvXXa3JBgAAAK5XpofrW265RS6Xy2vM\n7XZ7jgEAAADXK9OXhaSkpGjJkiW6cOGCZ911eXm5hg8f7rUk5Ou+fkvdbDU1NZIku91+Ta/Tl9AT\nX/TEFz3xRU980RNf9MQXPfFFT7z1lX50trS5W1vx1dXVqa6uTu3t7Tp58qTq6up06tQpSVJeXp7S\n0tI88x977DEFBwcrIyNDR44c0TvvvKPVq1crNzfXhJcCAAAA+K8uw3V1dbUmTpyoiRMn6vz583r+\n+ec1ceJEPf/885IufUixvr7eM//GG29UeXm5GhoaZLfbtWDBAi1evFiLFi26dq8CAAAA8ANdLguZ\nPHmy2tvbr3h88+bNPmPjx4/Xvn37rq4yAAAAoI8x/QONAAAAQH9FuAYAAABMQrgGAAAATEK4BgAA\nAExCuAYAAABMQrgGAAAATEK4BgAAAExCuAYAAABMQrgGAAAATEK4BgAAAExCuAYAAABMQrgGAAAA\nTEK4BgAAAEzSrXBdVFSkuLg42Ww22e12VVZWdjr/z3/+s1JSUnTjjTfq5ptv1sMPP6wTJ06YUjAA\nAADgr7oM19u3b1dOTo6WLl2quro6ORwOTZkyRadOnepw/qeffqqHHnpIkyZNUl1dnd5//32dP39e\n999/v+nFAwAAAP6ky3BdUFCgzMxMzZs3T6NHj9a6desUGRmp4uLiDucfPHhQFy9e1KpVqxQfH6/E\nxEQtWbJE//jHP/Sf//zH9BcAAAAA+ItOw3Vra6tqa2vldDq9xp1Opw4cONDhOcnJyRo4cKA2btyo\ntrY2NTc3a8uWLUpOTtawYcPMqxwAAADwMwGGYRhXOtjQ0KDo6GhVVFQoNTXVM758+XJt27ZNx44d\n6/C8/fv3a/r06Tpz5oza29s1YcIE/elPf9LNN9/sNa+pqcnzNWuyAQAA0BeMGjXK83VoaKjXMdN3\nC3G5XJo3b57mzJmjmpoa7d27VyEhIUpPT1cnOR4AAADo8wZ0djAsLExBQUFyu91e4263W5GRkR2e\nU1hYqJCQEK1evdoz9vrrrysmJkZVVVVyOBwdnme323tae4/U1NT0ynX6Enrii574oie+6IkveuKL\nnviiJ77oibe+0o+vrr74uk7vXA8aNEhJSUkqKyvzGi8vL79iSD537pwCA71/7OXv29vbu1UwAAAA\n0Bd1uSwkNzdXW7Zs0aZNm3T06FEtXLhQLpdLWVlZkqS8vDylpaV55k+dOlW1tbVasWKFTpw4odra\nWmVmZmrEiBFKSkq6dq8EAAAAsFiny0IkKT09XWfOnFF+fr4aGxuVkJCg0tJSxcTESLq0xrq+vt4z\n/3vf+562bduml156SS+99JKCg4OVkpKiXbt2yWazXbtXAgAAAFisy3AtSdnZ2crOzu7w2ObNm33G\nZsyYoRkzZlxdZQAAAEAfY/puIQAAAEB/RbgGAAAATEK4BgAAAExCuAYAAABMQrgGAAAATEK4BgAA\nAExCuAYAAABMQrgGAAAATEK4BgAAAExCuAYAAABMQrgGAAAATEK4BgAAAExCuAYAAABM0q1wXVRU\npLi4ONlsNtntdlVWVnZ5ziuvvKIxY8ZoyJAhioqKUl5e3lUXCwAAAPizAV1N2L59u3JyclRcXKzU\n1FQVFhZqypQp+vjjjxUTE9PhObm5udq5c6d+9atfKSEhQU1NTWpsbDS9eAAAAMCfdBmuCwoKlJmZ\nqXnz5kmS1q1bp127dqm4uFgrV670mX/8+HG9+uqrOnz4sEaPHu0ZT0xMNLFsAAAAwP90uiyktbVV\ntbW1cjqdXuNOp1MHDhzo8Jw//vGPio+PV2lpqeLj4xUXF6eMjAz9+9//Nq9qAAAAwA8FGIZhXOlg\nQ0ODoqOjVVFRodTUVM/48uXLtW3bNh07dsznnKysLJWUlOiOO+7QmjVrJEmLFy+WJFVVVSkgIMAz\nt6mpyfP1iRMnrv7VAAAAANfYqFGjPF+HhoZ6HetyWUhPtbe368KFC9q6datuu+02SdLWrVs1evRo\n1dTU6M477zT7kgAAAIBf6DRch4WFKSgoSG6322vc7XYrMjKyw3MiIyM1YMAAT7CWpNtuu01BQUH6\n7LPPrhiu7XZ7T2vvkZqaml65Tl9CT3zRE1/0xBc98UVPfNETX/TEFz3x1lf68dXVF1/X6ZrrQYMG\nKSkpSWVlZV7j5eXlcjgcHZ6Tmpqqixcvqr6+3jNWX1+vtrY2jRw5sid1AwAAAH1Kl/tc5+bmasuW\nLdq0aZOOHj2qhQsXyuVyKSsrS5KUl5entLQ0z/y0tDRNnDhRc+fOVV1dnQ4dOqS5c+fqrrvu8vt3\nIQAAAMDV6HLNdXp6us6cOaP8/Hw1NjYqISFBpaWlnj2uXS6X113qgIAAvffee3r66ad17733ymaz\nyel0qqCg4Nq9CgAAAMAPdOsDjdnZ2crOzu7w2ObNm33GbrnlFr311ltXVxkAAADQx3Tr8ecAAAAA\nuka4BgAAAExCuAYAAABMQrgGAAAATEK4BgAAAExCuAYAAABMQrgGAAAATEK4BgAAAExCuAYAAABM\nQrgGAAAATEK4BgAAAExCuAYAAABMQrgGAAAATNKtcF1UVKS4uDjZbDbZ7XZVVlZ264efOHFCISEh\nCgkJuaoiAQAAgL6gy3C9fft25eTkaOnSpaqrq5PD4dCUKVN06tSpTs9rbW3Vo48+qkmTJikgIMC0\nggEAAAB/1WW4LigoUGZmpubNm6fRo0dr3bp1ioyMVHFxcafnLVmyRHfccYemT58uwzBMKxgAAADw\nV52G69bWVtXW1srpdHqNO51OHThw4Irn7dy5Uzt37tT69esJ1gAAAOg3BnR28PTp02pra1NERITX\neHh4uFwuV4fnNDQ0aP78+dqxY4eCg4O7XUhNTU23516N3rpOX0JPfNETX/TEFz3xRU980RNf9MQX\nPfHm7/0YNWrUFY+ZvlvIrFmzlJ2drTvvvNPsHw0AAAD4tU7vXIeFhSkoKEhut9tr3O12KzIyssNz\n9uzZo4qKCr3wwguSJMMw1N7eroEDB6q4uFiPP/54h+fZ7fZvUn+3XX4HdK2v05fQE1/0xBc98UVP\nfNETX/TEFz3xRU+89ZV+NDU1XfFYp+F60KBBSkpKUllZmR555BHPeHl5uaZPn97hOR999JHX9zt2\n7NCLL76o6upqRUVF9aRuAAAAoE/pNFxLUm5urmbNmqXk5GQ5HA5t2LBBLpdLWVlZkqS8vDxVV1fr\n/ffflySNHTvW6/y//vWvCgwM9BkHAAAArjddhuv09HSdOXNG+fn5amxsVEJCgkpLSxUTEyNJcrlc\nqq+v7/RnsM81AAAA+oMuw7UkZWdnKzs7u8Njmzdv7vTcjIwMZWRk9LgwAFdWf7pZDS0Xe+VazUPC\nJUmVJ7/oletJUtTQAYoP48muAIC+p1vhGoB/aWi5qAUVp3v5qhd67Urr7w1TfFivXQ4AANOYvhUf\nAAAA0F8RrgEAAACTEK4BAAAAkxCuAQAAAJMQrgEAAACTEK4BAAAAkxCuAQAAAJMQrgEAAACTEK4B\nAAAAkxCuAQAAAJMQrgEAAACTEK4BAAAAk3Q7XBcVFSkuLk42m012u12VlZVXnLt371499NBDioqK\n0tChQ5WYmKjNmzebUjAAAADgr7oVrrdv366cnBwtXbpUdXV1cjgcmjJlik6dOtXh/KqqKiUmJurt\nt9/WkSNHlJ2drfnz5+uNN94wtXgAAADAnwzozqSCggJlZmZq3rx5kqR169Zp165dKi4u1sqVK33m\n5+XleX2flZWlPXv26O2339bMmTNNKBsAAADwP13euW5tbVVtba2cTqfXuNPp1IEDB7p9oaamJg0b\nNqznFQIAAAB9RJd3rk+fPq22tjZFRER4jYeHh8vlcnXrIu+99552797daRivqanp1s+6Wr11nb6E\nnvjy9540Dwm3uoRrqrm5WTU1/7C6jC75+++JFeiJL3rii574oife/L0fo0aNuuKxa75byF/+8hf9\n+Mc/1vr162W326/15QAAAADLdHnnOiwsTEFBQXK73V7jbrdbkZGRnZ5bWVmpqVOnasWKFXriiSc6\nnXutg/fld0AE/P+PnvjqKz2pPPmFpAtWl3HNhISEyD5+RI/OqT/drIaWi9eoIm/Nzc2SLtXZG6KG\nDlB8WO9c65vqK387vYme+KInvuiJt77Sj6ampise6zJcDxo0SElJSSorK9MjjzziGS8vL9f06dOv\neF5FRYUeeOABLV++XE8//XQPSwaAnmlouagFFad7+aq98wZn/b1hig/rlUsBAK5St3YLyc3N1axZ\ns5ScnCyHw6ENGzbI5XIpKytL0qXdQaqrq/X+++9LurTP9dSpU/XUU09p5syZnrXZQUFBuvnmm6/R\nSwEAAACs1a1wnZ6erjNnzig/P1+NjY1KSEhQaWmpYmJiJEkul0v19fWe+SUlJTp//rzWrFmjNWvW\neMZjY2O95gEAAADXk26Fa0nKzs5WdnZ2h8e+/vTFzZs380RGAAAA9DvXfLcQAAAAoL8gXAMAAAAm\nIVwDAAAAJiFcAwAAACbp9gcaASv11gNCLj9W/NJDWnpHX3hACAAA6B7CNfqE3n9ASO89/ZAHhAAA\ncP1gWQgAAABgEsI1AAAAYBKWhQDAdaq3Pqsg9f7nFfisAgB/RbgGgOtU739WQeqtzyvwWQUA/opl\nIQAAAIBJuHMNAOg3WCrji54A5vKbcH2t/9DYvxgAwFIZX/QEMFe3wnVRUZHWrFkjl8ulcePG6ZVX\nXlFqauoV5x8+fFhPPfWUqqurNWzYMD3xxBNatmxZp9fovT9s9i8GAADoCR7m1n1dhuvt27crJydH\nxcXFSk1NVWFhoaZMmaKPP/5YMTExPvPPnj2r++67T5MnT1ZNTY2OHj2qzMxMDR06VLm5uaYVDgAA\ngN7Bw9y6r8twXVBQoMzMTM2bN0+StG7dOu3atUvFxcVauXKlz/zf/e53On/+vEpKSjR48GCNHTtW\nx44dU0FBAeG6m3h3CAAA0Dd1Gq5bW1tVW1urZ5991mvc6XTqwIEDHZ5TVVWle+65R4MHD/aav2zZ\nMp08eVIjR440oezrG+8OAQCwDh/yxNUIMAzDuNLBhoYGRUdHq6KiwmuN9fLly7Vt2zYdO3bM5xyn\n06kRI0botdde84x99tlnio2NVVVVlb773e96xpuamsx6HQAAAECvCw0N9fre9H2uAwICzP6RAAAA\nQJ/QabgOCwtTUFCQ3G6317jb7VZkZGSH59xyyy1yuVw+8y8fAwAAAK5Xna65HjRokJKSklRWVqZH\nHnnEM15eXq7p06d3eE5KSoqWLFmiCxcueNZdl5eXa/jw4T7rrb9+Gx0AAADoy7pcFpKbm6stW7Zo\n06ZNOnr0qBYuXCiXy6WsrCxJUl5entLS0jzzH3vsMQUHBysjI0NHjhzRO++8o9WrV7NTCAAAAK57\nXW7Fl56erjNnzig/P1+NjY1KSEhQaWmpZ49rl8ul+vp6z/wbb7xR5eXlevLJJ2W32zVs2DAtXrxY\nixYtunavAgAAAPADne4WAgAAAKD7TN8txF8VFRUpLi5ONptNdrtdlZWVVpdkmYqKCk2bNk3R0dEK\nDAxUSUmJ1SVZbtWqVbrzzjsVGhqq8PBwTZs2TUeOHLG6LEsVFhYqMTFRoaGhCg0NlcPhUGlpqdVl\n+Y1Vq1YpMDBQCxYssLoUS/3iF79QYGCg17+oqCiry7JUY2Oj5syZo/DwcNlsNo0bN04VFRVWl2WZ\n2NhYn9+RwMBAPfDAA1aXZpm2tjYtW7ZM8fHxstlsio+P17Jly9TW1mZ1aZZqbm5WTk6OYmNjFRwc\nrLvvvls1NTVWl9Vj/SJcX36E+9KlS1VXVyeHw6EpU6bo1KlTVpdmiZaWFt1+++1au3atbDYb2ydK\n2rdvn5566ilVVVVp9+7dGjBggNLS0vTFF7339Ep/ExMTo5deekmHDh3SwYMH9f3vf18PP/ywDh8+\nbHVplvvggw+0ceNG3X777fz9SBozZoxcLpfnX3/+Hfnyyy919913KyAgQKWlpTp27JheffVVhYeH\nW12aZQ4ePOj1+1FbW6uAgADNmDHD6tIss3r1ahUVFWn9+vU6fvy41q5dq6KiIq1atcrq0iz1+OOP\nq7y8XL/97W/10Ucfyel0Ki0tTQ0NDVaX1jNGP5CcnGzMnz/fa2zUqFFGXl6eRRX5jxtuuMEoKSmx\nugy/89///tcICgoy3nvvPatL8SvDhg0zfvOb31hdhqW+/PJL49ZbbzX27t1rTJ482ViwYIHVJVnq\n+eefN8aPH291GX4jLy/PSE1NtboMv5afn2/cdNNNxvnz560uxTJTp041MjIyvMZmz55tPPjggxZV\nZL3//e9/xoABA4x3333XazwpKclYunSpRVV9M9f9nevLj3B3Op1e4509wh04e/as2tvbddNNN1ld\nil9oa2vTm2++qZaWFjkcDqvLsdT8+fM1ffp0TZo0SQYfWZEk1dfXa/jw4YqPj9fMmTP16aefWl2S\nZXbs2KHk5GTNmDFDERERmjBhggoLC60uy28YhqFNmzbpJz/5iWe73v7onnvu0e7du3X8+HFJ0scf\nf6w9e/bo/vvvt7gy61y8eFFtbW0+vxdDhgzpc0t5u9wtpK87ffq02traFBER4TUeHh7u87Ab4LKF\nCxdqwoQJSklJsboUSx0+fFgpKSm6cOGCbrjhBv3hD3/QuHHjrC7LMhs3blR9fb22bdsmiSfSStJd\nd92lkpISjRkzRm63W/n5+XI4HDpy5IiGDRtmdXm9rr6+XkVFRcrNzdXPf/5zHTp0yLMu/8knn7S4\nOuuVl5frn//8p376059aXYqllixZorNnz2rs2LEKCgrSxYsXtXTpUs82x/1RSEiIUlJSlJ+fr/Hj\nxysiIkJvvPGGPvjgA40aNcrq8nrkug/XQE/l5ubqwIEDqqys7PfhacyYMfrb3/6mpqYm/f73v9fs\n2bO1d+/efhmwjx8/rueee06VlZUKCgqSdOkuXH+/e/2DH/zA8/X48eOVkpKiuLg4lZSU9MstWNvb\n25WcnKwXX3xRkpSYmKgTJ06osLCQcK1Lb1CTk5OVkJBgdSmWevPNN7V161a98cYbGjdunA4dOqSF\nCxcqNjZWc+fOtbo8y2zdulVz585VdHS0goKClJSUpJkzZ+rgwYNWl9Yj1324/iaPcEf/tWjRIr31\n1lvas2ePYmNjrS7HcgMHDlR8fLwkacKECaqurtbLL7+s1157zeLKel9VVZVOnz7t9caira1N+/fv\n169//Wu1tLRo4MCBFlboH4KDgzVu3Dh98sknVpdiiaioKI0dO9ZrbMyYMfrss88sqsh/fP7553r3\n3XdVVFRkdSmWe+aZZ/Tss88qPT1dkjRu3DidPHlSq1at6tfhOj4+Xnv37tW5c+d09uxZRUREaMaM\nGbr11lutLq1Hrvs11199hPtXlZeX9/u1o/C2cOFCbd++Xbt379a3v/1tq8vxS21tbWptbbW6DEv8\n8Ic/1EcffaQPP/xQH374oerq6mS32zVz5kzV1dURrP+f8+fP6+jRo/325sXdd9+tY8eOeY39/e9/\n5826pC1btmjIkCGaOXOm1aVY7ty5cwoM9I5ggYGB/f5/wi6z2WyKiIjQF198obKyMj300ENWl9Qj\n1/2da+nSf/PPmjVLycnJcjgc2rBhg9cj3PublpYWnThxQtKl/8I8efKk6urq9K1vfcvz5M3+5skn\nn9Trr7+uHTt2KDQ01LMePyQkREOHDrW4Omv87Gc/0wMPPKDo6Gg1Nzdr27Zt2rdvX7/d6/ryft9f\nFRwcrJtuusnnTmV/snjxYk2bNk0xMTH6/PPPtWLFCp07d05z5syxujRLLFq0SA6HQytXrlR6eroO\nHTqk9evX9/st1gzD0GuvvaZHH31UwcHBVpdjuQcffFC//OUvFRcXp7Fjx+rQoUN6+eWX++3fzWVl\nZWVqa2vTmDFj9Mknn+iZZ57Rd77zHWVmZlpdWs9YuVVJbyoqKjJiY2ONwYMHG3a73di/f7/VJVlm\nz549RkBAgBEQEGAEBgZ6vs7MzLS6NMt8vReX/73wwgtWl2aZjIwMY+TIkcbgwYON8PBw47777jPK\nysqsLsuvsBWfYTz66KNGVFSUMWjQIGP48OHGj370I+Po0aNWl2WpnTt3GomJicaQIUOM0aNHG+vX\nr7e6JMvt3r3bCAwMNKqrq60uxS80NzcbOTk5xsiRIw2bzWbEx8cbzz33nHHhwgWrS7PUW2+9Zdx6\n663G4MGDjcjISGPBggXG2bNnrS6rx3j8OQAAAGCS637NNQAAANBbCNcAAACASQjXAAAAgEkI1wAA\nAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASf4POvPwhtmQSYUAAAAASUVORK5CYII=\n", + "image/png": "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\nje3bt2Pw4MF1WyUREcnOHuq74XopJu+7XMujbtdq9pI/eSLYs5YRRNToqYQQ4kETDAYD/Pz8sG/f\nPnTv3t00PnfuXKxduxa5ubnVHhsZGYlDhw7hzp07eOWVV/D5559XmlNYWGj6/alTp+ryGoiI6rV2\n7dqZfu/h4WHDlZizh/r+m7MX4g7Xrmmurfmdm6DlrV8VzSCi+qem2q7o7iIbNmzA4cOHsXbtWmzd\nupXX6xERNRKs70RED1bj5SKenp5Qq9UwGo1m40ajET4+Pg881s/PDwDQvn17lJaWYvz48Xj77bch\nSVX39lqt1qJFZ2Vl1Wq+nGyZbet8e822db69Zts6X87se8/o1if2UN/vXl+t7Jlsd3d3aEPbPNRz\n8N+a/WXbOt9es+XMr6m213gm29HREeHh4dDr9Wbjer0ekZGRFi+krKzM9EFERLbH+k5EpByLdheZ\nNm0axowZg4iICERGRiI5ORkGgwExMTEAgJkzZyIzMxM7d+4EAKxZswbOzs7o1KkTnJyckJmZibi4\nOAwdOhSOjo7KvRoiIqoV1nciImVY1GQPGzYMBQUFiI+Ph8FgQGhoKFJTU017qObn5yMvL++PJ3Vw\nwIIFC3D69GkIIdC2bVtMnjwZsbGxyrwKIiKqE9Z3IiJlWNRkA0BMTIzpzMb9UlJSzD4fMWIERowY\n8XArIyIiq2B9JyKSn6K7ixARERER2SM22UREREREMmOTTUREREQkMzbZREREREQyY5NNRERERCQz\nNtlERERERDJjk01EREREJDM22UREREREMmOTTUREREQkMzbZREREREQyY5NNRERERCQzNtlERERE\nRDJjk01EREREJDOLm+ykpCQEBQVBo9FAq9UiPT292rl79+7F4MGD0apVK7i6uiIsLAwpKSmyLJiI\niOTF+k5EJD+Lmuz169cjNjYWs2bNwpEjR9CtWzf0798fFy9erHJ+RkYGHn/8cWzcuBHHjh3Dq6++\nigkTJmDdunWyLp6IiB4O6zsRkTIcLJmUkJAAnU4HnU4HAEhMTMT27duRnJyM+Pj4SvNnzpxp9nlM\nTAzS0tKwceNGjBgxQoZlExGRHFjfiYiUUeOZ7JKSEhw8eBB9+vQxG+/bty8yMjIsDioqKkLz5s1r\nv0IiIlIE6zsRkXJUQgjxoAkGgwF+fn7Yt28funfvbhqfO3cu1q5di9zc3BpDtmzZgiFDhiAjIwPh\n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\nSZJktS2eKmg0Gnh7e+Pq1avYsWMHBg8ebNV8e8L6Xn/quzVqO8D6zvr+h0Zd3xVp3RWyfv160aRJ\nE7Fs2TKRm5srpkyZItzd3cWFCxcUzy4uLhZHjhwRhw8fFi4uLmLu3LniyJEjVsmeNGmSaNq0qUhL\nSxP5+fmmj+LiYsWzhRDinXfeEfv37xfnzp0T2dnZ4p133hFqtVrs2LHDKvn3suaPE998802xd+9e\nkZeXJw4cOCAGDhwoPDw8rPJnnpmZKZycnER8fLw4ffq02LBhg/Dw8BDJycmKZ9/rscceq7Tjg9Ki\no6NF69atxdatW8W5c+fEpk2bRMuWLcVbb71llfwdO3aI1NRUkZeXJ3788UfxxBNPiG7duonS0lKr\n5Nsr1nfr1/f6VNuFYH1nfVeetet7g2qyhRAiOTlZBAYGCmdnZ6HVakV6erpVcvfs2WP6Uda9Hy+/\n/LLi2VXlSpIk3n//fcWzhbj7jyIgIEA4OzsLb29v0adPH6HX662Sfb8ePXpYrQiPGDFC+Pn5iSZN\nmgh/f3/x4osvitzcXKtkCyHEtm3bRFhYmNBoNCIkJER89tlnVssWQoi0tDQhSZLIysqyam5xcbF4\n4403REBAgHBxcRHBwcFi1qxZ4vbt21bJ37BhgwgODhbOzs6iVatWYsqUKaKoqMgq2faO9d269b0+\n1XYhWN+tifXdOvWdt1UnIiIiIpJZg7kmm4iIiIiooWCTTUREREQkMzbZREREREQyY5NNRERERCQz\nNtlERERERDJjk01EREREJDM22UREREREMmOTTUREREQks/8DOmbbjPms7c4AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1157,16 +1178,73 @@ } ], "source": [ - "predict(belief, 1, kernel)\n", - "update(hallway, belief, z=0, prob_correct=.75)\n", - "bp.bar_plot(belief)" + "likelihood = lh_hallway(hallway, z=1, z_prob=.75)\n", + "posterior = update(likelihood, prior)\n", + "bp.plot_prior_vs_posterior(prior, posterior, ylim=(0,.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here things have degraded a bit due to the long string of wall positions in the map. We cannot be as sure where we are when there is an undifferentiated line of wall positions, so naturally our probabilities spread out a bit." + "Notice the tall bar at position 1. This corresponds with the (correct) case of starting at position 0, sensing a door, shifting 1 to the right, and sensing another door. No other positions make this set of observations as likely. Now lets add an update and then sense the wall." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlYlOX+P/D3PCwyLKJGLIKKkKEejAyIdKhwPy6dLFPR\njkpoSpaKWBmkHQsR85gUJniVhttlYump3BsVFyLPAVyOeHBH/ZYDiQuIuQDevz/6MTmCMsDzzADz\nfl0XV3LP/cz7HqHPfHzmmXtUQggBIiIiIiKSjWTuBRARERERNTdssomIiIiIZMYmm4iIiIhIZmyy\niYiIiIhkxiabiIiIiEhmbLKJiIiIiGTGJpssjre3N3x8fMy9DCIiagIiIiIgSRIuXLhg7qVQE8Mm\nmyyOSqWCSqUy9zKIiKiO5syZA0mSsGrVKpNl8jmD6otNNlmc3bt3Y+fOneZeBhER1ZE5Gt758+cj\nPz8fnp6eJs2lps/a3AsgMrWOHTuaewlERFQP5viQajc3N7i5uZk8l5o+nsmmRu38+fOQJAm9e/fG\nxYsX8eqrr8LV1RX29vYIDg7G+vXrDebv3bsXkiQhMjISJ0+exPDhw+Hq6gorKyv897//BfDga7LL\ny8vxz3/+E927d4eDgwNatmyJHj16IC0trca1SZIEHx8flJaWIjo6Gt7e3rCxsUFycrL8fxFERGZS\n1zpcZdmyZejRowdatmwJBwcHPPXUU1i0aBEqKiqqzT169ChGjx4NHx8fqNVqPProowgICMCbb76J\n69evAwB69eqFjz76CMCf10lLkgQrKyuD66WFEFi2bBlCQ0PRqlUrqNVqdOvWDfPnz0d5eXm17Npq\n+cOuyd64cSN69eqlz+natSv+8Y9/4MaNG9XmhoWFQZIknDt3Dp999hm6desGtVqNl19+2YifAjVF\nPJNNTcLVq1eh0WjQpk0bjB8/HlevXsX69esRHh4OnU6HadOmGcw/deoUQkJC0LVrV4wdOxalpaWw\nt7cHgBpfaqyoqMBf//pXZGRkwM/PD5MnT8adO3ewceNGjB8/Hj/99BOWLVtW7bjbt2+jd+/eKCkp\nwaBBg2Bvbw8vLy9l/hKIiMyoLnV47NixWLNmDby8vBAZGQkbGxts2rQJb7/9NrRaLbZs2QJJ+uM8\n39GjRxESEgJJkjBkyBD4+vqirKwMBQUFWLlyJWbMmAEnJye89tprAIB9+/Zh6NChePLJJwH8UdNb\ntWoFAKisrMRLL72EzZs3w8/PD6NHj4adnR327t2LuLg47N69G9u3b9dnV3lYLX/QJSoffPAB5s6d\ni0ceeQSjRo1Cq1atoNVqER8fj02bNmH//v1wcHDQz6+6nylTpiArKwuDBw/GkCFD4OTkJONPiRoV\nQdSInTt3TqhUKiFJkhg1apTBbWfPnhWtWrUSdnZ24sKFC0IIIfbs2aOfP3v27Brv09vbW3Ts2NFg\nbP78+UKlUomBAweK8vJy/Xhpaanw9/cXkiSJDRs2GBxTlTNgwABx8+ZNOR4uEVGjU9c6vG7dOqFS\nqUT37t1FWVmZfm55ebno06ePkCRJfPLJJ/rxGTNmCEmSxA8//FAtu6ysTNy5c0f//Zw5c4QkSWLl\nypU1rjU+Pl6oVCoxdepUcffuXYPbJk2aJCRJEp9//rnBeG21PCIiQkiSJM6fP68fO3DggFCpVKJ9\n+/aisLDQYP64ceOEJEliypQpBuNhYWFCpVIJLy8v/d8VNW+8XISaBCsrKyQmJhqMdezYUX/Gec2a\nNQa3ubm5Yfbs2Ubf/7Jly6BSqbBo0SJYW//5Ao+TkxMSExMhhMCXX35Z47ELFy6EnZ1dHR4NEVHT\nY2wdrqqniYmJBmdyra2tkZSU9MB6WlMddXBwgI2NjVHrE0IgOTkZbm5uSEpKqnb2+eOPPwYArF69\nusbj61LLqx5jXFxcteu1FyxYADs7O6xYsQKVlZUGt6lUKsycORPt2rUzKoeaNl4uQk1C+/bt0aFD\nh2rjzz//PBITE3Ho0CGD8YCAAKMLc1lZGc6cOQN3d3d07ty52u19+vQBABw8eLDabXZ2dvD39zcq\nh4ioKTO2Dlf9NywsrNrcbt26wdXVFSdPnsTvv/8Oe3t7jBw5Ep999hlefPFFDBs2DH369EGPHj3g\n5+dXp/WdPHkSxcXFeOyxxxAfH1/tdiEE1Go18vPzq91W11pe9Rh79epV7TZXV1d069YN2dnZOHny\nJLp06WJwe3BwsNE51LSxyaYm4UHv7K4aLykpMRh3d3c3+r6rjn3QMWq1Gs7Ozrh27Vq121xdXY3O\nISJqyoytwyUlJXB2dkaLFi1qnO/h4YFLly6hpKRE/+bJn376CfPmzcN3332HtWvXQggBb29vzJw5\nE5MmTTJqfZcvXwYAnDlzRv8GyZrUdH11XWt5bc8bHh4eAFDj80Zdnp+oaePlItQkFBUVPXTc2dnZ\nYLwu+6hWHVtYWFjj7Tdv3tQ/adyPH1BARJbC2Drs7OyMkpIS3L59u8b5Op3OYD4APP300/juu+9w\n9epVHDhwAHPnzsWtW7cwefLkapcDPkjV/b3wwguorKx84FdNu5vUtZbX9rxR02OsbxY1XWyyqUm4\ncOFCjdsn7dmzBwDw1FNP1fu+HR0d8dhjj6GoqAjHjx+vdvuuXbsAAEFBQfXOICJq6oytw1X/rRq/\nV15eHn777Tf4+fnpd3y6l7W1NYKDgxEXF4eVK1dCCIF//etf+tutrKwAoNq1zgDQuXNntGrVCv/5\nz39qbKTlVPUYMzIyqt126dIl5OXlwcHBoc6XvFDzwiabmoTKykrMnDnT4IMIzpw5g9TUVNja2mL0\n6NENuv/x48dDCIEZM2YYFOfS0lLExcVBpVJhwoQJDcogImrKjK3DVfU0Li7OYL/oiooKxMTEVKun\nP//8M27dulUtr+ps8L1vnnzkkUcghKix2beyssK0adNQWFiIyZMn4+bNm9XmXL58GUeOHKnHozcU\nGRkJIQTmzZtX7Qz/u+++i99//x0RERH6fxSQZeI12dQkPPHEE/j3v/+NoKAg9O/fH5cvX8Y333yD\n0tJSJCUloX379g26/5iYGGzfvh3bt29Ht27dMGTIEJSXl2PDhg24ePEixo0bxw8MICKLZmwdHjly\nJDZt2oSvv/4aXbt2xUsvvaTfJ/vUqVPo27cvoqOj9fe7YMEC7Nq1C88++yw6duyIli1b4uTJk9i8\neTMcHBwM9t/u3bs3JEnCp59+iuLiYv31zVOnToWTkxNmzZqFvLw8LF++HFu2bEGfPn3g5eWFS5cu\n4cyZM8jMzMRbb72FRYsWNejv4plnnkFsbCzmz58Pf39/DB8+HM7OztBqtTh48CACAgIwb968BmVQ\nM2DsXn9LliwRHTt2FHZ2diIwMFDs37//gXOr9tS890uSJLFjx4567zVIlqnqd6lXr17i119/FX//\n+9+Fq6urUKvVIjg4WKxfv95g/p49e4QkSSIyMvKB9+nt7S18fHyqjd+5c0csWLBABAQECHt7e+Ho\n6CieeeYZ8dVXX9V4PyqVqsb7IWpqWN/pYepah6t88cUXIiQkRDg6Ogp7e3vx5JNPik8++cTgswiE\nEEKr1Yrx48cLf39/0bp1a+Hg4CAef/xxMWnSJHHixIlq97tu3ToRFBQkHBwchCRJ1fawrpozYMAA\n4eLiIlq0aCHatm0revToIT788ENx+vRpg7m11fKIiAhhZWVVLUMIIb799lsRFhYmnJ2dhZ2dnejS\npYv44IMPDPYHrxIWFvbA+6HmSSXEPa/7PEB6ejrGjBmDpUuXQqPRYMmSJUhLS0N+fn6Nn253/vx5\n+Pj4YMeOHXjiiSf0423atDHYg5ioNufPn0fHjh0RFhaG3bt3m3s5RM0O6zvVhnWYqH6MuiY7KSkJ\nkZGRiIyMhJ+fH5KTk+Hh4YHU1NQHHiOEQJs2beDq6qr/YgEmImpcWN+JiJRRa5NdXl6O3Nxc9OvX\nz2C8f//+yMrKeuixL7/8Mtzc3BAaGooNGzY0bKVERCQr1nciIuXUeuqhuLgYlZWV1Tahd3Nz029t\ndj9HR0d88skn0Gg0sLa2xvfff4+RI0di1apV1XaBuP9DRIjuVVpaCpVKhcrKSv6uULNQ07655sL6\nTsZgHSaqXU21XZHX9x555BFMnz5d//1TTz2Fy5cvY8GCBQ3eao0sS/v27XHlyhVzL4OI/j/Wd8vD\nOkxUP7VeLuLi4gIrK6tq+0AWFRXV6aNBn376aZw6daruKyQiIkWwvhMRKafWM9k2NjYIDAyEVqvF\nsGHD9ONarRbDhw83OujQoUPw8PB46BxjX0bNyckBYJ5P4DNntrnzLTXb3PmWmm3ufDmzG+tL7Kzv\nzG4M+Zaabe58S82WM7+22m7U5SIxMTEYO3YsgoODodFokJqaCp1Oh6ioKABAbGwssrOzsXPnTgDA\nqlWrYGNjg+7du0OSJPzwww9ITU3FggULGvRgiIhIXqzvRETKMKrJHjFiBK5cuYKEhATodDr4+/tj\n27Zt+j1UCwsLUVBQYHDM3LlzceHCBVhZWeHxxx9HWloaRo0aJf8jICKiemN9JyJShtFvfIyKitKf\n2bhfWlqawfdjx47F2LFjG7YyIiIyCdZ3IiL5GfVhNEREREREZDw22UREREREMmOTTUREREQkMzbZ\nREREREQyY5NNRERERCQzNtlERERERDJjk01EREREJDM22UREREREMmOTTUREREQkMzbZREREREQy\nY5NNRERERCQzNtlERERERDJjk01EREREJDOjm+yUlBT4+PhArVYjKCgImZmZRh136tQpODk5oWXL\nlvVeJBERKYf1nYhIfkY12enp6YiOjsasWbNw+PBh9OzZEwMHDsQvv/zy0OPKy8sxatQohIWFybFW\nIiKSGes7EZEyjGqyk5KSEBkZicjISPj5+SE5ORkeHh5ITU196HHvvvsuAgIC8Morr8iyWCIikhfr\nOxGRMmptssvLy5Gbm4t+/foZjPfv3x9ZWVkPPG7Lli3YunUrFi9e3PBVEhGR7FjfiYiUY13bhOLi\nYlRWVsLNzc1g3M3NDbt27arxmIsXL2LixIn4/vvvYW9vb/RicnJyjJ5bn/lyMme2ufMtNdvc+Zaa\nbe58ObI7deokw0rkx/rO7MaUb6nZ5s631Gw58mur7YrsLjJmzBhMnjwZQUFBAAAhhBIxRERkYqzv\nRETGqfVMtouLC6ysrFBUVGQwXlRUBHd39xqPycjIwP79+zFnzhwAfxThu3fvwtbWFikpKZgwYUKN\nx1UV7dpU/cvD2PlyMme2ufMtNdvc+Zaabe58ObNLSkoafB9KYH1ndmPIt9Rsc+dbarac+bXV9lqb\nbBsbGwQGBkKr1WLYsGH6ca1Wi+HDh9d4TF5ensH33333HebNm4fs7Gy0bdvWmHUTEZHCWN+JiJRT\na5MNADExMRg7diyCg4Oh0WiQmpoKnU6HqKgoAEBsbCyys7Oxc+dOAEDXrl0Njs/OzoYkSejSpYvM\nyyciooZgfSciUoZRTfaIESNw5coVJCQkQKfTwd/fH9u2bYOXlxcAoLCwEAUFBYoulIiI5Mf6TkSk\nDKOabACIiorSn9m4X1pa2kOPHTduHMaNG1e3lRERkUmwvhMRyU+R3UWIiIiIiCwZm2wiIiIiIpmx\nySYiIiIikhmbbCIiIiIimbHJJiIiIiKSGZtsIiIiIiKZGb2FHxERERnvTPF16G5UGDX3up0rACDz\n/NU6ZXg4WMPXxanOayMi5bHJJiIiUoDuRgWm7Cuu41G36zR78XMu8HWpYwQRmQQvFyEiIiIikhmb\nbCIiIiIimbHJJiIiIiKSGZtsIiIiIiKZsckmIiIiIpKZ0U12SkoKfHx8oFarERQUhMzMzAfOzc/P\nR+/eveHu7g61Wg1fX1+8//77KC8vl2XRREQkH9Z3IiL5GbWFX3p6OqKjo7F06VJoNBosWbIEAwcO\nRH5+Pry8vKrNt7W1RUREBLp3745WrVrhyJEjmDBhAiorKzF//nzZHwQREdUP6zsRkTKMarKTkpIQ\nGRmJyMhIAEBycjK2b9+O1NRUJCQkVJvv6+sLX19f/fft2rXDq6++iv3798u0bCIikgPrOxGRMmq9\nXKS8vBy5ubno16+fwXj//v2RlZVlVMjp06exfft2hIWF1WuRREQkP9Z3IiLlqIQQ4mETdDodPD09\nsW/fPoSGhurH4+PjsXbtWuTn5z/wWI1Gg4MHD+LOnTt4/fXXsXTp0mpzSkpK9H8+depUfR4DEVGj\n1qlTJ/2fnZ2dzbgSQ6zvyrpk54q4Q3X7BMe6mte9BR699ZuiGURUs9pqu6K7i6xfvx6HDh3C2rVr\nsWXLFl6vR0TUTLC+ExE9XK3XZLu4uMDKygpFRUUG40VFRXB3d3/osZ6engCAzp07o6KiAhMmTMC7\n774LSaq5tw8KCjJq0Tk5OXWaLydzZps731KzzZ1vqdnmzpcz+94zuo0J67uy2ZnnrwJQ9ky2k5MT\ngvzbN/h+mtPfe1PJNne+pWbLmV9bba/1TLaNjQ0CAwOh1WoNxrVaLTQajdELqays1H8REZH5sb4T\nESnHqN1FYmJiMHbsWAQHB0Oj0SA1NRU6nQ5RUVEAgNjYWGRnZ2Pnzp0AgDVr1sDOzg7dunWDra0t\nsrOzERcXh+HDh8PGxka5R0NERHXC+k5EpAyjmuwRI0bgypUrSEhIgE6ng7+/P7Zt26bfQ7WwsBAF\nBQV/3qm1NRITE3H69GkIIdChQwdMmTIF0dHRyjwKIiKqF9Z3IiJlGNVkA0BUVJT+zMb90tLSDL4P\nDw9HeHh4w1ZGREQmwfpORCQ/o5tsUsaZ4uvQ3agwev51O1cAVW+oMY6HgzV8XZzqvDYiIiIiqh82\n2Wamu1GBKfuK63Gk8e9YX/ycC3xd6hFBRERERPWi6D7ZRERERESWiE02EREREZHM2GQTEREREcmM\nTTYRERERkczYZBMRERERyYxNNhERERGRzNhkExERERHJjE02EREREZHM2GQTEREREcmMTTYRERER\nkczYZBMRERERyczoJjslJQU+Pj5Qq9UICgpCZmbmA+fu3bsXQ4cORdu2beHg4ICAgACkpaXJsmAi\nIpIX6zsRkfyMarLT09MRHR2NWbNm4fDhw+jZsycGDhyIX375pcb5WVlZeOKJJ7BhwwYcO3YMb7zx\nBiZOnIh169bJungiImoY1nciImVYGzMpKSkJkZGRiIyMBAAkJydj+/btSE1NRUJCQrX5sbGxBt9H\nRUUhIyMDGzZsQHh4uAzLJiIiObC+ExEpo9Yz2eXl5cjNzUW/fv0Mxvv374+srCyjg0pLS9G6deu6\n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\nuH37tqIZL730Eo4ePYojR47ov4KCgjBq1CgcOXIENjY2iubf79atWzh+/Dg8PDwUz9JoNPpr1qqc\nOHGi2sdWKy0tLQ12dnYIDw83Webvv/8OSTIsTZIkmWyLpypqtRpubm64evUqduzYgaFDh5o035Kw\nvjee+m6K2g6wvrO+/6lZ13dFWneFpKenixYtWohly5aJ/Px8MXXqVOHk5CQuXLigeHZZWZk4fPiw\nOHTokLC3txfx8fHi8OHDJsmePHmyaNmypcjIyBCFhYX6r7KyMsWzhRDivffeE/v37xfnzp0TR48e\nFe+9956wsrISO3bsMEn+vUz5cuLbb78t9u7dKwoKCsSBAwfE4MGDhbOzs0l+5tnZ2cLW1lYkJCSI\n06dPi/Xr1wtnZ2eRmpqqePa9Hn/88Wo7PigtIiJCtGvXTmzZskWcO3dObNy4UTz66KPinXfeMUn+\njh07xLZt20RBQYH48ccfxZNPPil69uwpKioqTJJvqVjfTV/fG1NtF4L1nfVdeaau702qyRZCiNTU\nVNGxY0dhZ2cngoKCRGZmpkly9+zZo38p696v1157TfHsmnIlSRIffvih4tlC/PE/hbe3t7CzsxNu\nbm6iX79+QqvVmiT7fr169TJZEQ4PDxeenp6iRYsWwsvLS7zyyisiPz/fJNlCCLF161YREBAg1Gq1\n8PPzE59//rnJsoUQIiMjQ0iSJHJyckyaW1ZWJqZPny68vb2Fvb298PX1FbNmzRK3b982Sf769euF\nr6+vsLOzE23bthVTp04VpaWlJsm2dKzvpq3vjam2C8H6bkqs76ap7/xYdSIiIiIimTWZa7KJiIiI\niJoKNtlERERERDJjk01EREREJDM22UREREREMmOTTUREREQkMzbZREREREQyY5NNRERERCQzNtlE\nRERERDL7f1wtQxr5WlguAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "prior = predict(posterior, 1, kernel)\n", + "likelihood = lh_hallway(hallway, z=0, z_prob=.75)\n", + "posterior = update(likelihood, prior)\n", + "bp.plot_prior_vs_posterior(prior, posterior, ylim=(0,.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exciting! We have a very prominent bar at position 2 with a value of around 35%. It is over twice the value of any other bar in the plot, and is about 4% larger than our last plot, where the tallest bar was around 31%. Let's see one more cycle." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "prior = predict(posterior, 1, kernel)\n", + "likelihood = lh_hallway(hallway, z=0, z_prob=.75)\n", + "posterior = update(likelihood, prior)\n", + "bp.plot_prior_vs_posterior(prior, posterior, ylim=(0,.5))" ] }, { @@ -1180,16 +1258,16 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1227,7 +1305,7 @@ "\n", "When we cover the Kalman filter we will use this exact same algorithm; only the details of the computation will differ. \n", "\n", - "Algorithms in this form are sometimes called *predictor correctors*. We make a prediction, then correct them. I prefer this language to predict/update, but update is used in the Kalman filter literature, and so I adopt it as well." + "Algorithms in this form are sometimes called *predictor correctors*. We make a prediction, then correct them." ] }, { @@ -1256,16 +1334,16 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n4mLFxMRIklwul+rq6jzzb7nlFpWWluqxxx6T3W7XsGHDtGLFCi1fvvzGvQsAAADAD3R4txAAAAAA\nXWf63UL8VXcf4d6XlZWVafbs2YqOjlZgYKCKioqsLslya9eu1R133KHQ0FCFh4dr9uzZOnHihNVl\nWWrz5s1KTExUaGioQkND5XA4VFxcbHVZfmPt2rUKDAzU0qVLrS7FUj//+c8VGBjo9S8qKsrqsizV\n0NCgRx55ROHh4bLZbJowYYLKysqsLssysbGxPl8jgYGBuu+++6wuzTKtra165plnFB8fL5vNpvj4\neD3zzDNqbW21ujRLNTU1KTs7W7GxsQoODtbUqVNVWVlpdVnd1i/CdXcf4d7XNTc3a9KkSdqwYYNs\nNhu3T5R0+PBhPf7446qoqNCBAwc0YMAApaam6rPPPrO6NMvExMToxRdfVHV1tY4dO6bvfve7evDB\nB3X8+HGrS7Pce++9p61bt2rSpEn8/5E0btw4uVwuz7/+/DXy+eefa+rUqQoICFBxcbFOnTqll19+\nWeHh4VaXZpljx455fX1UVVUpICBAc+fOtbo0y6xbt04FBQXatGmTTp8+rQ0bNqigoEBr1661ujRL\nPfrooyotLdVvf/tbffDBB3I6nUpNTVV9fb3VpXWP0Q8kJycbS5Ys8RobM2aMkZuba1FF/uPmm282\nioqKrC7D7/z3v/81goKCjHfeecfqUvzKsGHDjN/85jdWl2Gpzz//3Lj11luNQ4cOGffcc4+xdOlS\nq0uy1OrVq42JEydaXYbfyM3NNaZNm2Z1GX4tLy/PGDp0qHHp0iWrS7HMrFmzjPT0dK+xhQsXGvff\nf79FFVnvf//7nzFgwADj7bff9hpPSkoyVq1aZVFVX0+fv3L9dR7hDly4cEFtbW0aOnSo1aX4hdbW\nVr3++utqbm6Ww+GwuhxLLVmyRHPmzNH06dNl8CcrkqS6ujqNHDlS8fHxmj9/vj7++GOrS7LMnj17\nlJycrLlz5yoiIkKTJ0/W5s2brS7LbxiGoW3btulHP/qR53a9/dFdd92lAwcO6PTp05KkDz/8UAcP\nHtTMmTMtrsw6V65cUWtrq8/XxZAhQ3rdUt5O7xbS2507d06tra2KiIjwGg8PD/d52A1w1bJlyzR5\n8mSlpKRYXYqljh8/rpSUFF2+fFk333yz/vCHP2jChAlWl2WZrVu3qq6uTrt27ZLEE2kl6c4771RR\nUZHGjRsnt9utvLw8ORwOnThxQsOGDbO6vB5XV1engoIC5eTk6Gc/+5mqq6s96/Ife+wxi6uzXmlp\nqf75z3/qxz/+sdWlWGrlypW6cOGCxo8fr6CgIF25ckWrVq3y3Oa4PwoJCVFKSory8vI0ceJERURE\n6LXXXtN7772nMWPGWF1et/T5cA10V05Ojo4cOaLy8vJ+H57GjRunv/3tb2psbNTvf/97LVy4UIcO\nHeqXAfv06dN6+umnVV5erqCgIElfXIXr71evv/e973k+njhxolJSUhQXF6eioqJ+eQvWtrY2JScn\n6/nnn5ckJSYmqra2Vps3byZc64sfUJOTk5WQkGB1KZZ6/fXXtXPnTr322muaMGGCqqurtWzZMsXG\nxmrRokVWl2eZnTt3atGiRYqOjlZQUJCSkpI0f/58HTt2zOrSuqXPh+uv8wh39F/Lly/XG2+8oYMH\nDyo2Ntbqciw3cOBAxcfHS5ImT56so0eP6qWXXtIrr7xicWU9r6KiQufOnfP6waK1tVXvvvuufv3r\nX6u5uVkDBw60sEL/EBwcrAkTJuijjz6yuhRLREVFafz48V5j48aN0yeffGJRRf7j008/1dtvv62C\nggKrS7Hck08+qaeeekppaWmSpAkTJujMmTNau3Ztvw7X8fHxOnTokC5evKgLFy4oIiJCc+fO1a23\n3mp1ad3S59dcf/kR7l9WWlra79eOwtuyZcu0e/duHThwQN/85jetLscvtba2qqWlxeoyLPH9739f\nH3zwgd5//329//77qqmpkd1u1/z581VTU0Ow/n8uXbqkkydP9tuLF1OnTtWpU6e8xv7+97/zw7qk\nHTt2aMiQIZo/f77VpVju4sWLCgz0jmCBgYH9/jdhV9lsNkVEROizzz5TSUmJHnjgAatL6pY+f+Va\n+uLX/AsWLFBycrIcDoe2bNni9Qj3/qa5uVm1tbWSvvgV5pkzZ1RTU6NvfOMbnidv9jePPfaYXn31\nVe3Zs0ehoaGe9fghISG66aabLK7OGj/96U913333KTo6Wk1NTdq1a5cOHz7cb+91ffV+318WHBys\noUOH+lyp7E9WrFih2bNnKyYmRp9++qnWrFmjixcv6pFHHrG6NEssX75cDodDL7zwgtLS0lRdXa1N\nmzb1+1usGYahV155RfPmzVNwcLDV5Vju/vvv1y9+8QvFxcVp/Pjxqq6u1ksvvdRv/99cVVJSotbW\nVo0bN04fffSRnnzySX3rW99SRkaG1aV1j5W3KulJBQUFRmxsrDF48GDDbrcb7777rtUlWebgwYNG\nQECAERAQYAQGBno+zsjIsLo0y3y1F1f/Pfvss1aXZpn09HRj9OjRxuDBg43w8HDj3nvvNUpKSqwu\ny69wKz7DmDdvnhEVFWUMGjTIGDlypPGDH/zAOHnypNVlWWrv3r1GYmKiMWTIEGPs2LHGpk2brC7J\ncgcOHDACAwONo0ePWl2KX2hqajKys7ON0aNHGzabzYiPjzeefvpp4/Lly1aXZqk33njDuPXWW43B\ngwcbkZGRxtKlS40LFy5YXVa38fhzAAAAwCR9fs01AAAA0FMI1wAAAIBJCNcAAACASQjXAAAAgEkI\n1wAAAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJ/g+MBevBDuzWzgAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1273,36 +1351,37 @@ } ], "source": [ - "hallway = [1, 0, 1, 0, 0, 1, 0, 1, 0, 0]\n", + "hallway = np.array([1, 0, 1, 0, 0]*2)\n", "kernel = (.1, .8, .1)\n", - "belief = np.array([.1] * 10)\n", + "prior = np.array([.1] * 10)\n", "measurements = [1, 0, 1, 0, 0]\n", "\n", "for m in measurements:\n", - " update(hallway, belief, z=m, prob_correct=.75)\n", - " predict(belief, 1, kernel)\n", - "bp.bar_plot(belief)" + " likelihood = lh_hallway(hallway, z=m, z_prob=.75)\n", + " posterior = update(likelihood, prior)\n", + " prior = predict(posterior, 1, kernel)\n", + "bp.bar_plot(posterior, ylim=(0, .4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "At this point we have correctly identified the likely cases, we either started at position 0 or 5, because we saw the following sequence of doors and walls 1,0,1,0,0. But now lets inject a bad measurement, and see what happens:\n" + "We have identified the likely cases of having started at position 0 or 5, because we saw the following sequence of doors and walls 1,0,1,0,0. Now I inject a bad measurement:" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n+uc//6mf/OQnVpdiqTVr1ujMmTOaMmWKgoKCdOnSJa1du9azzfFgFBISouTkZOXl5WnatGkKDw/X\nyy+/rPfee08TJ060urweGfDhGuipnJwcVVZWqqKiYtCHp8mTJ+tvf/ubWlpa9Pvf/1733XefDh48\nOCgD9okTJ/TYY4+poqJCQUFBkr64CzfY715/73vf8zyeNm2akpOTFRsbq6KiokG5BWt7e7uSkpL0\n5JNPSpISEhJUX1+v7du3E671xS+oSUlJio+Pt7oUS73yyivavXu3Xn75ZU2dOlWHDx/WypUrFRMT\no6VLl1pdnmV2796tpUuXKioqSkFBQUpMTNTixYt16NAhq0vrkQEfrr/OV7hj8Fq1apVeffVVHThw\nQDExMVaXY7mhQ4cqLi5OkjR9+nRVV1frmWee0YsvvmhxZX2vqqpKp0+f9vrFoq2tTe+++65+/etf\n69y5cxo6dKiFFfqH4OBgTZ06VR999JHVpVgiMjJSU6ZM8RqbPHmyPvnkE4sq8h+ffvqp3njjDRUU\nFFhdiuUeffRR/fSnP1VaWpokaerUqTp58qQ2btw4qMN1XFycDh48qPPnz+vMmTMKDw/XokWLNGHC\nBKtL65EBv+b6y1/h/mVlZWWDfu0ovK1cuVJ79uzR/v379c1vftPqcvxSW1ubWltbrS7DEt///vf1\nwQcf6P3339f777+vuro62e12LV68WHV1dQTr/+fChQs6duzYoL15MXPmTB0/ftxr7O9//zu/rEva\ntWuXRowYocWLF1tdiuXOnz+vwEDvCBYYGDjo/yfsMpvNpvDwcH322WcqLS3VnXfeaXVJPTLg71xL\nX/w3/5IlS5SUlCSHw6Hnn3/e6yvcB5tz586pvr5e0hf/hXny5EnV1dXpG9/4huebNwebhx56SC+9\n9JL27t2r0NBQz3r8kJAQXXPNNRZXZ42f/exnuv322xUVFaWzZ8+quLhY77zzzqDd6/ryft9fFhwc\nrFGjRvncqRxMVq9erQULFig6OlqffvqpNmzYoPPnz+v++++3ujRLrFq1Sg6HQ0899ZTS0tJ0+PBh\nbdu2bdBvsWYYhl588UXdc889Cg4Otrocy91xxx365S9/qdjYWE2ZMkWHDx/WM888M2j/3VxWWlqq\ntrY2TZ48WR999JEeffRRfetb31JGRobVpfWMlVuV9KWCggIjJibGGD58uGG32413333X6pIsc+DA\nASMgIMAICAgwAgMDPY8zMjKsLs0yX+3F5T/r1q2zujTLpKenG+PHjzeGDx9uhIWFGXPmzDFKS0ut\nLsuvsBWfYdxzzz1GZGSkMWzYMGPs2LHGD3/4Q+PYsWNWl2Wpffv2GQkJCcaIESOMSZMmGdu2bbO6\nJMvt37/fCAwMNKqrq60uxS+cPXvWyM7ONsaPH2/YbDYjLi7OeOyxx4yLFy9aXZqlXn31VWPChAnG\n8OHDjYiICGPFihXGmTNnrC6rx/j6cwAAAMAkA37NNQAAANBXCNcAAACASQjXAAAAgEkI1wAAAIBJ\nCNcAAACASQjXAAAAgEkI1wAAAIBJCNcAAACASf4PGg3hmnz/Og4AAAAASUVORK5CYII=\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1310,30 +1389,30 @@ } ], "source": [ - "update(hallway, belief, z=m, prob_correct=.75)\n", - "predict(belief, 1, kernel)\n", - "bp.bar_plot(belief)" + "likelihood = lh_hallway(hallway, z=0, z_prob=.75)\n", + "posterior = update(likelihood, prior)\n", + "bp.bar_plot(posterior, ylim=(0, .4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That one bad measurement appears to have significantly eroded our knowledge. However, note that our highest probabilities are still at 0 and 5, which is correct. Now let's continue with a series of correct measurements" + "That one bad measurement has significantly eroded our knowledge. Now let's continue with a series of correct measurements." ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nlEjHjh3N7qmsFAcHh2ofXc6bN0+eeOIJxbMfNHbsWAkICFAt75NPPpHHHntMtm7dKjk5OfLhhx+K\nq6urfPDBB6rkX7x4UUJDQ0Wn04m9vb0EBATI5MmTNXnvbQXr+32s76zvamN9V7a+W9VEvLS0VAwG\ng3z22Wdmy2fOnCmhoaGq7otWhXr27Nni5eVlVri0EBYWJlOnTlU8Z8OGDaLX68VgMJgeOp3O9C/p\n0tJSxffhQUOHDpUZM2YontO5c2f53e9+Z7YsKSlJnJycFM+u6qeffhIHBwdZt26dapmdOnWSuLg4\ns2VLliyRbt26qbYPIiK3b9+WoqIiERGZMGGCjBo1StV8W8L6zvrO+s76ria16rtVXSPekHbN1mTW\nrFnYsmUL0tLS0K1bN033paKiAnfv3lU8Z8yYMcjOzsbJkydND39/f0yaNAknT56Evb294vtQ1S+/\n/IIzZ87A09NT8aygoCDTNXSVzp49a2ozrpb169fD0dEREydOVC3z9u3b0OvNy5der1ft9laVjEYj\n3N3dcf36dezduxejR49WNd+WsL6zvrO+s76rSbX6rsj0XkO1tWu+dOmS4tnFxcWSlZUlJ06ckNat\nW8vixYslKytLlewZM2ZIu3btJC0tTYqKikyP4uJixbNjY2MlIyND8vPzJTs7W2JjY8XOzk727t2r\neHZN1Pzo8vXXX5cDBw5IXl6eHDlyRCIiIsTZ2VmV/+fHjh0TBwcHWbp0qZw/f162bt0qzs7OkpCQ\noHh2Vd27d692JwulRUZGSqdOnWTXrl2Sn58v27dvlw4dOsicOXNUyd+7d6/s3r1b8vLyJCUlRfr2\n7SuBgYFSVlamSr6tYn1nfWd9Z31Xmtr13eom4iIPb9espPT0dNPHZlUfU6ZMUTy7ply9Xi8LFy5U\nPDsyMlJ8fHzE0dFR3N3dZfjw4ZKamqp4bm2GDh2qWqGeOHGieHt7S6tWreTRRx+VsWPHSm5urirZ\nIiLJycnSp08fMRqN4ufnJ++9955q2SIiaWlpotfrJTMzU9Xc4uJiiYmJER8fH2ndurX4+vrK/Pnz\n5e7du6rkb926VXx9fcXR0VG8vLzktddek5s3b6qSbetY31nfWd/VwfquTn1ni3siIiIiIg1Y1TXi\nREREREQtBSfiREREREQa4ESciIiIiEgDnIgTEREREWmAE3EiIiIiIg1wIk5EREREpAFOxMlqhIaG\n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\nuka8Ie2arcmsWbOwZcsWpKWloVu3bpruS0VFBe7evat4zpgxY5CdnY2TJ0+aHv7+/pg0aRJOnjwJ\ne3t7xfehql9++QVnzpyBp6en4llBQUGma+gqnT171tRmXC3r16+Ho6MjJk6cqFrm7du3odebly+9\nXq/a7a0qGY1GuLu74/r169i7dy9Gjx6tar4tYX1nfWd9Z31Xk2r1XZHpvYZqa9d86dIlxbOLi4sl\nKytLTpw4Ia1bt5bFixdLVlaWKtkzZsyQdu3aSVpamhQVFZkexcXFimfHxsZKRkaG5OfnS3Z2tsTG\nxoqdnZ3s3btX8eyaqPnR5euvvy4HDhyQvLw8OXLkiERERIizs7Mq/8+PHTsmDg4OsnTpUjl//rxs\n3bpVnJ2dJSEhQfHsqrp3717tThZKi4yMlE6dOsmuXbskPz9ftm/fLh06dJA5c+aokr93717ZvXu3\n5OXlSUpKivTt21cCAwOlrKxMlXxbxfrO+s76zvquNLXru9VNxEUe3q5ZSenp6aaPzao+pkyZonh2\nTbl6vV4WLlyoeHZkZKT4+PiIo6OjuLu7y/DhwyU1NVXx3NoMHTpUtUI9ceJE8fb2llatWsmjjz4q\nY8eOldzcXFWyRUSSk5OlT58+YjQaxc/PT9577z3VskVE0tLSRK/XS2Zmpqq5xcXFEhMTIz4+PtK6\ndWvx9fWV+fPny927d1XJ37p1q/j6+oqjo6N4eXnJa6+9Jjdv3lQl29axvrO+s76rg/VdnfrOFvdE\nRERERBqwqmvEiYiIiIhaCk7EiYiIiIg0wIk4EREREZEGOBEnIiIiItIAJ+JERERERBrgRJyIiIiI\nSAOciBMRERERaYATcSIiIiIiDXAiTkRERESkgf8DzUXzRB4zL58AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1345,17 +1424,18 @@ " measurements = [0, 1, 0, 1, 0, 0]\n", "\n", " for i, m in enumerate(measurements):\n", - " update(hallway, belief, z=m, prob_correct=.75)\n", - " predict(belief, 1, kernel)\n", + " likelihood = lh_hallway(hallway, z=m, z_prob=.75)\n", + " posterior = update(likelihood, prior)\n", + " prior = predict(posterior, 1, kernel)\n", " plt.subplot(3, 2, i+1)\n", - " bp.bar_plot(belief, title='step{}'.format(i+1))" + " bp.bar_plot(posterior, ylim=(0, .4), title='step {}'.format(i+1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As you can see we quickly filtered out the bad sensor reading and converged on the most likely positions for our dog." + "We quickly filtered out the bad sensor reading and converged on the most likely positions for our dog." ] }, { @@ -1369,51 +1449,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Do not be mislead by the simplicity of the examples I chose. This is a robust and complete implementation of a histogram filter, and you may use the code in real world solutions. If you need a multimodal, discrete filter, this filter works.\n", + "Do not be mislead by the simplicity of the examples I chose. This is a robust and complete filter, and you may use the code in real world solutions. If you need a multimodal, discrete filter, this filter works.\n", "\n", - "With that said, while this filter is used in industry, it is not used often because it has several limitations. Getting around those limitations is the motivation behind the chapters in the rest of this book.\n", + "With that said, this filter it is not used often because it has several limitations. Getting around those limitations is the motivation behind the chapters in the rest of this book.\n", "\n", - "The first problem is scaling. Our dog tracking problem used only one variable, $pos$, to denote the dog's position. Most interesting problems will want to track several things in a large space. Realistically, at a minimum we would want to track our dogs $(x,y)$ coordinate, and probably his velocity $(\\dot{x},\\dot{y})$ as well. We have not covered the multidimensional case, but instead of a histogram we use a multidimensional grid to store the probabilities at each discrete location. Each `update()` and `predict()` step requires updating all values in the grid, so a simple four variable problem would require $O(n^4)$ running time *per time step*. Realistic filters can have 10 or more variables to track, leading to exorbitant computation requirements.\n", + "The first problem is scaling. Our dog tracking problem used only one variable, $pos$, to denote the dog's position. Most interesting problems will want to track several things in a large space. Realistically, at a minimum we would want to track our dogs $(x,y)$ coordinate, and probably his velocity $(\\dot{x},\\dot{y})$ as well. We have not covered the multidimensional case, but instead of an array we use a multidimensional grid to store the probabilities at each discrete location. Each `update()` and `predict()` step requires updating all values in the grid, so a simple four variable problem would require $O(n^4)$ running time *per time step*. Realistic filters can have 10 or more variables to track, leading to exorbitant computation requirements.\n", "\n", - "The second problem is that the histogram is discrete, but we live in a continuous world. The histogram requires that you model the output of your filter as a set of discrete points. In our dog in the hallway example, we used 10 positions, which is obviously far too few positions for anything but a toy problem. For example, for a 100 meter hallway you would need 10,000 positions to model the hallway to 1cm accuracy. So each update and predict operation would entail performing calculations for 10,000 different probabilities. It gets exponentially worse as we add dimensions. If our dog was roaming in a 100x100 m$^2$ courtyard, we would need 100,000,000 bins (10,000$^2$) to get 1cm accuracy.\n", + "The second problem is that the filter is discrete, but we live in a continuous world. The histogram requires that you model the output of your filter as a set of discrete points. A 100 meter hallway requires 10,000 positions to model the hallway to 1cm accuracy. So each update and predict operation would entail performing calculations for 10,000 different probabilities. It gets exponentially worse as we add dimensions. A 100x100 m$^2$ courtyard requires 100,000,000 bins to get 1cm accuracy.\n", "\n", - "A third problem is that the histogram is multimodal. This is not always a problem - an entire class of filters, the particle filters, are multimodal and are often used because of this property. But imagine if the GPS in your car reported to you that it is 40% sure that you are on D street, but 30% sure you are on Willow Avenue. I doubt that you would find that useful. Also, GPSs report their error - they might report that you are at (109.878W, 38.326N) with an error of 9 meters. There is no clear mathematical way to extract error information from a histogram. Heuristics suggest themselves to be sure, but there is no exact determination. You may or may not care about that while driving, but you surely do care if you are trying to send a rocket to Mars or track and hit an oncoming missile.\n", + "A third problem is that the filter is multimodal. In the least example we ended up with strong beliefs that the dog was in position 4 or 9. This is not always a problem. Particle filters, which we will study later, are multimodal and are often used because of this property. But imagine if the GPS in your car reported to you that it is 40% sure that you are on D street, and 30% sure you are on Willow Avenue. \n", "\n", - "This difficulty is related to the fact that the filter often does not represent what is physically occurring in the world. Consider this distribution for our dog:" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n4mLFxMRIklwul+rq6jzzb7nlFpWWluqxxx6T3W7XsGHDtGLFCi1fvvzGvQsAAADAD3R4txAAAAAA\nXWf63UL8VXcf4d6XlZWVafbs2YqOjlZgYKCKioqsLslya9eu1R133KHQ0FCFh4dr9uzZOnHihNVl\nWWrz5s1KTExUaGioQkND5XA4VFxcbHVZfmPt2rUKDAzU0qVLrS7FUj//+c8VGBjo9S8qKsrqsizV\n0NCgRx55ROHh4bLZbJowYYLKysqsLssysbGxPl8jgYGBuu+++6wuzTKtra165plnFB8fL5vNpvj4\neD3zzDNqbW21ujRLNTU1KTs7W7GxsQoODtbUqVNVWVlpdVnd1i/CdXcf4d7XNTc3a9KkSdqwYYNs\nNhu3T5R0+PBhPf7446qoqNCBAwc0YMAApaam6rPPPrO6NMvExMToxRdfVHV1tY4dO6bvfve7evDB\nB3X8+HGrS7Pce++9p61bt2rSpEn8/5E0btw4uVwuz7/+/DXy+eefa+rUqQoICFBxcbFOnTqll19+\nWeHh4VaXZpljx455fX1UVVUpICBAc+fOtbo0y6xbt04FBQXatGmTTp8+rQ0bNqigoEBr1661ujRL\nPfrooyotLdVvf/tbffDBB3I6nUpNTVV9fb3VpXWP0Q8kJycbS5Ys8RobM2aMkZuba1FF/uPmm282\nioqKrC7D7/z3v/81goKCjHfeecfqUvzKsGHDjN/85jdWl2Gpzz//3Lj11luNQ4cOGffcc4+xdOlS\nq0uy1OrVq42JEydaXYbfyM3NNaZNm2Z1GX4tLy/PGDp0qHHp0iWrS7HMrFmzjPT0dK+xhQsXGvff\nf79FFVnvf//7nzFgwADj7bff9hpPSkoyVq1aZVFVX0+fv3L9dR7hDly4cEFtbW0aOnSo1aX4hdbW\nVr3++utqbm6Ww+GwuhxLLVmyRHPmzNH06dNl8CcrkqS6ujqNHDlS8fHxmj9/vj7++GOrS7LMnj17\nlJycrLlz5yoiIkKTJ0/W5s2brS7LbxiGoW3btulHP/qR53a9/dFdd92lAwcO6PTp05KkDz/8UAcP\nHtTMmTMtrsw6V65cUWtrq8/XxZAhQ3rdUt5O7xbS2507d06tra2KiIjwGg8PD/d52A1w1bJlyzR5\n8mSlpKRYXYqljh8/rpSUFF2+fFk333yz/vCHP2jChAlWl2WZrVu3qq6uTrt27ZLEE2kl6c4771RR\nUZHGjRsnt9utvLw8ORwOnThxQsOGDbO6vB5XV1engoIC5eTk6Gc/+5mqq6s96/Ife+wxi6uzXmlp\nqf75z3/qxz/+sdWlWGrlypW6cOGCxo8fr6CgIF25ckWrVq3y3Oa4PwoJCVFKSory8vI0ceJERURE\n6LXXXtN7772nMWPGWF1et/T5cA10V05Ojo4cOaLy8vJ+H57GjRunv/3tb2psbNTvf/97LVy4UIcO\nHeqXAfv06dN6+umnVV5erqCgIElfXIXr71evv/e973k+njhxolJSUhQXF6eioqJ+eQvWtrY2JScn\n6/nnn5ckJSYmqra2Vps3byZc64sfUJOTk5WQkGB1KZZ6/fXXtXPnTr322muaMGGCqqurtWzZMsXG\nxmrRokVWl2eZnTt3atGiRYqOjlZQUJCSkpI0f/58HTt2zOrSuqXPh+uv8wh39F/Lly/XG2+8oYMH\nDyo2Ntbqciw3cOBAxcfHS5ImT56so0eP6qWXXtIrr7xicWU9r6KiQufOnfP6waK1tVXvvvuufv3r\nX6u5uVkDBw60sEL/EBwcrAkTJuijjz6yuhRLREVFafz48V5j48aN0yeffGJRRf7j008/1dtvv62C\nggKrS7Hck08+qaeeekppaWmSpAkTJujMmTNau3Ztvw7X8fHxOnTokC5evKgLFy4oIiJCc+fO1a23\n3mp1ad3S59dcf/kR7l9WWlra79eOwtuyZcu0e/duHThwQN/85jetLscvtba2qqWlxeoyLPH9739f\nH3zwgd5//329//77qqmpkd1u1/z581VTU0Ow/n8uXbqkkydP9tuLF1OnTtWpU6e8xv7+97/zw7qk\nHTt2aMiQIZo/f77VpVju4sWLCgz0jmCBgYH9/jdhV9lsNkVEROizzz5TSUmJHnjgAatL6pY+f+Va\n+uLX/AsWLFBycrIcDoe2bNni9Qj3/qa5uVm1tbWSvvgV5pkzZ1RTU6NvfOMbnidv9jePPfaYXn31\nVe3Zs0ehoaGe9fghISG66aabLK7OGj/96U913333KTo6Wk1NTdq1a5cOHz7cb+91ffV+318WHBys\noUOH+lyp7E9WrFih2bNnKyYmRp9++qnWrFmjixcv6pFHHrG6NEssX75cDodDL7zwgtLS0lRdXa1N\nmzb1+1usGYahV155RfPmzVNwcLDV5Vju/vvv1y9+8QvFxcVp/Pjxqq6u1ksvvdRv/99cVVJSotbW\nVo0bN04fffSRnnzySX3rW99SRkaG1aV1j5W3KulJBQUFRmxsrDF48GDDbrcb7777rtUlWebgwYNG\nQECAERAQYAQGBno+zsjIsLo0y3y1F1f/Pfvss1aXZpn09HRj9OjRxuDBg43w8HDj3nvvNUpKSqwu\ny69wKz7DmDdvnhEVFWUMGjTIGDlypPGDH/zAOHnypNVlWWrv3r1GYmKiMWTIEGPs2LHGpk2brC7J\ncgcOHDACAwONo0ePWl2KX2hqajKys7ON0aNHGzabzYiPjzeefvpp4/Lly1aXZqk33njDuPXWW43B\ngwcbkZGRxtKlS40LFy5YXVa38fhzAAAAwCR9fs01AAAA0FMI1wAAAIBJCNcAAACASQjXAAAAgEkI\n1wAAAIBJCNcAAACASQjXAAAAgEkI1wAAAIBJ/g+MBevBDuzWzgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "belief = [0.2245871, 0.06288015, 0.06109133, \n", - " 0.0581008, 0.09334062, 0.2245871,\n", - " 0.06288015, 0.06109133, 0.0581008, 0.09334062]\n", - "bp.bar_plot(belief) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " The largest probabilities are in position 0 and position 5. This does not fit our physical intuition at all. A dog cannot be in two places at once (my dog Simon certainly tries - his food bowl and my lap often have equal allure to him). We would have to use heuristics to decide how to interpret this distribution, and there is usually no satisfactory answer. This is not always a weakness - a considerable amount of literature has been written on *Multi-Hypothesis Tracking (MHT)*. We cannot always distill our knowledge to one conclusion, and MHT uses various techniques to maintain multiple story lines at once, using backtracking schemes to go *back in time* to correct hypothesis once more information is known. This will be the subject of later chapters. In other cases we truly have a multimodal situation - we may be optically tracking pedestrians on the street and need to represent all of their positions. \n", - " \n", - "In practice it is the exponential increase in computation time that leads to the discrete Bayes filter being the least frequently used of all filters in this book. Many problems are best formulated as discrete or multimodal, but we have other filter choices with better performance. With that said, if I had a small problem that this technique could handle I would choose to use it; it is trivial to implement, debug, and understand, all virtues." + "With that said, if I had a small problem that this technique could handle I would choose to use it; it is trivial to implement, debug, and understand, all virtues." ] }, { @@ -1422,13 +1468,13 @@ "source": [ "## Tracking and Control\n", "\n", - "So far we have been tracking an object which is moving independently. But consider this very similar problem. I am automating a warehouse and want to use robots to collect all of the items for a customer's order. Perhaps the easiest way to do this is to have the robots travel on a train track. I want to be able to send the robot a destination and have it go correctly to that point. But train tracks and robot motors are imperfect. Wheel slippage and imperfect motors means that the robot is unlikely to travel to exactly the position you command. \n", + "We have been passively tracking an autonomously moving object. But consider this very similar problem. I am automating a warehouse and want to use robots to collect all of the items for a customer's order. Perhaps the easiest way to do this is to have the robots travel on a train track. I want to be able to send the robot a destination and have it go there. But train tracks and robot motors are imperfect. Wheel slippage and imperfect motors means that the robot is unlikely to travel to exactly the position you command. There is more than one robot, and we need to know where they all are so we do not cause them to crash.\n", "\n", - "So, we add sensors. We can add some sort of device to help the robot determine it's position. Perhaps we mount magnets on the track every few feet, and use a Hall sensor to count how many magnets are passed. If we have counted 10 magnets then the robot should be at the 10th magnet. Of course it is possible to either miss a magnet or to count it twice, so we have to accommodate some degree of error. In any case, is should be clear that we can use the code in the previous section to track our robot since the magnet counting is very similar to doorway sensing.\n", + "So we add sensors. Perhaps we mount magnets on the track every few feet, and use a Hall sensor to count how many magnets are passed. If we count 10 magnets then the robot should be at the 10th magnet. Of course it is possible to either miss a magnet or to count it twice, so we have to accommodate some degree of error. We can use the code from the previous section to track our robot since magnet counting is very similar to doorway sensing.\n", "\n", - "But we are not done. A key lesson from the g-h filters chapter is to never throw information away. If you have information you should use it to improve your estimate. What information are we leaving out? Well, we know what our destination is, and we know what control inputs we are feeding to the wheels of the robot at each moment in time. For example, let's say that once a second we send a movement command to the robot - move left 1 unit, move right 1 unit, or stand still. This is obviously a simplification because I am not taking acceleration into account, but I am not trying to teach control theory. If I send the command 'move left 1 unit' I expect that in one second from now the robot will be 1 unit to the left of where it is now. But, wheels and motors are imperfect. We will assume that it never makes a mistake and goes right when told to go left, so the errors should be relatively small. Thus the robot might end up 0.9 units away, or maybe 1.2 units away. \n", + "But we are not done. We've learned to never throw information away. If you have information you should use it to improve your estimate. What information are we leaving out? We know what control inputs we are feeding to the wheels of the robot at each moment in time. For example, let's say that once a second we send a movement command to the robot - move left 1 unit, move right 1 unit, or stand still. If I send the command 'move left 1 unit' I expect that in one second from now the robot will be 1 unit to the left of where it is now. This is a simplification because I am not taking acceleration into account, but I am not trying to teach control theory. Wheels and motors are imperfect. The robot might end up 0.9 units away, or maybe 1.2 units. \n", "\n", - "Now the entire solution is clear. For the dog which was moving independently we assumed that he kept moving in whatever direction he was previously moving. That is a dubious assumption for my dog! Robots are far more predictable. Instead of making a dubious prediction based on assumption of behavior we will feed in the command that we sent to the robot! In other words, when we call `predict()` we will pass in the commanded movement that we gave the robot along with a kernel that describes the likelihood of that movement." + "Now the entire solution is clear. We assumed that the dog kept moving in whatever direction he was previously moving. That is a dubious assumption for my dog! Robots are far more predictable. Instead of making a dubious prediction based on assumption of behavior we will feed in the command that we sent to the robot! In other words, when we call `predict()` we will pass in the commanded movement that we gave the robot along with a kernel that describes the likelihood of that movement." ] }, { @@ -1437,12 +1483,12 @@ "source": [ "### Simulating the Train Behavior\n", "\n", - "To fully implement this filter we need to simulate an imperfect train. When we command it to move it will sometimes make a small mistake, and it's sensor will sometimes return the incorrect value." + "We need to simulate an imperfect train. When we command it to move it will sometimes make a small mistake, and it's sensor will sometimes return the incorrect value." ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1476,8 +1522,7 @@ " def sense(self):\n", " pos = self.pos\n", " # insert random sensor error\n", - " r = random.random()\n", - " if r > self.sensor_accuracy:\n", + " if random.random() > self.sensor_accuracy:\n", " if random.random() > 0.5:\n", " pos += 1\n", " else:\n", @@ -1489,23 +1534,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With that we are ready to write the simulation. We will put it in a function so that we can run it with different assumptions. I will assume that the robot always starts at the beginning of the track. The track is implemented as being 10 units long, but think of it as a track of length, say 10,000, with the magnet pattern repeated every 10 units. 10 makes it easier to plot and inspect." + "With that we are ready to write the filter. We will put it in a function so that we can run it with different assumptions. I will assume that the robot always starts at the beginning of the track. The track is implemented as being 10 units long, but think of it as a track of length, say 10,000, with the magnet pattern repeated every 10 units. 10 makes it easier to plot and inspect." ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "def simulate(iterations, kernel, sensor_accuracy, \n", + "def train_filter(iterations, kernel, sensor_accuracy, \n", " move_distance, do_print=True):\n", " track = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", - " belief = np.array([0.01] * 10)\n", - " belief[0] = .9\n", + " prior = np.array([.9] + [0.01]*9)\n", " normalize(belief)\n", " \n", " robot = Train(len(track), kernel, sensor_accuracy)\n", @@ -1517,23 +1561,25 @@ " '''at position {}'''.format(\n", " i, robot.pos, m, track[robot.pos]))\n", "\n", - " update(track, belief, m, sensor_accuracy)\n", - " index = np.argmax(belief)\n", + " likelihood = lh_hallway(track, m, sensor_accuracy)\n", + " posterior = update(likelihood, prior)\n", + " index = np.argmax(prior)\n", + " if i < iterations - 1:\n", + " prior = predict(posterior, move_distance, kernel) \n", + "\n", " if do_print:\n", " print(''' predicted position is {}'''\n", " ''' with confidence {:.4f}%:'''.format(\n", - " index, belief[index]*100)) \n", - " if i < iterations - 1:\n", - " predict(belief, move_distance, kernel) \n", + " index, posterior[index]*100)) \n", "\n", - " bp.bar_plot(belief)\n", + " bp.bar_plot(posterior)\n", " if do_print:\n", " print()\n", " print('final position is', robot.pos)\n", - " iindex = np.argmax(belief)\n", + " index = np.argmax(posterior)\n", " print('''predicted position is {} with '''\n", " '''confidence {:.4f}%:'''.format(\n", - " index, belief[index]*100))" + " index, posterior[index]*100))" ] }, { @@ -1545,7 +1591,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 37, "metadata": { "collapsed": false, "scrolled": false @@ -1556,7 +1602,7 @@ "output_type": "stream", "text": [ "time 0: pos 4, sensed 4, at position 4\n", - " predicted position is 4 with confidence 91.0665%:\n", + " predicted position is 0 with confidence 8.2042%:\n", "time 1: pos 8, sensed 8, at position 8\n", " predicted position is 8 with confidence 99.9902%:\n", "time 2: pos 2, sensed 2, at position 2\n", @@ -1570,9 +1616,9 @@ }, { "data": { - "image/png": "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\nnfWKi4v1j3/8Qz/60Y+sjmKpFStW6OrVqxo1apRCQkJ048YNrVy5suU2x91RWFiYkpOTlZOTozFj\nxigyMlJvvvmm3n///ZaPRA8Ud325BjorKytLx44dU2lpabcvTyNHjtTf/vY31dXV6fe//73mzp2r\nw4cPd8uCfe7cOT3//PMqLS1VSEiIpC/OwnX3s9ff/e53W74eM2aMkpOTFRsbq4KCgm55C9bm5mYl\nJSXp5ZdfliQlJCTo/Pnz2rx5M+VaX/yAmpSUpPj4eKujWOqtt97Szp079eabb2r06NGqrKzU0qVL\nNWzYMM2fP9/qeJbZuXOn5s+fr+joaIWEhCgxMVGzZ8/WiRMnrI7WKXd9uf4qH+GO7mvZsmXas2eP\nDh06pGHDhlkdx3I9e/ZUXFycJGncuHE6fvy4XnnlFb322msWJ7vzysrKdOnSJa8fLDwej44eParf\n/OY3unbtmnr27GlhQv8QGhqq0aNH66OPPrI6iiUGDRqkUaNGea2NHDlSn376qUWJ/Mdnn32md999\nV3l5eVZHsdxzzz2nn/zkJ0pNTZUkjR49WjU1NVqzZk23LtdxcXE6fPiwrl+/rqtXryoyMlIzZ87U\n/fffb3W0Trnrr7n+349w/1/FxcXd/tpReFu6dKl2796tgwcP6utf/7rVcfySx+NRU1OT1TEs8b3v\nfU+nTp3SBx98oA8++EBVVVWy2+2aPXu2qqqqKNb/T0NDg86cOdNtT1489NBDOnv2rNfa3//+d35Y\nl7Rjxw716dNHs2fPtjqK5a5fv67gYO8KFhwc3O1/E3aTzWZTZGSkrly5oqKiIj3++ONWR+qUu/7M\ntfTFr/nnzJmjpKQkORwObdmyxesj3Luba9eu6fz585K++BVmTU2Nqqqq9LWvfa3lkze7m8WLF+uN\nN97Q3r17FR4e3nI9flhYmO655x6L01njpz/9qR577DFFR0ervr5eu3bt0pEjR7rtva5v3u/7f4WG\nhqpv374+Zyq7k+XLl2v69OmKiYnRZ599plWrVun69euaN2+e1dEssWzZMjkcDq1evVqpqamqrKzU\npk2buv0t1gzD0GuvvaZZs2YpNDTU6jiWmzZtmn75y18qNjZWo0aNUmVlpV555ZVu+//mpqKiInk8\nHo0cOVIfffSRnnvuOX3jG99Qenq61dE6x8pbldxJeXl5xrBhw4zevXsbdrvdOHr0qNWRLHPo0CEj\nKCjICAoKMoKDg1u+Tk9PtzqaZb48i5v/XnrpJaujWSYtLc0YOnSo0bt3byMiIsKYPHmyUVRUZHUs\nv8Kt+Axj1qxZxqBBg4xevXoZgwcPNr7//e8bZ86csTqWpfbt22ckJCQYffr0MUaMGGFs2rTJ6kiW\nO3jwoBEcHGwcP37c6ih+ob6+3sjMzDSGDh1q2Gw2Iy4uznj++eeNxsZGq6NZas+ePcb9999v9O7d\n24iKijKWLFliXL161epYncbHnwMAAAAmueuvuQYAAADuFMo1AAAAYBLKNQAAAGASyjUAAABgEso1\nAAAAYBLKNQAAAGASyjUAAABgEso1AAAAYJL/C8mmi2eFZUaLAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACeCAYAAADnjxZjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGaxJREFUeJzt3X9Q1HXix/EXvxRIZHRIQMAfMJ6pGClLJdBXuwEd87y8\nK0nrUqI7ozqVaCzpbKpDzMo7LkxorjwwPUduru7qOin3OvxB6IxgOOGpWZrmuLvlaaSWSu7n+0fT\nztGirPrBz648HzPO4Jv3u89r37Mzvfj45rNBhmEYAgAAAGCaYKsDAAAAAFcbSjYAAABgMko2AAAA\nYDJKNgAAAGAySjYAAABgMko2AAAAYDJKNgAAAGAyn0r2li1bdPvttysxMVHBwcF67bXXulzT2tqq\nCRMmKDIyUklJSSotLb3ssAAAAEAg8Klknzx5UqNHj1ZFRYUiIyO7nH/ixAnl5uYqPj5ezc3NevHF\nF/XCCy+ovLz8sgMDAAAA/i7oYj/xMSoqSitWrNCsWbPOO6eqqkolJSX6/PPP1atXL0lSWVmZXn75\nZX322WeXlxgAAADwc91yJnvbtm265ZZbPAVbkiZNmqQjR47o4MGD3XFJAAAAwG+Edsd/1Ol0Kikp\nqcNYbGysDMOQ0+nU4MGDPeNtbW3dEQEAAAC4IqKjo73GeLoIAAAAYLJuKdlxcXFyuVwdxlwul4KC\nghQXF9cdlwQAAAD8RrccFxk3bpwWLlyos2fPes5lb9iwQQMHDuxwVOSHOrvVbrampiZJks1m6/Zr\nBQr2xBt74o098caeeAuUPWk4eFxzNx+1Oka3WP5/Mcoe3M/qGOcVKO+RK4k98RYIe9LVkWef7mSf\nOnVKO3fuVEtLi9xutw4dOqSdO3d6nhRSUlKinJwcz/y7775bkZGRys/P165du/TGG2/oueee06OP\nPnoZLwUAAAAIDD6V7KamJo0ZM0bp6ek6ffq0nnrqKY0dO1ZPPfWUpO9+0fHAgQOe+X379pXdbteR\nI0eUkZGhuXPnasGCBSoqKuqeVwEAAAD4EZ+Oi4wfP15ut/u836+urvYaGzVqlDZu3HjJwQAAAIBA\nxdNFAAAAAJNRsgEAAACTUbIBAAAAk1GyAQAAAJNRsgEAAACTUbIBAAAAk1GyAQAAAJNRsgEAAACT\nUbIBAAAAk1GyAQAAAJNRsgEAAACTUbIBAAAAk1GyAQAAAJP5XLIrKyuVnJysiIgI2Ww2NTQ0XHD+\nu+++q8zMTPXt21fXXnutpk2bpn379l12YAAAAMDf+VSya2trVVRUpEWLFqmlpUWZmZmaPHmyDh8+\n3On8Tz/9VNOmTdP48ePV0tKi9957T6dPn9aUKVNMDQ8AAAD4I59Kdnl5uQoKClRQUKDhw4eroqJC\n8fHxqqqq6nR+c3Ozvv32Wy1ZskTJycm6/vrrtXDhQn3yySc6duyYqS8AAAAA8Dddluz29nY1Nzcr\nNze3w/jEiRPV2NjY6ZqMjAyFhYXp1Vdfldvt1okTJ1RTU6Mbb7xR/fv3Nyc5AAAA4KeCDMMwLjTB\n4XAoISFBmzdvVnZ2tme8tLRUa9eu1e7duztd19DQoOnTp+vo0aNyu90aO3as6urqFBMT02FeW1ub\n52vObAMAroQvwgfoiQ/OWB2jWywZ01vXnv7c6hjAVW/YsGGer6Ojo72+3y1PF3G5XLr//vs1e/Zs\nNTU1adOmTYqKitL06dO743IAAACAXwntakJMTIxCQkLkcrk6jLtcLsXFxXW6ZsWKFerTp4+WLl3q\nGVu9erWSkpLU2NiozMzMTtfZbLaLyX5Jmpqarti1AgV74o098caeeGNPvAXKnjQcPC7p6ryTHRUV\nJVvqIKtjnFegvEeuJPbEWyDsyf+exuhMl3eyw8LClJ6eLrvd3mHcbrcrKyur0zVff/21QkJCOl4o\n+LtLud3uri4JAAAABDSfjosUFxerpqZGK1eu1J49ezR//nw5HA4VFhZKkkpKSpSTk+OZP2XKFO3Y\nsUOlpaX6+OOPtWPHDt13330aNGiQ0tPTu+eVAAAAAH6iy+MikpSXl6djx46prKxMDodDqampqqur\nU2JioiTJ6XTqwIEDnvm33nqr1q5dq+eff14vvPCCIiMjdfPNN+udd95RRERE97wSAAAAwE/4VLIl\nqbCw0HPn+oeqq6u9xvLy8pSXl3fpyQAAAIAA1S1PFwEAAAB6Mko2AAAAYDJKNgAAAGAySjYAAABg\nMko2AAAAYDJKNgAAAGAySjYAAABgMko2AAAAYDJKNgAAAGAySjYAAABgMko2AAAAYDJKNgAAAGAy\nSjYAAABgMp9LdmVlpZKTkxURESGbzaaGhoYu1/zhD3/QiBEjFB4eroSEBD3xxBOXFRYAAAAIBKG+\nTKqtrVVRUZFefvllZWVlacWKFZo8ebJ2796txMTETtcUFxdr/fr1WrZsmVJTU9XW1iaHw2FqeAAA\nAMAf+VSyy8vLVVBQoIKCAklSRUWF3nnnHVVVVamsrMxr/t69e/XSSy+ptbVVP/rRjzzjaWlpJsUG\nAAAA/FeXx0Xa29vV3Nys3NzcDuMTJ05UY2Njp2veeustpaSkaP369UpJSdHQoUOVn5+vL774wpzU\nAAAAgB8LMgzDuNAEh8OhhIQEbd68WdnZ2Z7x0tJSrV27Vrt37/Za8+CDD6qmpkY33HCDli1bJkl6\n9NFHFRQUpK1bt3aY29bW5vl63759l/ViAADwxRfhA/TEB2esjtEtlozprWtPf251DOCqN2zYMM/X\n0dHRXt/36bjIxXK73Tp79qzWrFmjlJQUSdLq1as1fPhwbd++XRkZGd1xWQAAAMAvdFmyY2JiFBIS\nIpfL1WHc5XIpLi6u0zXx8fEKDQ31FGzpu7YfEhKiQ4cOnbdk22y2i8l+SZqamq7YtQIFe+KNPfHG\nnnhjT7wFyp40HDwu6eq8kx0VFSVb6iCrY5xXoLxHriT2xFsg7Mn/nsboTJdnssPCwpSeni673d5h\n3G63Kysrq9M1WVlZ+vbbb3XgwAHP2CeffKJz585p8ODBvuQGAAAAApZPz8kuLi5WTU2NVq5cqT17\n9mj+/PlyOBwqLCyUJJWUlCgnJ8czPycnR2PHjlVBQYFaWlr0wQcf6P7779e4ceP8+icSAAAAwAw+\nncnOy8vTsWPHVFZWJofDodTUVNXV1Xmeke10OjvctQ4KCtLbb7+tefPmafz48YqIiNDEiRP1u9/9\nrnteBQAAAOBHfP7Fx8LCQs+d6x+qrq72GouNjVVtbe2lJwMAAAAClM8fqw4AAADAN5RsAAAAwGSU\nbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADAZJRs\nAAAAwGSUbAAAAMBklGwAAADAZD6X7MrKSiUnJysiIkI2m00NDQ0+rdu3b5+ioqLUt2/fSw4JAAAA\nBBKfSnZtba2Kioq0aNEitbS0KDMzU5MnT9bhw4cvuK69vV0zZ87UhAkTzMgKAAAABASfSnZ5ebkK\nCgpUUFCg4cOHq6KiQvHx8aqqqrrguscee0xpaWm68847TQkLAAAABIIuS3Z7e7uam5uVm5vbYXzi\nxIlqbGw877p//vOfWr9+vZYvX375KQEAAIAAEtrVhKNHj+rcuXOKjY3tMB4bG6v33nuv0zVHjhzR\nnDlz9OabbyoyMtLnME1NTT7PvVxX8lqBgj3xxp54Y0+8sSfe/H1PToQPsDpCtzlx4oSamj6xOkaX\n/P09YgX2xJs/78mwYcMu+P1uebrIvffeq4ceekg2m02SZBhGd1wGAAAA8Etd3smOiYlRSEiIXC5X\nh3GXy6W4uLhO19TX12vLli16+umnJX1Xst1ut3r16qXKykr98pe/7HTd96W8O33/E9GVuFagYE+8\nsSfe2BNv7Im3QNmThoPHJZ2xOka3iIqKki11kNUxzitQ3iNXEnviLRD2pK2t7YLf77Jkh4WFKT09\nXXa7XXfccYdn3G63a/r06Z2uaW1t7fD3v//971qyZIm2b9+ugQMH+pIbAAAACFhdlmxJKi4u1qxZ\ns5SRkaGsrCxVVVXJ4XCosLBQklRSUqLt27frX//6lyRp5MiRHdZv375dwcHBGjFihMnxAQAAAP/j\nU8nOy8vTsWPHVFZWJofDodTUVNXV1SkxMVGS5HQ6deDAgW4NCgAAAAQKn0q2JBUWFnruXP9QdXX1\nBdfOnj1bs2fPvrhkAAAAQIDqlqeLAAAAAD0ZJRsAAAAwGSUbAAAAMBklGwAAADAZJRsAAAAwGSUb\nAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADCZzyW7\nsrJSycnJioiIkM1mU0NDw3nnbtq0SdOmTdPAgQN1zTXXKC0tTdXV1aYEBgAAAPydTyW7trZWRUVF\nWrRokVpaWpSZmanJkyfr8OHDnc5vbGzU9ddfr9dff127du3Sgw8+qDlz5mjdunWmhgcAAAD8Uagv\nk8rLy1VQUKCCggJJUkVFhd555x1VVVWprKzMa35JSUmHvxcWFqq+vl6vv/66ZsyYYUJsAAAAwH91\neSe7vb1dzc3Nys3N7TA+ceJENTY2+nyhr776Sv369bv4hAAAAECACTIMw7jQBIfDoYSEBG3evFnZ\n2dme8dLSUq1du1a7d+/u8iJvv/227rjjDjU2Nio9Pb3D99ra2jxf79u372LzAwBw0b4IH6AnPjhj\ndYxusWRMb117+nOrYwBXvWHDhnm+jo6O9vp+tz9d5P3339c999yj5cuXexVsAAAA4GrU5ZnsmJgY\nhYSEyOVydRh3uVyKi4u74NqGhgZNmTJFixcv1pw5c7oMY7PZupxzuZqamq7YtQIFe+KNPfHGnnhj\nT7wFyp40HDwu6eq8kx0VFSVb6iCrY5xXoLxHriT2xFsg7Mn/nsboTJd3ssPCwpSeni673d5h3G63\nKysr67zrNm/erNtuu02//e1vNXfuXB/jAgAAAIHPp+MixcXFqqmp0cqVK7Vnzx7Nnz9fDodDhYWF\nkr57mkhOTo5n/saNG3XbbbfpwQcf1IwZM+RyueRyuXT06NHueRUAAACAH/HpEX55eXk6duyYysrK\n5HA4lJqaqrq6OiUmJkqSnE6nDhw44Jm/atUqffPNN1q2bJmWLVvmGR88eLD2799v8ksAAAAA/ItP\nJVv67lnX39+5/qEffppjdXU1n/AIAACAHqvbny4CAAAA9DSUbAAAAMBklGwAAADAZJRsAAAAwGSU\nbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADAZJRsAAAAwGSUbAAAAMBklGwAAADAZJRs\nAAAAwGQ+l+zKykolJycrIiJCNptNDQ0NF5zf2tqqCRMmKDIyUklJSSotLb3ssAAAAEAg8Klk19bW\nqqioSIsWLVJLS4syMzM1efJkHT58uNP5J06cUG5uruLj49Xc3KwXX3xRL7zwgsrLy00NDwAAAPgj\nn0p2eXm5CgoKVFBQoOHDh6uiokLx8fGqqqrqdP6aNWv0zTffaNWqVRoxYoR+/vOf6/HHH9fvf/97\nU8MDAAAA/qjLkt3e3q7m5mbl5uZ2GJ84caIaGxs7XbNt2zbdcsst6tWrl2ds0qRJOnLkiA4ePHiZ\nkQEAAAD/FmQYhnGhCQ6HQwkJCdq8ebOys7M946WlpVq7dq12797ttWbSpElKSkrSq6++6hn77LPP\nNHjwYG3dulU33XSTZ7ytrc2M1wEAAABYIjo62muMp4sAAAAAJuuyZMfExCgkJEQul6vDuMvlUlxc\nXKdr4uLiOp0fFBR03jUAAADA1SK0qwlhYWFKT0+X3W7XHXfc4Rm32+2aPn16p2vGjRunhQsX6uzZ\ns55z2Rs2bNDAgQM1ePDgDnM7u70OAAAABDKfjosUFxerpqZGK1eu1J49ezR//nw5HA4VFhZKkkpK\nSpSTk+OZf/fddysyMlL5+fnatWuX3njjDT333HN69NFHu+dVAAAAAH6kyzvZkpSXl6djx46prKxM\nDodDqampqqurU2JioiTJ6XTqwIEDnvl9+/aV3W7Xww8/rIyMDPXr108LFixQUVFR97wKAAAAwI90\n+XQRAAAAABenRz1d5GI/Gv5qt2XLFt1+++1KTExUcHCwXnvtNasjWerZZ5/VjTfeqOjoaA0YMEA/\n/elPtWvXLqtjWaqyslJpaWmKjo5WdHS0MjMztX79eqtj+ZVnn31WwcHBmjdvntVRLPPMM88oODi4\nw5+BAwdaHctyTqdT+fn5GjBggCIiIpSamqotW7ZYHcsyQ4cO9XqfBAcHa+rUqVZHs4zb7daTTz7p\n6SbJycl68skn5Xa7rY5mqZMnT6qoqEhDhgxRZGSksrOz1dTUZHWsi9ZjSvbFfjR8T3Dy5EmNHj1a\nFRUVioyMtDqO5TZv3qxf//rX2rp1q+rr6xUaGqqcnBx9+eWXVkezTFJSkp5//nl98MEHam5u1o9/\n/GNNmzZNra2tVkfzC9u2bdMrr7yitLQ0q6NY7rrrrpPL5ZLT6ZTT6dSHH35odSRLtbW1KSsrS0FB\nQaqrq9OePXu0fPlyDRgwwOpolmlqavK8P5xOp3bs2KGgoCDdddddVkezzNKlS1VVVaWXXnpJe/fu\nVUVFhSorK/Xss89aHc1S999/v+x2u1avXq3W1lbl5uYqJydHDofD6mgXx+ghbrrpJuOBBx7oMDZs\n2DDjiSeesCiRf+nTp4+xatUqq2P4lZMnTxohISHG22+/bXUUv9K/f3/jj3/8o9UxLPfll18aKSkp\nxsaNG40JEyYYc+fOtTqSZZ5++mlj9OjRVsfwKyUlJUZ2drbVMfza4sWLjX79+hmnT5+2OoplfvKT\nnxj5+fkdxmbPnm1MnTrVokTW++abb4zQ0FDjH//4R4fx9PR048knn7Qo1aXpEXeyL+Wj4YGvvvpK\nbrdb/fr1szqKX3C73Vq3bp1OnTqlzMxMq+NYbs6cOcrLy9P48eOtjuIX9u/fr4SEBCUnJ2vmzJkd\nfhm+J3rzzTd10003acaMGYqNjdWYMWO0YsUKq2P5lT/96U+699571bt3b6ujWCY7O1v19fXau3ev\nJOk///mP/v3vf2vKlCkWJ7POt99+q3Pnznm9LyIiIgLumG+PKNlHjx7VuXPnFBsb22E8NjZWTqfT\nolTwd/Pnz9fYsWM1btw4q6NYqrW1VVFRUerdu7ceeugh/e1vf9OoUaOsjmWpV155Rfv379fixYut\njuIXbr75ZtXU1Ojdd9/Vq6++KqfTqczMTB0/ftzqaJbZv3+/KisrlZKSog0bNqioqEgLFy5UZWWl\n1dH8woYNG/Tpp5/qV7/6ldVRLPX444/rF7/4hUaOHKlevXpp9OjRys/P1wMPPGB1NMv06dNH48aN\n0+LFi3XkyBG53W6tWbNGW7duDbjjIj49wg/oaYqLi9XY2Kj3339fQUFBVsex1HXXXaedO3eqra1N\nf/3rXzVr1ixt2rRJI0eOtDqaJT766CP95je/0fvvv6/g4B5xn6JLkyZN6vD3m2++WUOHDtWqVat6\n7KNb3W63brzxRpWVlUmS0tLS9NFHH2nFihV66KGHLE5nvVdeeUUZGRlKTU21Ooql1q1bp9WrV2vd\nunUaOXKkWlpaNG/ePA0dOlT33Xef1fEss2bNGhUUFCgxMVGhoaEaO3as7r77bjU3N1sd7aL0iP9D\nXMpHw6PneuSRR1RbW6v6+nqvTyjtiUJDQ5WcnKwxY8aorKxMN9xwg8rLy62OZZmtW7fqv//9r0aO\nHKmwsDCFhYVp06ZNWrFihXr16qX29narI1ouMjJSo0aN0r59+6yOYpn4+HiNGDGiw9iIESN06NAh\nixL5jy+++EJvvfWW5syZY3UUyz322GNasGCBpk+frlGjRumee+5RcXFxj//Fx6FDh6q+vl6nTp3S\nZ599pm3btuns2bNKTk62OtpF6REl+38/Gv5/2e12ZWVlWZQK/mj+/Pmegj1s2DCr4/glt9utM2fO\nWB3DMj/72c/04YcfaufOnZ4/NptNM2fO1M6dOxUWFmZ1RMudPn1ae/bsUXx8vNVRLJOVleU5Z/u9\nvXv38oO7pOrqaoWHh2vGjBlWR7Hc119/7fUvYsHBwT3+EX7fi4iIUGxsrI4fP653331X06ZNszrS\nRekxx0WKi4s1a9YsZWRkKCsrS1VVVXI4HD363NOpU6f08ccfyzAMud1uHTp0SDt37lT//v2VlJRk\ndbwr7uGHH9aaNWv05ptvKjo62vMvH3369NE111xjcTprlJSUaMqUKUpKStKJEyf05z//WZs2berR\nz8ru27ev11GZa665Rv379/e6c9lTLFiwQFOnTtWgQYPkcrlUWlqqr7/+WrNnz7Y6mmUeeeQRZWVl\nacmSJbrrrru0Y8cOLV++XEuXLrU6muVWrlypmTNn8uhYSVOnTtXSpUs1ZMgQjRo1Sjt27FB5ebny\n8/OtjmapDRs2yO1267rrrtO+ffv02GOPaeTIkYG3L1Y/3uRKqqqqMoYOHWqEh4cbNpvNaGhosDqS\npTZu3GgEBQUZwcHBHf7cd999VkezRGd7ERwcbDzzzDNWR7NMfn6+MWTIECM8PNyIjY01cnNzDbvd\nbnUsv3Prrbf26Ef4zZgxw0hISDB69+5tJCYmGnfeeaexe/duq2NZbv369UZaWpoRERFhDB8+3Hjp\npZesjmS5+vp6Izg42GhqarI6il84efKk8cgjjxhDhgwxIiMjjZSUFGPRokXGmTNnrI5mqb/85S9G\nSkqKER4ebgwcONCYN2+e8dVXX1kd66LxseoAAACAyXrEmWwAAADgSqJkAwAAACajZAMAAAAmo2QD\nAAAAJqNkAwAAACajZAMAAAAmo2QDAAAAJqNkAwAAACb7f6dlWzX+0qwQAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1584,8 +1630,8 @@ "\n", "random.seed(3)\n", "np.set_printoptions(precision=2, suppress=True, linewidth=60)\n", - "simulate(4, kernel=[1.], sensor_accuracy=.999,\n", - " move_distance=4, do_print=True)" + "train_filter(4, kernel=[1.], sensor_accuracy=.999,\n", + " move_distance=4, do_print=True)" ] }, { @@ -1597,7 +1643,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1608,22 +1654,22 @@ "text": [ "time 0: pos 4, sensed 4, at position 4\n", " predicted position is 0 with confidence 84.1121%:\n", - "time 1: pos 8, sensed 8, at position 8\n", - " predicted position is 4 with confidence 43.4416%:\n", - "time 2: pos 2, sensed 2, at position 2\n", - " predicted position is 2 with confidence 81.0925%:\n", - "time 3: pos 5, sensed 5, at position 5\n", - " predicted position is 5 with confidence 47.8278%:\n", + "time 1: pos 8, sensed 9, at position 8\n", + " predicted position is 4 with confidence 59.4728%:\n", + "time 2: pos 3, sensed 3, at position 3\n", + " predicted position is 8 with confidence 25.7722%:\n", + "time 3: pos 7, sensed 8, at position 7\n", + " predicted position is 7 with confidence 28.8387%:\n", "\n", - "final position is 5\n", - "predicted position is 5 with confidence 47.8278%:\n" + "final position is 7\n", + "predicted position is 8 with confidence 37.5836%:\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\nLpdLcXFxba6pra3V9u3b9eSTT0r6psl2u93q1q2bysvL9atf/arNdZea8o506SeizrhWsKAmvqiJ\nL2rii5r4oibeqIcvauKLmvgKhpq0tLRc9vV2m+yIiAilpaXJbrfrrrvu8ozb7XZNmzatzTXNzc1e\nf//HP/6h5cuXa/fu3erfv78/uQEAAICg1W6TLUmFhYWaOXOm0tPTlZmZqYqKCjkcDuXn50uSioqK\ntHv3bv373/+WJA0fPtxr/e7duxUaGqphw4aZHB8AAKBjfHTitBxnL3T4dU537ydJqvvk8w6/1iXx\nPcKVHNOr067XFfnVZOfk5OjkyZMqKSmRw+FQSkqKampqlJCQIElyOp06cuRIhwYFAADoTI6zFzRv\n24lOvOLXnXalVf8Xo+SYTrtcl+RXky1J+fn5njvX31VZWXnZtbNmzdKsWbOuLBkAAAAQpDrkdBEA\nAACgK6PJBgAAAExGkw0AAACYjCYbAAAAMBlNNgAAAGAymmwAAADAZDTZAAAAgMn8PicbAAD8cPF0\nQ8BcNNkAAICnGwImY7sIAAAAYDKabAAAAMBkNNkAAACAyWiyAQAAAJP53WSXl5crKSlJkZGRstls\nqqur+965W7du1dSpU9W/f3/16NFDqampqqysNCUwAAAAEOj8arKrq6tVUFCgJUuWqKmpSRkZGZo0\naZKOHTvW5vz6+nrdeOONevXVV7Vv3z7NnTtXc+bM0caNG00NDwAAAAQiv47wKy0tVV5envLy8iRJ\nZWVleuutt1RRUaGSkhKf+UVFRV5/z8/PV21trV599VVNnz7dhNgAAABA4Gr3TnZra6saGxuVnZ3t\nNT5hwgTV19f7faFTp06pT58+V54QAAAACDLt3sk+ceKELl68qNjYWK/x2NhYvfPOO35d5M0339S7\n777bblPe0NDg179nhs68VrCgJr6oiS9q4oua+KIm3oKhHpeexPhDdPr0aTU0fHTl66iJ5QL5szNk\nyJDLvt7hp4vs2LFD9913n1atWqW0tLSOvhwAAABguXbvZMfExCgsLEwul8tr3OVyKS4u7rJr6+rq\nNHnyZC1btkxz5sxpN4zNZmt3zrW69BNRZ1wrWFATX9TEFzXxRU18URNvwVSPuk8+V2c+6rwz9erV\nS7aU6694HTWxTjB8dlpaWi77ert3siMiIpSWlia73e41brfblZmZ+b3rtm3bpjvuuEO/+93vNG/e\nPD/jAgAAAMHPr+0ihYWFqqqq0po1a3TgwAEtWLBADodD+fn5kr45TSQrK8szf8uWLbrjjjs0d+5c\nTZ8+XS6XSy6XSydOnOiYdwEAAAAEEL+O8MvJydHJkydVUlIih8OhlJQU1dTUKCEhQZLkdDp15MgR\nz/y1a9fqq6++0sqVK7Vy5UrP+MCBA3X48GGT3wIAAAAQWPxqsqVvzrq+dOf6u777NMfKykqe8AgA\nAIAuy+8mG7DaRydOy3H2Qqdc69KxTd/80kvHi+8RruSYXp1yLQAA0PFoshE0HGcvaN62zt7X3zm/\nVb7q/2KUHNMplwIAAJ2gw8/JBgAAALoammwAAADAZDTZAAAAgMlosgEAAACT0WQDAAAAJqPJBgAA\nAExGkw0AAACYjCYbAAAAMBlNNgAAAGAynvgYoHiEOPzB9wlwdTrrs9PZnxuJzw4QKGiyAxSPEIc/\n+D4Brk7nf3Y653Mj8dkBAoXf20XKy8uVlJSkyMhI2Ww21dXVXXZ+c3Ozxo8fr6ioKCUmJqq4uPia\nwwIAAADBwK8mu7q6WgUFBVqyZImampqUkZGhSZMm6dixY23OP336tLKzsxUfH6/GxkY9//zzeu65\n51RaWmpqeAAAACAQ+dVkl5aWKi8vT3l5eRo6dKjKysoUHx+vioqKNuevX79eX331ldauXathw4bp\nF7/4hR577DH94Q9/MDU8AAAAEIjabbJbW1vV2Nio7Oxsr/EJEyaovr6+zTW7du3Sbbfdpm7dunnG\nJk6cqOPHj+uTTz65xsgAAABAYAsxDMO43ASHw6EBAwZo27ZtGjt2rGe8uLhYGzZs0P79+33WTJw4\nUYmJiXr55Zc9Y59++qkGDhyonTt36pZbbvGMt7S0mPE+AAAAAEtER0f7jHFONgAAAGCydpvsmJgY\nhYWFyeVyeY27XC7FxcW1uSYuLq7N+SEhId+7BgAAAPihaPec7IiICKWlpclut+uuu+7yjNvtdk2b\nNq3NNWPGjNHixYt1/vx5z77szZs3q3///ho4cKDX3LZurwMAAADBzK/tIoWFhaqqqtKaNWt04MAB\nLViwQA6HQ/n5+ZKkoqIiZWVleebfe++9ioqKUm5urvbt26fXXntNzzzzjB599NGOeRcAAABAAPHr\niY85OTk6efKkSkpK5HA4lJKSopqaGiUkJEiSnE6njhw54pnfu3dv2e12Pfzww0pPT1efPn20cOFC\nFRQUdMy7AAAAAAJIu6eLAAAAALgyXep0kSt9NPwP3fbt23XnnXcqISFBoaGheuWVV6yOZKmnn35a\nN998s6Kjo9WvXz/97Gc/0759+6yOZany8nKlpqYqOjpa0dHRysjI0KZNm6yOFVCefvpphYaGav78\n+VZHscxTTz2l0NBQrz/9+/e3OpblnE6ncnNz1a9fP0VGRiolJUXbt2+3OpZlBg8e7PN9EhoaqilT\nplgdzTJut1tLly719CZJSUlaunSp3G631dEsdebMGRUUFGjQoEGKiorS2LFj1dDQYHWsK9Zlmuwr\nfTR8V3DmzBmNHDlSZWVlioqKsjqO5bZt26bf/OY32rlzp2praxUeHq6srCx98cUXVkezTGJiop59\n9lm99957amxs1E9+8hNNnTpVzc3NVkcLCLt27dJLL72k1NRUq6NY7oYbbpDL5ZLT6ZTT6dT7779v\ndSRLtbS0KDMzUyEhIaqpqdGBAwe0atUq9evXz+polmloaPB8fzidTu3Zs0chISG65557rI5mmRUr\nVqiiokIvvPCCDh48qLKyMpWXl+vpp5+2OpqlZs+eLbvdrnXr1qm5uVnZ2dnKysqSw+GwOtqVMbqI\nW265xXjwwQe9xoYMGWI8/vjjFiUKLD179jTWrl1rdYyAcubMGSMsLMx48803rY4SUPr27Wv86U9/\nsjqG5b744gsjOTnZ2LJlizF+/Hhj3rx5VkeyzJNPPmmMHDnS6hgBpaioyBg7dqzVMQLasmXLjD59\n+hjnzp2zOoplfvrTnxq5ubleY7NmzTKmTJliUSLrffXVV0Z4eLjxz3/+02s8LS3NWLp0qUWprk6X\nuJN9NY+GB06dOiW3260+ffpYHSUguN1ubdy4UWfPnlVGRobVcSw3Z84c5eTkaNy4cVZHCQiHDx/W\ngAEDlJSUpBkzZnj9MnxX9Prrr+uWW27R9OnTFRsbq1GjRmn16tVWxwoof/7zn3X//ffruuuuszqK\nZcaOHava2lodPHhQkvSf//xH7777riZPnmxxMutcuHBBFy9e9Pm+iIyMDLptvl2iyT5x4oQuXryo\n2NhYr/HY2Fg5nU6LUiHQLViwQKNHj9aYMWOsjmKp5uZm9erVS9ddd50eeugh/f3vf9eIESOsjmWp\nl156SYcPH9ayZcusjhIQbr31VlVVVentt9/Wyy+/LKfTqYyMDH3++edWR7PM4cOHVV5eruTkZG3e\nvFkFBQVavHixysvLrY4WEDZv3qyPP/5Yv/71r62OYqnHHntMv/zlLzV8+HB169ZNI0eOVG5urh58\n8EGro1mmZ8+eGjNmjJYtW6bjx4/L7XZr/fr12rlzZ9BtF/HrCD+gqyksLFR9fb127NihkJAQq+NY\n6oYbbtDevXvV0tKiv/3tb5o5c6a2bt2q4cOHWx3NEh988IF++9vfaseOHQoN7RL3Kdo1ceJEr7/f\neuutGjx4sNauXdtlj251u926+eabVVJSIklKTU3VBx98oNWrV+uhhx6yOJ31XnrpJaWnpyslJcXq\nKJbauHGj1q1bp40bN2r48OFqamrS/PnzNXjwYD3wwANWx7PM+vXrlZeXp4SEBIWHh2v06NG69957\n1djYaHW0K9Il/gtxNY+GR9f1yCOPqLq6WrW1tT5PKO2KwsPDlZSUpFGjRqmkpEQ33XSTSktLrY5l\nmZ07d+p///ufhg8froiICEVERGjr1q1avXq1unXrptbWVqsjWi4qKkojRozQoUOHrI5imfj4eA0b\nNsxrbNiwYTp69KhFiQLHZ599pjfeeENz5syxOorlFi1apIULF2ratGkaMWKE7rvvPhUWFnb5X3wc\nPHiwamtrdfbsWX366afatWuXzp8/r6SkJKujXZEu0WR/+9Hw32a325WZmWlRKgSiBQsWeBrsIUOG\nWB0nILndbn399ddWx7DMz3/+c73//vvau3ev54/NZtOMGTO0d+9eRUREWB3RcufOndOBAwcUHx9v\ndRTLZGZmevbZXnLw4EF+cJdUWVmp7t27a/r06VZHsdyXX37p83/EQkNDu/wRfpdERkYqNjZWn3/+\nud5++21NnTrV6khXpMtsFyksLNTMmTOVnp6uzMxMVVRUyOFwdOl9T2fPntWHH34owzDkdrt19OhR\n7d27V3379lViYqLV8Trdww8/rPXr1+v1119XdHS05/989OzZUz169LA4nTWKioo0efJkJSYm6vTp\n0/rLX/6irVu3dumzsnv37u2zVaZHjx7q27evz53LrmLhwoWaMmWKrr/+erlcLhUXF+vLL7/UrFmz\nrI5mmUceeUSZmZlavny57rnnHu3Zs0erVq3SihUrrI5muTVr1mjGjBkcHStpypQpWrFihQYNGqQR\nI0Zoz549Ki0tVW5urtXRLLV582a53W7dcMMNOnTokBYtWqThw4cHX12sPt6kM1VUVBiDBw82unfv\nbthsNqOurs7qSJbasmWLERISYoSGhnr9eeCBB6yOZom2ahEaGmo89dRTVkezTG5urjFo0CCje/fu\nRmxsrJGdnW3Y7XarYwWc22+/vUsf4Td9+nRjwIABxnXXXWckJCQYd999t7F//36rY1lu06ZNRmpq\nqhEZGWkMHTrUeOGFF6yOZLna2lojNDTUaGhosDpKQDhz5ozxyCOPGIMGDTKioqKM5ORkY8mSJcbX\nX39tdTRL/fWvfzWSk5ON7t27G/379zfmz59vnDp1yupYV4zHqgMAAAAm6xJ7sgEAAIDORJMNAAAA\nmIwmGwAAADAZTTYAAABgMppsAAAAwGQ02QAAAIDJaLIBAAAAk9FkAwAAACb7f+ItucxpeHifAAAA\nAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1631,23 +1677,23 @@ } ], "source": [ - "random.seed(3)\n", - "simulate(4, kernel=[.1, .8, .1], sensor_accuracy=.9,\n", - " move_distance=4, do_print=True)" + "random.seed(5)\n", + "train_filter(4, kernel=[.1, .8, .1], sensor_accuracy=.9,\n", + " move_distance=4, do_print=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here we see that there was a sense error at time 1, but we are still quite confident in our position. \n", + "There was a sensing error at time 1, but we are still quite confident in our position. \n", "\n", "Now lets run a very long simulation and see how the filter responds to errors." ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 40, "metadata": { "collapsed": false, "scrolled": false @@ -1655,9 +1701,9 @@ "outputs": [ { "data": { - "image/png": "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\n7Azut7KyEqtXr8a//vUvnD9/Hjdv3tT5MMvVq1dbPPf8/HwAwMiRI/W2ubq6IiAgALm5uTh//jz6\n9euns12tVuuNqQtjUwWZEAKRkZFwdHTEu+++a/S4Dz/8EDNmzMCECRPw9ddfw8/PD7/88gvWrFmD\nuLg4fPnll8jMzIRCwdfURPQ/zPf/aY35PmjQILz22mtITU1FYGAgnn32Wbi4uODf//43jhw5gkcf\nfRQnTpxgtrciXFyTUcrKygAA33zzTb3XokmShMrKSr32+88m1Pnjjz8wcuRI5ObmIiAgAFOmTIGL\niwvs7OwghMCiRYtw+/btFs+9vLwckiTVO4+665DLy8v1tt17TWKduk+q19bWtnhuhqxbtw4HDhzA\nzp074ezsbNSY8+fP4+WXX0ZgYCC2b9+ubX/ooYewevVqXL58Gbt378b27dvx4osvmmTeRNQ2Md//\npzXme924AQMG4L333sPOnTshhED//v2Rnp6OL7/8EidOnDB4hxiyDC6uySh190xNSUnRvqVnrPru\n27l7927k5uYiKipK7wMdxcXFWLRoUfMme5+6uRcXF8PJyUlve3FxsU4/S/v+++8BABMnTjS4XaPR\naM9Q/Pbbb3ByckJGRgZqamoQFhZmcMyIESO0P28uronoXsx382lOvteZPn06pk+frjdm2bJlAICB\nAwfKPV1qJi6uSavuU9uGXrGHhIQAAA4dOtTk8K3PxYsXAQDPPvus3rb6ntDV0BzrExwcjOPHjyM7\nOxu9e/fW2faf//wHp06dQocOHfS2WUpYWBjs7e0Nbtu4cSOUSqX2Or26ftXV1QDuHo8hde317ZeI\nHmzM97ab7w25ePEijhw5gqCgIPTp00fWuVLzcXFNWl27dgUAFBUV6X0QJSgoCKGhodi9ezc2btyI\nV155RW/8+fPnoVQq4eXlZVS9uhrZ2dkYO3astr2wsBBz585tdI7Gevnll7Fx40YsX74czzzzjPat\nMyEE5s6di1u3buH111/XBnsdUz/NTNTzoITIyEhERkYa3LZx40Z07NgR77//vk778OHDAQCff/45\n4uLiEBgYqN32888/47333oMkSRg9erQ8kyeiNoX53nbzHQAqKir0zsz/+uuvmDJlCiRJwqpVq1o8\nZ5IPF9ekFR4ejs8//xyvvvoqnn32WahUKnTu3Bmvv/46AGD79u0YNWoUZsyYgbVr1+Lxxx9Hly5d\n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\nQmCC\n", + "image/png": "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\njRbL7Nixo1i3bp1R23vvvSd8fHwsNgchhLh165bQ6XRCCCH+8Ic/iNGjR1s035awvjec+m6J2i4E\n6zvr+++acn1vNOdk1+Xxv03JrFmzkJycjNTUVPj4+Fh7OqioqMDdu3dlzXj55Zdx4sQJ/PTTT4af\ngIAATJgwAT/99BPs7OxkzX/UnTt3cOrUKbRv3172rIEDBxrOWat0+vRpiz+2OjExEfb29hg/frzF\nMm/dugWl0rg0KZVKi93iqZJarYZGo8Fvv/2G3bt3IzQ01KL5toT1veHUd0vUdoD1nfX9d026vsuy\ndJdJdY//vXTpkuzZpaWlIicnRxw7dkw4ODiIZcuWiZycHItkv/XWW8LJyUmkpqYKnU5n+CktLZU9\nW4gHj1U+dOiQKCgoECdOnBDz5s0TKpVK7N692yL5D7Pk14l/+tOfxIEDB0R+fr44cuSIGDVqlHB2\ndrbIf/PMzEzRvHlzERsbK86dOyf+9re/CWdnZ5GQkCB79sO6du1a5Y4PcgsPDxcdO3YUO3bsEAUF\nBeK7774T7dq1E3PnzrVI/u7du0VKSorIz88Xe/bsEc8++6wIDAwUZWVlFsm3Vazvlq/vDam2C8H6\nzvouP0vX90a1yBZCiISEBOHl5SXs7e1FQECASE9Pt0huWlqa4aush38mT54se7apXKVSKZYsWSJ7\nthAP/ig6d+4s7O3thUajESEhIUKr1Vok+1HDhg2zWBEeP368cHd3Fy1atBAeHh7ilVdeEXl5eRbJ\nFkKInTt3Cj8/P6FWq0W3bt3EJ598YrFsIYRITU0VSqVSZGVlWTS3tLRUzJ49W3Tu3Fk4ODiILl26\niAULFoi7d+9aJP9vf/ub6NKli7C3txcdOnQQM2fOFDdu3LBItq1jfbdsfW9ItV0I1ndLYn23TH3n\nY9WJiIiIiCTWaM7JJiIiIiJqLLjItlEXL16EUqlERESEtaciufDwcCiVSly6dMnaUyEisjjWd6KG\ngYtsG6ZQKKBQKIzagoKCGnwBqyyyBw8eNPm6qf2ytuLiYqxatQqvvfYann76adjZ2UGpVGLPnj3V\njlmyZAmUSqXJH5VKVe3Y69evY/bs2fDy8oK9vT3c3d0xZcoUXLlyRa7dI6IGhvXdcixV3/fu3Ys/\n/elPCA4OhouLC5RKpUWfzkm118zaEyDrcHd3R15eHpydnY3aG2IBe1RNc1yxYgWio6Ph7u5uwVk9\n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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1669,9 +1715,9 @@ " for i in range (4):\n", " random.seed(3)\n", " plt.subplot(321+i)\n", - " simulate(148+i, kernel=[.1, .8, .1], \n", - " sensor_accuracy=.8,\n", - " move_distance=4, do_print=False)\n", + " train_filter(148+i, kernel=[.1, .8, .1], \n", + " sensor_accuracy=.8,\n", + " move_distance=4, do_print=False)\n", " plt.title ('iteration {}'.format(148+i))" ] }, @@ -1693,7 +1739,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We developed the math in this chapter merely by reasoning about the information we have at each moment. In the process we discovered *Bayes Theorem*. We will go into the specifics of the math of Bayes theorem later in the book. For now we will take a more intuitive approach. Recall from the preface that Bayes theorem tells us how to compute the probability of an event given previous information. That is exactly what we have been doing in this chapter. With luck our code should match the Bayes Theorem equation! \n", + "We developed the math in this chapter merely by reasoning about the information we have at each moment. In the process we discovered *Bayes Theorem*. Bayes theorem tells us how to compute the probability of an event given previous information. That is exactly what we have been doing in this chapter. With luck our code should match the Bayes Theorem equation! \n", "\n", "We implemented the `update()` function with this probability calculation:\n", "\n", @@ -1703,37 +1749,33 @@ "\n", "Bayes theorem is\n", "\n", - "$$P(A|B) = \\frac{P(B | A)\\, P(A)}{P(B)}$$\n", + "$$P(A \\mid B) = \\frac{P(B \\mid A)\\, P(A)}{P(B)}$$\n", "\n", "If you are not familiar with this notation, let's review. $P(A)$ means the probability of event $A$. If $A$ is the event of a fair coin landing heads, then $P(A) = 0.5$.\n", "\n", - "$P(A|B)$ is called a *conditional probability*. That is, it represents the probability of $A$ happening *if* $B$ happened. For example, it is more likely to rain today if it also rained yesterday because rain systems tend to last more than one day. We'd write the probability of it raining today given that it rained yesterday as $P(\\mathtt{rain_{today}}|\\mathtt{rain_{yesterday}})$.\n", + "$P(A \\mid B)$ is called a *conditional probability*. That is, it represents the probability of $A$ happening *if* $B$ happened. For example, it is more likely to rain today if it also rained yesterday because rain systems usually last more than one day. We'd write the probability of it raining today given that it rained yesterday as $P(\\mathtt{rain\\_today} \\mid \\mathtt{rain\\_yesterday})$.\n", "\n", - "In the Bayes theorem equation above $B$ is the *evidence*, $P(A)$ is the *prior*, $P(B | A)$ is the *likelihood*, and $P(A|B)$ is the *posterior*. By substituting the mathematical terms with the corresponding words you can see that Bayes theorem matches out update equation. Let's rewrite the equation in terms of our problem. We will use $x_i$ for the position at *i*, and $Z$ for the measurement. Hence, we want to know $P(x_i|Z)$, that is, the probability of the dog being at $x_i$ given the measurement $Z$. \n", + "In the Bayes theorem equation above $B$ is the *evidence*, $P(A)$ is the *prior*, $P(B \\mid A)$ is the *likelihood*, and $P(A \\mid B)$ is the *posterior*. By substituting the mathematical terms with the corresponding words you can see that Bayes theorem matches out update equation. Let's rewrite the equation in terms of our problem. We will use $x_i$ for the position at *i*, and $Z$ for the measurement. Hence, we want to know $P(x_i \\mid Z)$, that is, the probability of the dog being at $x_i$ given the measurement $Z$. \n", "\n", "So, let's plug that into the equation and solve it.\n", "\n", - "$$P(x_i|Z) = \\frac{P(Z|x_i) P(x_i)}{P(Z)}$$\n", + "$$P(x_i \\mid Z) = \\frac{P(Z \\mid x_i) P(x_i)}{P(Z)}$$\n", "\n", - "That looks ugly, but it is actually quite simple. Let's figure out what each term on the right means. First is $P(Z|x_i)$. This is the probability for the measurement at every cell $x_i$. $P(x_i)$ is the *prior* - our belief before incorporating the measurements. We multiply those together. This is just the unnormalized multiplication in the `update()` function, where `belief` is our prior $P(x_i)$.\n", + "That looks ugly, but it is actually quite simple. Let's figure out what each term on the right means. First is $P(Z \\mid x_i)$. This is the the likelihood, or the probability for the measurement at every cell $x_i$. $P(x_i)$ is the *prior* - our belief before incorporating the measurements. We multiply those together. This is just the unnormalized multiplication in the `update()` function:\n", "\n", "```python\n", - "for i, val in enumerate(map_):\n", - " if val == z:\n", - " belief[i] *= correct_scale\n", - " else:\n", - " belief[i] *= 1.\n", + "def update(likelihood, prior):\n", + " posterior = prior * likelihood # P(Z|x)*P(x)\n", + " return normalize(posterior)\n", "```\n", "\n", - "I added the `else` here, which has no mathematical effect, to point out that every element in $x$ (called `belief` in the code) is multiplied by a probability. You may object that I am multiplying by a scale factor, which I am, but this scale factor is derived from the probability of the measurement being correct vs the probability being incorrect.\n", - "\n", "The last term to consider is the denominator $P(Z)$. This is the probability of getting the measurement $Z$ without taking the location into account. We compute that by taking the sum of $x$, or `sum(belief)` in the code. That is how we compute the normalization! So, the `update()` function is doing nothing more than computing Bayes theorem.\n", "\n", "The literature often gives you these equations in the form of integrals. After all, an integral is just a sum over a continuous function. So, you might see Bayes' theorem written as\n", "\n", - "$$P(A|B) = \\frac{P(B | A)\\, P(A)}{\\int P(B|A) P(B) \\mathtt{d}y}\\cdot$$\n", + "$$P(A \\mid B) = \\frac{P(B \\mid A)\\, P(A)}{\\int P(B \\mid A) P(B) \\mathtt{d}y}\\cdot$$\n", "\n", - "In practice the denominator can be fiendishly difficult to solve analytically (a recent opinion piece for the Royal Statistical Society called it a \"dog's breakfast\" [8], and filtering textbooks are filled with integral laden equations which you cannot be expected to solve. We will learn more techniques to handle this in the **Particle Filters** chapter. Until then, recognize that in practice it is just a normalization term over which we can sum. What I'm trying to say is that when you are faced with a page of integrals, just think of them of sums, and relate them back to this chapter, and often the difficulties will fade. Ask yourself \"why are we summing these values\", and \"why am I dividing by this term\". Surprisingly often the answer is readily apparent." + "In practice the denominator can be fiendishly difficult to solve analytically (a recent opinion piece for the Royal Statistical Society called it a \"dog's breakfast\" [8]. Filtering textbooks are filled with integral laden equations which you cannot be expected to solve. We will learn more techniques to handle this in the **Particle Filters** chapter. Until then, recognize that in practice it is just a normalization term over which we can sum. What I'm trying to say is that when you are faced with a page of integrals, just think of them of sums, and relate them back to this chapter, and often the difficulties will fade. Ask yourself \"why are we summing these values\", and \"why am I dividing by this term\". Surprisingly often the answer is readily apparent." ] }, { @@ -1769,20 +1811,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The code is very short, but the result is huge! We have implemented a form of a Bayesian filter. We have learned how to start with no information and derive information from noisy sensors. Even though the sensors in this chapter are very noisy (most sensors are more than 80% accurate, for example) we quickly converge on the most likely position for our dog. We have learned how the predict step always degrades our knowledge, but the addition of another measurement, even when it might have noise in it, improves our knowledge, allowing us to converge on the most likely result.\n", + "The code is very short, but the result is impressive! We have implemented a form of a Bayesian filter. We have learned how to start with no information and derive information from noisy sensors. Even though the sensors in this chapter are very noisy (most sensors are more than 80% accurate, for example) we quickly converge on the most likely position for our dog. We have learned how the predict step always degrades our knowledge, but the addition of another measurement, even when it might have noise in it, improves our knowledge, allowing us to converge on the most likely result.\n", "\n", - "If you followed the math carefully you will realize that all of this math is exact. The bar charts that we are displaying are not an estimate or guess - they are mathematically exact results that exactly represent our knowledge. The knowledge is probabilistic, to be sure, but it is exact, and correct.\n", + "This book is mostly about the Kalman filter. The math it uses is different, but the logic is exactly the same as used in this chapter. It uses Bayesian reasoning to form estimates from a combination of measurements and process models. \n", "\n", - "Furthermore, through basic reasoning we were able to discover two extremely important theorems: Bayes theorem and the total probability theorem. I hope you spent time on those sections as in almost any other source they will express filtering algorithms in terms of these two theorems. It will be your job to understand what these equations mean and how to turn them into code. \n", - "\n", - "This book is mostly about the Kalman filter. In the g-h filter chapter I told you that the Kalman filter is a type of g-h filter. It is also a type of Bayesian filter. It also uses Bayes theorem and the total probability theorem to filter data, although with a different set of assumptions and conditions than used in this chapter.\n", - "\n", - "The discrete Bayes filter allows us to filter sensors and track an object, but we are a long way from tracking an airplane or a car. This code only handles the 1 dimensional case, whereas cars and planes operate in 2 or 3 dimensions. Also, our position vector is *multimodal*. It expresses multiple beliefs at once. Imagine if your GPS told you \"it's 20% likely that you are here, but 10% likely that you are on this other road, and 5% likely that you are at one of 14 other locations\". That would not be very useful information. Also, the data is discrete. We split an area into 10 (or whatever) different locations, whereas in most real world applications we want to work with continuous data. We want to be able to represent moving 1 km, 1 meter, 1 mm, or any arbitrary amount, such as 2.347 cm. \n", - "\n", - "Finally, the bar charts may strike you as being a bit less certain than we would want. A 25% certainty may not give you a lot of confidence in the answer. Of course, what is important here is the ratio of this probability to the other probabilities in your vector. If the next largest bar is 23% then we are not very knowledgeable about our position, whereas if the next largest is 3% we are in fact quite certain. But this is not clear or intuitive. However, there is an extremely important insight that Kalman filters implement that will significantly improve our accuracy from the same data.\n", - "\n", - "\n", - "**If you can understand this chapter you will be able to understand and implement Kalman filters.** I cannot stress this enough. If anything is murky, go back and reread this chapter and play with the code. The rest of this book will build on the algorithms that we use here. If you don't intuitively understand why this filter works, and can't at least work through the math, you will have little success with the rest of the material. However, if you grasp the fundamental insight - multiplying probabilities when we measure, and shifting probabilities when we update leads to a converging solution - then you understand everything important you need for the Kalman filter. " + "**If you can understand this chapter you will be able to understand and implement Kalman filters.** I cannot stress this enough. If anything is murky, go back and reread this chapter and play with the code. The rest of this book will build on the algorithms that we use here. If you don't understand why this filter works you will have little success with the rest of the material. However, if you grasp the fundamental insight - multiplying probabilities when we measure, and shifting probabilities when we update leads to a converging solution - then after learning a bit of math you are ready to implement a Kalman filter." ] }, { diff --git a/book_format.py b/book_format.py index 99655e5..97d34c6 100644 --- a/book_format.py +++ b/book_format.py @@ -35,7 +35,7 @@ if matplotlib.__version__ == '1.4.3': warnings.simplefilter(action="ignore", category=FutureWarning) np.set_printoptions(precision=3) -sys.path.insert(0, './code') # allow us to import book_format +sys.path.insert(0, './code') # allow us to import code def test_filterpy_version(): @@ -137,4 +137,3 @@ def load_style(directory = '.', name='code/custom.css'): styles = open(os.path.join(directory, name), 'r').read() return HTML(styles) - diff --git a/code/book_plots.py b/code/book_plots.py index 6362376..b8b9296 100644 --- a/code/book_plots.py +++ b/code/book_plots.py @@ -40,12 +40,38 @@ def show_legend(): plt.legend(loc='center left', bbox_to_anchor=(1, 0.5)) -def bar_plot(pos, ylim=(0,1), x=None, title=None): - plt.cla() +def bar_plot(pos, x=None, ylim=(0,1), title=None, c='#30a2da', + **kwargs): + """ plot the values in `pos` as a bar plot. + + **Parameters** + + pos : list-like + list of values to plot as bars + + x : list-like, optional + If provided, specifies the x value for each value in pos. If not + provided, the first pos element is plotted at x == 0, the second + at 1, etc. + + ylim : (lower, upper), default = (0,1) + specifies the lower and upper limits for the y-axis + + title : str, optional + If specified, provides a title for the plot + + c : color, default='#30a2da' + Color for the bars + + **kwargs : keywords, optional + extra keyword arguments passed to ax.bar() + + """ + ax = plt.gca() if x is None: x = np.arange(len(pos)) - ax.bar(x, pos, color='#30a2da') + ax.bar(x, pos, color=c, **kwargs) if ylim: plt.ylim(ylim) plt.xticks(np.asarray(x)+0.4, x) @@ -53,6 +79,33 @@ def bar_plot(pos, ylim=(0,1), x=None, title=None): plt.title(title) +def plot_belief_vs_prior(belief, prior, **kwargs): + """ plots two discrete probability distributions side by side, with + titles "belief" and "prior" + """ + + plt.subplot(121) + bar_plot(belief, title='belief', **kwargs) + plt.subplot(122) + bar_plot(prior, title='prior', **kwargs) + + +def plot_prior_vs_posterior(prior, posterior, reverse=False, **kwargs): + """ plots two discrete probability distributions side by side, with + titles "prior" and "posterior" + """ + if reverse: + plt.subplot(121) + bar_plot(posterior, title='posterior', **kwargs) + plt.subplot(122) + bar_plot(prior, title='prior', **kwargs) + else: + plt.subplot(121) + bar_plot(prior, title='prior', **kwargs) + plt.subplot(122) + bar_plot(posterior, title='posterior', **kwargs) + + def set_labels(title=None, x=None, y=None): """ helps make code in book shorter. Optional set title, xlabel and ylabel """ diff --git a/code/custom.css b/code/custom.css index 9be5312..bc10799 100644 --- a/code/custom.css +++ b/code/custom.css @@ -2,7 +2,7 @@ @import url('http://fonts.googleapis.com/css?family=Source+Code+Pro'); @import url('http://fonts.googleapis.com/css?family=Vollkorn'); @import url('http://fonts.googleapis.com/css?family=Arimo'); -@import url('http://fonts.googleapis.com/css?family=Fira_sans'); +@import url('http://fonts.googleapis.com/css?family=Fira+sans'); .CodeMirror pre { font-family: 'Source Code Pro', Consolas, monocco, monospace; @@ -16,7 +16,7 @@ background: transparent; color: #000000; font-weight: 600; - font-size: 11pt; + font-size: 12pt; font-style: bold; font-family: 'Source Code Pro', Consolas, monocco, monospace; } @@ -97,11 +97,10 @@ white-space: nowrap; } div.text_cell_render{ - font-family: 'Fira sans', verdana,arial,sans-serif; + /*font-family: 'Vollkorn', verdana,arial,sans-serif;*/ line-height: 150%; - font-size: 110%; - font-weight: 400; - text-align:justify; + font-size: 130%; + text-align: justify; text-justify:inter-word; } div.output_subarea.output_text.output_pyout { diff --git a/code/mkf_internal.py b/code/mkf_internal.py index 125c277..f31b1b8 100644 --- a/code/mkf_internal.py +++ b/code/mkf_internal.py @@ -100,11 +100,13 @@ def show_residual_chart(): plt.scatter ([0,1], [158.0,est_y], c='k',s=128) plt.scatter ([1], [164.2], c='b',s=128) plt.scatter ([1], [159], c='r', s=128) - plt.text (1.0, 158.8, "prediction ($x_t)$", ha='center',va='top',fontsize=18,color='red') - plt.text (1.0, 164.4, "measurement ($z$)",ha='center',va='bottom',fontsize=18,color='blue') - plt.text (0, 157.8, "prior estimate ($\hat{x}_{t-1}$)", ha='center', va='top',fontsize=18) + plt.text (1.05, 158.8, r"prior $(\bar{x}_t)$", ha='center',va='top',fontsize=18,color='red') + plt.text (0.5, 159.6, "prediction", ha='center',va='top',fontsize=18,color='red') + plt.text (1.0, 164.4, r"measurement ($z$)",ha='center',va='bottom',fontsize=18,color='blue') + plt.text (0, 157.8, r"posterior ($x_{t-1}$)", ha='center', va='top',fontsize=18) plt.text (1.02, est_y-1.5, "residual", ha='left', va='center',fontsize=18) - plt.text (0.9, est_y, "new estimate ($\hat{x}_{t}$)", ha='right', va='center',fontsize=18) + plt.text (0.9, est_y, "new estimate ($x_t$)", ha='right', va='center',fontsize=18) + plt.text (0.8, est_y-0.5, "(posterior)", ha='right', va='center',fontsize=18) plt.xlabel('time') ax.yaxis.set_label_position("right") plt.ylabel('state')