{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Table of Contents](./table_of_contents.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Discrete Bayes Filter" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import division, print_function\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#format the book\n", "import book_format\n", "book_format.set_style()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Kalman filter belongs to a family of filters called *Bayesian filters*. Most textbook treatments of the Kalman filter present the Bayesian formula, perhaps shows how it factors into the Kalman filter equations, but mostly keeps the discussion at a very abstract level. \n", "\n", "That approach requires a fairly sophisticated understanding of several fields of mathematics, and it still leaves much of the work of understanding and forming an intuitive grasp of the situation in the hands of the reader.\n", "\n", "I will use a different way to develop the topic, to which I owe the work of Dieter Fox and Sebastian Thrun a great debt. It depends on building an intuition on how Bayesian statistics work by tracking an object through a hallway - they use a robot, I use a dog. I like dogs, and they are less predictable than robots which imposes interesting difficulties for filtering. The first published example of this that I can find seems to be Fox 1999 [1], with a fuller example in Fox 2003 [2]. Sebastian Thrun also uses this formulation in his excellent Udacity course Artificial Intelligence for Robotics [3]. In fact, if you like watching videos, I highly recommend pausing reading this book in favor of first few lessons of that course, and then come back to this book for a deeper dive into the topic.\n", "\n", "Let's now use a simple thought experiment, much like we did with the g-h filter, to see how we might reason about the use of probabilities for filtering and tracking." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tracking a Dog\n", "\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", "\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. From my perspective he is equally likely to be in any position. There 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 in a NumPy array. I could use a Python list, but NumPy arrays offer functionality that we will be using soon." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]\n" ] } ], "source": [ "import numpy as np\n", "belief = np.array([1/10]*10)\n", "print(belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In [Bayesian statistics](https://en.wikipedia.org/wiki/Bayesian_probability) this is called a [*prior*](https://en.wikipedia.org/wiki/Prior_probability). It is the probability prior to incorporating measurements or other information. More completely, this is called the *prior probability distribution*. A [*probability distribution*](https://en.wikipedia.org/wiki/Probability_distribution) is a collection of all possible probabilities for an event. Probability distributions always 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 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*](https://en.wikipedia.org/wiki/Frequentist_inference) 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 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%. Some object to the term \"belief\"; belief can imply holding something to be true without evidence. In this book it always is a measure of the strength of our knowledge. We'll learn more about this as we go.\n", "\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. 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. 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:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])" ] }, { "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. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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L2PTpk1zlwPxOnbsmP72t79pypQpiR5KUolEIgqFQqqqqtKjjz6ql19+mV/aOjhy5IiWLl2qFStWaOTIkYkeTlK66aablJ6ern79+mnevHn685//nOghJY0//elPGjRokLZt26YZM2YoPT1dQ4YM0fe+9z3V19cnenhJ6dixY3rmmWd0wQUXaMyYMYkeTsJ9+9vf1oABA7RkyRLt3LlTx48f1x/+8AetXLlSN910U5fPnfSb1tZWZWVldXm8/bFYH1+Dk5gIJamampqYH1Db/lisD6cFbG666SY1NjZq2bJliR5KUrnxxhuVkZGhIUOG6LbbbtO//du/6bvf/W6ih5U0brzxRk2cOFFLlixJ9FCSTv/+/fX9739fK1eu1MaNG/Xwww9r3759Ov/88/Xyyy8nenhJ4cCBA2pqatLChQt1xRVX6NVXX9Xtt9+u//zP/9TFF1/cwDFdRwAABjRJREFU5QMQIZWVlenEiRNavHhxooeSFEaPHq2//OUvKi8v17hx49SvXz/Nnz9f3/72t/Xwww8nengJN3nyZL311luKRCLuY6FQyL16iN8Zu8e1H0nMdNkXl4QhXv/4j/+op556Sv/+7/+us88+O9HDSSp33nmnrrvuOh05ckTPP/+8br75ZjU2Nuof/uEfEj20hFu/fr2ef/55vf/++xx3Yvjc5z6nz33uc+7/f/nLX9aCBQs0depU3XHHHZo3b14CR5ccIpGImpubdffdd+vHP/6xJOn8889XZmamli5dqg0bNuhrX/tagkeZXB5//HHl5+drwYIFiR5KUti9e7fmz5+voUOH6plnnlFBQYHefvtt3X///WpoaNDjjz+e6CEm1C233KLFixfr5ptv1rJlyxSJRHTvvfdqz549kqS0NM57dIcySSo/Pz/mDL62tlaSYp4tArpz77336v7779c//dM/6eabb070cJLOqFGj9PnPf14XX3yxfvnLX+qGG27QT37yk5h3cfKThoYG3XTTTbrllltUWFioo0eP6ujRo2ptbZUkHT16VI2NjQkeZfIZMGCALr30Un344Yc6ceJEooeTcPn5+ZLUZVJ40UUXSZL+9re/nfExJbMPP/xQ7733nq6++uqYlzv50Y9//GPV19fr5Zdf1te//nV95Stf0e23365f/OIXeuKJJ/THP/4x0UNMqGuvvVYrVqzQb37zG40cOVKjRo3Sli1b3L/MGzFiRIJHmLyYCCWpqVOnauvWrQqFQlGPt1/nWVpamohhIQXde++9uueee3TPPffozjvvTPRwUsI555yjUCiknTt3JnooCVVdXa3Dhw/roYce0sCBA91/ysrK1NjYqIEDB0Z9hhw+1X65F2fRPn1va2ftjfjb6mjtZzeuu+66BI8keXzwwQeaPHlyl/cCfeELX5DE+6Yl6Uc/+pGqq6u1efNm7d69W2+++abq6uqUm5vLVSAGHH2S1IIFC9TQ0KD169dHPb569WoVFhZq5syZCRoZUsl9992ne+65R3fddZfuvvvuRA8nZWzcuFFpaWkaO3ZsooeSUMOGDdPGjRu7/DNv3jxlZ2dr48aNuv/++xM9zKRTV1enP/zhD5oxY4ays7MTPZyE+/rXvy5JevHFF6Mef+GFFyRJX/ziF8/4mJJVS0uL1qxZo3POOYe/8OygsLBQFRUVXT677C9/+YskcROX/y8rK0ulpaUqKirS3r179dvf/lbXX3+9+vTpk+ihJS3eI5SkLrroIs2ZM0dLlixRfX29xo8fr7KyMr300ktas2aNrz9YraMXX3xRjY2NOn78uKSTH7r2zDPPSJIuvvjiqFtJ+s1DDz2k5cuX68ILL9Qll1zS5ZPJ+eVDuuGGG9SvXz+dc845Gjp0qKqrq/X000/rt7/9rW6//XYVFBQkeogJlZ2drfPPP7/L408++aSCwWDMZX6zaNEi99LKwYMHa8eOHXrooYd0+PBhPfnkk4keXlKYO3eu5s+fr5/+9KeKRCL64he/qPfee0/33nuvLr30Un3pS19K9BCTxn//93+rtraWs0GdLF26VJdddpnmzJmj2267TYMHD9Zbb72lBx98UJMnT3Yvs/Sr8vJyrV+/Xp///OeVlZWlTZs2acWKFZowYYLuu+++RA8vuSX4c4xgcPz4cefWW291hg0b5mRmZjrTpk1zysrKEj2spFJUVORIivnPrl27Ej28hDrvvPO6bcO3/klPPPGE8+Uvf9kZPHiwk56e7gwYMMA577zznN/85jeJHlpS4wNVP/Xggw86M2bMcPr37+8Eg0GnoKDAWbBggfPOO+8kemhJpampyfnRj37knHXWWU56erozatQo5yc/+YnT3Nyc6KEllTlz5ji5ublOfX19ooeSdF577TVn7ty5zrBhw5w+ffo4xcXFzg9/+EOnuro60UNLuO3btztf+cpXnEGDBjmZmZnO+PHjnbvuustpaGhI9NCSXsBxuG8lAAAAAH/hPUIAAAAAfIeJEAAAAADfYSIEAAAAwHeYCAEAAADwHSZCAAAAAHyHiRAAAAAA32EiBAAAAMB3mAgBAAAA8B0mQgAAAAB8h4kQAAAAAN9hIgQAAADAd/4fG/im0osz2VQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import kf_book.book_plots as book_plots\n", "from kf_book.book_plots import figsize, set_figsize\n", "import matplotlib.pyplot as plt\n", "\n", "belief = np.array([1/3, 1/3, 0, 0, 0, 0, 0, 0, 1/3, 0])\n", "book_plots.bar_plot(belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This distribution is called a [*categorical distribution*](https://en.wikipedia.org/wiki/Categorical_distribution), which is a discrete distribution describing the probability of observing $n$ outcomes. It is a [*multimodal distribution*](https://en.wikipedia.org/wiki/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*](https://en.wikipedia.org/wiki/Mode_%28statistics%29)\n", "of a distribution. Given a list 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 distribution can contain more than one mode. The list {1, 2, 2, 2, 3, 3, 4, 4, 4} contains the modes 2 and 4, because both occur three times. We say the former list is [*unimodal*](https://en.wikipedia.org/wiki/Unimodality), and the latter is *multimodal*.\n", "\n", "Another term used for this distribution is a [*histogram*](https://en.wikipedia.org/wiki/Histogram). Histograms graphically depict the distribution of a set of numbers. The bar chart above is a histogram.\n", "\n", "I hand coded the `belief` array in the code above. How would we implement this in code? We represent doors with 1, and walls as 0, so we will multiply the hallway variable by the percentage, like so;" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.333 0.333 0. 0. 0. 0. 0. 0. 0.333 0. ]\n" ] } ], "source": [ "belief = hallway * (1/3)\n", "print(belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extracting Information from Sensor Readings\n", "\n", "Let's put Python aside and think about the problem a bit. Suppose we were to read the following from Simon's sensor:\n", "\n", " * door\n", " * move right\n", " * 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. Our belief is:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "belief = np.array([0., 1., 0., 0., 0., 0., 0., 0., 0., 0.])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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 when a set of sensor readings only matches one to a few starting locations.\n", "\n", "We could implement this solution now, but instead let's consider a real world complication to the problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Noisy Sensors\n", "\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", "```Python\n", "[.31, .31, .01, .01, .01, .01, .01, .01, .31, .01]\n", "```\n", "\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", "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", "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 fix that in a moment.\n", "\n", "Let's look at that in Python code. Here I use the variable `z` to denote the measurement. `z` or `y` are customary choices in the literature for the measurement. As a programmer I prefer meaningful variable names, but I want you to be able to read the literature and/or other filtering code, so I will start introducing these abbreviated names now." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "belief: [0.3 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1]\n", "sum = 1.6000000000000003\n" ] }, { "data": { "image/png": "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5eoOjczoY0cjOxqZ0ceORmb0saORHY284/bZAAAAAFIat88GAAAAAA+YCAEAAADwHSZCAAAAAHyHd1GlgE8//VThcFjBYFDDhw9P9HCSEo3M6GNHIzsamdHHjkZm9LGjkR2NvGMilAIOHz7s3g+eHTo2GpnRx45GdjQyo48djczoY0cjOxp5x6VxAAAAAHyHM0IpYOzYsXIcR4FAINFDSVo0MqOPHY3saGRGHzsamdHHjkZ2NPKOzxECAAAAkNL4HCEAAAAA8ICJEAAAAADf4T1CKaClpcW91jMrKyvRw0lKNDKjjx2N7GhkRh87GuSlhc4AACAASURBVJnRx45GdjTyjolQCti+fbt7G8QZM2YkejhJiUZm9LGjkR2NzOhjRyMz+tjRyI5G3nFpHAAAAADf4YxQChg4cKBCoZDS03m5ukMjM/rY0ciORmb0saORGX3saGRHI++4fTYAAACAlMbtswEAAADAAyZCAAAAAHyHiRAAAAAA34l7ItTQ0KBly5apoKBA2dnZmjlzptavXx/3F7777rsVCARUUlIS97p+s3PnTm3btk07d+5M9FCSFo3M6GNHIzsamdHHjkZm9LGjkR2NvIv7dhJXXHGF3nvvPa1cuVJFRUVat26drr76akUiES1evNjTNj788EP98z//s4YNGxb3gP2oqanJvR88YqORGX3saGRHIzP62NHIjD52NLKjkXdxTYRefPFFvfrqq+7kR5LmzJmjvXv36o477tCVV16pYDBo3EYoFNK1116r73znO9q8ebOqq6t7PnoAAAAA6IG4bp99ww03aP369aqrq4u6N3lpaakWL16sN998U+edd55xGw888IAef/xxlZeX67LLLlN1dbXKysq6/D1unw0AAADAi9N+++yysjJNnjy5ywc0TZ8+3V1usnXrVj3wwAP6xS9+oby8vHi+NAAAAAD0mrgujaupqdG4ceO6PD5o0CB3eXcikYiuu+46XXHFFbrkkkviHOZJ5eXlKiwsVL9+/dzHWlpatH37dkknP0l39OjRUevs3LlTTU1NkqQZM2ZELauurtbBgwclSaNHj9bAgQPdZeFw2J3Y9e3bt8vz3r17t+rr6yVJU6dOjZocHj16VHv37pUkFRQUKD8/P2rdjz76SI7jqE+fPioqKopatn//ftXW1kqSJk2apOzsbHdZQ0ODKioqJElDhw7V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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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_belief(hallway, belief, z=reading, correct_scale=3.)\n", "print('belief:', belief)\n", "print('sum =', sum(belief))\n", "plt.figure()\n", "book_plots.bar_plot(belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.188, 0.188, 0.062, 0.062, 0.062, 0.062, 0.062, 0.062, 0.188,\n", " 0.062])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "belief / sum(belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "FilterPy implements this with the `normalize` function:\n", "\n", "```Python\n", "from filterpy.discrete_bayes import normalize\n", "normalize(belief)\n", "```\n", "\n", "It is a bit odd to say \"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 compute the scale factor from that. The equation for that is\n", "\n", "$$scale = \\frac{prob_{correct}}{prob_{incorrect}} = \\frac{prob_{correct}} {1-prob_{correct}}$$\n", "\n", "\n", "\n", "Also, the `for` loop is cumbersome. As a general rule you will want to avoid using `for` loops in NumPy code. NumPy is implemented in C and Fortran, so if you avoid for loops the result often runs 100x faster than the equivalent loop.\n", "\n", "How do we get rid of this `for` loop? NumPy lets you index arrays with boolean arrays. You create a boolean array with logical operators. We can find all the doors in the hallway with:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, True, False, False, False, False, False, False, True,\n", " False])" ] }, "execution_count": 10, "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`.\n", "\n", "Teaching you NumPy is beyond the scope of this book. I will use idiomatic NumPy constructs and explain them the first time I present them. If you are new to NumPy there are many blog posts and videos on how to use NumPy efficiently and idiomatically.\n", "\n", "Here is our improved version:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sum = 1.0\n", "probability of door = 0.1875\n", "probability of wall = 0.06249999999999999\n" ] }, { "data": { "image/png": "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jx0Z2ZGRGfnYkZEZ+diRkR0ZmZGPf3HfVvyOO+7Q9u3b9fTTT6usrEzr1q3Tiy++qLVr12rRokWe+02ePFnDhw/XXXfdpZKSEh05ckS//OUvdeTIEW3btk0TJkxwHvvOO+/o7/7u73TnnXfqhz/8oRobG/Uv//IvysvL044dO5SZmenqm9uKAwAAAPAj3tohroJp8+bNuvPOO7Vu3TotXLjQ2X7HHXeorq5Ohw8fVjAYjLlvY2Ojhg4d6trW0NCg4uJi/eM//qNefPFFZ/uNN96os2fPaufOnUpPv/Qxqw8++EA33XSTnn/+eS1btiyhgwYAAADQO32p38O0ceNG5ebmat68ea7tS5YsUUNDgz788EPPfbsXS5JUWFiokSNH6siRI862Y8eOafv27brnnnucYkmSpk6dqrKyMm3cuDGeIQMAAADAZYvrLnm1tbUaP368q5CRpIkTJzrtU6dO9d3f/v37dejQId11112u5+jaZ/fnef/99331XVdXp6KiIvXv39/Z1t7ert27d0uS8vLyNGrUKNc+e/fu1blz5ySpx91CTp48qWPHjkmSRo0apby8PKctHA474+7Xr59KSkpc+x44cECtra2SpAkTJrjyO336tA4dOiTpUgE5ZMgQ174ff/yxotGosrOzVVZW5mo7cuSIWlpaJEnjxo1TVlaW09bW1qb6+npJl4rVgoIC176ffPKJc2eU66+/3tV2/Phx5/NiY8aMUW5urtN24cIF7dmzR5I0aNAgXXfdda59P/vsM50/f16BQKDHz7CpqUkNDQ2SpKKiIg0cONBpC4VCqqurkyT1799fo0ePdu27f/9+518CKioqXGcyT506pcOHD0uSRowYocGDB7v23blzpyQpJydHpaWlrrbDhw/r1KlTkqTy8nLX5Z6tra06cOCAJGnYsGEaPny4a9+6ujqFQiFlZmaqvLzc1dbQ0KCmpiZJ0tixY9W3b1+n7dy5c85n9/Lz8zVy5EjXvnv27NGFCxcUDAZVUVHhamtsbNTx48clScXFxa7rji9evKhPP/1U0qXrkouLi1371tfXq62tTZJUWVnp+leU5uZmHT16VJI0cuRI5efnO22RSES7du2SJOXm5mrMmDGufg8ePKgzZ85IksaPH++6NemZM2d08OBBSVJBQUGPfzipra1VOBxWVlaWxo0b52o7evSompubJUml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Sy+9pNraWn3wwQeaMmWKs29VVZVWrFihDz/80PX47OxsfeMb37icYwIAAACAKyKuS/I2btyo3NxczZs3z7V9yZIlamho6FH0dN933LhxTrEkSenp6br77rv10Ucf6dixY3EOHQAAAAC+XHGdYaqtrdX48eOVnu7ebeLEiU771KlTPff95je/2WN75751dXUaMWKEs72+vl6DBg1Sa2urioqKtGDBAj322GPKzs72Nda6ujoVFRWpf//+zrb29nbt3r1bkpSXl6dRo0a59tm7d6/OnTsnSaqqqnK1nTx50inqRo0apby8PKctHA6rtrZWktSvXz+VlJT4GuO16LPPPtP58+cVCAScn22npqYmNTQ0SJKKiop67SWW586d0969eyVJ+fn5GjlypKt9z549unDhgoLBoCoqKpIxxJRw9OhRNTc3S5JKS0uVk5PjtJ09e1b79u37//+XE2Pva1NTU5OGDBni2vbxxx8rGo0qOztbZWVlrrYjR46opaVFvSWjnTt3SpIqKipcVzucOnVKhw8fliSNGDFCgwcPjrFf78powIABKi4udrXV19erra1NklRZWam0tN55X6jPP/9cJ06ckCSNHj06rvcRvcknn3yijo4OZWRk6Prrr3e1HT9+XI2NjZKkMWPGKDc3NxlDTLrW1lYdOHBAkjRs2DANHz7c1V5XV6dQKKTMzEyVl5cnY4gp4eDBgzpz5owkafz48erTp4/TdubMGR08eFCSVFBQoKFDh7r2ra2tVTgcVlZWlsaNG+dqM72P6Hy/71dcBVNzc3PMYmDQoEFOu2nfzsfZ9r355ps1f/58lZeX6/z589qyZYueffZZvffee/rjH//oaxEPhUKKRqOubdFoVB0dHU57rH0627uLRCJOWyQS6dFu6rc36cwwEAj0aAuHw8YMe4uu8zAcDvdo7+joUEdHR8y23qTrfDG9lnsTr/kSjUaVkZER8/G9KadE1+/ewM/a09v5XXt6++9703zh9/0lfn7fh0KhXvuPE51Mv6tsGV68eFGRSCTmR4Jsr+V4xH3Th1hvhP20xbPvk08+6WqbNWuWiouL9dBDD2nTpk2aM2eOdZzp6ek9ni8QCDhvKrqfJevcFutNhySlpaU5bbEmtqnf3qQzw1g/62AwaMywt+g6D2O9wDMyMhQOhz0/D9hbdJ0vptdyb+I1X6LRaMy1p2uG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dKmqq6tVX1+voqIiSZe+uPbrX/+6Wltb9fTTT2vo0KF6/vnn9fvf/15bt27VLbfc4jzH22+/renTp2v27Nl64IEH1NjYqEceeUQDBgzQjh07lJmZeQUjAAAAAIDY4r6O7dVXX9U999yjlStXasaMGfrwww9VU1PjFEuSFA6HFQ6HXdcGZmZm6q233tK0adP0ox/9SLNnz9bx48e1ZcsWV7EkSbfeeqs2b96s48ePa/bs2frRj36kadOm6a233qJYiqGtrU3Lly9XYWGhsrKyNGnSJK1fvz7Zw0opX3zxhVasWKE77rhDQ4YMUSAQ0L/+678me1gp43//93917733qry8XH379tWIESP03e9+V//3f/+X7KGljL/85S+68847NWrUKGVnZ2vQoEGaMmWK1qxZk+yhpawXX3xRgUBAubm5yR5KSnj77bedz9d2/7Nt27ZkDy9lvPfee5o1a5by8vKUnZ2t0tJSPfHEE8keVkpYvHix5xxiHv3Vn//8Z911110qLCxUTk6OysvL9fOf/1znzp1L9tBSwkcffaRvf/vb6tevn3JzczVt2jS9//77yR5WSov7DBNSzx133KHt27fr6aefVllZmdatW6cXX3xRa9eu1aJFi5I9vJRw8OBBTZo0SVVVVSorK9OLL76oxx9/nKLp/5s3b56am5s1b948XX/99WpqatK//du/aceOHXrjjTd02223JXuISff2229r/fr1uvnmmzVixAidPXtWa9eu1fr16/XEE0/oscceS/YQU8qxY8c0YcIE9e3bV2fOnFFbW1uyh5R0b7/9tqZNm6Zf/vKXmjZtmqutoqKCwlLSunXrdM899+gf/uEftGjRIuXm5qq+vl4NDQ1auXJlsoeXdPX19Wpqauqxffbs2crMzNShQ4cUDAaTMLLU8cknn+jrX/+6xo0bp5/97GcaPHiw/vSnP+nJJ5/UnXfeqU2bNiV7iEm1fft2ffOb39SNN96of/7nf1Y0GtWzzz77/9q7t5CotgeO47+8pWlecrxgZvciU1EqtUgTSk1TSESCCCQty0tllGlpqWnki9AFiuAYlZZISkFXoZqMMgvRLnajMLujmdnopMkw6zz015PHmfhz+HPWnr+/D8yDy5cv8zDstffaa6G5uRlqtRoLFy6UnahMgkzapUuXBABx5syZYePh4eHCw8ND6HQ6SWXKotfr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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from filterpy.discrete_bayes import normalize\n", "\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", "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", "book_plots.bar_plot(belief, ylim=(0, .3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " We can see from the output that the sum is now 1.0, and that the probability of a door vs wall is still three times larger. The result also fits our intuition that the probability of a door must be less than 0.333, and that the probability of a wall must be greater than 0.0. Finally, it should fit our intuition that we have not yet been given any information that would allow us to distinguish between any given door or wall position, so all door positions should have the same value, and the same should be true for wall positions.\n", " \n", "This result is called the [*posterior*](https://en.wikipedia.org/wiki/Posterior_probability), which is short for *posterior probability distribution*. All this means is a probability distribution *after* incorporating the measurement information (posterior means 'after' in this context). To review, the *prior* is the probability distribution before including the measurement's information. \n", "\n", "Another term is the [*likelihood*](https://en.wikipedia.org/wiki/Likelihood_function). When we computed `belief[hall==z] *= scale` we were computing how *likely* each position was given the measurement. The likelihood is not a probability distribution because it does not sum to one.\n", "\n", "The combination of these gives the equation\n", "\n", "$$\\mathtt{posterior} = \\frac{\\mathtt{likelihood} \\times \\mathtt{prior}}{\\mathtt{normalization}}$$ \n", "\n", "When we talk about the filter's output we typically call the state after performing the prediction the *prior* or *prediction*, and we call the state after the update either the *posterior* or the *estimated state*. \n", "\n", "It is very important to learn and internalize these terms as most of the literature uses them extensively.\n", "\n", "Does `scaled_update()` perform this computation? It does. Let me recast it into this form:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "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": [ "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", "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, and learn how to perform these calculations.\n", "\n", "FilterPy implements `update`. Here is the previous example in a fully general form:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.188, 0.188, 0.062, 0.062, 0.062, 0.062, 0.062, 0.062, 0.188,\n", " 0.062])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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", " try:\n", " scale = z_prob / (1. - z_prob)\n", " except ZeroDivisionError:\n", " scale = 1e8\n", "\n", " likelihood = np.ones(len(hall))\n", " likelihood[hall==z] *= scale\n", " return likelihood\n", "\n", "belief = np.array([0.1] * 10)\n", "likelihood = lh_hallway(hallway, z=1, z_prob=.75)\n", "update(likelihood, belief) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Incorporating Movement\n", "\n", "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, a tiny 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 let's 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 that 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 he moved one position 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." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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SV43UFFRAavVCh8fH0RFRXltBhnIUAdmYAZZc5DnsA/YyFIHWXJ4mgx1YAZm0MPtT5jq6uqwePFixMXFITAwEBkZGdi0aVOb623ZsgVZWVkYMGAAgoKCkJSUhNmzZ+PUKecbFceMGQODweD0595773U3rlc4f/48zp49i/Pnz3t1BhnIUAdmYAZZc3QmjlVq3tgHtMhSB1lyeJoMdWAGZtDD7U+Ypk2bhkOHDmHlypUYOHAgNm7ciKysLFitVsyaNcvleqtWrUKfPn2wdOlSJCcn49y5c3jppZdw00034eDBgxgyZIhq+eTkZLz33nuqaREREe7GJSIiL8SxioiI2otbJ0zbt2/HZ599pgw8ADB27FicPXsWzz77LGbMmAFfX1/NdT/++GP06tVLNW3cuHFISkrCq6++irfeeks1LygoCCNHjnQnnteKj49XPsL05gwykKEOzMAMsuboLByrnHlbH3BFljrIksPTZKgDMzCDHm6dMG3duhUhISGYPn26avq8efMwa9YsfPXVVxg1apTmui0HIACIi4tDfHw8zp07504MakGG6zxlyCADGerADMzQkiw5OgvHKmfe1gdckaUOsuTwNBnqwAzMoIdbp3DHjh3D4MGD4eenPs+68cYblfnuOH36NM6ePet0iQMAFBYWomfPnvDz80NKSgqWLl2Kq1evutU+ERF5H45VRETUntz6hKmiogLJyclO03v27KnM18tsNmPBggUICQnBU089pZp3xx13YMaMGUhLS8PVq1exY8cO/OEPf8D+/fuxZ88eXR/V5efnIzExEWFhYcq0pqYmnDx5EgAQGRmJhIQE1TpaN/V2tOrqapw9exaA7V3MmJgY1fwjR45ACIGgoCAMHDhQNe/cuXOorKwEAAwaNAiBgYHKvLq6OhQWFgKwvWMaGxurWvf48eMwmUwwGo244YYbVPNKS0tRVlYGAEhJSUFISIgyr7GxEQUFBQBs+71fv36qdb/77jtcvXoVBoNB+eXErry8HCUlJQCAxMRE1XX+ZrMZ+fn5AICwsDD0799fu2AdJC8vD2lpaQgICFCm1dbWoqioCADQu3dv9OnTR7VOfn4+zGYzAgICkJaWpppXUlKC8vJyAMCAAQPQo0cPZV5DQ4PS16KiohAfH69at6CgAI2NjfD19cXQoUNV88rKylBaWgoASEpKQnh4uDKvubkZ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ciT+7u/+Luo5ghHfX1pgxA3XvvsitDLExBg/3Lz++usAgJ/97GeGbfP//u//MHHixIDrv2+++WYAxt03snr1arS3t+PQoUM4efIkPvvsM1y8eBGJiYn4y7/8S0MykLlYq9RkrFWAcfVK5loFGFevWKu8WKv04QHTNaiurkZ3dzfeeecd1fTa2lrk5uZi2rRpJiUz3vPPP49nnnkGTz75JJ5++mmz4yj27t2LmJgYjBs3LurbGjVqFPbu3Rvw7+6774bD4cDevXvxwgsvRD2Hv4sXL+IPf/gDpk6dCofDEfXt/e3f/i0AYOfOnarpO3bsAABUVlZGPcNg/f392LhxI2655RZD/zDMzc1FY2Mjuru7VdP37dsHAIbeZB0XF4dJkyahsLAQp0+fxltvvYWf//zniI+PNywDmYe16gey1irAuHola60CjK1XrFVerFX6GP/c5SFg7ty5qKqqwooVK9DZ2YmioiLU1dXh/fffx8aNG2G1Wg3LsnPnTvT09KCrqwsAcPjwYWzduhUAMG/ePNWjGiPtlVdewVNPPYU5c+bgr/7qr7B//37VfCMGnYceegjJycm45ZZbkJ2djfb2drz99tt46623sGrVKmRmZkY9g8PhwMyZMwOmb9iwAVarNei8SLvvvvtQUFCAm266CRkZGTh+/DheeeUVnDt3Dhs2bIj69gHgrrvuwvz58/Hcc8/B4/GgsrISX375JZ599lncc889uO222wzJ4fNf//Vf6OjoMPQbOwBYuXIl/uZv/gZVVVX49a9/jYyMDOzfvx8vvfQSJk6ciLlz50Y9Q0NDA9555x3cdNNNiIuLQ319PdauXYvi4mI8//zzUd8+yYG1ykuGWgWYX69kqFWA+fWKtcqLtUonc68IvHF1dXWJX/3qV2LUqFEiNjZWTJkyRdTV1Rmeo7CwULnu0/9fc3NzVLd95513am7bqK71xhtviNtvv11kZGQIm80mUlNTxZ133inefPNNQ7YfipE30r700kti6tSpIiUlRVitVpGZmSmqq6vF559/bsj2fXp7e8Xq1atFfn6+sNlsoqCgQPy///f/DLuJdbCqqiqRmJgoOjs7Dd/2Bx98IO666y4xatQoER8fL0pKSsRjjz0m2tvbDdn+sWPHxB133CHS0tJEbGysKCoqEk8++aSp9yeQOVir5KhVQshbr4x+6IMM9Yq1you1KnwWIUx6fiIREREREZHkeA8TERERERGRBh4wERERERERaeABExERERERkQYeMBEREREREWngARMREREREZEGHjARERERERFp4AETERERERGRBh4wERERERERaeABExERERERkQYeMBEREREREWngARMREREREZEGHjARERERERFp+P+y+xMolm7UQgAAAABJRU5ErkJggg==\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", " return result\n", " \n", "belief = np.array([.35, .1, .2, .3, 0, 0, 0, 0, 0, .05])\n", "plt.subplot(121)\n", "book_plots.bar_plot(belief, title='Before prediction', ylim=(0, .4))\n", "\n", "belief = perfect_predict(belief, 1)\n", "plt.subplot(122)\n", "book_plots.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. \n", "\n", "The next cell animates this so you can see it in action. Use the slider to move forwards and backwards in time. This simulates Simon walking around and around the hallway. It does not yet incorporate new measurements so the probability distribution does not change shape, only position." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6a0f5d2b16e54121bd8a3b11957d0966", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=0, description='time_step', max=19), Output()), _dom_classes=('widget-in…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipywidgets import interact, IntSlider\n", "\n", "belief = np.array([.35, .1, .2, .3, 0, 0, 0, 0, 0, .05])\n", "perfect_beliefs = []\n", "\n", "for _ in range(20):\n", " # Simon takes one step to the right\n", " belief = perfect_predict(belief, 1)\n", " perfect_beliefs.append(belief)\n", "\n", "def simulate(time_step):\n", " book_plots.bar_plot(perfect_beliefs[time_step], ylim=(0, .4))\n", " \n", "interact(simulate, time_step=IntSlider(value=0, max=len(perfect_beliefs)-1));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Terminology\n", "\n", "Let's pause a moment to review terminology. I introduced this terminology in the last chapter, but let's take a second 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 propagation*. 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 dogs 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. \n", "\n", "Let's work an example. The current position of the dog is 17 m. Our epoch is 2 seconds long, and the dog is traveling at 15 m/s. Where do we predict he will be in two seconds? \n", "\n", "Clearly,\n", "\n", "$$ \\begin{aligned}\n", "\\bar x &= 17 + (15*2) \\\\\n", "&= 47\n", "\\end{aligned}$$\n", "\n", "I use bars over variables to indicate that they are priors (predictions). We can write the equation for the process model like this:\n", "\n", "$$ \\bar x_{k+1} = f_x(\\bullet) + x_k$$\n", "\n", "$x_k$ is the current position or state. If the dog is at 17 m then $x_k = 17$.\n", "\n", "$f_x(\\bullet)$ is the state propagation function for x. It describes how much the $x_k$ changes over one time step. For our example it performs the computation $15 \\cdot 2$ so we would define it as \n", "\n", "$$f_x(v_x, t) = v_k t$$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding Uncertainty to the Prediction\n", "\n", "`perfect_predict()` assumes perfect measurements, but all sensors have noise. What if the sensor reported that our dog moved one space, but he actually moved two spaces, or zero? This may sound like an insurmountable problem, but let's model it and see what happens.\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": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAGDCAYAAAAGdaBMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXRU9f3/8ddkJwthRwISdoKs+v22qL9WpVYRrf2KymFRjyJu6Net36+232q1tv1aek6/rfZUq0WrVDS0KpzW1qWK2FoXtC7BREAIhICgQBKysCSZmfv7g+Y2k8xMZiKZ+57M83FOj+3c3DvP+eR6P72ZO3d8juM4AgAAAIAUkuZ1AAAAAAAkGidCAAAAAFIOJ0IAAAAAUg4nQgAAAABSDidCAAAAAFIOJ0IAAAAAUg4nQgAAAABSDidCAAAAAFIOJ0IAAAAAUg4nQkh5VVVV8vl8uuKKK3rsOXw+n84444yQx77//e/L5/Pptdde+8Lb37p1qy666CINGzZMaWlp6tev3xfeJgAg9YSbr4DeKsPrAABfTDAY1Ny5c/XJJ5/osssu04gRI5STk+N1FgAAgGmcCAEe+c///E8tWLBAI0eO/ELb2bZtm8rLy3X11Vfr17/+9TGqAwCkoo0bNyo3N9frDCAhOBECPDJo0CANGjToC29n9+7dkqSioqIvvC0AQGorKSnxOgFIGD4jBLSzadMmXXDBBRowYIDy8vL0la98RX/5y1/C/mxpaalmzZql/v37KycnR5MmTdKPfvQjNTc3x/Rc0T4jtGnTJl1xxRU6/vjjlZ2draFDh2rRokXavHlzyM/5fD6dfvrpkqR77rlHPp9PPp9P3//+9+N63QCA5NP+M66xzF+PP/64fD6fHn/8cf35z3/Waaedpr59+8rn87k/E+kzQgcOHNB3vvMdTZgwQTk5Oerfv7/OPvtsvfzyy51+9rXXXnPnorfffltz5sxR//795fP5VFVVdayHAeg2ToSAf9q+fbtOOeUU1dTU6Nprr9W8efP03nvvac6cOfrd734X8rNLlizRokWLVFlZqYsuukg33HCDBgwYoO9973s655xz1Nra2u2OF198USeddJKeeuopfelLX9LNN9+sM888U6tXr9aXv/xlvf/+++7P3n333br88sslSaeffrruvvtu3X333XzQFQBSSDzzlyQ9/fTT+uY3v6nCwkJdd911uvjii6Nuv66uTqeccop+8pOfqH///rrlllt00UUX6e2339bs2bP14IMPhl3vzTff1GmnnaaWlhYtWbJEl112mbKyso7JawaOCQdIcdu3b3ckOZKc//7v/w5Z9u677zoZGRlOv379nPr6esdxHOexxx5zJDkXX3yxc/jw4ZCfv/vuux1Jzs9//vOQxyU5p59+etifXbdunftYbW2t069fP2fQoEHOxo0bQ36+vLzcycvLc2bMmBHy+Lp16xxJzt13392NVw8ASFbdnb98Pp/zwgsvhN1muPnq6quvdiQ5S5cuDXl806ZNTkFBgZOZmels27bNfbxtXpLkPPTQQ8fglQI9g3eEgH8qLCzUXXfdFfLYv//7v+uSSy7RgQMHtGbNGknS/fffr8zMTC1fvrzT3dm+973vaeDAgXryySe71fDb3/5WBw4c0D333NPpOu3Jkyfr6quv1ocffqiKiopubR8A0PvEOn+1+eY3v6lzzjknpm23tLRo5cqVys/P1//+7/+GLJs4caJuvPFGtba26oknnui07vTp03XttdfG+WqAxOFmCcA/nXTSSSooKOj0+BlnnKEVK1bogw8+0Lx581RWVqZBgwbpvvvuC7ud7Oxsbdq0qVsNb731liTpww8/DPs5n08++UTS0c8QTZ48uVvPAQDoXWKZv9ouo5akmTNnxrztzZs36/Dhw/rKV76i/v37d1r+9a9/Xffee2/IZdvdeR7AC5wIAf80dOjQsI8fd9xxkqT6+nrV1dXJcRzt27dP99xzzzFvqKmpkSQtX7486s81NTUd8+cGACSnWOavcI/Hom3dSOsMGzYs7HPE+zyAFzgRAv7p888/D/v4Z599JunopQeFhYWSpBNPPDHsX7++qLbtl5WVadq0acd8+wCA3ieW+au99neJ60rbum3b6mjPnj1hnyPe5wG8wGeEgH96//331djY2Onxtttbn3jiicrPz9fkyZNVUVGh2traY95w8sknS5Jef/31Y75tAEDvFMv81V0TJ05Ubm6uPvzwQ9XV1XVavm7dOklHL88Dkg0nQsA/1dfX6wc/+EHIY//4xz/05JNPqrCwUHPnzpUkfetb31JLS4uuvPJKHThwoNN26urquv1u0eLFi9WvXz/dc889eueddzotDwaDYb93CACQumKdv7oj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cu31Rx99JEmaMmVK1HXbfq69SOumpaUpLy8v5DGfz8df4wAgwRzH6XSddVpa3BcUJAxzFQCknu7MVT4njk+8vvDCCzr33HO1atUqzZ8/3318zpw52rBhg6qrqyPekvRXv/qVrr/+er399tuaOXOmJMnv92vGjBnKz8/X22+/HWsGAAARMVcBAGIR14mQJJ199tn6xz/+oZ/85CcaN26cSktLtXz5cq1cuVKXXHKJJGnJkiVasWKFKisrVVxcLOnol9T927/9mxoaGrRs2TINGTJEDz74oJ577jm+pA4AcEwxVwEAuhL3tQ2rV6/WZZddprvuukvnnHOO1q9fr9LSUndikaRAIKBAIBDy9lR2drbWrl2rWbNm6cYbb9T555+vPXv26IUXXjA1sTQ1NemWW25RUVGRcnJyNGPGDK1atSphz9/Y2Kjbb79dZ599tgYPHiyfz6fvf//7CXt+SXr11Vd15ZVXqqSkRHl5eRo+fLj+4z/+Q++9917CGj788EOdd955GjlypPr06aMBAwbolFNO0cqVKxPW0NEjjzwin8+n/Pz8hD3na6+95l5m0/E/if7L9N///nede+656t+/v/r06aPx48frhz/8YUKe+4orrog4Dokciw8++EAXXHCBioqKlJubq5KSEv3gBz/QoUOHEvL8kvTOO+9o9uzZKigoUH5+vmbNmqU33ngjYc+fLJirehZz1VHMVUcxVx3FXPUvSTNXOQhx1llnOf369XMeeugh59VXX3WuuuoqR5Lz5JNPJuT5t2/f7hQWFjqnnXaa+9x33313Qp67zcUXX+zMmjXLefDBB53XXnvNefrpp52TTz7ZycjIcNauXZuQhnXr1jnXXnut88QTTzivvvqq89xzzzkLFixwJDk//OEPE9LQ3q5du5zCwkKnqKjIycvLS9jzrlu3zpHk3Hvvvc5bb70V8p/GxsaEdTz55JNOWlqas2DBAuePf/yj8+qrrzrLly937rnnnoQ8/9atWzu9/rfeessZNGiQM3z4cMfv9/d4Q0VFhZOTk+NMnz7d+d3vfuesXbvWufvuu5309HTnm9/8Zo8/v+M4zjvvvONkZ2c7X/3qV501a9Y4q1evdk4++WQnOzvbefPNNxPSABuYq5irwmGuYq5irooPJ0Lt/PnPf3YkOU899VTI42eddZZTVFSUkB04GAw6wWDQcRzH2bdv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\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", "book_plots.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": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0. , 0. , 0.04, 0.38, 0.52, 0.06, 0. , 0. , 0. ])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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zJihtWvXxq2hoyeeeEIej0eZmZlxe84333zTvsym4z/x/s303//+d1122WXKzs5Wnz59NGbMGP3whz+My3PfeOONYddDPNfFRx99pCuvvFJ5eXlKT09XYWGhfvCDH+j48eNxeX5Jeu+99zR79mz17dtXmZmZmjlzpt5+++24PX9vwVjVsxirAhirAhirAhirvtBrxioLQS655BKrf//+1uOPP2698cYb1s0332xJsp599tm4PH9FRYXVr18/64ILLrCf+4EHHojLc7e55pprrJkzZ1qPPfaY9eabb1rPPfecdd5551lJSUnWpk2b4tKwefNm67bbbrOeeeYZ64033rBefPFFa8GCBZYk64c//GFcGtrbt2+f1a9fPysvL8/KyMiI2/Nu3rzZkmQ99NBD1rvvvhv0T0NDQ9w6nn32WSshIcFasGCB9cc//tF64403rNWrV1sPPvhgXJ5/165dnV7/u+++aw0cONAaOnSo5fV6e7yhtLTUSktLs6ZOnWr97ne/szZt2mQ98MADVmJiovWNb3yjx5/fsizrvffes1JTU62vfOUr1saNG60NGzZY5513npWammq98847cWmAGRirGKtCYaxirGKsig0nQu38+c9/tiRZ69atC3r8kksusfLy8uKyA/v9fsvv91uWZVlHjhxxZHA5dOhQp8caGhqswYMHWxdffHFcWzqaPn26dfbZZ8f9eb/+9a9bV1xxhXXDDTc4Mrg899xzcXvOjvbt22dlZGRYS5cudawhlDfffNOSZN1///1xeb7ly5dbkqxdu3YFPX7rrbdakqyampoeb5g9e7Y1ePBgq6mpyX6svr7eGjhwoHX++ef3+PPDDIxVAYxVnTFWMVYxVsXG3Nv+OGDjxo3KzMzUvHnzgh5fvHixDhw4oK1bt/Z4gwl3G8rNze30WGZmpiZMmKC9e/c6UPSFgQMHdvq2+J62du1a/fWvf9Vjjz0W1+c1xRNPPKGmpiZ9+9vfdjolyJNPPimPx6ObbropLs+XnJwsSerXr1/Q4/3791dCQoJSUlJ6vOHtt9/WRRddpPT0dPuxvn376oILLtA777yjgwcP9ngDnMdYFcBYFYyxirFKYqyKFSdC7ZSUlGj8+PGdDl5Tpkyxp7tVXV2dPvzwQ02cODGuz+v3++X1enXkyBE99thjevXVV+N6kDt8+LCWLVumlStXatiw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\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", "book_plots.plot_belief_vs_prior(belief, prior)\n", "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 might be dismayed. 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.\n", "\n", "This is not a coincidence, or the result of a carefully chosen example - it is always true of the prediction. 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 100 iterations. The plot is animated; use the slider to change the step number." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final Belief: [0.104 0.103 0.101 0.099 0.097 0.096 0.097 0.099 0.101 0.103]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5e1bbeaf87af4835869cd7a6676fa209", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=1, description='step'), Output()), _dom_classes=('widget-interact',))" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "belief = np.array([1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n", "predict_beliefs = []\n", " \n", "for i in range(100):\n", " belief = predict_move(belief, 1, .1, .8, .1)\n", " predict_beliefs.append(belief)\n", "\n", "print('Final Belief:', belief)\n", "\n", "# make interactive plot\n", "def show_prior(step):\n", " book_plots.bar_plot(predict_beliefs[step-1])\n", " plt.title('Step {}'.format(step))\n", "\n", "interact(show_prior, step=IntSlider(value=1, max=len(predict_beliefs)));" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final Belief: [0.104 0.103 0.101 0.099 0.097 0.096 0.097 0.099 0.101 0.103]\n" ] } ], "source": [ "print('Final Belief:', belief)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After 100 iterations we have lost almost 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, after 50 a lot is left, but by 200 iterations essentially all information is lost." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And, if you are viewing this online here is an animation of that output.\n", "\n", "\n", "I will not generate these standalone animations through the rest of the book. Please see the preface for instructions to run this book on the web, for free, or install IPython on your computer. This will allow you to run all of the cells and see the animations. It's very important that you practice with this code, not just read passively." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generalizing with Convolution\n", "\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. As programmers we always want to generalize our code so that it works for all cases. \n", "\n", "This is easily solved with [*convolution*](https://en.wikipedia.org/wiki/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. 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", "Comparison shows that `predict_move()` is computing this equation - it computes the sum of a series of multiplications.\n", "\n", "[Khan Academy](https://www.khanacademy.org/math/differential-equations/laplace-transform/convolution-integral/v/introduction-to-the-convolution) [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": 20, "metadata": {}, "outputs": [], "source": [ "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": [ "This illustrates the algorithm, but it runs very 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", "```python\n", "convolve(np.roll(pdf, offset), kernel, mode='wrap')\n", "```\n", "\n", "FilterPy implements this with `discrete_bayes`' `predict()` function." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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", "book_plots.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 \n", "$$(0.1 \\times 0.05)+ (0.8 \\times 0.05) + (0.1 \\times 0.55) = 0.1$$\n", "\n", "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." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prior = predict(belief, offset=3, kernel=[.05, .05, .6, .2, .1])\n", "book_plots.plot_belief_vs_prior(belief, prior, ylim=(0,0.6))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The position was correctly shifted by 3 positions and we give more weight to the likelihood of an overshoot vs an undershoot, so this looks correct.\n", "\n", "Make sure you understand what we are doing. We are making a prediction of where the dog is moving, and convolving the probabilities to get the prior.\n", "\n", "If we weren't using probabilities we would use this equation that I gave earlier:\n", "\n", "$$ \\bar x_{k+1} = x_k + f_{\\mathbf x}(\\bullet)$$\n", "\n", "The prior, our prediction of where the dog will be, is the amount the dog moved plus his current position. The dog was at 10, he moved 5 meters, so he is now at 15 m. It couldn't be simpler. But we are using probabilities to model this, so our equation is:\n", "\n", "$$ \\bar{ \\mathbf x}_{k+1} = \\mathbf x_k \\ast f_{\\mathbf x}(\\bullet)$$\n", "\n", "We are *convolving* the current probabilistic position estimate with a probabilistic estimate of how much we think the dog moved. It's the same concept, but the math is slightly different. $\\mathbf x$ is bold to denote that it is an array of numbers. " ] }, { "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 having no knowledge. However, each prediction is followed by an update where we incorporate the measurement into the estimate. 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": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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1BTwGELB+AdTcEUICOLIkSN+tx8+fFiSfH4XIZzVazz7eurqqKqqyu9zhPs8AAAzhDKmdHVs+Nd//Vdt2bJFtbW1ev3117VgwQJt2rRJM2bMCPnqkKfO3//+97IsK+Cf9gsteDD+4VzERAgI4pNPPtHx48d9tm/atEmSQr4f2p8xY8YoOTlZn332merr633K33vvPUkK+ZM8AIDZQhlTevfurREjRujQoUPau3evz2M7GxsyMjI0a9YsPf/887r99ttVW1ur999/3y6PjY2VJLlcLp99L774Yknyenx38Iydf/vb3+R0On3KGf/QU5gIAUE0NDTo0Ucf9dr28ccf6+WXX1Z6erpuuummLtedkJCgW265RU1NTT5fni0pKdGvfvUrxcfH69Zbb+3ycwAAzBHqmHLnnXfKsiw98MADXhOWo0eP6rHHHrMf47Fx40a/E4rq6mpJUlJSkr0tKytLknTw4EGfx994440aMWKEnnrqKW3YsMHvMXz44Ydqbm4O6XgDGTx4sKZPn66ysjL98pe/9CrbunWrVq9erczMzC81xgKh4DtCQBBTp07VCy+8oK1bt+rSSy+1f/PB7XbrueeeU1pa2peqf+nSpXr//ff15JNPatu2bZo2bZr9O0LHjx/Xk08+qWHDhp2lowEARFKoY8oPfvADvfHGG/r973+vgoICzZo1y/4doerqaj344INeq7rNnTtXSUlJmjJlivLy8mRZlt5//31t27ZNF1xwgb34gCRdddVVWrt2rWbPnq2ZM2eqV69eys3N1a233qr4+HitW7dOV199ta699lpNnjxZkyZNUnJysg4ePKht27Zp//79qqqqUnJy8pdqi2effVaXXnqpHnjgAf35z3/WhRdeaP+OUExMjJYvX+53YQngbOKKEBDEsGHD9OGHHyozM1PPPvusXn31VV1wwQXasGGDz4+pdkWfPn304Ycf6sEHH1Rtba1+/vOfa+3atfrqV7+qjRs3+v0xVQDAuSnUMSUhIUFvvfWW/dMKv/71r7Vy5UqNGjVKq1ev9voxVen0h2qXXHKJPvnkEz399NNavny52tra9MQTT2jTpk1eP7h911136T/+4z907Ngx/fSnP9WPf/xjvfjii3b5xIkTtX37dv3whz9UQ0ODli9frmeeeUZ///vfdf755+ull14Ka0nuQIYPH66PP/5Y3/rWt7Rnzx797Gc/0xtvvKFrrrlGmzdv9vtjqsDZ5rAsy4p0CMA0ZWVlGjZsmG677TatWLEi0nEAAOcwxhTATFwRAgAAABB1wp4INTU1adGiRcrJyVFSUpImTZqkNWvWdLrfihUr5HA4/P4JtHwiAABdwVgFAOhM2IslzJ49W9u2bdPSpUs1evRorV69WvPmzZPb7db8+fM73X/58uXKz8/32uZZwQQAgLOBsQoA0JmwJkIbNmzQW2+9ZQ8okjRt2jQdOHBADzzwgObMmWOvTx/I+PHjdeGFF3Y9MdADPKvuADj3MFbBNIwpgJnCmgitX79eqampuvnmm72233HHHZo/f762bt2qyZMnn5Vgbrdbbrfba5vn9gQAQM/x/Jp8ezExMYqJMfNrpoxVABB9ujJWhTURKioq0tixYxUX573bxIkT7fLOBpfrrrtONTU1Sk9P1xVXXKFHH31U48eP93mc2+3WiRMnwokHAOghKSkpxk6EGKsAAFLnY1VYE6Ha2loNHz7cZ3ufPn3s8kAGDBigxYsX6+KLL1ZaWpp27typpUuX6uKLL9bmzZtVUFAQThQAAPxirAIAhCLsxRKCXe4PVnbNNdfommuusf9/6tSpuvbaazVhwgQtWbJEv//978ONAgCAX4xVAIDOhHVfQ1ZWlt9P0urq6iSd+bQtVHl5eZoyZYq2bNkS1n4AAATCWAUACEVYV4QmTJigwsJCOZ1Or3uvd+7cKUl+75/ujGVZfu/d8/eJncn3pAPAPyt/34MxeTEAxioAiD5dGavCmgjddNNNev755/Xaa69pzpw59vaVK1cqJydHF110UTjVqbS0VJs3b9bXvvY1nzJ/wU1epQgAoonJEyHGKgCAdJYnQjNnztT06dO1cOFCNTY2auTIkSosLNTGjRu1atUq+3cZFixYoJUrV6qkpES5ubmSpK997WuaOnWqJk6caH8B9ac//akcDocee+yxLh4eAADeGKsAAKEIe7GEdevWafHixVqyZInq6uqUn5+vwsJCzZ07136My+WSy+XyWst7woQJeuWVV/Szn/1MJ0+eVHZ2tq688kr9+Mc/1ujRo8/O0ZxFX3zxhX1bRaTykYEMZCCDyRlMxlhFBjKQgQxk6EzYE6HU1FQtW7ZMy5YtC/iYFStWaMWKFV7bfvGLX4QdLpJOnjyptrY2xcfHk4EMZCADGc4xjFVkIAMZyECGznATcwCeXwaP5H3wZCADGchgcgZEngnnARnIQAYymJwhGIfV/p4Ag7jdbh0/ftxrW+/evfkCKgD0MPrjwGgbADBDV/pjemoAAAAAUYeJEAAAAICow0QIAAAAQNQJe9W4aFFTUyOXy6XY2Fj169ePDGQgAxnIAOOYcB6QgQxkIIPJGYJhIhRAZWWlvdxfpF44MpCBDGQwOQMiz4TzgAxkIAMZTM4QDLfGAQAAAIg6XBEKIDc3V263O6JLoJKBDGQgg8kZEHkmnAdkIAMZyGByhmD4HSEAQFD0x4HRNgBgBn5HCAAAAABCwEQIAAAAQNThO0IBOJ1OWZYlh8OhuLjINBMZyEAGMpicAZFnwnlABjKQgQwmZwjGvESGKC4utpf7KygoIAMZyEAGMsA4JpwHZCADGchgcoZguDUOAAAAQNThilAAaWlpcjqdEb2MRwYykIEMJmdA5JlwHpCBDGQgg8kZgmH5bABAUPTHgdE2AGAGls8GAAAAgBAwEQIAAAAQdZgIAQAAAIg6Zn5zyQD79++3v9w1fPhwMpCBDGQgA4xjwnlABjKQgQwmZwiGiVAAx48ft9c9JwMZyEAGMsBEJpwHZCADGchgcoZguDUOAAAAQNRh+ewAXC6X/d+xsbE98pxkIAMZyGBihkj3xyaLdNtE27lIBjKQgQyBdKU/5ta4ACJ1wpCBDGQgw7mSAZFnwnlABjKQgQwmZwiGj/MAAAAARB0mQgAAAACiDrfGBVBfXy+3262YmBhlZmaSgQxkIAMZYBwTzgMykIEMZDA5QzBMhAIoLy+3l/uL1AtHBjKQgQwmZ0DkmXAekIEMZCCDyRmC4dY4AAAAAFGHK0IBDBo0yL6URwYykIEMZICJTDgPyEAGMpDB5AzB8DtCAICg6I8Do20AwAxd6Y/pqQEAAABEHSZCAAAAAKIOEyEAAAAAUYfFEgLYvn27vdxfQUEBGchABjKQAcYx4TwgAxnIQAaTMwTDFSEAAAAAUYcrQgEkJyfL6XQqLi5yTUQGMpCBDCZnQOSZcB6QgQxkIIPJGYJh+WwAQFD0x4HRNgBgBpbPBgAAAIAQMBECAAAAEHWYCAEAAACIOmZ+c8kA5eXl9pe7hg4dSgYykIEMZIBxTDgPyEAGMpDB5AzBcEUogPr6etXV1am+vp4MZCADGcgAI5lwHpCBDGQgg8kZgmEiBAAAACDqsHx2AC0tLbIsSw6HQ4mJiT3ynGQgAxnIYGKGSPfHJot020TbuUgGMpCBDIF0pT9mIgQACIr+ODDaBgDMwO8IAQAAAEAImAgBAAAAiDosnx1AY2OjfU9jWloaGchABjKQAcYx4TwgAxnIQAaTMwTDRCiA0tJStbW1KT4+XgUFBWQgAxnIQAYYx4TzgAxkIAMZTM4QDLfGAQAAAIg6YV8Rampq0kMPPaRXX31VdXV1ys/P149+9CPNnTs3rHoeeughPf744xo3bpyKiorCjdHt+vfvL5fLpdjYWDKQgQxkIMM5hrGKDGQgAxnI0Jmwl8+eMWOGtm3bpqVLl2r06NFavXq1XnjhBb388suaP39+SHV89tlnuvjii5WRkaG+ffv6HVxYkhQAzHAu9seMVQAQXbr9d4Q2bNiga6+9VqtXr9a8efPs7TNmzFBxcbHKy8s7nfE5nU595Stf0dSpU7V9+3YdPXqUwQUADHau9ceMVQAQfbr9d4TWr1+v1NRU3XzzzV7b77jjDlVWVmrr1q2d1rF06VLV1dXp8ccfD+epAQAICWMVACAUYU2EioqKNHbsWMXFeX+1aOLEiXZ5MJ9//rn+67/+S88884xSU1PDjAoAQOcYqwAAoQhrsYTa2loNHz7cZ3ufPn3s8kDcbrfuvPNOzZ49W7NmzQoz5mnFxcXKzc31Woe8paVFu3fvliRlZmZq6NChXvvs3btXzc3NkuSzbN/Ro0d16NAhSdLQoUOVmZlplxUVFenUqVP28XU87tLSUjU2NkqSxo0b5zXgHjt2TAcOHJAk5eTkqF+/fl777tixQ5ZlqVevXho9erRX2cGDB1VXVydJiomJkcvlUnx8vMaNG6empiaVlJRIkrKzszVw4ECvfT///HN7icLzzjvPq6yqqkrV1dWSpBEjRngN7qdOndKePXvsYx0yZIhdVlxcrFOnTsmyLCUkJNj/kPCoqalRZWWlJCk3N1cZGRl2mdPpVHFxsSQpLS1Nw4YN89p3//799iXM8ePHe92qUl9fr/Lycvv/Lcuy20GStm/fLklKTk7WqFGjvOotLy9XfX29JCk/P1+JiYl2WWNjo0pLSyWd/gLfgAEDvPYtLi6W0+lUYmKi8vPzvba3tLTI7XYrPj5eI0eOVEpKil3e3NysvXv3SpKysrI0ePBgr3r37NmjU6dOKTY2VuPHj/cqq66uVlVVlSQpLy9P6enpdllra6t27dol6fR7yOFweLVDSUmJmpqaJEkTJkzwuvxbW1uriooKSdLgwYOVlZVll7ndbu3cuVOSlJqaqhEjRnhlKisrU0NDgyRp7NixSkhI8NsOAwcOVHZ2tte+RUVFcrlcSkpK0pgxY7zKKioq7H5i1KhRSk5OtstOnDihffv2SZL69eunnJwcr313796tlpYWOZ1OxcbGerXD4cOHdeTIEUnSsGHDur2PKC4uVmtrq/3+7N27d4/3EW1tbYqNjVVCQoLdDt3VR7S0tOhcwlh1BmPVaYxVpzFWncFYdVq0j1VhrxrncDi6VPbzn/9ce/fu1R/+8Idwn9LmdDrV8StNlmWpra3NLve3j6e8I7fbbZe53W6f/fz9t796O2ZqX6/L5fLZt62tze4sO3K5XPa+cXFxcjqddruGUm+gY21fb8djbd+GHett3+b+6g613i/z2sTExNgda/tjDaXeYOdLoDZ0Op0+95M6nU77+DyvX7j1trW1+S1r34b+vrLnKXM4HPaPknWs159g53f7ejt7Xdvr2A7+jqe1tVVut9vvdzCCHWuobejJ0b4dQq33bPURTqfTzug5Z4LV2119hMvl8nru7uwjzjWMVb71MlYxVjFWncFY5VtvNI5VYU2EsrKy/H6S5vlUyPNpW0fl5eVasmSJli5dqoSEBB07dkzSmRP12LFjSkxMVK9evYKHjYvzGcA8nzp4yv3t4+8Fkk53Wp6yjp1JYmKifQJ3Vm/HTO3r9fcGi4+Pl2VZfuv1fHrgeVz7/w+l3vZ/B6q347G2b8OO9Xra4cvWezZem/aPDbXeYOdLoDZs/xiPxMREud1uud3uTs/DQPUGWj6yfRv6+weap8yyLK/Hesq6cn63r7ez17U9zyeWTqdTcXFxfo8nISHB/vQpWL1daUO3223X3b7+UOs9W31EYmKiHA6H2traFBcXF5E+wvMatP8UuTv7iHMJY5X/ehmrGKsYq85grPKtNxrHqrBWjbvnnntUWFio+vp6r4Nes2aN5s2bp82bN2vy5Mk++23atEnTpk0LWvd3vvMd/fKXv7T/n5V4AMAM51p/zFgFANGn25fPfuONNzRr1iytWbNGc+bMsbfPnDlTO3bsCLgk6bFjx/TZZ5/5bF+0aJEaGhq0fPlyDR48WCNHjvxSBwMAOPvOtf6YsQoAok9X+uOwbo2bOXOmpk+froULF6qxsVEjR45UYWGhNm7cqFWrVtkDy4IFC7Ry5UqVlJTYX0q84oorfOrLyMiQ0+n0WwYAQFcwVgEAQhH2Ygnr1q3T4sWLtWTJEtXV1Sk/P1+FhYWaO3eu/RiXyyWXy3VOfsEWAHDuY6wCAHQmrFvjelKkbzeorKy0vzDYcWnEnkIGMpCBDCZkiHR/bLJIt020nYtkIAMZyBBIt98aF01qamrsNcwjdfKQgQxkIIPJGRB5JpwHZCADGchgcoZg+DgPAAAAQNTh1rgATpw4Yf8gWPtfZe5JZCADGchgQoZI98cmi3TbRNu5SAYykIEMgXT78tk9KdKDCwDgNPrjwGgbADBDV/pjemoAAAAAUYeJEAAAAICow6pxATQ3N9v3NCYnJ5OBDGQgAxlgHBPOAzKQgQxkMDlDMEyEAti7d6+93F9BQQEZyEAGMpABxjHhPCADGchABpMzBMOtcQAAAACiDleEAsjKyrJ/CZcMZCADGcgAE5lwHpCBDGQgg8kZgmH5bABAUPTHgdE2AGAGls8GAAAAgBAwEQIAAAAQdZgIAQAAAIg6LJYQwJ49e+zl/saMGUMGMpCBDGSAcUw4D8hABjKQweQMwTARCuDUqVNqa2uTy+UiAxnIQAYywEgmnAdkIAMZyGByhmC4NS6A2NhYxcTERHS5PzKQgQxkMDkDIs+E84AMZCADGUzOEAzLZwMAgqI/Doy2AQAzsHw2AAAAAISAiRAAAACAqMNECAAAAEDUYdW4AKqrq+VyuRQbG6vs7GwykIEMZCADjGPCeUAGMpCBDCZnCIaJUABVVVX2uueReuHIQAYykMHkDIg8E84DMpCBDGQwOUMw3BoHAAAAIOpwRSiAvLw8WZYlh8NBBjKQgQxkgJFMOA/IQAYykMHkDMHwO0IAgKDojwOjbQDADPyOEAAAAACEgIkQAAAAgKjDd4QCaG1ttf87ISGBDGQgAxnIAOOYcB6QgQxkIIPJGYJhIhTArl277OX+CgoKyEAGMpCBDDCOCecBGchABjKYnCEYbo0DAAAAEHW4IhRAenq6/Uu4ZCADGchABpjIhPOADGQgAxlMzhAMy2cDAIKiPw6MtgEAM7B8NgAAAACEgIkQAAAAgKjDRAgAAABA1GGxhABKSkrs5f5GjBhBBjKQgQxkgHFMOA/IQAYykMHkDMEwEQqgqanJfuHIQAYykIEMMJEJ5wEZyEAGMpicIRhujQMAAAAQdVg+O8jze0RqGVQykIEMZDAhQ6T7Y5NFum2i7VwkAxnIQIZgzxVuf8ytcQGYMMCTgQxkIIPJGRB5JpwHZCADGchgcoZgzE4HAAAAAN2AiRAAAACAqMOtcQHU1tbK7XYrJiZGWVlZZCADGchABhjHhPOADGQgAxlMzhAME6EAKioq7OX+IvXCkYEMZCCDyRkQeSacB2QgAxnIYHKGYLg1DgAAAEDU4YpQAIMHD7Yv5ZGBDGQgAxlgIhPOAzKQgQxkMDlDMPyOEAAgKPrjwGgbADBDV/pjemoAAAAAUYeJEAAAAICow3eEAnC73fZ/R+oWBzKQgQxkMDkDIs+E84AMZCADGUzOEAwToQB27txpL/dXUFBABjKQgQxkgHFMOA/IQAYykMHkDMGEPTVramrSokWLlJOTo6SkJE2aNElr1qzpdL+3335b06dPV05OjhITE5Wdna0rr7xSGzZs6FJwAAACYawCAHQm7CtCs2fP1rZt27R06VKNHj1aq1ev1rx58+R2uzV//vyA+9XW1mrcuHG66667NGDAANXV1enZZ5/Vtddeq5deeknf/OY3v9SBnG2pqan2DJYMZCADGchwbmGsIgMZyEAGMnQmrOWzN2zYoGuvvdYeUDxmzJih4uJilZeXKzY2NuQnb2tr07BhwzR8+HD99a9/9SpjSVIAMMO51h8zVgFA9On25bPXr1+v1NRU3XzzzV7b77jjDlVWVmrr1q3hVKf4+HhlZGQoLo6vKgEAzg7GKgBAKMKaCBUVFWns2LE+g8HEiRPt8s643W45nU5VVlbq4Ycf1hdffKHvf//74cQAACAgxioAQCjC+nirtrZWw4cP99nep08fu7wzs2bN0ptvvilJSktL0yuvvKJrr702pOcvLi5Wbm6u0tLS7G0tLS3avXu3JCkzM1NDhw712mfv3r1qbm6WJJ/VKo4ePapDhw5JkoYOHarMzEy7zOVy2YNl7969fY67tLRUjY2NkqRx48Z5DbjHjh3TgQMHJEk5OTnq16+f1747duyQZVnq1auXRo8e7VV28OBB1dXVSZLGjBmjpKQku6ypqUklJSWSpOzsbA0cONBr388//9y+D/O8887zKquqqlJ1dbUkacSIEUpNTbXLTp06pT179kg6/VoOGTLEa98vvvhCJ0+elMPhsP8h4VFTU6PKykpJUm5urjIyMuwyp9Op4uJiSadf62HDhnntu3//fvsS5vjx471uVamvr1d5ebkkadCgQerbt6/Xvtu3b5ckJScna9SoUV5l5eXlqq+vlyTl5+crMTHRLmtsbFRpaakkqX///howYIDXvsXFxXI6nUpMTFR+fr5XWWVlpWpqaiRJI0eOVEpKil3W3NysvXv3SpKysrI0ePBgr3337NmjU6dOKTY2VuPHj/cqq66uVlVVlSQpLy9P6enpdllra6t27dolSUpPT1deXp7XviUlJWpqapIkTZgwwevyb+E0b3oAACAASURBVG1trSoqKiRJgwcPVlZWll3mdru1c+dOSafv3x0xYoRXvWVlZWpoaJAkjR07VgkJCXZZQ0ODysrKJEkDBw5Udna2175FRUVyuVxKSkrSmDFjvMoqKirsfmLUqFFKTk62y06cOKF9+/ZJkvr166ecnByvfXfv3q2WlhbFxcVp3LhxXmWHDx/WkSNHJEnDhg2jj9DZ7SNaWlp0LmGsOuOf6TxkrDqDseo0xqrT6CNO68pYFfZ1fofD0aUyj1//+tc6duyYqqqqtGrVKs2ZM0crV670uo87EKfTqY5fabIsS21tbXa5v3085R253W67rP0655J04MCBkOvtmKl9vS6Xy2fftrY2WZbl94tjLpfL3reiokIOh0OxsbHKy8sLqd5Ax9q+3o7H2r4NO9ZbVlamEydOyOVy+X19Q633y7w2NTU1amhosNvBc6yh1BvsfAnUhk6n0+d+0rKyMh0/fvxL1dvW1ua3rH0b+vvKnqessbFRJSUlPu3QlfO7fb3+9m+fqb2ysjKdPHky6LG2trbK7Xb7/Q5GsGMNtQ2dTqdPO4Ra79nqI8rKyrz2i1QfUV5eroSEBLsdurOPONcwVvnWy1jFWMVYdQZjlW+90ThWhTURysrK8vtJmmfG5/m0LZj2n4jccMMNmjlzpu6//37NmTOn0y+XxsXF+XRwDofDfgH83b8dFxcXcKWKmJgYu6zjc3tmx6HU2zFT+3r9vcHi4+NlWZbfemNjY+19m5qa5HQ6vTJ2Vm/7vwPV2/FY27dhx3obGhrsk/TL1PtlXptTp07pxIkTXo8Ntd5g50ugNmz/GI+Ghgb7jed5TLj1ulwuv2Xt29DfAO4pczqdqq+v92mHrpzf7evt7HVtr2M7+DuehIQEuVyuTuvtSht6Os+O7RBqvWerj+jYDpHoI9ra2tTY2OiVvTv7iHMJY5X/ehmrGKsYq85grPKtNxrHqrBWjbvnnntUWFio+vp6r4Nes2aN5s2bp82bN2vy5MlhBXj44Yf16KOP6vDhw+rfv7+9PdIr8Wzfvt2+LBepH4AiAxnIQAYTMkS6Pw4XY1XPIgMZyEAGEzJ0pT8OayL0xhtvaNasWVqzZo3mzJljb585c6Z27NgR9pKklmVp2rRp2r59u2pqarwGrEgPLq2trfZ/t7/ntCeRgQxkIIMJGSLdH4eLsapnkYEMZCCDCRm60h+HdWvczJkzNX36dC1cuFCNjY0aOXKkCgsLtXHjRq1atcoeWBYsWKCVK1eqpKREubm5kqQbb7xRBQUFmjRpkrKyslRZWakVK1boL3/5i5566injliWN1AlDBjKQgQznSgZTMVaRgQxkiDQymJMhmLB79HXr1mnx4sVasmSJ6urqlJ+fr8LCQs2dO9d+jMvlksvl8vrS0qWXXqrf/va3evLJJ9XY2KiMjAxdeOGF+tOf/hTySjwAAISCsQoA0Jmwbo3rSZG+3QAAcBr9cWC0DQCYodtvjYsmDQ0NsixLDofDa618MpCBDGQgA0xhwnlABjKQgQwmZwiGiVAAZWVlEV9pgwxkIAMZTM6AyDPhPCADGchABpMzBMO1ewAAAABRhytCAQwcODDgj4qRgQxkIAMZYAITzgMykIEMZDA5QzAslgAACIr+ODDaBgDM0JX+mJ4aAAAAQNRhIgQAAAAg6jARAgAAABB1WCwhgKKiIrW2tiohIUHjx48nAxnIQAYywDgmnAdkIAMZyGByhmC4IhSAy+WS2+2Wy+UiAxnIQAYywEgmnAdkIAMZyGByhmC4IhRAUlKSYmNjFR8fTwYykIEMZICRTDgPyEAGMpDB5AzBsHw2ACAo+uPAaBsAMAPLZwMAAABACJgIAQAAAIg6TIQAAAAARB0WSwigoqJCLpdLsbGxGjx4MBnIQAYykAHGMeE8IAMZyEAGkzMEw0QogNraWrW1tSk+Pj5iLxwZyEAGMpicAZFnwnlABjKQgQwmZwiGW+MAAAAARB2Wzw6gublZlmXJ4XAoOTm5R56TDGQgAxlMzBDp/thkkW6baDsXyUAGMpAhkK70x0yEAABB0R8HRtsAgBn4HSEAAAAACAETIQAAAABRh1XjAjhx4oR9T2NKSgoZyEAGMpABxjHhPCADGchABpMzBMNEKIB9+/bZy/0VFBSQgQxkIAMZYBwTzgMykIEMZDA5QzDcGgcAAAAg6nBFKIB+/frZv4RLBjKQgQxkgIlMOA/IQAYykMHkDMGwfDYAICj648BoGwAwA8tnAwAAAEAImAgBAAAAiDpMhAAAAABEHRZLCGD37t32cn/5+flkIAMZyEAGGMeE84AMZCADGUzOEAwToQBaWlrU1tYmt9tNBjKQgQxkgJFMOA/IQAYykMHkDMEwEQogLi5OlmUpLi5yTUQGMpCBDCZnQOSZcB6QgQxkIIPJGYJh+WwAQFD0x4HRNgBgBpbPBgAAAIAQMBECAAAAEHWYCAEAAACIOmZ+c8kAhw8flsvlUmxsrAYMGEAGMpCBDGSAcUw4D8hABjKQweQMwTARCuDIkSP2uueReuHIQAYykMHkDIg8E84DMpCBDGQwOUMw3BoHAAAAIOpwRSiAYcOGybIsORwOMpCBDGQgA4xkwnlABjKQgQwmZwiG3xECAARFfxwYbQMAZuB3hAAAAAAgBEyEAAAAAEQdviMUQEtLi31PY2JiIhnIQAYykAHGMeE8IAMZyEAGkzMEw0QogN27d9vL/RUUFJCBDGQgAxlgHBPOAzKQgQxkMDlDMNwaBwAAACDqcEUogMzMTDmdTsXFRa6JyEAGMpDB5AyIPBPOAzKQgQxkMDlDMCyfDQAIiv44MNoGAMzA8tkAAAAAEAImQgAAAACiDhMhAAAAAFEn7G8uNTU16aGHHtKrr76quro65efn60c/+pHmzp0bdL9169Zp7dq12rZtmw4dOqT+/fvr0ksv1SOPPKJRo0Z1+QC6y969e+0vd0UqHxnIQAYymJzBZIxVZCADGchAhs6EPRGaPXu2tm3bpqVLl2r06NFavXq15s2bJ7fbrfnz5wfc74knntCAAQO0ePFiDR8+XAcPHtRPfvITXXDBBdqyZYvGjRv3pQ7kbGtubrbXPScDGchABjKcWxiryEAGMpCBDJ0JayK0YcMGvfXWW/aAIknTpk3TgQMH9MADD2jOnDmKjY31u+8f//hHZWdne2278sorlZeXp1/84hd64YUXungIAACcwVgFAAhFWMtn33333VqzZo3q6+u91gMvLCzU/PnztXnzZk2ePDmsAMOHD9eoUaP05ptvem1nSVIAMMO51h8zVgFA9On25bOLioo0duxYnx9Fmjhxol0ejv379+vAgQPG3WoAADh3MVYBAEIR1q1xtbW1Gj58uM/2Pn362OWhcjqdWrBggVJTU/Xd7343pH2Ki4uVm5urtLQ0e1tLS4t2794t6fSv1w4dOtRrn71796q5uVmSVFBQ4FV29OhRHTp0SJI0dOhQZWZm2mUul8seLHv37u1z3KWlpWpsbJQkjRs3zmvAPXbsmA4cOCBJysnJUb9+/bz23bFjhyzLUq9evTR69GivsoMHD6qurk6SNGbMGCUlJdllTU1NKikpkSRlZ2dr4MCBXvt+/vnn9n2Y5513nldZVVWVqqurJUkjRoxQamqqXXbq1Cnt2bNH0unXcsiQIV77fvHFFzp58qQcDof9DwmPmpoaVVZWSpJyc3OVkZFhlzmdThUXF0uS0tLSNGzYMK999+/fb8/cx48f73WrSn19vcrLyyVJgwYNUt++fb323b59uyQpOTnZ58t35eXlqq+vlyTl5+crMTHRLmtsbFRpaakkqX///howYIDXvsXFxXI6nUpMTFR+fr5XWWVlpWpqaiRJI0eOVEpKil3W3NysvXv3SpKysrI0ePBgr3337NmjU6dOKTY2VuPHj/cqq66uVlVVlSQpLy9P6enpdllra6t27dolSUpPT1deXp7XviUlJWpqapIkTZgwwetTj9raWlVUVEiSBg8erKysLLvM7XZr586dkqTU1FSNGDHCq96ysjI1NDRIksaOHauEhAS7rKGhQWVlZZKkgQMH+txGVFRUJJfLpaSkJI0ZM8arrKKiwu4nRo0apeTkZLvsxIkT2rdvnySpX79+ysnJ8dp39+7damlpUVxcnM8/SA8fPqwjR45IkoYNG0YfobPbR7S0tOhcwlh1xj/TechYdQZj1WmMVafRR5zWlbEq7MUSHA5Hl8rasyxLCxYs0Pvvv6/XXnvNpzMLxOl0quOdfJZlqa2tzS73t4+nvCO3222Xud1un/JQ6+2YqX29LpfLb72WZfn94pjL5fpS9QY61vb1djzW9m3or17Psfp7fUOt15TXprNjbWtrk9Pp9HsZNdhrE0q9bW1tfsuC1evZt7N6/Qm1Df3t3z5TR50da2trq9xut9/vYJyNNvTXRqHWa8p5eC72Eecaxirfev8ZzkPGqjP1MlYxVnnQR8jv84QirIlQVlaW30/SPDM+z6dtwViWpbvuukurVq3SypUrdeONN4b8/HFxcT4dnMPhsF+AjrdBeLYFWqkiJibGLuvYmdTW1tpvjs7q7Zipfb3+3mDx8fGyLMtvvbGxsfa+x44d0/HjxxUTE6O+ffuGVG/7vwPV2/FY27dhx3qPHj1qdxT+njPUer/Ma3PixAlVV1fb7dD+GMN9bYIdq6fe9o/xOHr0qP0pWUxMTJfqdblcnbahvwHcU9bW1ua3Hbpyfrevt7Pzpb2jR4/qxIkTdjv4O56EhAS5XK5O6+1KG3o6vY7tEGq9Z6uPOHr0qJxOp90Okegj3G636urqlJiYaLdDd/YR5xLGKv/1MlYxVjFWncFY5VtvNI5VYS2WcM8996iwsNDnC6hr1qzRvHnzOv0CqmdgWb58uV588UXdcccdAR8b6S+gbt++3b4s1/ESZE8hAxnIQAYTMkS6Pw4XY1XPIgMZyEAGEzJ0+2IJN910k5qamvTaa695bV+5cqVycnJ00UUXBdzXsizdfffdWr58uZ577rmgAwsAAF3FWAUACEVYt8bNnDlT06dP18KFC9XY2KiRI0eqsLBQGzdu1KpVq+zLWwsWLNDKlStVUlKi3NxcSdK///u/68UXX9Sdd96pCRMmaMuWLXa9iYmJOv/888/iYX15Q4cOldvtjugnnmQgAxnIYHIGUzFWkYEMZCADGUIR1q1x0umVHhYvXqxXX31VdXV1ys/P13/8x39o7ty59mNuv/12rVy5UqWlpfbKIXl5efbKEx3l5ubaK3t4RPp2AwDAaedif8xYBQDRpSv9cdgToZ7C4AIAZqA/Doy2AQAzdPt3hAAAAADgn0HYvyMULdqva+5vaT8ykIEMZIj2DDj7zn9pb488z6e3jgpYZkKGcJnwfiADGbo7A+/Ns4+JUABFRUURX3KQDGQgAxlMzgCYwoT3AxnIYFoGE5jeDtwaBwAAACDqcEUogN69e8vpdPr9tVwykIEMZCADYA4T3g9kIINpGUxgejuwahwAICj648DOdtuY8B0AEzIA8MV7MzhWjQMAAACAEDARAgAAABB1mAgBAAAAiDpmfnPJAKWlpfaXu4YNG0YGMpCBDGQADGXC+4EMZDAtgwlMbwcmQgE0Njba656TgQxkIAMZAHOZ8H4gAxlMy2AC09uBW+MAAAAARB2Wzw7A6XTKsiw5HI6IrX1OBjKQgQwmZIh0f2wyls/ungzhirb3JBmiMwPvzeC60h9za1wAJvzwExnIQAYymJwBMIUJ7wcykMG0DCYwvR34OA8AAABA1GEiBAAAACDqmH29KoKOHTsmt9utmJgYZWRkkIEMZCADGQBDmfB+IAMZTMtgAtPbgYlQAAcOHLCX+4vUC0cGMpCBDCZnAExhwvuBDGQwLYMJTG8Hbo0DAAAAEHW4IhRATk6OXC6XYmNjyUAGMpCBDIDBTHg/kIEMpmUwgentwEQogH79+kU6AhnIQAYyGJ0BMIUJ7wcykMG0DCYwvR24NQ4AAABA1GEiBAAAACDqMBECAAAAEHX4jlAAO3bssJf7mzhxIhnIQAYykAEwlAnvBzKQwbQMJjC9HbgiFIBlWfYfMpCBDGQgA2AuE94PZCCDaRlMYHo7cEUogF69eik+Pl5xcZFrIjKQgQxkMDkDYAoT3g9kIINpGUxgejs4LEOnaG63W8ePH/fa1rt3b8XEcBELAHoS/XFgZ7ttzn9p79mI1alPbx1ldAYAvnhvBteV/phRDAAAAEDUYSIEAAAAIOowEQIAAAAQdcz85pIBDh48KJfLpdjYWA0ZMoQMZCADGcgAGMqE9wMZyGBaBhOY3g5cEQqgrq5OR48eVV1dHRnIQAYykAEwmAnvBzKQwbQMJjC9HZgIAQAAAIg63BoXwJgxY2RZlhwOBxnIQAYykAEwmAnvBzKQwbQMJjC9HZgIBZCUlBTpCGQgAxnIYHQGwBQmvB/IQAbTMpjA9Hbg1jgAAAAAUYeJEAAAAICow61xATQ1NcntdismJkapqalkIAMZyEAGwFAmvB/IQAbTMpjA9HZgIhRASUmJ2traFB8fr4KCAjKQgQxkIANgKBPeD2Qgg2kZTGB6O3BrHAAAAICowxWhALKzs+1fwiUDGchABjIA5jLh/UAGMpiWwQSmtwMToQAGDhwY6QhkIAMZyGB0BsAUJrwfyEAG0zKYwPR24NY4AAAAAFGHiRAAAACAqMNECAAAAEDU4TtCAXz++ef2cn/nnXceGchABjKQATCUCe8HMpDBtAwmML0dmAgF0NbWpra2NjKQgQxkIANgOBPeD2Qgg2kZTGB6OzARCiA+Pt7rbzKQgQxkIANgJhPeD2Qgg2kZTGB6Ozgsy7IiHcIft9ut48ePe23r3bu3YmL4WhMA9CT648DOdtuc/9LesxGrU5/eOsroDAB88d4Mriv9MaMYAAAAgKjDRAgAAABA1Al7ItTU1KRFixYpJydHSUlJmjRpktasWdPpfhUVFVq0aJEuv/xyZWRkyOFwaMWKFV3JDABAUIxVAIDOhL1YwuzZs7Vt2zYtXbpUo0eP1urVqzVv3jy53W7Nnz8/4H779u3Tyy+/rEmTJmnWrFkqLCz8UsG7W1VVlVwul2JjYzVw4EAykIEMZCDDOSRaxiqcZsL7gQxkMC2DCUxvh7AmQhs2bNBbb71lDyiSNG3aNB04cEAPPPCA5syZo9jYWL/7Tp06VTU1NZKkjz/+2PjBpbq62l73PFIvHBnIQAYymJzBVNE0VuE0E94PZCCDaRlMYHo7hHVr3Pr165Wamqqbb77Za/sdd9yhyspKbd26NfATsboQAKAHMFYBAEIR1hWhoqIijR07VnFx3rtNnDjRLp88efLZS9dBcXGxcnNzlZaWZm9raWnR7t27JUmZmZkaOnSo1z579+5Vc3OzJKmgoMCr7OjRozp06JAkaejQocrMzLTL8vLyVFpaKsuytH//fg0fPtxr39LSUjU2NkqSxo0b59Umx44d04EDByRJOTk56tevn9e+O3bskGVZ6tWrl0aPHu1VdvDgQdXV1UmSBg8erPj4eHtgbmpqUklJiSQpOzvbZ2Yd7Nd7q6qqVF1dLUkaMWKEUlNT7bJTp05pz549kqQ+ffpoyJAhdtmIESNUXl6u1tZW7dixw36tPWpqalRZWSlJys3NVUZGhl3mdDpVXFwsSUpLS9OwYcO89t2/f7+9zOH48eO9PqGtr69XeXm5JCkrK0tpaWle/0DZvn27JCk5OVmjRnkv81heXq76+npJUn5+vhITE+2yxsZGlZaWSpL69++vAQMGeO1bXFwsp9OpxMRE5efne7VDTU2NGhoatH37do0cOVIpKSl2eXNzs/bu3WvnHTx4sFe9e/bs0alTpxQbG6vx48d7lVVXV6uqqkrS6fMuPT3dLmttbdWuXbskSSkpKcrOzvZqh5KSEjU1NUmSJkyY4FVWW1uriooKSafPpaysLLvM7XZr586dkqTU1FSNGDHCK1NZWZkaGhokSWPHjlVCQoLdDsePH9eRI0e0fft2DRw4UNnZ2V77FhUVyeVyKSkpSWPGjPEqq6ioUG1trSRp1KhRSk5OtstOnDihffv2SZL69eunnJwcr313796tlpYWxcTEaPTo0V7HevjwYR05ckSSNGzYsG7vI0aMGCGn06mysjJt375dvXv37vE+wrIs5eXlKSkpyS7rrj6ipaVF55Jze6xKVk/p7Dzsbp9//jljFWMVY9U/hNJH9LRoGKvCmgjV1tb6DPbS6Q7JU96dnE6nOv7skWVZ9i/WOp1Ov/u0tbXp7l3p0g5/J9E/Tu4dRyUd7VDm6Txc0uZg+5baWz69dZTcbredyeVy2WVn1n/vdaaKrcHqrQtcpiZJHfeNlxSvFRObffZyuVzt2qEqSL2nAtYrSdoeLG+NpNO3lHx666iAr433OvieffcHyXTyH3/8lUna4j/T82MbAp4vd+9Kl3T8H3/aS/jHH0nb/NX7j3NiR2UneU/v61mL3/PLyv7Ph3b77qiWVB2gXkvSkcDPu6PEb9nzYxvkdrt9Ss60g1v6INjresBPmacdGiQ1dCg7M5jrI+928JyHkuzXxm876IR8z8PYM+WfBWuHI/Jtp9PtEKiPuH2HZ9/u7SM87eCvj/BuhxD7iJ31gcsC9BHPj/XtHzw5PJk6ni+G/txcQOfyWNWTAo1VPcXf8XZ2HgbK6/nHkNPplMPh6HK94b427dswISHB6x+27Y+xs3qDnS/+Xpu2tjY5nU6fK5ipqamqr6+3n68r9XYcqzz89d/+jtXhcPhth1DaMNBY1f7vQJnaS01NldPptNvB3/G0trbK7Xb7vU022LGG2oZxcXE+7RBqvYHOly58tf9L6ayPaGtrk2VZfn8stf2xpqSkqFevM+NaKPUGOl/O9lgVdov662BCKTsb4uLifJ7D4XDYL0DHT/8823r612xjYmLs5wx0H3p38ne8sbGxPd4Onb023S0+Pj7o+dLTWTxfFozEc/u73ScS7dD+POzu/qKj+Pj4gH1ET4tkHxEfH99pH9HxfOnp1+psYKzqnOljlb/zMFheTxv6e31DrTfc16Z9GwbrZzurN9j54u9YPcfZWRt2pd5AY1Vn/Xdn9X7ZNgz33zadHWtCQoJcLle3tKHb7fb7moda77kyVsXHx8uyrLCPNZR62/8dqN6zMVaF1apZWVl+P0nz3Mrl+bStu4wbN87noBMTE31uZ2nPvhTt95Pe7pGRkeF12b2ndbyMKEkDBw48femxB9shLi4u6GvT3fw9d1pa2untPdgOknwuu/ckf+0QExMTkXYYPHiwz60YPSXQuThq1KgAVxW7TyT7iEDtYPcRfiQmJqq1tbU7Y51VjFWhMXqs8iMpKSloG3a8Nae9fv36Bbz1r7Oxyt/VRY/MzEyv2+o7Clbv0KFDfW5/8rDHqgDGjRsXsCwnJ8fndi2P5OTkoPUGG6uys7N9bi/zSEhICFpvx1va2svKyvK6Ha49e6wKIC8vL2BZenp60H073vrXXrCxKiUlJWi97W9V7GjAgAE+tzl6hNRHGDZWdbwFtb0hQ4Z43b7aXmpqatBj9dc3eJztsSqsb4VOmDBBu3bt8rlk57l/M9hJBQBAT2Csij6nTp3SyZMnderUKTKQgQwGMb0dwpoI3XTTTWpqatJrr73mtX3lypXKycnRRRdddFbDAQAQLsaq6LNnzx4VFxfbiymQgQxkMIPp7RDWrXEzZ87U9OnTtXDhQjU2NmrkyJEqLCzUxo0btWrVKvs+vwULFmjlypUqKSlRbm6uvf9vf/tbSadXYJFO/0aD5wuO3/jGN87KAQEAohtjFQAgFGF/82rdunVavHixlixZorq6OuXn56uwsFBz5861H+NyueRyuXxWb+j4mw5PPfWUnnrqKUnn3qpEAABzMVZFlz59+kRsQRoykMHUDCYwvR3CngilpqZq2bJlWrZsWcDHrFixQitWrPDZzgACAOgJjFXRJdCXsslAhmjOYALT24Gf0AYAAAAQdZgIAQAAAIg6TIQAAAAARJ2e/5laAACAs+iLL76Q0+lUXFxc0B9WJQMZoimDCUxvByZCAADgnHby5Em1tbUpPj6eDGQgg0FMbwdujQMAAOc0h8Nh/yEDGchgDtPbgStCAADgnDZx4sRIRyADGYzLYALT24ErQgAAAACiDhMhAAAAAFGHiRAAAACAqMN3hAAAwDmtpqZGLpdLsbGx6tevHxnIQAZDmN4OTIQAAMA5rbKy0l6iN1L/2CIDGUzLYALT24Fb4wAAAABEHa4IAQCAc1pubq7cbrdiYiL3+S4ZyGBaBhOY3g5MhAAAwDktIyMj0hHIQAbjMpjA9HYwc3oGAAAAAN2IiRAAAACAqMOtcQAAwCjnv7S3R57n01tHkYEM50wGE/yztQNXhAAAAABEHSZCAAAAAKIOEyEAAAAAUYeJEAAAAICow0QIAAAAQNRhIgQAAAAg6jARAgAAABB1mAgBAAAAiDpMhAAAAABEHSZCAAAAAKIOEyEAAAAAUYeJEAAAAICow0QIAAAAQNRhIgQAAAAg6jARAgAAABB1mAgBAAAAiDpMhAAAAABEHSZCAAAAAKIOEyEAAAAAUYeJEAAAAICow0QIAAAAQNRhIgQAAAAg6jARAgAAABB1mAgBAAAAiDpMhAAAAABEHSZCAAAAAKIOEyEAAAAAUYeJEAAAAICow0QIAAAAQNRhIgQAAAAg6jARAgAAABB1mAgBAAAAiDpMhAAAAABEnbAnQk1NTVq0aJFycnKUlJSkSZMmac2aNSHtW11drdtvv119+/ZVcnKyLrnkEr3zzjthhwYAIBjGKgBAZ+LC3WH27Nnatm2bli5dqtGjR2v16tWaN2+e3G635s+fH3C/lpYWXXXVVTp27JiWLVum7OxsPfXUU7rmmmv09ttv6/LLL/9SBwIAgAdjFQCgM2FNhDZs2KC33nrLHlAkadq0qfNoUgAADZ9JREFUaTpw4IAeeOABzZkzR7GxsX73ffHFF1VUVKQPPvhAl1xyib1vQUGBHnzwQW3duvVLHgoAAIxVAIDQhDURWr9+vVJTU3XzzTd7bb/jjjs0f/58bd26VZMnTw6475gxY+yBRZLi4uL0zW9+U//v//0/HTp0SIMGDbLLLMvyqcPtdocT10t6gqPL+4YjWEYykIEMZDA5Qzj7+OujTcFY1TnTz0UykIEMZDgb+3Q2VjmsMEazSy65RC6XSx999JHX9uLiYo0fP17PPfec7rnnHr/7Dhw4UJdddpleffVVr+2vv/66rrvuOr355puaMWOGvd3pdOrEiROhRgMA9KCUlBTFxYV9d3WPYKwCAEidj1VhLZZQW1urPn36+Gz3bKutre2WfQEACBVjFQAgFGGvGudwBL4kFqzsy+4LAECoGKsAAJ0JayKUlZXl99Owuro6SfL7KdrZ2BcAgFAxVgEAQhHWDd4TJkxQYWGhnE6n1/12O3fulCSNHz8+6L6ex7UXaN+YmBilpKR4bXM4HHwaBwA9zLIsny+cxsSY+3vcjFUAEH26MlaFtVjCG2+8oVmzZmnNmjWaM2eOvX3mzJnasWOHysvLAy5J+swzz+i+++7Tli1bdNFFF0k6/SXTSZMmKTU1VVu2bAk1BgAAATFWAQBCEdZESJJmzJihjz/+WE888YRGjhypwsJCPf/881q1apVuueUWSdKCBQu0cuVKlZSUKDc3V9LpH6n7l3/5FzU2Nmrp0qXKzs7W008/rT/+8Y/8SB0A4KxirAIAdCbsexvWrVunW2+9VUuWLNE111yjrVu3qrCw0B5YJMnlcsnlcnldnkpMTNQ777yjadOm6dvf/rauv/56VVVV6Y033jBqYGlqatKiRYuUk5OjpKQkTZo0SWvWrOmx5z9+/LgefPBBzZgxQ/369ZPD4dAjjzzSY88vSe+++67uvPNO5efnKyUlRYMGDdKNN96ov//97z2W4bPPPtO1116roUOHqlevXurTp48uueQSrVq1qscydPTCCy/I4XAoNTW1x55z06ZN9m02Hf/09CfTf/vb3zRr1ixlZmaqV69eGjVqlB577LEeee7bb789YDv0ZFt8+umn+vrXv66cnBwlJycrPz9fjz76qJqbm3vk+SXpo48+0tVXX63evXsrNTVV06ZN0+bNm3vs+c8VjFXdi7HqNMaq0xirTmOsOuOcGasseJk+fbqVkZFhPfvss9a7775r3XXXXZYk6+WXX+6R5y8tLbXS09OtqVOn2s/98MMP98hze3zjG9+wpk2bZj399NPWpk2brLVr11oXX3yxFRcXZ73zzjs9kuG9996z7r33Xuull16y3n33XeuPf/yjNXfuXEuS9dhjj/VIhvYqKiqs9PR0Kycnx0pJSemx533vvfcsSdZPfvIT68MPP/T6c/z48R7L8fLLL1sxMTHW3LlzrT/84Q/Wu+++az3//PPWf/7nf/bI8+/bt8/n+D/88EOrb9++1qBBgyyn09ntGYqLi62kpCSroKDAeuWVV6x33nnHevjhh63Y2Fjrhhtu6PbntyzL+uijj6zExETrsssus9avX2+tW7fOuvjii63ExETrgw8+6JEMMANjFWOVP4xVjFWMVeFhItTO66+/bkmyVq9e7bV9+vTpVk5OTo+cwG6323K73ZZlWVZNTU1EBpcjR474bDt+/LjVv39/66qrrurRLB1ddNFF1pAhQ3r8ea+77jrr+uuvt2677baIDC5r167tsefsqKKiwkpJSbEWLlwYsQz+bNq0yZJkPfTQQz3yfIsXL7YkWfv27fPafs8991iSrLq6um7PcPXVV1v9+/e3Tpw4YW9rbGy0+vbta02ePLnbnx9mYKw6jbHKF2MVYxVjVXjMXfYnAtavX6/U1FTdfPPNXtvvuOMOVVZWauvWrd2ewYTVhrKz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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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", "book_plots.plot_prior_vs_posterior(prior, posterior, ylim=(0,.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After the first update we have assigned a high probability to each door position, and a low probability to each wall position. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAGDCAYAAAAGdaBMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXhU9aH/8c9kJ4QsBAIEJGELQZagV6siomhBwa3y1IfF9rrght7e0kXb+8OiV68ttr1tbV0f9QIVCYpCNxGLC9aiIFYFEgEhJISQQEISEkLIMjPn9wdPjplkZjITYOYb5v16Hp/aOZkz7zlzcr5+M2fOOCzLsgQAAAAAESQq3AEAAAAAEGpMhAAAAABEHCZCAAAAACIOEyEAAAAAEYeJEAAAAICIw0QIAAAAQMRhIgQAAAAg4jARAgAAABBxmAgBAAAAiDhMhIAeqqSkRA6HQ7fddlu4UwAAZwmHw6Errrgi3BlASDARAk6TK664Qg6HI9wZAAAACEBMuAMAdM/gwYO1c+dOpaSkhDsFAHCW2LlzpxITE8OdAYQEEyGgh4qNjVVubm64MwAAZxHGFUQSTo1Dj9b+czK7du3St771LfXt21e9e/fW5MmT9fe//73TfZqamvSLX/xC48ePV2JiopKTk3XZZZdp1apVXh9j7dq1mjp1qgYOHKj4+HgNHDhQkydP1tNPP+3R8MEHH0g6eX512z8dz7MuKyvTf/zHf2j48OGKj49Xenq6brjhBm3durXT4z7yyCNyOBzauHGj/vjHP+rCCy9U7969lZ2d3em5d1ReXq777rtP2dnZiouLU//+/XXTTTd5fZxly5bJ4XBo2bJlevPNNzVlyhQlJydzmh8AGC7YMTCQ472vzwgdPXpUP/3pT5WTk6OEhASlpaVp+vTp2rBhQ6ef3bhxoxwOhx555BFt3rxZM2bMUFpamhwOh0pKSk73ZgC6jXeEcFYoLi7WJZdconHjxumee+5RRUWFXn31Vc2YMUMrV67U7NmzJUktLS2aPn26PvzwQ5177rm6//771djYqNWrV2vu3Ln6/PPP9cQTT9jrffbZZ3Xfffdp4MCBuuGGG9SvXz9VVlZq+/btWrZsme6//36lpqbq4Ycf1rJly7R//349/PDD9v3bJi2S9Nlnn2n69OmqqanR1VdfrVmzZunIkSP605/+pMmTJ2vt2rWaOXNmp+f261//Wu+8846uv/56XXnllTp69KjfbbFv3z5NnjxZFRUVuuqqqzR37lwdOHBAq1ev1ptvvqnVq1frxhtv7HS/1atXa/369Zo5c6buvfdeFRcXB/syAADCINAxsE2wx/va2lpNmjRJu3bt0je+8Q17/Hrttdd09dVX66mnntJ9993X6X4fffSRfv7zn+uyyy7T/PnzVVlZqbi4uNP63IFTYgE9WHFxsSXJkmT9+Mc/9li2detWKyYmxkpNTbXq6uosy7Ksxx9/3JJkXXfddVZra6v9s4cOHbLOOeccS5L14Ycf2refd955VlxcnHX48OFOj11VVeXx/y+//HLL169Ua2urNWLECCshIcFj/ZZlWQcPHrQyMzOtAQMGWCdOnLBvf/jhhy1JVmJiovXZZ5/5fO633nqrx+3Tpk2zJFlLlizxuP3DDz+0oqKirLS0NKu+vt6+fenSpZYky+FwWG+99ZbXfgCAeYIdAwM53kuyLr/8co/b7rrrLkuStWDBAo/bd+3aZfXp08eKjY219u3bZ9/+/vvv213PPffcaXimwJnBqXE4K6SkpGjx4sUet11wwQW65ZZbdPToUa1du1aS9H//939yOBz63//9X8XEfP2G6IABA/Szn/3M/pk2DodDMTExio2N7fSY/fr1C7jvzTffVFFRkb73ve9p8uTJHssyMzP14IMP6vDhw3r33Xc73feuu+7SeeedF9DjlJWVacOGDcrKytKPfvQjj2WTJ0/WnDlzVFtba2+P9m644QZdc801AT8nAIAZAh0D2wRzvG9padGKFSuUlJSkxx9/3GPZ6NGj9b3vfU+tra16+eWXO903Ly9P99xzT5DPBggdJkI4K5x//vnq06dPp9vbznP+/PPPdezYMRUVFWnw4MHKycnp9LPf/OY3JZ08ha3NLbfcosbGRo0dO1Y//OEP9ac//UlVVVVB93388ceSTp7P/cgjj3T655NPPpEk7dq1q9N9L7roooAf5/PPP5ckXXbZZR4TvTbenmN3HgcAYI5AxsD2gjne7969WydOnNDEiROVlpbWaTnjCnoyPiOEs8KAAQO83j5w4EBJUl1dnerq6jxu62jQoEH2z7b54Q9/qH79+umZZ57Rk08+qd/+9rdyOByaOnWqfvWrX+n8888PqK+6ulrSyfOy/WloaPD5HALRnefYnccBAJgjkDHQ2+2BYFzB2Yx3hHBWOHz4sNfbDx06JOnkaQNt37fTdltHFRUV9s+29+///u/avHmzqqur9eabb2r+/PnauHGjpk+fHvC7Q23r/POf/yzLsnz+0/5CC22CuXpbd59jsI8DADBHIGNge4wrwElMhHBW+Oyzz3Ts2LFOt2/cuFGSdN5556lPnz4aMWKEDh48qD179nT62ffff1+SfL7Lk5qaqpkzZ+qFF17Qbbfdpurqan344Yf28ujoaEmSy+XqdN+LL75Ykjx+/kxo+yzRP//5Tzmdzk7Lu3qOAICeJ5AxsLtGjx6txMREffHFF6qtre20nHEFPRkTIZwV6urq9Oijj3rc9umnn+qVV15RSkqKbrrpJknSHXfcIcuy9MADD3hMWI4cOaLHHnvM/pk269ev9zqhqKyslCQlJCTYt6Wnp0uSDhw40Onnb7zxRo0YMUJPP/201q1b5/U5fPzxx2psbAzo+foyZMgQTZs2TSUlJfrd737nsWzLli1auXKl0tLS7O0BAOj5Ah0DuyMuLk633HKLGhoaOl2QoaioSL///e8VGxur7373u91+DCBc+IwQzgpTpkzRiy++qC1btujSSy+1v0PB7Xbr+eefV3JysiTpxz/+sd566y39+c9/Vl5enmbOnGl/j1BlZaUefPBBj6u6zZkzRwkJCZo8ebKys7NlWZY+/PBDbd26Veeff779IVFJuuqqq7R69WrNmjVLM2bMUK9evZSVlaXvfve7io2N1Zo1a3T11Vfr2muv1aRJkzRx4kQlJibqwIED2rp1q/bt26eKigolJiae0rZ47rnndOmll+qBBx7Q3//+d11wwQX29whFRUVp6dKlXj9UCwDomQIdA7tryZIl+vDDD/XUU09p69atmjp1qv09QseOHdNTTz2lYcOGnaZnA4QO7wjhrDBs2DB9/PHHSktL03PPPafXXntN559/vtatW+fxRXJxcXHasGGDfQnQP/zhD1q+fLlGjRqllStXenyZqnTy4H/JJZfos88+0zPPPKOlS5eqtbVVTzzxhDZu3OjxxXB33nmn/uu//ktHjx7VL3/5S/3sZz/TSy+9ZC+fMGGCtm3bpp/85Ceqq6vT0qVL9eyzz+pf//qXzjvvPL388stBXZLbl+HDh+vTTz/Vvffeq927d+vXv/613nrrLV1zzTXatGmT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gT766CNdcskl9n3z8vL04IMPasuWLaf4VAAAYKwCAAQmqInQ2rVrlZSUpJtvvtnj9ttvv13z5s3Tli1bNGnSJJ/3HT16tD2wSFJMTIy+853v6P/9v/+ngwcPavDgwfYyy7I6rcPtdgeT6yElztHt+wbDXyMNNNBAg8kNwdzH2zHaFIxVXTN9X6SBBhpoOB336WqsclhBjGaXXHKJXC6XPvnkE4/bCwsLNW7cOD3//PO6++67vd530KBBuuyyy/Taa6953P7mm2/quuuu09tvv63p06fbtzudTh0/fjzQNABACPXu3VsxMUGfXR0SjFUAAKnrsSqoiyVUV1erb9++nW5vu626uvqM3BcAgEAxVgEAAhH0VeMcDt9viflbdqr3BQAgUIxVAICuBDURSk9P9/rXsJqaGkny+le003FfAAACxVgFAAhEUCd4jx8/Xvn5+XI6nR7nkbSAlwAADEBJREFU2+3YsUOSNG7cOL/3bfu59nzdNyoqSr179/a4zeFw8Nc4AAgxy7I6feA0Ksrc7+NmrAKAyNOdsSqoiyW89dZbmjlzplatWqXZs2fbt8+YMUPbt29XaWmpz0uSPvvss7rvvvu0efNmXXTRRZJOfsh04sSJSkpK0ubNmwPNAADAJ8YqAEAggpoISdL06dP16aef6oknntDIkSOVn5+vF154QStWrNAtt9wiSZo/f76WL1+uoqIiZWVlSTr5JXX/9m//pvr6ei1ZskQZGRl65pln9Ne//pUvqQMAnFaMVQCArgR9bsOaNWv03e9+V4sXL9Y111yjLVu2KD8/3x5YJMnlcsnlcnm8PRUfH693331XU6dO1fe+9z1df/31qqio0FtvvWXUwNLQ0KCFCxcqMzNTCQkJmjhxolatWhWyxz927JgefPBBTZ8+Xf3795fD4dAjjzwSsseXpPfee0933HGHcnNz1bt3bw0ePFg33nij/vWvf4Ws4YsvvtC1116roUOHqlevXurbt68uueQSrVixImQNHb344otyOBxKSkoK2WNu3LjRPs2m4z+h/sv0P//5T82cOVNpaWnq1auXRo0apcceeywkj33bbbf53A6h3Baff/65vvWtbykzM1OJiYnKzc3Vo48+qsbGxpA8viR98sknuvrqq9WnTx8lJSVp6tSp2rRpU8gev6dgrDqzGKtOYqw6ibHqJMaqr/WYscqCh2nTplmpqanWc889Z7333nvWnXfeaUmyXnnllZA8fnFxsZWSkmJNmTLFfuyHH344JI/d5tvf/rY1depU65lnnrE2btxorV692rr44outmJgY69133w1Jw/vvv2/dc8891ssvv2y999571l//+ldrzpw5liTrscceC0lDe2VlZVZKSoqVmZlp9e7dO2SP+/7771uSrJ///OfWxx9/7PHPsWPHQtbxyiuvWFFRUdacOXOsv/zlL9Z7771nvfDCC9Z///d/h+Tx9+7d2+n5f/zxx1a/fv2swYMHW06n84w3FBYWWgkJCVZeXp716quvWu+++6718MMPW9HR0dYNN9xwxh/fsizrk08+seLj463LLrvMWrt2rbVmzRrr4osvtuLj462PPvooJA0wA2MVY5U3jFWMVYxVwWEi1M6bb75pSbJWrlzpcfu0adOszMzMkOzAbrfbcrvdlmVZVlVVVVgGl8OHD3e67dixY9aAAQOsq666KqQtHV100UXWOeecE/LHve6666zrr7/euvXWW8MyuKxevTpkj9lRWVmZ1bt3b2vBggVha/Bm48aNliTroYceCsnjLVq0yJJk7d271+P2u+++25Jk1dTUnPGGq6++2howYIB1/Phx+7b6+nqrX79+1qRJk87448MMjFUnMVZ1xljFWMVYFRxzL/sTBmvXrlVSUpJuvvlmj9tvv/12lZeXa8uWLWe8wYSrDWVkZHS6LSkpSeeee64OHDgQhqKv9evXL+TfZr9ixQp98MEHeuaZZ0L6uKZ48cUXdfz4cf3kJz8Jd4qHl156SQ6HQ3fccUdIHi82NlaSlJKS4nF7amqqoqKiFBcXd8YbNm3apCuuuEKJiYn2bX369NGUKVP00UcfqaKi4ow3IPwYq05irPLEWMVYJTFWBYuJUDsFBQUaM2ZMp4PXhAkT7OWRqq6uTp999pnGjh0b0sd1u91yOp2qqqrSM888o7fffjukB7nKykotXLhQS5Ys0ZAhQ0L2uB3df//9iomJUXJysq6++mr985//DNlj/+Mf/1Dfvn21a9cuTZw4UTExMcrIyNC9996r+vr6kHW0V1dXp9dff11XXXWVhg0bFpLHvPXWW5WamqoFCxZo3759OnbsmP72t7/p+eef1/3339/pEspnQktLi+Lj4zvd3nabt8s+4+zDWOUbYxVjFWMVY1UwmAi1U11d7fXL8tpu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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "kernel = (.1, .8, .1)\n", "prior = predict(posterior, 1, kernel)\n", "book_plots.plot_prior_vs_posterior(prior, posterior, True, ylim=(0,.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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AQDaE/S5DatXr9Ztt92mRYsW6dprr9XmzZuVl5dnDyyS5HK55HK5PD6eio2N1XvvvacpU6bou9/9rm644QaVlZXp7bffNmpgqaur04IFC5SWlqa4uDhNmDBBK1eu7Lb7P378uB566CFNmzZNAwYMkMPh0KOPPtpt9y9J77//vu666y5lZ2erd+/eGjJkiG666Sb985//7LaGL7/8Utddd52GDRumXr16qV+/frr00ku1fPnybmto7aWXXpLD4VBCQkK33eeGDRvs02xa/9Pd70z/4x//0IwZM5ScnKxevXpp1KhRevzxx7vlvu+44w6f66E718UXX3yhb37zm0pLS1N8fLyys7P12GOPqb6+vlvuX5I+/fRTXXPNNerTp48SEhI0ZcoUbdy4sdvuv6dgrOpajFVNGKuaMFY1Yaw6o8eMVRY8TJ061UpKSrKef/556/3337fuvvtuS5L16quvdsv9FxUVWX379rUmT55s3/cjjzzSLffd7Fvf+pY1ZcoU69lnn7U2bNhgrVq1yrrkkkusqKgo67333uuWhg8++MC67777rFdeecV6//33rb/85S/W7NmzLUnW448/3i0NLZWUlFh9+/a10tLSrN69e3fb/X7wwQeWJOtnP/uZ9cknn3j8c/z48W7rePXVV62IiAhr9uzZ1p///Gfr/ffft1588UXrv//7v7vl/vfu3dvm8X/yySdW//79rSFDhlhOp7PLGwoKCqy4uDgrNzfXeu2116z33nvPeuSRR6zIyEjrxhtv7PL7tyzL+vTTT63Y2Fjr8ssvt9asWWOtXr3auuSSS6zY2Fjr448/7pYGmIGxirHKG8YqxirGquBwINTCW2+9ZUmyVqxY4XH71KlTrbS0tG7ZgN1ut+V2uy3LsqyKioqQDC5Hjhxpc9vx48etgQMHWldffXW3trR28cUXW+edd1633+/1119v3XDDDdbtt98eksFl1apV3XafrZWUlFi9e/e25s+fH7IGbzZs2GBJsh5++OFuub+FCxdakqy9e/d63H7vvfdakqyqqqoub7jmmmusgQMHWidOnLBvq62ttfr3729NnDixy+8fZmCsasJY1RZjFWMVY1VwzL3sTwisWbNGCQkJuuWWWzxuv/POO1VaWqrNmzd3eYMJVxtKTU1tc1tCQoLOP/98HTx4MARFZ/Tv37/bf81++fLl+vDDD/Xss8926/2a4qWXXtKJEyf04x//ONQpHl5++WU5HA7ddddd3XJ/0dHRkqS+fft63J6UlKSIiAjFxMR0ecPGjRt15ZVXKj4+3r6tT58+mjx5sj7++GOVlZV1eQNCj7GqCWOVJ8YqxiqJsSpYHAi1kJ+frzFjxrTZeY0fP96eHq5qamr0+eefa+zYsd16v263W06nUxUVFXr22Wf1zjvvdOtOrry8XAsWLNDixYs1dOjQbrvf1h544AFFRUUpMTFR11xzjf7xj390233//e9/V79+/bRr1y5NmDBBUVFRSk1N1Xe+8x3V1tZ2W0dLNTU1euONN3T11VcrMzOzW+7z9ttvV1JSkubPn699+/bp+PHj+utf/6oXXnhBDzzwQJtLKHeF06dPKzY2ts3tzbd5u+wzzj2MVb4xVjFWMVYxVgWDA6EWKisrvf5YXvNt3n5kL1w88MADOnHihBYuXNit93v//fcrOjpaqamp+v73v6/f/e53uu+++7r1/kePHq358+d323221LdvX33ve9/TCy+8oA8++EBPPfWUDh48qCuvvFLvvPNOtzQcOnRI9fX1uuWWWzRr1iy9++67evDBB/WHP/xBM2bMaHPN/u6Ql5enkydPat68ed12nxkZGfrkk0+Un5+vESNGKDExUTfccINuv/12PfXUU93ScP7552vTpk1yu932bU6n0/4EIJz3UeGEsco3xirGKsYqxqqghPrcPJOMGjXKuvbaa9vcXlpaakmyfv7zn3drT6jOu27t4YcftiRZv//977v9vg8cOGBt2bLFeuutt6zvfOc7VkREhPXLX/6yW+77jTfesGJiYqyCggL7tu4+79qb6upqa+jQodb48eO75f5GjRrldfv/7W9/a0my1q9f3y0dLV100UVWSkqKderUqW67z6KiImvkyJHWZZddZr3xxhvWhx9+aP3iF7+wEhMTrbvuuqtbGl5++WVLkjV//nyrpKTEKi4utubNm2dFRkZa0v9v725eolzDOI7/jjPoyERljDUIKYS0EAshnSaobKNhL5C0iFpX2KYXJIZCaOwFbTF/QIvESJikhBaRrZogqIiIJCskqGhnDA3oKATSdRYePc6ZjOPiuZ9gvh94NreL6wJlfl56388tu3PnjpM+4C+y6tfIKrKKrCKrVopBaIl4PG4tLS1F6+Pj4ybJbty44bSfPyFcksmkSbJr16751sNSXV1dFgwG7du3b57WWThw293dbblcbvE5evSohcNhy+Vyls/nPe3hd7q6ukySzc7Oel4rHo+bJHv9+nXB+sTEhEmy69eve97DUmNjYybJzpw547TukSNHbP369UXf94GBAZNkT548cdJHf3+/rVq1yiSZJNuxY4clEgmTZE+fPnXSA/xFVhUjq8gqsmoeWbUybI1bYsuWLfrw4YPm5uYK1hf2MjY2NvrRlm96e3uVTCaVTCZ18eJFv9uRJMViMc3NzenTp0+e1slms5qcnFQqlVJVVdXik06nNTMzo6qqqoL7SFyzf/7F7+Kw8sK5g+V6KCtz+zFy8+ZNSdLx48ed1n3z5o0aGhqK9le3tLRIcncuI5FIKJvN6u3bt/ry5YuePXumXC6ncDisbdu2OekB/iKrCpFVZJVEVi0gq1aGQWiJzs5O5fN5jYyMFKzfunVLNTU12r59u0+duXflyhUlk0n19PTo0qVLfrezKJPJqKysTJs2bfK0TjQaVSaTKXr27t2rUCikTCajq1evetrDcnK5nB48eKCmpiaFQiHP6x0+fFiSNDo6WrD+8OFDSVI8Hve8hwU/fvzQ0NCQYrGY81/2ampq9O7dO+Xz+YL158+fS5LTA8oVFRVqbGxUXV2dvn79quHhYZ04cUKVlZXOeoB/yKp/kVVk1QKyah5ZtTJu3+34h+vo6FBbW5tOnTqlqakp1dfXK51O69GjRxoaGlIgEHDSx+joqGZmZjQ9PS1Jev/+ve7duydJ2rdvX8HrCL2QSqUWb2Pfv39/0U3ILj5MTp48qdWrVysWi2nDhg3KZrO6e/euhoeHdf78eVVXV3taPxQKac+ePUXrg4ODCgQCv/yaF44dO6ba2lo1NzcrEono48ePSqVSmpyc1ODgoJMe2tvbdfDgQV2+fFk/f/5UPB7Xq1ev1NvbqwMHDmjnzp1O+pCk+/fv6/v3787/wiZJZ8+e1aFDh9TW1qZz584pEonoxYsX6uvrU0NDgzo6OjzvYXx8XCMjI2publZFRYXGxsbU39/v9OZ0+I+smkdWkVVLkVXzyKoV8ndn3p9nenraTp8+bdFo1MrLy23r1q2WTqed9lBXV7e4p/K/z+fPnz2v39raumx9Vz8yAwMDtmvXLotEIhYMBm3t2rXW2tpqt2/fdlJ/Oa4PoPb19VlTU5OtWbPGAoGAVVdXW2dnp718+dJZD2Zms7OzlkgkbOPGjRYMBq22ttYuXLjg9ACo2fyFkeFw2KamppzWXfD48WNrb2+3aDRqlZWVtnnzZuvu7rZsNuuk/sTEhO3evdvWrVtn5eXlVl9fbz09Pb6eAYA/yCqy6nfIKrKKrPp//jLz4X2CAAAAAOAjzggBAAAAKDkMQgAAAABKDoMQAAAAgJLDIAQAAACg5DAIAQAAACg5DEIAAAAASg6DEAAAAICSwyAEAAAAoOQwCAEAAAAoOQxCAAAAAEoOgxAAAACAksMgBAAAAKDk/A3YgSdTh+eTPAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "likelihood = lh_hallway(hallway, z=1, z_prob=.75)\n", "posterior = update(likelihood, prior)\n", "book_plots.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 we will add an update and then sense the wall." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAGDCAYAAAAGdaBMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde3hU1aH+8XdyJ4RACAQISBIuIcgl6LFVKV7QgoK3ylMfLtbjBW/o6Sm9aNsfFnv02GLb09bW66MeoCJBUehNxOKF1qIgVgUSASEkQCCQkISEcAmZmf37IyfbTDKTzA7JzBrm+3keHnHv7LXfWXtlL9bsNWtclmVZAgAAAIAoEhPuAAAAAAAQagyEAAAAAEQdBkIAAAAAog4DIQAAAABRh4EQAAAAgKjDQAgAAABA1GEgBAAAACDqMBACAAAAEHUYCAEAAACIOgyEgBBxuVy6/PLLwx0DAICQKS0tlcvl0m233RbuKEAbDIQAAACixOWXXy6XyxXuGIAR4sIdAIgW27dvV3JycrhjAAAQMoMHD9b27dvVu3fvcEcB2mAgBIRIXl5euCMAABBS8fHx9H8wFlPjAD9azmnesWOHvvGNb6hv377q2bOnJk2apL/97W8+P79kyRK5XC4tWbJEb7zxhi699FKlpqb6TD8I9Bmho0eP6kc/+pFyc3OVlJSktLQ0TZ06VevWrWvzs+vXr5fL5dJPf/pTbdy4UdOmTVNaWppcLpdKS0u7uhoAAF3AaZ8iSadOndLPf/5zjRs3TsnJyUpNTdUll1yiFStW+D3H6tWrNXnyZA0cOFCJiYkaOHCgJk2apKeeesonw9///ndJTX1S85/WfVNZWZn+4z/+Q8OGDVNiYqLS09N1/fXXa/PmzW3O+9Of/lQul0vr16/XH/7wB33lK19Rz549lZ2d3ea1t3bw4EHdd999ys7OVkJCgvr3768bb7zR73mC6WcBp3giBLSjpKREF198scaOHat77rlH5eXleuWVVzRt2jQtX75cM2fO9Pn5lStXau3atZo+fbruvfdelZSUtFt+TU2NJk6cqB07duirX/2qZsyYoSNHjujVV1/VVVddpSeffFL33Xdfm+M++OAD/exnP9Mll1yiuXPnqqKiQgkJCV362gEAXSvYPuX06dOaOnWq3n//fZ177rm6//77deLECa1cuVKzZ8/Wp59+qscff9wu95lnntF9992ngQMH6vrrr1e/fv1UUVGhrVu3asmSJbr//vvVp08fPfzww1qyZIn27t2rhx9+2D6+edAiSZ988ommTp2q6upqXXXVVXa/9Mc//lGTJk3S6tWrNX369Dav7Ve/+pXefvttXXfddbriiit09OjRdutiz549mjRpksrLy3XllVdq9uzZ2r9/v1auXKk33nhDK1eu1A033NDmOKf9LNAuC0AbJSUlliRLkvWDH/zAZ9/mzZutuLg4q0+fPlZtba1lWZa1ePFiS5LlcrmsN99802+ZkqzLLrvMZ9tdd91lSbLmzZvns33Hjh1Wr169rPj4eGvPnj329vfee8/O9eyzz3bBKwUAdDenfcpjjz1mSbKuvfZaq7Gx0f7ZQ4cOWeecc44lyXr//fft7eedd56VkJBgHT58uM25Kysrff7/sssuswL986+xsdEaPny4lZSU5FO+ZVnWgQMHrMzMTGvAgAHWyZMn7e0PP/ywJclKTk62Pvnkk4Cv/dZbb/XZPmXKFEuStWjRIp/t77//vhUTE2OlpaVZdXV19vZg+lnAKabGAe3o3bu3Fi5c6LPtggsu0M0336yjR49q9erVPvuuv/56XX311UGVffr0aS1btkwpKSl67LHHfPaNGjVK3/72t9XY2KiXXnqpzbH5+fm65557HL4aAEA4Bdun/O///q9cLpf+53/+R3FxX07eGTBggH7yk5/YP9PM5XIpLi5O8fHxbc7Zr1+/oPO98cYbKi4u1re//W1NmjTJZ19mZqYefPBBHT58WO+8806bY++66y6dd955QZ2nrKxM69atU1ZWlr7//e/77Js0aZJmzZqlmpqaNn2s5KyfBTrCQAhox/nnn69evXq12d48n/rTTz/12X7hhRcGXfbOnTt18uRJTZgwQWlpaW32f/3rX5fUNE2hNSfnAQCYIZg+5dixYyouLtbgwYOVm5vb5mf99Q0333yzTpw4oTFjxuh73/ue/vjHP6qystJxvg8//FBS0+d6fvrTn7b589FHH0mSduzY0eZYJ/1Sc995ySWX+Az0mtH/IVT4jBDQjgEDBvjdPnDgQElSbW2t3+3BaD420DGDBg3yew6n5wEAmCGYPqUzfcP3vvc99evXT08//bSeeOIJ/eY3v5HL5dLkyZP1y1/+Uueff35Q+aqqqiQ1fQ6nPfX19QFfQzDo/2AKnggB7Th8+LDf7YcOHZKkNt+L4GT1muZjm8tqrby83O85nJ4HAGCGYPqUzvYN//7v/66NGzeqqqpKb7zxhubOnav169dr6tSpQT8dai7zT3/6kyzLCvin5UILzej/EIkYCAHt+OSTT3Ts2LE229evXy9JQc+H9mfUqFFKTk7WZ599ppqamjb733vvPUkK+p08AIDZgulTevXqpeHDh+vAgQPatWtXm5/tqG/o06ePpk+frueff1633Xabqqqq9P7779v7Y2NjJUkej6fNsRdddJEk+fx8d2juO//5z3/K7Xa32U//h1BhIAS0o7a2Vo888ojPto8//lgvv/yyevfurRtvvLHTZSckJOjmm29WfX19mw/PFhcX63e/+53i4+N1yy23dPocAABzBNun3HHHHbIsSw888IDPgOXIkSN69NFH7Z9ptnbtWr8DioqKCklSUlKSvS09PV2StH///jY/f8MNN2j48OF66qmntGbNGr+v4cMPP9SJEyeCer2BDBkyRFOmTFFpaal++9vf+uzbtGmTli9frrS0tDPqY4Fg8BkhoB2XXnqpXnjhBW3atElf+9rX7O988Hq9eu6555SamnpG5S9atEjvv/++nnzySW3evFmTJ0+2v0fo2LFjevLJJ5WTk9NFrwYAEE7B9ik/+MEP9Oabb+pPf/qT8vPzNX36dPt7hCoqKvTggw/6rOo2a9YsJSUladKkScrOzpZlWXr//fe1efNmnX/++fbiA5J05ZVXauXKlZoxY4amTZumHj16KCsrS7fccovi4+O1atUqXXXVVbrmmms0ceJETZgwQcnJydq/f782b96sPXv2qLy8XMnJyWdUF88++6y+9rWv6YEHHtDf/vY3XXDBBfb3CMXExGjx4sV+F5YAuhJPhIB25OTk6MMPP1RaWpqeffZZvfrqqzr//PO1Zs2aNl+m2hl9+/bVhx9+qAcffFBVVVX69a9/rZUrV+qrX/2q1q5d6/fLVAEAkSnYPiUhIUHr1q2zv1rh97//vZYuXaqRI0dq+fLlPl+mKjW9qXbxxRfrk08+0dNPP63FixersbFRjz/+uNavX+/zhdt33nmnfvzjH+vo0aP6xS9+oZ/85Cd68cUX7f3jx4/Xli1b9MMf/lC1tbVavHixnnnmGf3rX//Seeedp5deesnRktyBDBs2TB9/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nOPZ1SFBXwUAkDruqxwtllBVVaW+ffu22d68raqqqluOBQAgWPRVAIBgOF41zuUK/EisvX1neiwAAMGirwIAdMTRQCg9Pd3vu2HV1dWS5PddtK44FgCAYNFXAQCC4WiC97hx41RQUCC32+0z327btm2SpLFjx7Z7bPPPtRTo2JiYGPXs2dNnm8vl4t04AAgxy7LafOA0Jsbc7+OmrwKA6NOZvsrRYglvvvmmpk+frhUrVmjmzJn29mnTpmnr1q3at29fwCVJn3nmGd13333auHGjLrzwQklNHzKdMGGCUlJStHHjxmBjAAAQEH0VACAYjgZCkjR16lR9/PHHevzxxzVixAgVFBTo+eef17Jly3TzzTdLkubOnaulS5equLhYWVlZkpq+pO7f/u3fVFdXp0WLFikjI0NPP/20/vKXv/AldQCALkVfBQDoiOO5DatWrdItt9yihQsX6uqrr9amTZtUUFBgdyyS5PF45PF4fB5PJSYm6p133tHkyZP17W9/W9ddd53Ky8v15ptvGtWx1NfXa/78+crMzFRSUpImTJigFStWhOz8x44d04MPPqipU6eqf//+crlc+ulPfxqy80vSu+++qzvuuEN5eXnq2bOnBg8erBtuuEH/+te/Qpbhs88+0zXXXKOhQ4eqR48e6tu3ry6++GItW7YsZBlae+GFF+RyuZSSkhKyc65fv96eZtP6T6jfmf7nP/+p6dOnKy0tTT169NDIkSP16KOPhuTct912W8B6CGVdfPrpp/rGN76hzMxMJScnKy8vT4888ohOnDgRkvNL0kcffaSrrrpKvXr1UkpKiiZPnqwNGzaE7PyRgr6qe9FXNaGvakJf1YS+6ksR01dZ8DFlyhSrT58+1rPPPmu9++671p133mlJsl5++eWQnL+kpMTq3bu3demll9rnfvjhh0Ny7mbf/OY3rcmTJ1tPP/20tX79emvlypXWRRddZMXFxVnvvPNOSDK899571j333GO99NJL1rvvvmv95S9/sWbNmmVJsh599NGQZGiprKzM6t27t5WZmWn17NkzZOd97733LEnWz372M+vDDz/0+XPs2LGQ5Xj55ZetmJgYa9asWdaf//xn691337Wef/5567/+679Ccv7du3e3ef0ffvih1a9fP2vw4MGW2+3u9gxFRUVWUlKSlZ+fb73yyivWO++8Yz388MNWbGysdf3113f7+S3Lsj766CMrMTHRuuSSS6zVq1dbq1atsi666CIrMTHR+uCDD0KSAWagr6Kv8oe+ir6KvsoZBkItvPHGG5Yka/ny5T7bp0yZYmVmZoakAXu9Xsvr9VqWZVmVlZVh6VwOHz7cZtuxY8esAQMGWFdeeWVIs7R24YUXWuecc07Iz3vttdda1113nXXrrbeGpXNZuXJlyM7ZWllZmdWzZ09r3rx5Ycvgz/r16y1J1kMPPRSS8y1YsMCSZO3evdtn+913321Jsqqrq7s9w1VXXWUNGDDAOn78uL2trq7O6tevnzVx4sRuPz/MQF/VhL6qLfoq+ir6KmfMXfYnDFavXq2UlBTddNNNPttvv/12HTx4UJs2ber2DCasNpSRkdFmW0pKis4991zt378/DIm+1K9fv5B/m/2yZcv097//XU8//XRIz2uKF154QcePH9cPf/jDcEfx8eKLL8rlcumOO+4Iyfni4+MlSb179/bZ3qdPH8XExCghIaHbM2zYsEGXX365kpOT7W29evXSpZdeqg8++EDl5eXdngHhR1/VhL7KF30VfZVEX+UUA6EWCgsLNXr06DY3r/Hjx9v7o1Vtba0++eQTjRkzJqTn9Xq9crvdqqys1NNPP6233norpDe5iooKzZ8/X4sWLdKQIUNCdt7W7r//fsXFxSk1NVVXXXWV/vnPf4bs3P/4xz/Ut29f7dixQxMmTFBcXJwyMjJ07733qq6uLmQ5WqqtrdVrr72mK6+8Ujk5OSE556233qo+ffpo3rx52rNnj44dO6a//vWveu6553T//fe3WUK5O5w+fVqJiYlttjdv87fsM84+9FWB0VfRV9FX0Vc5wUCohaqqKr9flte8zd+X7EWL+++/X8ePH9eCBQtCet777rtP8fHxysjI0He/+1397ne/0z333BPS848aNUrz5s0L2Tlb6t27t77zne/oueee03vvvacnnnhC+/fv1+WXX6633norJBkOHDigEydO6KabbtLMmTP19ttv64EHHtAf/vAHTZ8+vc2a/aFQUFCgkydPau7cuSE7Z3Z2tj788EMVFhZq+PDhSk1N1XXXXadbb71VTzzxREgynHvuudq4caO8Xq+9ze12208AovkeFU3oqwKjr6Kvoq+ir3Ik3HPzTDJy5Ejr6quvbrP94MGDliTr5z//eUjzhGvedWsPPfSQJcn6/e9/H/Jz792719q8ebP1xhtvWPfee68VExNj/fKXvwzJuV977TUrISHBKioqsreFet61PzU1NdaQIUOs8ePHh+R8I0eO9Nv+f/vb31qSrHXr1oUkR0sXXHCBlZ6ebp06der/t3cvL21tURjAv2uCRiJaJWoQqiDBgdgiqDFiq51o8QWKA2mHtopOfCAlVATjo2gL+QMcKJYKUargoFRHRhFsEZFKrUUKVaQTJTSgURCk6w688ZqbWq6Ds4+Q7wdnsh2sBUo+l+59trKaOzs7YrPZpLi4WKanp2VpaUlevXol8fHx0tjYqKSH0dFRASCtra3y48cP2dvbkydPnojBYBAAMjk5qaQP0hez6veYVcwqZhWz6ro4CF3icDikoKAgbH1zc1MAyMjIiNJ+bkK4uFwuASAvXrzQrYfLWlpaxGg0ysHBgaZ1ggduu7q6xO/3XzyPHj0Ss9ksfr9fAoGApj38SUtLiwCQk5MTzWs5HA4BIOvr6yHr29vbAkBevnypeQ+XbWxsCABpb29XWrehoUFSUlLCvu9jY2MCQBYXF5X0MTw8LHFxcQJAAEhRUZE4nU4BIMvLy0p6IH0xq8Ixq5hVzKpzzKrr4da4S+7cuYOvX7/i7OwsZD24lzEnJ0ePtnTT19cHl8sFl8uF7u5uvdsBANjtdpydneH79++a1vH5fNjf34fb7UZiYuLF4/F4cHx8jMTExJD7SFSTf/7Fr+KwcvDcwVU9REWp/RgZHR0FADx9+lRp3U+fPiE7Oztsf3VBQQEAdecynE4nfD4fPn/+jN3dXaysrMDv98NsNiMvL09JD6QvZlUoZhWzCmBWBTGrroeD0CV1dXUIBAKYmZkJWX/9+jXS0tJQWFioU2fqDQwMwOVyoaenB729vXq3c8Hr9SIqKgqZmZma1rFarfB6vWHPw4cPYTKZ4PV6MTg4qGkPV/H7/Xj37h1yc3NhMpk0r1dfXw8AmJubC1l///49AMDhcGjeQ9Dp6SkmJiZgt9uV/7KXlpaGL1++IBAIhKx/+PABAJQeUI6JiUFOTg4yMjKwt7eHqakpNDU1ITY2VlkPpB9m1b+YVcyqIGbVOWbV9ah9t+MNV1FRgbKyMrS2tuLw8BA2mw0ejwfz8/OYmJiAwWBQ0sfc3ByOj49xdHQEANja2sL09DQAoLKyMuR1hFpwu90Xt7FXVVWF3YSs4sOkubkZ8fHxsNvtSE1Nhc/nw9u3bzE1NYVnz54hOTlZ0/omkwkPHjwIWx8fH4fBYPjt17Tw+PFjpKenIz8/HxaLBd++fYPb7cb+/j7Gx8eV9FBeXo6amhr09/fj169fcDgcWFtbQ19fH6qrq3Hv3j0lfQDA7Owsfv78qfwvbADQ0dGB2tpalJWVobOzExaLBR8/fsTQ0BCys7NRUVGheQ+bm5uYmZlBfn4+YmJisLGxgeHhYaU3p5P+mFXnmFXMqsuYVeeYVdek7868m+fo6Eja2trEarVKdHS03L17Vzwej9IeMjIyLvZU/vfZ2dnRvH5paemV9VX9yIyNjcn9+/fFYrGI0WiUW7duSWlpqbx580ZJ/auoPoA6NDQkubm5kpCQIAaDQZKTk6Wurk5WV1eV9SAicnJyIk6nU27fvi1Go1HS09Pl+fPnSg+AipxfGGk2m+Xw8FBp3aCFhQUpLy8Xq9UqsbGxkpWVJV1dXeLz+ZTU397elpKSEklKSpLo6Gix2WzS09Oj6xkA0geziln1J8wqZhWz6v/5S0SH9wkSERERERHpiGeEiIiIiIgo4nAQIiIiIiKiiMNBiIiIiIiIIg4HISIiIiIiijgchIiIiIiIKOJwECIiIiIioojDQYiIiIiIiCIOByEiIiIiIoo4HISIiIiIiCjicBAiIiIiIqKIw0GIiIiIiIgiDgchIiIiIiKKOH8DTku6Q+MbdKMAAAAASUVORK5CYII=\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", "book_plots.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": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAGDCAYAAAAGdaBMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde3hU1aH+8XdyJ4SQEAgQkSRcg1yCHluVIooWFLxVnvpwsR4veENPT+lF23Ow6NFji21PW1uvj1qgIkFRaGtFrDdai4JYFUgEhJAAIYGEBHLhkmRm9u+P/LKZSWYmMzGZWWG+n+fhEffOXvudtVf2Ys3ee22HZVmWAAAAACCKxEQ6AAAAAACEGwMhAAAAAFGHgRAAAACAqMNACAAAAEDUYSAEAAAAIOowEAIAAAAQdRgIAQAAAIg6DIQAAAAARB0GQgAAAACiDgMhIEwcDocuvfTSSMcAACBsSktL5XA4dMstt0Q6CtAOAyEAAIAocemll8rhcEQ6BmCEuEgHAKLFjh07lJycHOkYAACEzVlnnaUdO3aob9++kY4CtMNACAiTvLy8SEcAACCs4uPj6f9gLG6NA3zwvKd5586d+ta3vqV+/fqpd+/emjx5sv72t795/fyyZcvkcDi0bNkyvfHGG5oyZYpSU1O9bj/w94zQsWPH9JOf/ESjRo1SUlKS0tPTNX36dL399tvtfnbDhg1yOBx66KGHtGnTJs2YMUPp6elyOBwqLS3t6moAAHSBUPsUSTp16pR+/vOfa/z48UpOTlZqaqouvvhirVq1yuc+1q5dq6lTp2rQoEFKTEzUoEGDNHnyZD355JNeGf7+979LaumTWv+07ZvKysr0H//xHxo2bJgSExOVkZGha6+9Vlu2bGm334ceekgOh0MbNmzQH//4R33ta19T7969lZOT0+6zt1VeXq577rlHOTk5SkhI0IABA3T99df73E8w/SwQKq4IAQGUlJTooosu0rhx43TXXXepoqJCL7/8smbMmKGVK1dq9uzZXj+/evVqrV+/XjNnztTdd9+tkpKSgOUfPXpUkyZN0s6dO/X1r39ds2bN0pEjR/TKK6/oiiuu0BNPPKF77rmn3XYffvihfvazn+niiy/W/PnzVVlZqYSEhC797ACArhVsn9LU1KTp06frgw8+0DnnnKN7771XJ06c0OrVqzV37lx99tlneuyxx+xyn376ad1zzz0aNGiQrr32WvXv31+VlZXatm2bli1bpnvvvVdpaWl68MEHtWzZMu3bt08PPvigvX3roEWSPv30U02fPl01NTW64oor7H7pT3/6kyZPnqy1a9dq5syZ7T7br371K73zzju65pprdNlll+nYsWMB62Lv3r2aPHmyKioqdPnll2vu3Lk6cOCAVq9erTfeeEOrV6/Wdddd1267UPtZICALQDslJSWWJEuS9aMf/chr3ZYtW6y4uDgrLS3Nqq2ttSzLspYuXWpJshwOh/Xmm2/6LFOSdckll3gtu+OOOyxJ1oIFC7yW79y50+rTp48VHx9v7d27117+/vvv27meeeaZLvikAIDuFmqf8uijj1qSrKuvvtpqbm62f/bQoUPW2WefbUmyPvjgA3v5ueeeayUkJFiHDx9ut++qqiqv/7/kkkssf//8a25utoYPH24lJSV5lW9ZlnXw4EErKyvLGjhwoHXy5El7+YMPPmhJspKTk61PP/3U72e/+eabvZZPmzbNkmQtWbLEa/kHH3xgxcTEWOnp6VZdXZ29PJh+FggVt8YBAfTt21eLFy/2Wnb++efrxhtv1LFjx7R27Vqvdddee62uvPLKoMpuamrSihUrlJKSokcffdRr3ejRo/Xd735Xzc3NevHFF9ttm5+fr7vuuivETwMAiKRg+5Q//OEPcjgc+r//+z/FxZ2+eWfgwIH66U9/av9MK4fDobi4OMXHx7fbZ//+/YPO98Ybb6i4uFjf/e53NXnyZK91WVlZuv/++3X48GG9++677ba94447dO655wa1n7KyMr399tvKzs7WD3/4Q691kydP1pw5c3T06NF2fawUWj8LdISBEBDAeeedpz59+rRb3no/9Weffea1/IILLgi67F27dunkyZOaOHGi0tPT263/5je/KanlNoW2QtkPAMAMwfQp9fX1Ki4u1llnnaVRo0a1+1lffcONN96oEydOaOzYsfrBD36gP/3pT6qqqgo530cffSSp5bmehx56qN2fjz/+WJK0c+fOdtuG0i+19p0XX3yx10CvFf0fwoVnhIAABg4c6HP5oEGDJEm1tbU+lwejdVt/2wwePNjnPkLdDwDADMH0KZ3pG37wgx+of//+euqpp/T444/rN7/5jRwOh6ZOnapf/vKXOu+884LKV11dLanlOZxAGhoa/H6GYND/wRRcEQICOHz4sM/lhw4dkqR270UIZfaa1m1by2qroqLC5z5C3Q8AwAzB9Cmd7Rv+/d//XZs2bVJ1dbXeeOMNzZ8/Xxs2bND06dODvjrUWuaf//xnWZbl94/nRAut6P/QEzEQAgL49NNPVV9f3275hg0bJCno+6F9GT16tJKTk/X555/r6NGj7da///77khT0N3kAALMF06f06dNHw4cP18GDB7V79+52P9tR35CWlqaZM2fqueee0y233KLq6mp98MEH9vrY2FhJksvlarfthRdeKEleP98dWvvOf/7zn3I6ne3W0/8hXBgIAQHU1tbq4Ycf9lr2ySef6KWXXlLfvn11/fXXd7rshIQE3XjjjWpoaGj38GxxcbF+97vfKT4+XjfddFOn9wEAMEewfcptt90my7J03333eQ1Yjhw5okceecT+mVbr16/3OaCorKyUJCUlJdnLMjIyJEkHDhxo9/PXXXedhg8frieffFLr1q3z+Rk++ugjnThxIqjP68+QIUM0bdo0lZaW6re//a3Xus2bN2vlypVKT0//Sn0sEAyeEQICmDJlip5//nlt3rxZ3/jGN+x3Prjdbj377LNKTU39SuUvWbJEH3zwgZ544glt2bJFU6dOtd8jVF9fryeeeEK5ubld9GkAAJEUbJ/yox/9SG+++ab+/Oc/Kz8/XzNnzrTfI1RZWan777/fa1a3OXPmKCkpSZMnT1ZOTo4sy9IHH3ygLVu26LzzzrMnH5Ckyy+/XKtXr9asWbM0Y8YM9erVS9nZ2brpppsUHx+vNWvW6IorrtBVV12lSZMmaeLEiUpOTtaBAwe0ZcsW7d27VxUVFUpOTv5KdfHMM8/oG9/4hu677z797W9/0/nnn2+/RygmJkZLly71ObEE0JW4IgQEkJubq48++kjp6el65pln9Morr+i8887TunXr2r1MtTP69eunjz76SPfff7+qq6v161//WqtXr9bXv/51rV+/3ufLVAEAPVOwfUpCQoLefvtt+9UKv//977V8+XKNHDlSK1eu9HqZqtTypdpFF12kTz/9VE899ZSWLl2q5uZmPfbYY9qwYYPXC7dvv/12/dd//ZeOHTumX/ziF/rpT3+qF154wV4/YcIEbd26VT/+8Y9VW1urpUuX6umnn9a//vUvnXvuuXrxxRdDmpLbn2HDhumTTz7R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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", "book_plots.plot_prior_vs_posterior(prior, posterior, ylim=(0,.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I ignored an important issue. Earlier I assumed that we had a motion sensor for the predict step; then, when talking about the dog and the microwave I assumed that you had no knowledge that he suddenly began running. I mentioned that your belief that the dog is running would increase over time, but I did not provide any code for this. In short, how do we detect and/or estimate changes in the process model if we aren't directly measuring it?\n", "\n", "For now I want to ignore this problem. In later chapters we will learn the mathematics behind this estimation; for now it is a large enough task just to learn this algorithm. It is profoundly important to solve this problem, but we haven't yet built enough of the mathematical apparatus that is required, and so for the remainder of the chapter we will ignore the problem by assuming we have a sensor that senses movement." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Discrete Bayes Algorithm\n", "\n", "This chart illustrates the algorithm:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGjCAYAAADKC9ToAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdd3hUVf4/8PedmWQmvYcUSkiBAKFICT0gRhKiCFjAsq6ACPa1IOJaCHxta10bCiIGFxWsFBdI6L2FgCA9pJIQ0nubzNzfH/wyyzBJSJnJnfJ+Pc88wLntc4c5M597zrnnCqIoiiAiIiKyUjKpAyAiIiIyJSY7REREZNWY7BAREZFVY7JDREREVo3JDhEREVk1JjtERERk1ZjsEBERkVVjskNERERWjckOERERWTVJkp1du3ZBEATEx8e3epuMjAwIgoCZM2d26Njjx4+HIAgd2gcRERFZjjYnO41JR2xsrNGDCQoKQlBQkNH3S0RERLZLIcVBIyMjcfbsWXh7e7d6m8DAQJw9exZubm4mjIyIiIisjSTJjqOjI8LDw9u0jZ2dXZu3ISIiIjLKmJ2ZM2dCEARkZGRg6dKl6NOnD1QqFXr06IHFixdDq9XqrX/jmJ3GrrHMzExkZmZCEATd68Z1bhyzc+zYMTz99NOIiIiAm5sbHBwc0L9/f7z77rtQq9XGOD0iIiKyYEZt2XnppZewa9cu3HnnnZg4cSLWrVuH+Ph41NfX46233mp2O3d3dyxatAj//ve/AQDPPfecbtn48eNbPObXX3+NjRs3IioqCnFxcaiursauXbvwyiuv4OjRo/j111+Ncm5ERERkmYya7Bw7dgwnT56Ev78/AOD1119HWFgYPvvsMyxatAj29vZNbufu7o74+HgkJCQAQJvu0nrllVfwxRdfQC6X68pEUcScOXOwcuVK7N+/H6NHj273OREREZFlM+qt56+//rou0QEAb29vTJkyBRUVFTh//rwxD6XTo0cPvUQHAARBwFNPPQUA2LZtm0mOS0RERJbBqMnO4MGDDcq6du0KACgtLTXmoXTq6+vx0UcfITIyEq6urpDJZBAEAUOGDAEA5ObmmuS4REREZBmM2o3V1G3hCsW1Q2g0GmMeSufee+/Fxo0b0atXL8yYMQO+vr6ws7NDaWkpPvnkE9TV1ZnkuERERGQZJLn13FiOHj2KjRs3IiYmBv/973/1urMOHTqETz75RMLoiIiIyByY1bOx5HJ5m1qALl26BAC44447DMbt7N2716ixERERkWUyq2TH09MThYWFqK2tbdX6PXr0AADs27dPr/z06dN45513jB4fERERWR6z6saaMGECkpOTMXnyZIwdOxb29vYYM2YMxowZ0+T6kZGRiIyMxE8//YQrV65gxIgRyMrKwoYNG3DHHXfgl19+6eQzICIiInNjVsnO66+/jpKSEvzxxx/YsWMHtFotFi1a1GyyI5fL8ccff2DhwoXYsmULjh49irCwMHzwwQeYNGkSkx0iIiKCIIqiKHUQRERERKZiVmN2iIiIiIyNyQ4RERFZNSY7REREZNWY7BAREZFVY7JDREREVo3JDhEREVk1JjtERERk1ZjsEBERkVWz+mQnIyMDgiBg5syZrSpvz74shVarxcCBAxEXF9cpx0tNTYVCocDSpUs75XhERERN6VCyc+zYMTz66KMICwuDk5MTHBwcEBISgocffhhbt241VoydZteuXRAEAfHx8VKHYhIJCQk4efJkp51faGgoHnroIcTHx6O8vLxTjklERHSjdj0bS6vVYv78+fj444+hUCgwYcIE3HXXXbCzs0NaWhr++9//YvXq1ViyZAlef/11Y8dsFIGBgTh79izc3NxMuo250Gg0WLx4McaNG4fIyMhOO+5LL72E7777Dp9++ilee+21TjsuERFRo3YlO6+99ho+/vhjDBo0CL/88gtCQkL0ltfU1ODzzz9HUVGRUYI0BTs7O4SHh5t8G3OxadMmZGVl4Y033ujU40ZERGDgwIH4+uuv8c9//hMymdX3nBIRkZlp8y9Pamoq3nvvPXh5eWHLli0GiQ4AODg44KWXXsLixYv1yletWoURI0bA2dkZzs7OGDFiBFatWmWw/fXdSSkpKYiJiYGLiwvc3Nwwbdo0ZGRkGGyj0Wjwr3/9C6GhoVCpVAgNDcU777wDrVbb5HncOP4mPj4et956KwBg8eLFEARB92o8Xktjdkx5br/++ivGjRsHX19fqFQqdOvWDbGxsVi3bl2T59aUhIQECIKAe+65R1d24sQJqFQq3Xl++eWXumW1tbUIDw/XLZs8eXKrj3Wj6dOnIysrC9u3b2/3PoiIiNqrzclOQkICNBoN5s2bhy5durS4rlKp1P39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PDw8EBMTA7lcritTq9XYvHlzu/tMicj8zZ49W9eKc72VK1fC19cXd955Z5PbffXVVxg/fjwOHDiAO++8E88++ywCAwPx1ltv4fbbb9ebu6u4uBjPPfcc6urqEBcXh+effx7jx4/Hpk2bMGrUKBw9elRv319++SXuvfdeXLx4EdOmTcMLL7yA6OhoZGdn6yU7HXHgwAGMGzcOADB37lzMmDGjXefW6PDhw7jtttvg5uaGefPmoXv37vjyyy/x2GOP4eeff8bdd9+Nbt26Yd68eXB3d8d7772Hd999t0PvKwAkJydj7NixUCgUmDdvHoYOHYp169YhOjoatbW1uvXGjx+PRx55BAAwbtw4LFq0SPdyd3dv8b0SRRG7du1CeHj4Tdc1ppEjRwIAduzY0faNRaIWpKeni8uXLxeXLVume61Zs0asrq6WOjQiMpL09HQRgBgTEyOKoij269dPHDBggG755cuXRblcLr744ouiKIoiALF379665adPnxYVCoV4yy23iEVFRXr7fuedd0QA4gcffKArq62tFS9fvmwQx19//SU6OzuL0dHReuWDBw8W7e3txfz8fINtCgsLdX//9ttvRQDit99+a7Dezp07RQDiokWLmiwHIH7zzTcG27X13K7f37p163Tl9fX14oABA0RBEERvb2/xyJEjumXl5eWir6+v6OXlJarV6nYd+/rjrlmzRm/dhx9+WAQg/vjjj616T27m9OnTIgDxoYceMli2fPly8f3339d79ejRQxebQqEQDxw40KbjNSovLxcBiFFRUW3eli071KKgoCCMHj1ar6ysrAxbtmyBWq2WKCoiMqVZs2bh5MmTOHbsGIBrXRYajQazZ89ucv1ly5ahoaEBn376KTw9PfWWLViwAD4+Pvjxxx91ZUqlEoGBgQb76devH2699Vbs2bPH4PvFzs4OdnZ2Btt4eXm1+fyacssttzR5fm09t0bjx4/HlClTdP+2s7PDvffeC1EUMXnyZL3JXF1cXHDnnXeiqKgIly9f7tCxo6Ki9FqlAOjO68YWs/ZqjLFLly4Gyx577DHMnz9f96qtrUVmZqZu+YoVK3QtNMD/ur1ac0eXi4sLVCqV3nvUWhxWTzfVt29fVFdXIyUlRVdWUFCAbdu2ISYmBjIZc2Yia/Lwww/jlVdewcqVKzFkyBAkJCRg+PDhBpOPNjp06BCA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Wtrb2/Hwww/7zvETTzyBrVu3+nqWduzYgTfeeGPI+g8dOoSVK1eip6cH69atw6uvvtpv+8GDBwEAS5YsGbGtREThgsNY47B582Y88cQTyMzMxKJFi5CcnIyOjg4cP34ce/bsgUKhQGFhITQaDYDL38CTk5Pxt7/9DVFRUUhNTYUkSVi7di2efvppbNu2DYsXL8b9998PrVaLnTt3oq6uDkuXLsXOnTv77Xu4ugwGA3Jzc1FYWIi1a9ciJycHy5cvh81mg8PhQGVlJXbt2oVHHnkE77//vl/HWl5ePuzk1r5tDzzwAKKiorB48WKkpaXB7Xbjq6++QmlpKR544AFMnz7dr2OYDKM555N5vletWoVXXnkFhw8fHnC7iKeeegqVlZUAgIyMDLzxxhuIjo7G73//ezz66KMALg9n3XrrrQOGTktLS/HOO++go6MDL774In71q18N2PdXX30FpVKJu+++e7Snk4godAX7crBwdubMGbFx40Zx++23C6vVKrRardBqtcJms4k1a9aII0eODHjNgQMHxJIlS0RMTMyAVXg///xzkZ+fL6KiooTJZBL333+/qKioEGvWrBn0sunh6upz6NAh8eCDD4rk5GShUqmEyWQS+fn54sUXXxSnT58e8Rj9ufT8yn9GhYWFYsWKFSItLU1otVphNBrFwoULxQcffNBvjZuRjsGfFZSv9vHHHwsA4uOPPx6wrW8V5KKion7Pj+acT8b5FkKI2tpaoVQqxdNPP93v+U8//dS3X4VCIXbv3t1v+6pVq3zbs7OzRUdHhxBCiLS0tH7/rx566KFB99vZ2Smio6PFqlWr/GonEVG4kIQYYYCfiCbdQw89hG3btqGmpgY6nW5cdfVdeq7T6dDZ2QmDwYDdu3djzpw5/cp99NFHeOyxx7Br1y7cfPPN49onEVEo4ZwdohC0YcMGdHR04N133w1Ync888wyWLFmCtrY23HnnnaipqfFt6+3txWuvvYYVK1Yw6BCR7DDsEIUgq9WKTz75ZNy9OldSq9X44osvMHPmTDQ0NKCgoMC3eGBtbS1Wr16NN998M2D7IyIKFRzGIpK5q1dQrq6uxg033IDGxkYsXLgQX3/9dUBDFRFRqGHYISIiIlnjMBYRERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREcna/wF+6qtaOZqhswAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "book_plots.predict_update_chart()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This filter is a form of the g-h filter. Here we are using the percentages for the errors to implicitly compute the $g$ and $h$ parameters. We could express the discrete Bayes algorithm as a g-h filter, but that would obscure the logic of this filter.\n", "\n", "The filter equations are:\n", "\n", "$$\\begin{aligned} \\bar {\\mathbf x} &= \\mathbf x \\ast f_{\\mathbf x}(\\bullet)\\, \\, &\\text{Predict Step} \\\\\n", "\\mathbf x &= \\|\\mathcal L \\cdot \\bar{\\mathbf x}\\|\\, \\, &\\text{Update Step}\\end{aligned}$$\n", "\n", "$\\mathcal L$ is the usual way to write the likelihood function, so I use that. The $\\|\\|$ notation denotes taking the norm. We need to normalize the product of the likelihood with the prior to ensure $x$ is a probability distribution that sums to one.\n", "\n", "We can express this in pseudocode.\n", "\n", "**Initialization**\n", "\n", " 1. Initialize our belief in the state\n", " \n", "**Predict**\n", "\n", " 1. Based on the system behavior, predict state for the next time step\n", " 2. Adjust belief to account for the uncertainty in prediction\n", " \n", "**Update**\n", "\n", " 1. Get a measurement and associated belief about its accuracy\n", " 2. Compute how likely it is the measurement matches each state\n", " 3. Update state belief with this likelihood\n", "\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.\n", "\n", "Let's animate this. First Let's write functions to perform the filtering and to plot the results at any step. I've plotted the position of the doorways in black. Prior are drawn in orange, and the posterior in blue. I draw a thick vertical line to indicate where Simon really is. This is not an output of the filter - we know where Simon is only because we are simulating his movement." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": true }, "outputs": [], "source": [ "def discrete_bayes_sim(prior, kernel, measurements, z_prob, hallway):\n", " posterior = np.array([.1]*10)\n", " priors, posteriors = [], []\n", " for i, z in enumerate(measurements):\n", " prior = predict(posterior, 1, kernel)\n", " priors.append(prior)\n", "\n", " likelihood = lh_hallway(hallway, z, z_prob)\n", " posterior = update(likelihood, prior)\n", " posteriors.append(posterior)\n", " return priors, posteriors\n", "\n", "\n", "def plot_posterior(hallway, posteriors, i):\n", " plt.title('Posterior')\n", " book_plots.bar_plot(hallway, c='k')\n", " book_plots.bar_plot(posteriors[i], ylim=(0, 1.0))\n", " plt.axvline(i % len(hallway), lw=5) \n", " \n", "def plot_prior(hallway, priors, i):\n", " plt.title('Prior')\n", " book_plots.bar_plot(hallway, c='k')\n", " book_plots.bar_plot(priors[i], ylim=(0, 1.0), c='#ff8015')\n", " plt.axvline(i % len(hallway), lw=5) \n", "\n", "def animate_discrete_bayes(hallway, priors, posteriors):\n", " def animate(step):\n", " step -= 1\n", " i = step // 2 \n", " if step % 2 == 0:\n", " plot_prior(hallway, priors, i)\n", " else:\n", " plot_posterior(hallway, posteriors, i)\n", " \n", " return animate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's run the filter and animate it." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9f7338d5d95a4133ae3825b18020b9cd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=1, description='step'), Output()), _dom_classes=('widget-interact',))" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# change these numbers to alter the simulation\n", "kernel = (.1, .8, .1)\n", "z_prob = 1.0\n", "hallway = np.array([1, 1, 0, 0, 0, 0, 0, 0, 1, 0])\n", "\n", "# measurements with no noise\n", "zs = [hallway[i % len(hallway)] for i in range(50)]\n", "\n", "priors, posteriors = discrete_bayes_sim(prior, kernel, zs, z_prob, hallway)\n", "interact(animate_discrete_bayes(hallway, priors, posteriors), step=IntSlider(value=1, max=len(zs)*2));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can see the results. You can see how the prior shifts the position and reduces certainty, and the posterior stays in the same position and increases certainty as it incorporates the information from the measurement. I've made the measurement perfect with the line `z_prob = 1.0`; we will explore the effect of imperfect measurements in the next section. Finally, \n", "\n", "Another thing to note is how accurate our estimate becomes when we are in front of a door, and how it degrades when in the middle of the hallway. This should make intuitive sense. There are only a few doorways, so when the sensor tells us we are in front of a door this boosts our certainty in our position. A long stretch of no doors reduces our certainty." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Effect of Bad Sensor Data\n", "\n", "You may be suspicious of the results above because I always passed correct sensor data into the functions. However, we are claiming that this code implements a *filter* - it should filter out bad sensor measurements. Does it do that?\n", "\n", "To make this easy to program and visualize I will change the layout of the hallway to mostly alternating doors and hallways, and run the algorithm on 6 correct measurements:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ffb4353460494a15ab0c0e9299dde120", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=12, description='step', max=12), Output()), _dom_classes=('widget-intera…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hallway = np.array([1, 0, 1, 0, 0]*2)\n", "kernel = (.1, .8, .1)\n", "prior = np.array([.1] * 10)\n", "zs = [1, 0, 1, 0, 0, 1]\n", "z_prob = 0.75\n", "priors, posteriors = discrete_bayes_sim(prior, kernel, zs, z_prob, hallway)\n", "interact(animate_discrete_bayes(hallway, priors, posteriors), step=IntSlider(value=12, max=len(zs)*2));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have identified the likely cases of having started at position 0 or 5, because we saw this sequence of doors and walls: 1,0,1,0,0. Now I inject a bad measurement. The next measurement should be 0, but instead we get a 1:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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jS699FKtXLlSM2fONLdPnz5dn376qaqqqrpcPvsXv/iFFixYoA8++EATJkyQdHJBhPHjxystLU0ffPCB3W4AAAAAwGkJayAkSVOnTtWHH36ohx9+WCNGjFBZWZmefvppLV++XNdee60kad68eVq2bJkqKyuVl5cn6eQPqp5//vlqamrS0qVLlZ2drSeffFIvv/wyP6gKAAAAoFeFvVjCiy++qK9//etasmSJLrnkEq1fv15lZWXmIEiS/H6//H5/0OWppKQkrV27VpMnT9Ytt9yiK664Qvv379eaNWsYBHWhublZCxcuVE5OjpKTkzV+/HitXLnS6W5FjCNHjmjRokWaOnWqsrKy5PF4dO+99zrdrYjx1ltvae7cuSouLlZqaqqGDBmif/3Xf9VHH33kdNcixt///ndddtllGjp0qPr06aP+/ftr4sSJWr58udNdi1jPPPOMkbQn2wAACpVJREFUPB6P0tLSnO5KRHj77bfNadun/sNMh2B/+ctfdOmllyozM1N9+vTRyJEjdd999zndrYhwww03dJlH5NJJn3zyia688krl5OQoJSVFxcXF+uEPf6hjx4453bWI8Le//U3Tpk1T3759lZaWpsmTJ+u9995zulsRL+wrQug9U6dO1YYNG7R06VIVFhZqxYoVeuaZZ/T8889r9uzZTnfPcbt27dL48eNVWlqqwsJCPfPMM7rnnnsYDP2fGTNmqK6uTjNmzNDo0aNVW1urRx55RB9++KFef/11feUrX3G6i457++23tXLlSl1wwQUaMmSIjh49queff14rV67Ufffdp7vvvtvpLkaUffv2acyYMUpNTVVjY6Oam5ud7pLj3n77bU2ePFkPPvigJk+eHNRWUlLCgPH/rFixQl//+tf17//+75o9e7bS0tJUWVmp6upqLVmyxOnuOa6yslK1tbWdtl9xxRVKSkrS7t27u7z1wA0+++wznX/++SoqKtJdd92lgQMH6s9//rPuv/9+XXbZZXrppZec7qKjNmzYoAsvvFBf+tKX9O1vf1uGYehHP/qRPvnkE61bt04TJ050uouRy0BE+uMf/2hIMlasWBG0fcqUKUZOTo7h8/kc6lnkCAQCRiAQMAzDMGpraw1Jxj333ONspyLIwYMHO207cuSIMWjQIOPiiy92oEfRY8KECca5557rdDcizuWXX25cccUVxvXXX2+k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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "measurements = [1, 0, 1, 0, 0, 1, 1]\n", "priors, posteriors = discrete_bayes_sim(prior, kernel, measurements, z_prob, hallway);\n", "plot_posterior(hallway, posteriors, 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That one bad measurement has significantly eroded our knowledge. Now let's continue with a series of correct measurements." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with figsize(y=5.5):\n", " measurements = [1, 0, 1, 0, 0, 1, 1, 1, 0, 0]\n", " for i, m in enumerate(measurements):\n", " likelihood = lh_hallway(hallway, z=m, z_prob=.75)\n", " posterior = update(likelihood, prior)\n", " prior = predict(posterior, 1, kernel)\n", " plt.subplot(5, 2, i+1)\n", " book_plots.bar_plot(posterior, ylim=(0, .4), title='step {}'.format(i+1))\n", " plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We quickly filtered out the bad sensor reading and converged on the most likely positions for our dog." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Drawbacks and Limitations\n", "\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, 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 dog's $(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 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 filter is multimodal. In the last 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", "A forth problem is that it requires a measurement of the change in state. We need a motion sensor to detect how much the dog moves. There are ways to work around this problem, but it would complicate the exposition of this chapter, so, given the aforementioned problems, I will not discuss it further.\n", "\n", "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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tracking and Control\n", "\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. 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. 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. 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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simulating the Train Behavior\n", "\n", "We need to simulate an imperfect train. When we command it to move it will sometimes make a small mistake, and its sensor will sometimes return the incorrect value." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "class Train(object):\n", "\n", " def __init__(self, track_len, kernel=[1.], sensor_accuracy=.9):\n", " self.track_len = track_len\n", " self.pos = 0\n", " self.kernel = kernel\n", " self.sensor_accuracy = sensor_accuracy\n", "\n", " def move(self, distance=1):\n", " \"\"\" move in the specified direction\n", " with some small chance of error\"\"\"\n", "\n", " self.pos += distance\n", " # insert random movement error according to kernel\n", " r = random.random()\n", " s = 0\n", " offset = -(len(self.kernel) - 1) / 2\n", " for k in self.kernel:\n", " s += k\n", " if r <= s:\n", " break\n", " offset += 1\n", " self.pos = int((self.pos + offset) % self.track_len)\n", " return self.pos\n", "\n", " def sense(self):\n", " pos = self.pos\n", " # insert random sensor error\n", " if random.random() > self.sensor_accuracy:\n", " if random.random() > 0.5:\n", " pos += 1\n", " else:\n", " pos -= 1\n", " return pos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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. A length of 10 makes it easier to plot and inspect." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "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", " prior = np.array([.9] + [0.01]*9)\n", " posterior = prior[:]\n", " normalize(prior)\n", " \n", " robot = Train(len(track), kernel, sensor_accuracy)\n", " for i in range(iterations):\n", " # move the robot and\n", " robot.move(distance=move_distance)\n", "\n", " # peform prediction\n", " prior = predict(posterior, move_distance, kernel) \n", "\n", " # and update the filter\n", " m = robot.sense()\n", " likelihood = lh_hallway(track, m, sensor_accuracy)\n", " posterior = update(likelihood, prior)\n", " index = np.argmax(posterior)\n", "\n", " if do_print:\n", " print('''time {}: pos {}, sensed {}, '''\n", " '''at position {}'''.format(\n", " i, robot.pos, m, track[robot.pos]))\n", "\n", " print(''' estimated position is {}'''\n", " ''' with confidence {:.4f}%:'''.format(\n", " index, posterior[index]*100)) \n", "\n", " book_plots.bar_plot(posterior)\n", " if do_print:\n", " print()\n", " print('final position is', robot.pos)\n", " index = np.argmax(posterior)\n", " print('''Estimated position is {} with '''\n", " '''confidence {:.4f}%:'''.format(\n", " index, posterior[index]*100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the code and make sure you understand it. Now let's do a run with no sensor or movement error. If the code is correct it should be able to locate the robot with no error. The output is a bit tedious to read, but if you are at all unsure of how the update/predict cycle works make sure you read through it carefully to solidify your understanding." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time 0: pos 4, sensed 4, at position 4\n", " estimated position is 4 with confidence 99.9900%:\n", "time 1: pos 8, sensed 8, at position 8\n", " estimated position is 8 with confidence 100.0000%:\n", "time 2: pos 2, sensed 2, at position 2\n", " estimated position is 2 with confidence 100.0000%:\n", "time 3: pos 6, sensed 6, at position 6\n", " estimated position is 6 with confidence 100.0000%:\n", "\n", "final position is 6\n", "Estimated position is 6 with confidence 100.0000%:\n" ] }, { "data": { "image/png": "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r73mdXlJ4eDBg2pqatLSpUt1xRVX6PXXX9ftt9+u//zP/9TFF1/c6QMQIZWUlOjEiRNavny516UkhXHjxukvf/mLSktLNXHiRPXv31+XXXaZvvWtb+mRRx7xujzPTZ8+Xe+8844ikYi9LRQK2XcP8Zqxa9z7kcScbvviljDE6x//8R/17LPP6t///d911llneV1OUrnzzjt1/fXX68iRI3rppZf0ve99T42NjfqHf/gHr0vz3MaNG/XSSy/pww8/5LwTw5lnnqkzzzzT/v+vfOUrWrx4sWbOnKk77rhDixYt8rC65BCJRHTy5Endc889+vGPfyxJOv/885WZmamVK1dq06ZN+trXvuZxlcnlySef1JAhQ7R48WKvS0kKe/fu1WWXXaYRI0bo+eef17Bhw/Tuu+/qgQceUENDg5588kmvS/TULbfcouXLl+t73/ueVq1apUgkovvuu0/79u2TJKWlcd2jKySTpIYMGRKzg6+pqZGkmFeLgK7cd999euCBB/RP//RP+t73vud1OUln7Nix+sIXvqCLL75Yv/zlL3XjjTfqJz/5ScxVnPykoaFBN998s2655RYVFBTo2LFjOnbsmFpaWiRJx44dU2Njo8dVJp+BAwfq0ksv1ccff6wTJ054XY7nhgwZIkmdmsKLLrpIkvS3v/2tz2tKZh9//LE++OADXX311TFvd/KjH//4x6qrq9Nrr72mr3/96zr33HN1++236xe/+IWeeuop/fGPf/S6RE9dd911Wr16tZ555hmNGTNGY8eO1bZt2+xf5o0ePdrjCpMXjVCSmjlzprZv365QKBS1ve0+z+LiYi/KQgq67777dO+99+ree+/VnXfe6XU5KeHss89WKBTS7t27vS7FU0ePHtXhw4f18MMPa9CgQfafkpISNTY2atCgQVGfIYfPtd3uxVW0z9/b2lFbRvy2Olrb1Y3rr7/e40qSx0cffaTp06d3ei/QF7/4RUm8b1qSfvSjH+no0aPaunWr9u7dq7ffflu1tbXKzc3lLhAHnH2S1OLFi9XQ0KCNGzdGbV+7dq0KCgo0d+5cjypDKrn//vt177336q677tI999zjdTkpY/PmzUpLS9OECRO8LsVTI0eO1ObNmzv9WbRokbKzs7V582Y98MADXpeZdGpra/X73/9ec+bMUXZ2ttfleO7rX/+6JOmVV16J2v7yyy9Lkr70pS/1eU3Jqrm5WevWrdPZZ5/NLzzbKSgoUFlZWafPLvvLX/4iSSzi8v9lZWWpuLhYhYWFqqio0G9+8xvdcMMN6tevn9elJS3eI5SkLrroIi1YsEArVqxQXV2dJk2apJKSEr366qtat26drz9Yrb1XXnlFjY2Nqq+vl3TqQ9eef/55SdLFF18ctZSk3zz88MO6++67deGFF+qSSy7p9MnkvPiQbrzxRvXv319nn322RowYoaNHj+q5557Tb37zG91+++0aNmyY1yV6Kjs7W+eff36n7U8//bSCwWDMfX6zbNky+9bKoUOHateuXXr44Yd1+PBhPf30016XlxQWLlyoyy67TD/96U8ViUT0pS99SR988IHuu+8+XXrppfryl7/sdYlJ47//+79VU1PD1aAOVq5cqcsvv1wLFizQbbfdpqFDh+qdd97RQw89pOnTp9u3WfpVaWmpNm7cqC984QvKysrSli1btHr1ak2ePFn333+/1+UlN48/xwgO6uvrrVtvvdUaOXKklZmZac2aNcsqKSnxuqykUlhYaEmK+WfPnj1el+ep8847r8ts+NY/5amnnrK+8pWvWEOHDrXS09OtgQMHWuedd571zDPPeF1aUuMDVT/30EMPWXPmzLEGDBhgBYNBa9iwYdbixYut9957z+vSkkpTU5P1ox/9yDrjjDOs9PR0a+zYsdZPfvIT6+TJk16XllQWLFhg5ebmWnV1dV6XknTeeOMNa+HChdbIkSOtfv36WVOmTLF++MMfWkePHvW6NM/t3LnTOvfcc63BgwdbmZmZ1qRJk6y77rrLamho8Lq0pBewLNatBAAAAOAvvEcIAAAAgO/QCAEAAADwHRohAAAAAL5DIwQA/6/9OhAAAAAAEORvPchlEQCwI0IAAMCOCAEAADsiBAAA7IgQAACwI0IAAMCOCAEAADsiBAAA7ASx2HCUY8lVfgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import random\n", "\n", "random.seed(3)\n", "np.set_printoptions(precision=2, suppress=True, linewidth=60)\n", "train_filter(4, kernel=[1.], sensor_accuracy=.999,\n", " move_distance=4, do_print=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that the code was able to perfectly track the robot so we should feel reasonably confident that the code is working. Now let's see how it fairs with some errors. " ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time 0: pos 4, sensed 4, at position 4\n", " estimated position is 4 with confidence 96.0390%:\n", "time 1: pos 8, sensed 9, at position 8\n", " estimated position is 9 with confidence 52.1180%:\n", "time 2: pos 3, sensed 3, at position 3\n", " estimated position is 3 with confidence 88.3993%:\n", "time 3: pos 7, sensed 8, at position 7\n", " estimated position is 8 with confidence 49.3174%:\n", "\n", "final position is 7\n", "Estimated position is 8 with confidence 49.3174%:\n" ] }, { "data": { "image/png": "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h+U4jpqbmz21jxg1apQKCgrcZX21jxg/frwqKyvlOI62b9/uiX2En/R2H+EnXngf0fk9kdf2EVLv30d0vN9PREITobq6um4/7KUTb547lscrFApp6dKlysvL0y233BL3Ol2/9shxHPfbc0OhUMx1evp23Ugk4i6LRCLdlse73a5j6rzdcDgcc7uO48T8oqtwONxtux07m8bGRut2e7qvnbfb9b52bhhrux33NRAI9Hq7ff3YdN4hdxwS7hhDT2PqqWEoFIp5zflYj00i221vb4+5zLTdzvc10ce8c8PMzMyoH/ydtxtr/c5j6sp2X9va2hSJRGKeJnsyGsZqFO92bc/Dro28so9IZLufdx8RDAa7vQHywj6ip+2ezH1EMBh0/z6v7SNMDU/mPiIvL0/hcDjq7+5pu6myj/CT3u4j/MQL7yM676Pb2to8tY/oGHNv30ckKuGLJcT6QRfPss4cx9HSpUv1f//3f1q/fn23IxA9SU9P7/Z3BAIB981C1yNVHbf19M26aWlp7rJYT9h4t9t1TJ23G+tBzMjIkOM4MbcbDAY/13Y7/97Tdrve184NY223477Genzj3W6qPDa2+9pxP20Ne7Pdjg8uJrLdjnVN2/28DW33tSvbfc3MzFQ4HO6ThpFIJOHXTSo+D9lHdN9uqjw27CO6b9fv+wg/6e0+wk/YR3TfbirtIxIVcBKYPs2ZM0fhcFjvvvtu1O0VFRUqLS3VqlWrdN111xm34TiOrrnmGj355JNavXq1rrjiiph/rjffDgsAAHCynP6Uf77i44MrJ9r/UAx+adTbPjh1ejN3SOifPqZPn66ysjKFQqGofzXpOEew6zmLXXVMgn7961/r8ccf73EShGjHjx+X4zgKBAJRnwfAZ2hkRh87GtnRyIw+djQC+h6vs/glNBFatGiRHn30Ua1fv16XXnqpe/vq1atVVFSk2bNn97iu4zi69tpr9etf/1qrVq3SVVdd1ftR+8z27dvdDy92veADTqCRGX3saGRHIzP62NEI6Hu8zuKX0ETo/PPP17x587Rs2TI1NjZqwoQJKisr08svv6w1a9a45/ktXbpUq1evVmVlpYqLiyVJN998sx5//HFdffXVmj59ut5++213u1lZWTr99NNP4t0CAAAAgJ4l/KnA5557TitWrNCdd96p+vp6lZSUqKysTJdddpn7Z8LhsMLh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a9Zo9uzZKioqSnDoAAAAANA7CV0+W5Lmz5+v999/Xz/72c80YcIElZWV6dFHH9WaNWv0rW99S5K0dOlSrV69WpWVlSouLpZ04gtVzzjjDDU2NmrlypUaOnSoHnnkEb3wwgt8oSoAAACAUyrhc8+ee+45XXnllbrzzjt13nnn6Z133lFZWZk7CZKkcDiscDgcdZ5eVlaWNmzYoLlz5+qmm27SwoULdeDAAb300ktMgnrQ1NSk5cuXq6ioSNnZ2Zo1a5bWrVuX7GGljKNHj+q2227T/PnzVVhYqEAgoLvvvjvZw0oZr7/+uq6++mqVlJQoNzdXI0eO1N///d/rL3/5S7KHljI+/PBDXXjhhRo9erT69eunwYMHa86cOVqzZk2yh5ayHnvsMQUCAeXl5SV7KCnhjTfecD+/2vXX22+/nezhpZQ//elPuuCCCzRo0CD169dPEydO1L333pvsYaWE73znOz0+j3gunfDBBx/o4osvVlFRkXJyclRSUqKf/vSnamlpSfbQUsK7776rBQsWqH///srLy9PcuXP15ptvJntYKS/hI0I4debPn6/33ntPK1eu1KRJk7R27Vo99thjevrpp7VkyZJkDy/pdu/erVmzZmnmzJmaNGmSHnvsMd11111Mhv6/xYsXq66uTosXL9bUqVNVU1OjBx98UO+//75eeeUVfe1rX0v2EJPujTfe0Lp16/TlL39ZI0eOVHNzs55++mmtW7dO9957r+64445kDzGl7N+/X9OmTVNubq6OHDmipqamZA8p6d544w3NnTtX999/v+bOnRu1rLS0lAnj/7d27VpdeeWV+uY3v6klS5YoLy9PlZWVqq6u1p133pns4SVdZWWlampqut2+cOFCZWVlac+ePQoGg0kYWWrYsmWLzjjjDE2ePFm33367hgwZoj/+8Y+67777dOGFF+q3v/1tsoeYVO+9956+8pWv6Mwzz9QPfvADOY6jf/7nf9YHH3ygjRs3as6cOckeYupykJL+53/+x5HkrF27Nur2efPmOUVFRU4oFErSyFJHJBJxIpGI4ziOU1NT40hy7rrrruQOKoUcPHiw221Hjx51hg0b5px77rlJGJF3zJ492znttNOSPYyUc9FFFzkLFy50vv3tbzu5ubnJHk5K2LhxoyPJeeaZZ5I9lJS1b98+Jzc311m2bFmyh+Ipb7zxhiPJueOOO5I9lKRbsWKFI8n55JNPom6/7rrrHElOfX19kkaWGhYsWOAMGzbMaW5udm9rbGx0hgwZ4px11llJHFnq47JsKer5559XXl6eFi9eHHX7VVddperq6qiLTvgVl1M3Gzp0aLfb8vLyNHXqVO3duzcJI/KOIUOGRF0ZE9KaNWv0hz/8QY888kiyhwKPeeyxx9Tc3Kwf/ehHyR6Kpzz++OMKBAK6+uqrkz2UpMvIyJAkDRgwIOr2gQMHKi0tTZmZmckYVsp48803dc455ygnJ8e9rX///vrqV7+qt956SwcOHEji6FIbE6EUVV5erilTpnR7MzZjxgx3OZCoI0eO6K9//aumTZuW7KGklEgkolAopJqaGj3yyCN65ZVXeNPWyaFDh7R8+XKtXLlSo0aNSvZwUtINN9yg9PR05efna8GCBfrTn/6U7CGljD/+8Y8aPHiwtm3bplmzQJGwbgAABy1JREFUZik9PV1Dhw7V9773PTU2NiZ7eCnpyJEjevbZZ3Xuuedq7NixyR5O0n3729/WwIEDtWzZMu3cuVNHjx7V73//e61atUo33HBDt++d9Ju2tjZlZWV1u73jtlhfX4MTmAilqLq6uphfUNtxW6wvpwVsbrjhBjU3N2vFihXJHkpKuf7665WRkaGhQ4fqlltu0b/927/pu9/9brKHlTKuv/56TZ48WcuWLUv2UFLOgAED9P3vf1+rVq3Sxo0b9dBDD2nv3r0655xz9MorryR7eClh//79amlp0eLFi3XppZfqtdde06233qr//M//1AUXXNDtCxAhlZWV6dixY1q6dGmyh5ISxowZoz//+c8qLy/X+PHjlZ+fr4ULF+rb3/62HnrooWQPL+mmTp2qt99+W5FIxL0tFAq5Zw/xnrFnnPuRwkynfXFKGBL1j//4j3r66af17//+7zrjjDOSPZyUcvvtt+uaa67RoUOH9MILL+jGG29Uc3Oz/uEf/iHZQ0u69evX64UXXtAHH3zAfieG008/Xaeffrr7/1/5yle0aNEiTZ8+XbfddpsWLFiQxNGlhkgkouPHj+uuu+7Sj3/8Y0nSOeeco8zMTC1fvlwbNmzQ17/+9SSPMrU8/vjjKigo0KJFi5I9lJSwe/duLVy4UMOGDdOzzz6rwsJCvfPOO7rvvvvU1NSkxx9/PNlDTKqbbrpJS5cu1Y033qgVK1YoEononnvu0Z49eyRJaWkc9+gJZVJUQUFBzBl8fX29JMU8WgT05J577tF9992nf/qnf9KNN96Y7OGknNGjR+sLX/iCLrjgAv3yl7/Uddddp5/85Ccxr+LkJ01NTbrhhht00003qaioSIcPH9bhw4fV1tYmSTp8+LCam5uTPMrUM3DgQF100UX66KOPdOzYsWQPJ+kKCgokqduk8Pzzz5ck/fWvfz3lY0plH330kd5//31dccUVMU938qMf//jHamxs1CuvvKJvfOMb+upXv6pbb71Vv/jFL/TEE0/oD3/4Q7KHmFRXX321Vq5cqaeeekqjRo3S6NGjtWXLFvcf80aOHJnkEaYuJkIpavr06dq6datCoVDU7R3neZaWliZjWPCge+65R3fffbfuvvtu3X777ckejieceeaZCoVC2rlzZ7KHklS1tbU6ePCgHnzwQQ0aNMj9VVZWpubmZg0aNCjqO+TwmY7TvTiK9tlnW7vqaMS/VkfrOLpxzTXXJHkkqePDDz/U1KlTu30W6Itf/KIkPjctST/60Y9UW1urzZs3a/fu3XrrrbfU0NCg3NxczgIxYO+TohYtWqSmpiatX78+6vbVq1erqKhIs2fPTtLI4CX33nuv7r77bt1xxx266667kj0cz9i4caPS0tI0bty4ZA8lqYYPH66NGzd2+7VgwQJlZ2dr48aNuu+++5I9zJTT0NCg3//+95o1a5ays7OTPZyk+8Y3viFJeumll6Juf/HFFyVJX/rSl075mFJVa2ur1qxZozPPPJN/8OykqKhIFRUV3b677M9//rMkcRGX/y8rK0ulpaUqLi5WVVWVfvOb3+jaa69Vv379kj20lMVnhFLU+eefr3nz5mnZsmVqbGzUhAkTVFZWppdffllr1qzx9RerdfbSSy+publZR48elXTiS9eeffZZSdIFF1wQdSlJv3nwwQd155136rzzztOFF17Y7ZvJefMhXXfddcrPz9eZZ56pYcOGqba2Vs8884x+85vf6NZbb1VhYWGyh5hU2dnZOuecc7rd/uSTTyoYDMZc5jdLlixxT60cMmSIduzYoQcffFAHDx7Uk08+mezhpYT58+dr4cKF+ulPf6pIJKIvfelLev/993XPPffooosu0pe//OVkDzFl/Pd//7fq6+s5GtTF8uXLdfHFF2vevHm65ZZbNGTIEL399tt64IEHNHXqVPc0S78qLy/X+vXr9YUvfEFZWVnatGmTVq5cqYkTJ+ree+9N9vBSW5K/xwgGR48edW6++WZn+PDhTmZmpjNjxgynrKws2cNKKcXFxY6kmL927dqV7OEl1dlnn91jG176JzzxxBPOV77yFWfIkCFOenq6M3DgQOfss892nnrqqWQPLaXxhaqfeeCBB5xZs2Y5AwYMcILBoFNYWOgsWrTIeffdd5M9tJTS0tLi/OhHP3JOO+00Jz093Rk9erTzk5/8xDl+/Hiyh5ZS5s2b5+Tm5jqNjY3JHkrKef3115358+c7w4cPd/r16+dMmjTJ+eEPf+jU1tYme2hJt337duerX/2qM3jwYCczM9OZMGGCc8cddzhNTU3JHlrKCzgO160EAAAA4C98RggAAACA7zARAgAAAOA7TIQAAAAA+A4TIQAAAAC+w0QIAAAAgO8wEQIAAADgO0yEAAAAAPgOEyEAAAAAvsNECAAAAIDvMBECAAAA4Dv/r/06EAAAAAAQ5G89yGWRCAEAADsBVVpUgcanTDwAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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": [ "There was a sensing error at time 1, but we are still quite confident in our position. \n", "\n", "Now let's run a very long simulation and see how the filter responds to errors." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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eXqunYj0pSX9Tj1/NhAREZFLN7x/StHxj/yhj6LjE5F7+LYFEREREZFKcbJORERERKRSPA2mzi+//AKz2Qyj0YjOnTtrOpe1ai9TVq5eMmXmkufp6XUrg56OUb1kysrVS6YrnKzXuXjxou2+mt58cmTkslbtZcrK1UumzFzyPD29bmXQ0zGql0xZuXrJdMXt02AqKiqwaNEixMTEIDAwEEOGDMGmTZuate3evXuRkpKC6OhohIaGYtCgQXj99ddhNpvd3nEiIlIW+z0RkXxuv7M+adIkfP/990hNTUVCQgI2btyIadOmwWKxYPr06Y1u99VXX+H222/HqFGjsGbNGoSEhOCTTz7BwoULkZ2djVWrVrWqkNbq2bMnhBAwGAyaz2Wt2suUlauXTJm5MrHft+1MWfR0jOolU1auXjJdces+6zt27MCdd95pa9hW48aNQ2ZmJvLy8mA0Gp1ue//992PLli0oLi5GSEiIbfntt9+OgwcPoqyszO7ned9dItITtfU89nv14q0bidqulvQ7tzrh9u3bERoaismTJ9stnzlzJgoKCnDo0KFGt/Xz84O/vz+CgoLslkdERCAwMNCd3SAiIoWx3xMRqYNbp8FkZGSgX79+Dl/BOmjQINv6m266yem28+fPR1paGh577DE8++yzCA4Oxqeffort27dj5cqVzcrPzMxEbGwswsLCbMtqamqQlZUFAIiMjESPHj3stjl16hSqqqoAAIMHD7ZbV1RUhPPnzwMAevTogcjISNs6s9mMjIwMANf/4unVq5fdtjk5OSgvLwcADBgwwO4xuXz5Ms6ePQsAiImJQceOHe22PXr0KIQQCAoKQkJCgt26c+fOoaSkBADQt29fu19sFRUVyM7OBgBER0ejS5cudtseP37cdlFE//797dZduHABhYWFAIDevXsjNDTUtq66uhonT54EALRv3x7du3e32/bnn3/G1atXYTAYbM+11aVLl1BQUAAAiI2NRUREhG2dyWRCZmYmACAsLAw9e/a02/bMmTO2vy6TkpLs3qUrLS1FXl4eAKBr166Iioqy2zY9PR0AEBwcjD597N8FysvLQ2lpKQAgMTERAQEBtnXl5eXIyckBAHTq1Mnh4pHMzEyYTCYEBAQgMTHRbl1BQQEuXboEAIiPj7d7x7CqqgqnTl1/t6tDhw7o1q2b3bYnT55EdXU1jEYj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B/q8efMQFhaGESNGoFOnTigqKsLmzZvx4Ycf4oknnkDHjh09mhcYGIgxY8Y4LF+3bh2MRqPTdZ4wffp09OjRA8OGDUNUVBROnTqFV155BRcvXsS6desUyRw3bhzuuusuvPDCC7BYLBg5ciR++OEHLF++HL/5zW/w61//WpFcq48++gglJSWKv8sCAIsWLcI999yDlJQULF68GFFRUTh48CBWrlyJ/v37Y/z48R7PzMjIwNatWzFs2DAEBAQgPT0dqamp6NOnD1asWOHxPFIW+/1/KdHvvd3rAfZ79nvPUX2/l3oSjgo05xv6lBAbG9vo1/c2/CZATxg9enSTXxmslHfffVfccsstIioqSvj6+oqIiAgxevRor38FtdIXHK1cuVIMGTJEhIeHC6PRKDp27CgmTpwoDh8+rFimEEJUVVWJp556SnTv3l34+vqKHj16iGeeeUbRi3+sUlJSREhIiCgvL1c8Swgh9uzZI8aNGyc6d+4sgoKCREJCgnj88cdFUVGRInknT54Uo0aNEu3btxf+/v4iPj5ePPfcc149B5Y8i/1euX6vll4vBPu9Etjv5TII4aX7/RARERERkVt0fc46EREREZGacbJORERERKRSnKwTEREREakUJ+tERERERCrFyToRERERkUpxsk5EREREpFKcrBMRERERqRQn60REREREKsXJOhERERGRSnGyTkRERESkUpysExERERGpFCfrREREREQqxck6EREREZFKcbJORERERKRSnKwTEREREakUJ+tERERERCrFyToRERERkUpxsk5EREREpFKcrBMRERERqRQn60REREREKsXJOhERERGRSnGyTkRERESkUpysExERERGpFCfrREREREQqxck6EREREZFKcbJORERERKRSnKwTEREREakUJ+tERERERCrFyToRERERkUpxsk5EREREpFKcrBMRERERqRQn60REREREKsXJOhERERGRSnGyTkRERESkUpysExERERGpFCfrREREREQqxck6EREREZFKcbJORERERKRSnKwTEREREakUJ+tERERERCrFyToRERERkUpxsk5EREREpFKcrBMRERERqRQn60REREREKsXJOhERERGRSnGyTkRERESkUpysExERERGpFCfrREREREQqxck6NSk3NxcGgwEPPvig7F3xuDFjxsBgMMjeDSIi6djr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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with figsize(y=5.5):\n", " for i in range (4):\n", " random.seed(3)\n", " plt.subplot(221+i)\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))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that there was a problem on iteration 149 as the confidence degrades. But within a few iterations the filter is able to correct itself and regain confidence in the estimated position." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayes Theorem and the Total Probability Theorem" ] }, { "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*](https://en.wikipedia.org/wiki/Bayes%27_theorem) and the [*Total Probability Theorem*](https://en.wikipedia.org/wiki/Law_of_total_probability).\n", "\n", "Bayes theorem tells us how to compute the probability of an event given previous information. \n", "\n", "We implemented the `update()` function with this probability calculation:\n", "\n", "$$ \\mathtt{posterior} = \\frac{\\mathtt{likelihood}\\times \\mathtt{prior}}{\\mathtt{normalization\\, factor}}$$ \n", "\n", "We haven't developed the mathematics to discuss Bayes yet, but this is Bayes' theorem. Every filter in this book is an expression of Bayes' theorem. In the next chapter we will develop the mathematics, but in many ways that obscures the simple idea expressed in this equation:\n", "\n", "$$ updated\\,knowledge = \\big\\|likelihood\\,of\\,new\\,knowledge\\times prior\\, knowledge \\big\\|$$\n", "\n", "where $\\| \\cdot\\|$ expresses normalizing the term.\n", "\n", "We came to this with simple reasoning about a dog walking down a hallway. Yet, as we will see the same equation applies to a universe of filtering problems. We will use this equation in every subsequent chapter.\n", "\n", "Likewise, the `predict()` step computes the total probability of multiple possible events. This is known as the *Total Probability Theorem* in statistics, and we will also cover this in the next chapter after developing some supporting math.\n", "\n", "For now I need you to understand that Bayes' theorem is a formula to incorporate new information into existing information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\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", "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", "**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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", " * [1] D. Fox, W. Burgard, and S. Thrun. \"Monte carlo localization: Efficient position estimation for mobile robots.\" In *Journal of Artifical Intelligence Research*, 1999.\n", " \n", " http://www.cs.cmu.edu/afs/cs/project/jair/pub/volume11/fox99a-html/jair-localize.html\n", "\n", "\n", " * [2] Dieter Fox, et. al. \"Bayesian Filters for Location Estimation\". In *IEEE Pervasive Computing*, September 2003.\n", " \n", " http://swarmlab.unimaas.nl/wp-content/uploads/2012/07/fox2003bayesian.pdf\n", " \n", " \n", " * [3] Sebastian Thrun. \"Artificial Intelligence for Robotics\".\n", " \n", " https://www.udacity.com/course/cs373\n", " \n", " \n", " * [4] Khan Acadamy. \"Introduction to the Convolution\"\n", " \n", " https://www.khanacademy.org/math/differential-equations/laplace-transform/convolution-integral/v/introduction-to-the-convolution\n", " \n", " \n", "* [5] Wikipedia. \"Convolution\"\n", "\n", " http://en.wikipedia.org/wiki/Convolution\n", "\n", "* [6] Wikipedia. \"Law of total probability\"\n", "\n", " http://en.wikipedia.org/wiki/Law_of_total_probability\n", " \n", "* [7] Wikipedia. \"Time Evolution\"\n", "\n", " https://en.wikipedia.org/wiki/Time_evolution\n", " \n", "* [8] We need to rethink how we teach statistics from the ground up\n", " \n", " http://www.statslife.org.uk/opinion/2405-we-need-to-rethink-how-we-teach-statistics-from-the-ground-up" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "1ea315f115ff43d8aedcd574bbeed410": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "IntSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "IntSliderView", "continuous_update": true, "description": "step", "description_tooltip": null, "disabled": false, "layout": "IPY_MODEL_51963e73dba4487f95d2e6c2b9a9c71a", "max": 100, "min": 0, "orientation": "horizontal", "readout": true, "readout_format": "d", "step": 1, "style": "IPY_MODEL_bf7a2628623c422bbdc7983f76a57c75", "value": 1 } }, "24a3f8a7d3c44508a9d0ae15bb97df92": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "24f0f28eff1947719418be9532a5054c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "376e66cbf1e74103a1a93d5ec7611004": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_24f0f28eff1947719418be9532a5054c", "msg_id": "", "outputs": [] } }, "4825caa46e18450f9afcba67c27cbeba": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "IntSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "IntSliderView", "continuous_update": true, "description": "time_step", "description_tooltip": null, "disabled": false, "layout": "IPY_MODEL_6409d65c66d5483ab1dff92c7199efb0", "max": 19, "min": 0, "orientation": "horizontal", "readout": true, "readout_format": "d", "step": 1, "style": "IPY_MODEL_c448c06a3e904b0d811dd099733429bc", "value": 0 } }, "48c69b49621547b9972c8eb7cddfa10e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_4fbf3d96470d4f168fdd3af62ae85189", "msg_id": "", "outputs": [] } }, "4fbf3d96470d4f168fdd3af62ae85189": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "51963e73dba4487f95d2e6c2b9a9c71a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "557aede106aa460da09898120cf2c111": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "6127afe680be4cc5bd3e14626d4493f0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_7f99b7560aa04802a5b1b03b5e4ad81e", "IPY_MODEL_48c69b49621547b9972c8eb7cddfa10e" ], "layout": "IPY_MODEL_557aede106aa460da09898120cf2c111" } }, "6409d65c66d5483ab1dff92c7199efb0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7e810cc52ae044aba08c2672377d716c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7f99b7560aa04802a5b1b03b5e4ad81e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "IntSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "IntSliderView", "continuous_update": true, "description": "step", "description_tooltip": null, "disabled": false, "layout": "IPY_MODEL_7e810cc52ae044aba08c2672377d716c", "max": 12, "min": 0, "orientation": "horizontal", "readout": true, "readout_format": "d", "step": 1, "style": "IPY_MODEL_d4f45abe59a24e19a6168202f72b914e", "value": 12 } }, "9260e86291ea4ceabb18583e1b480bd9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "964107123dbf442593d2a43411c04268": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b51e90e175e14117b4c0727749c1047d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "bf7a2628623c422bbdc7983f76a57c75": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "c383bd000ae248f0adeec4825dc0923b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "c448c06a3e904b0d811dd099733429bc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "d13d51f518a64cbfb548a3ac5fe0412d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_e99d98efa98146f7ae449672d8f4da71", "IPY_MODEL_e67fb12631604743a7b242a173e2250c" ], "layout": "IPY_MODEL_24a3f8a7d3c44508a9d0ae15bb97df92" } }, "d4f45abe59a24e19a6168202f72b914e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "e67fb12631604743a7b242a173e2250c": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_9260e86291ea4ceabb18583e1b480bd9", "msg_id": "", "outputs": [] } }, "e99d98efa98146f7ae449672d8f4da71": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "IntSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "IntSliderView", "continuous_update": true, "description": "step", "description_tooltip": null, "disabled": false, "layout": "IPY_MODEL_fb2dce3f803243b3a6a4619bc0099cc2", "max": 100, "min": 0, "orientation": "horizontal", "readout": true, "readout_format": "d", "step": 1, "style": "IPY_MODEL_c383bd000ae248f0adeec4825dc0923b", "value": 1 } }, "ecba7b7412dc454d9c606867bb343235": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_4825caa46e18450f9afcba67c27cbeba", "IPY_MODEL_ecf2533746d74ee18336f04b86e21736" ], "layout": "IPY_MODEL_fa98c8f5d70f48af9968b14005fa2274" } }, "ecf2533746d74ee18336f04b86e21736": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_964107123dbf442593d2a43411c04268", "msg_id": "", "outputs": [] } }, "fa98c8f5d70f48af9968b14005fa2274": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "fb2dce3f803243b3a6a4619bc0099cc2": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "fd3a9bcbc55f432dad319c4248e1f8ef": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_1ea315f115ff43d8aedcd574bbeed410", "IPY_MODEL_376e66cbf1e74103a1a93d5ec7611004" ], "layout": "IPY_MODEL_b51e90e175e14117b4c0727749c1047d" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }