From fbcef07499a8b0064c68389d76987609842a8577 Mon Sep 17 00:00:00 2001 From: Roger Labbe Date: Sat, 27 Jun 2015 08:37:14 -0700 Subject: [PATCH] Adding Particle filter chapter. This is an early, incomplete draft, but it is time to get it into source control so I can track changes. Not ready for public consumption. --- .gitignore | 1 - 11_Particle_Filters.ipynb | 999 ++++++++++++++++++++++++++++++++++++++ code/book_plots.py | 56 +++ code/particle_filter.py | 146 +----- code/pf_internal.py | 202 +++++++- 5 files changed, 1259 insertions(+), 145 deletions(-) create mode 100644 11_Particle_Filters.ipynb diff --git a/.gitignore b/.gitignore index 92422c1..12ee50a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ __pycache__ *.pyc short.pdf -11* *.aux *.out book.ipynb diff --git a/11_Particle_Filters.ipynb b/11_Particle_Filters.ipynb new file mode 100644 index 0000000..bac877a --- /dev/null +++ b/11_Particle_Filters.ipynb @@ -0,0 +1,999 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Table of Contents](http://nbviewer.ipython.org/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/table_of_contents.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Particle Filters" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#format the book\n", + "%matplotlib inline\n", + "%load_ext autoreload\n", + "%autoreload 2 \n", + "from __future__ import division, print_function\n", + "import matplotlib.pyplot as plt\n", + "import book_format\n", + "book_format.load_style()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** author's note: this is being written now. It is not ready to be read.**\n", + "\n", + "Here is our problem. We have object moving in a space, and we want to track them. Maybe the objects are fighter jets and missiles in the sky, or maybe we are tracking people playing cricket in a field. It doesn't really matter. Which of the filters that we have learned can handle this problem? Well, none of them are ideal. Let's think about the characteristics of this problem. \n", + "\n", + "1. **multi-modal**: We want to track zero, one, or more than one object simultaneously.\n", + "\n", + "2. **occlusions**: One object can hide another, causing there to be only one measurement for multiple objects.\n", + "\n", + "3. **nonlinear behavior**: Aircraft are buffeted by winds, balls move in parabolas, and people collide into each other.\n", + "\n", + "4. **nonlinear measurements**: Radar gives us the distance to an object. Converting that to an (x,y,z) coordinate requires a square root, which is nonlinear.\n", + "\n", + "5. **non-Gaussian noise:** as objects move across a background the computer vision can mistake part of the background for the object. \n", + "\n", + "6. **continuous:** the object's position and velocity (i.e. the state space) can smoothly vary over time.\n", + "\n", + "7. **multivariate**: we want to track several attributes, such as position, velocity, turn rates, etc.\n", + "\n", + "None of the filters we have learned work well with all of these constraints. \n", + "\n", + "* **Discrete Bayes filter**: This has most of the attributes. It is multimodal, can handle nonlinear measurements, and can be made to work with nonlinear behavior (in this book we only handled the linear case). However, it is discrete, not continuous, and it is *univariate*, not multivariate.\n", + "\n", + "* **Kalman filter**: The Kalman filter produces optimal estimates for unimodal linear systems with Gaussian noise. None of these are true for our problem.\n", + "\n", + "* **Unscented Kalman filter**: The UKF handles nonlinear, continuous, multivariate problems. However, it is neither multimodal nor does it handle occlusions. It can handle noise that is modestly non-Gaussian, but does not do well with distributions that are very non-Gaussian or problems that are very nonlinear.\n", + "\n", + "* **Extended Kalman filter**: The EKF has the same strengths and limitations as the UKF, except that is it even more sensitive to strong nonlinearities and non-Gaussian noise." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Monte Carlo Sampling\n", + "\n", + "In the UKF chapter I generated a plot similar to this to illustrate the effects of nonlinear systems on Gaussians:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n8/MsLS2h0+k2HXBUKbkTU9bgXc9XpQZdDaU+OpvNShmKSCLPnj0rHxiam5v50pe+hMvlIhqNcuXK\nFXK5HE8//bRcx+TkJLOzs6TTaXQ6HS6Xi7W1NWpqajhz5oyUkjidTlKplFxfbW0t+/btI5/PE4vF\n5ACm2dlZDAYDR44cobOzk7m5OUwmE3Nzc9y8eVPqC0dHR5mcnOTixYuyAXR5eVnaQV6/fp0f//jH\n1NfXs2/fPjo7OykUClitVhobG7lw4QKxWIxisUhnZyf19fWyJCsmo/b19cn3TO2conQzUD8MKY89\nd+4ct27d4ujRo/JBSf2wpv5cN8N2Nk0NGjRo2Am2mmxcybJQyYoLCH/yYrHIZz/7WU6cOCGPrRSr\nKslbylnYllv7yy+/zNjYmHRxEYOVvF7vhrWLidZiPobf72dkZIRXXnmFYDDIyZMntX4eDXcMLVH/\ngKLcP/6mpiYp11DaXSlHIW8WRCu5jAj9XzkI9nd4eJhgMAggWQbhRCIY2/379+N2u3nttdf47ne/\nyzvvvENnZyef+MQnCIVCvPLKK0xMTOB0Ounp6aG/v59sNsvi4iITExMkk0l8Pl+Jn/mtW7eYm5sj\nGo1SW1tLJpMhmUySSCSYnZ2loaGBRCIh2W2v1wus6767u7vZtWsXoVBIJtpra2sYjUZsNhuAlLr8\n5Cc/Yc+ePfzqr/4qn/nMZyTjPjY2xsLCAg888ADV1dXSez2fz1dkyJUQgV8MbxLvv5rlDofDLC0t\nYTQapQWY8hrhcLhEr3k/MOSaLlODBg0CIlE2mUzSB12t4QZKvMrPnDnD5OQk1dXVBINBKRVUXhO2\njjE7IS9mZmaYn5/H5XKRy+WIxWJEIhE56OjIkSO8+uqrXLlyhYWFBWmGoBzAFAqFKBaLWrVSw12B\nlqh/gKFOssWkSiXGx8d58cUX0ev19Pf3S7ZbiUq2VkobKqCinEZ8L3R7Pp9vg/WWOM5qtdLW1kZN\nTQ3JZJK5ubmSIG02m+ns7MRut3Pu3DnJXNfV1dHa2kpHR4dMVMfGxpiYmGB0dFQmydlslsuXL7Oy\nsoLFYqGqqopr165JhxW32y0bV8Uk1JqaGtra2sjn86ysrGA0GqUeP51Os7S0xOuvvy4npFosFtks\nOjIywtraGg0NDUxNTbGwsEBzczM6nU4ev9VmopxQmslkCAQCJSw3rDfo6nS6Emsy8V4ODw+XuOmo\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pf_internal\n", + "pf_internal.plot_monte_carlo_ukf()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On the left I created 3000 points normally distributed based on the Gaussian\n", + "\n", + "$$\\mu = \\begin{bmatrix}0\\\\0\\end{bmatrix},\\, \\, \\, \\Sigma = \\begin{bmatrix}32&15\\\\15&40\\end{bmatrix}$$\n", + "\n", + "\n", + "and passed them through the system\n", + "\n", + "$$\\begin{aligned}x&=x+y\\\\\n", + "y &= 0.1x^2 + y^2\\end{aligned}$$ \n", + "\n", + "I then showed how poorly the EKF did at estimating the new mean and covariance compared to the UKF.\n", + "\n", + "This technique of using a finite number of randomly sampled to compute a result is called a **Monte Carlo** (MC) method. The idea is simple. Generate *enough* points to get a representative sample of the problem, run the points through the system you are modeling, and then compute the results on the transformed points. \n", + "\n", + "\n", + "In a nutshell this is what particle filtering is. A bit later I'll demonstrate how MC can integrate over a probability distribution, but you don't need that formality to understand how they work. It's very simple. It is just the Bayesian filter algorithm we have been using throughout the book applied to thousands of particles, where each particle represents a *possible* state for the system.\n", + "\n", + "1. **Randomly generate a bunch of particles**\n", + " \n", + " Particles can have position, heading, and/or whatever other state variable you need to estimate.\n", + " Each has a weight indicating how likely it matches the actual state of the system.\n", + " \n", + "2. **Predict next state of the particles**\n", + "\n", + " Advance the particles to the next time step based on a system model and noise model.\n", + " \n", + "3. **Update**\n", + "\n", + " Update the weighting of the particles based on a measurement.\n", + " \n", + "4. **Resample**\n", + " Discard highly improbable particle and replace them with copies of more probable particles\n", + " \n", + " Optionally, compute mean and covariance of the set of particles to get the most likely current state.\n", + " \n", + " \n", + " \n", + " \n", + "This naive algorithm runs into some practical difficulties which we will need to overcome, but this is the general idea. To demonstrate this I wrote a particle filter that performs robot localization. This is the same robot localization problem used in the UKF and EKF chapter. In this problem we have a robot that we can control. It has sensors that measure its distance to various landmarks, and we can steer the robot. Both the sensors and control mechanism have noise in them, and we need to estimate the robot's position.\n", + "\n", + "Here I run the particle filter and plotted the positions of the particles. The plot on the left is after one iteration, and on the right is after 10. The asterisk is the actual position of the robot, and the large circle is the computed weighted mean position." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pf_internal.show_two_pf_plots()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the first iteration the particles are still largely randomly scattered around the map, but you can see that some have already collected near the robot's position. The computed mean is quite close to the robot's position. This is because each particle is weighted based on how closely it matches the measurement. The measurement (with noise) says the robot is near (1,1), so particles that are near (1, 1) will have a high weight, and particles at, say, (15, 19.5) will have a very low weight. The estimated is computed as the weighted mean of all of the particle's positions, so the estimate is quite accurate. This is partially the result of the random number generation - other runs could produce a poor estimate if no particles were particularly near the robot.\n", + "\n", + "Several iterations later you can see that all the particles have clustered around the robot. This is due to the **resampling** step. Resampling discards particles that are very improbable (very low weight) and replaces them with particles with higher probability. There are multiple algorithms for this, and we will discuss them later. \n", + "\n", + "I haven't fully shown *why* this works nor fully explained the algorithms for weighting and resampling, but it should make intuitive sense. Make a bunch of random particles, move them so they follow the robot, weight them according to how well they match the measurements, only let the likely ones live, and continue. It seems like it should work, and it does. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we want to know the area under the curve $y= e^{1/x}$ in the interval [1,2]. We can compute the area by taking the definite integral. Go ahead and compute the answer; I'll wait. If you are wise you did not take that challenge; $y= e^{1/x}$ has no integral and so you can not find the answer this way.\n", + "\n", + "However, this is trivial to compute using a Monte Carlo (MC) technique. Create a bounding box that contains the curve in the desired interval, generate random pairs $(x,y)$, and count how many fall under the curve. Multiply the area of the bounding box by the ratio of points that were under the curve vs the total number of points and you will have computed the are under the curve. As you tend towards infinite points you can achieve any arbitrary precision. In practice, a few thousand points will give you a fairly accurate result.\n", + "\n", + "Think of how powerful this technique is. You can use it to numerically integrate any function. The function can be of any arbitrary difficulty, including being non integrable and noncontinuous, and yet we can trivially find the answer. \n", + "\n", + "Let's use it to compute $\\pi$ by computing the area of a circle. This is very easy. We will create a circle with radius 1, and bound it in a square. The means that the length of a side of the box will be 2, and hence the area of the box is 4. We will generate a set of uniformly distributed random points within the box, and count how many fall inside the circle. The area of the circle is then the area of the box times the ratio of points inside the circle over the total number number of points. Finally, we know that $A = \\pi r^2$, so $\\pi = A / r^2$.\n", + "\n", + "We start by creating the points." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " N = 20000\n", + " ps = uniform(-1, 1, (N, 2))\n", + "\n", + "A point is inside the circle if it's distance from the center point (0, 0) is less than or equal to one. We can compute the distance by using `numpy.linalg.norm`. If you aren't familiar with this, the norm is the magnitude of a vector. Since vectors start at (0, 0) calling norm will compute the point's distance from the origin.\n", + "\n", + " dist = np.linalg.norm(ps, axis=1)\n", + "\n", + "Next we compute which of this distances fit the criteria with this code, which returns a bool array that contains `True` if it meets the condition\n", + "\n", + " in_circle = dist <= 1\n", + "\n", + "All that is left is to count the points inside the circle, compute pi, and plot the results. I've put it all in one cell so you can experiment with alternative values for `N`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mean pi(N=20000)= 3.1252\n", + "err pi(N=20000)= 0.0164\n" + ] + }, + { + "data": { + "image/png": "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\nzYCnsRXouOi9jjnOO6aNrUBkOETeDFzzvXbXAO9xwPvhJjYKbt94eVq/vD62eTO8z7Gz03t/h9Pv\nOZw/fBzhb5cBxfPh/t4vAZsDgABcvfzZvUMcv9vHsbszd3v8Jk2adNPvDZmIb9iwAWvWrBny5BaL\n5faiApCcnHzD7Pf58+eRnJx82+ckopFtsBIBU+kqmHS3w2u3DPscNxP+dhkAb1kMfBvjANeT5Bvi\nuMm5PY2twKjoG2qNB95/4HPRVFRr3y/1HXJXVGuJtKexFbGxUUg1x2G575ylN4nlZsfdvmtklq6C\nu6IaUfAm6qbSVVqSK+OVt/XjIL/nrqiGOj/d77b++37HfefX38ddUQ3Vd9zku5+nsVU7hgHn064/\n6LPSJegD4kRFNTy+Y4O9nmp6GjDIcSKiW6UIoduxIAAaGhqQlZV1S+0LV65cicuXL+P999/XjhUU\nFGDMmDF48803/e7b09Oj/X98fHwgQ/YjPxVlZmbetWt8U3Hs7gzH785w/G4fx+7OcPzuDMfv9nHs\n7sy9Gr+hctiALda0Wq2wWq1oaWkBADQ3N+PSpUtITU1FYmIiACA/Px9z587Vyl1KSkqQm5uLV199\nFUuXLsXvf/97HD16FH/5y18CFRYRERERUVAK2GLNHTt2ICMjA6tXr4aiKFi0aBFmz56Nd999V7tP\nW1ubXylKdnY29u3bh6qqKsycORN79uxBTU0N5syZE6iwiIiIiIiCUsBmxF966SW89NJLQ97n3//+\n9w3Hli9fjuXLlwcqDCIiIiKikGBo+0IiIiIiopGKiTgRERERkQGYiBMRERERGYCJOBERERGRAZiI\nExEREREZgIk4EREREZEBmIgTERERERmAiTgRERERkQGYiBMRERERGYCJOBERERGRAZiIExEREREZ\ngIk4EREREZEBmIgTERERERmAiTgRERERkQGYiBMRERERGYCJOBERERGRAZiIExEREREZgIk4ERER\nEZEBmIgTERERERmAiTgRERERkQGYiBMRERERGYCJOBERERGRAZiIExEREREZgIk4EREREZEBmIgT\nERERERmAiTgRERERkQGYiBMRERERGYCJOBERERGRAZiIExEREREZIGCJeGVlJfLy8pCQkABVVdHe\n3v61j6mqqoKqqn5fJpMJvb29gQqLiIiIiCgoBSwRdzqdWLhwIcrLy4f1uJiYGJw/fx5WqxVWqxVf\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from numpy.random import uniform \n", + "\n", + "N = 20000\n", + "ps = uniform(-1, 1, (N, 2))\n", + "dist = np.linalg.norm(ps, axis=1)\n", + "in_circle = dist <= 1\n", + "\n", + "in_circle_count = np.count_nonzero(in_circle)\n", + "area = 2*2\n", + "pi = area*(in_circle_count / N)\n", + "\n", + "plt.scatter(ps[in_circle,0], ps[in_circle,1], marker=',', edgecolor='k', s=1)\n", + "plt.scatter(ps[~in_circle,0], ps[~in_circle,1], marker=',', edgecolor='r', s=1)\n", + "plt.axis('equal')\n", + "\n", + "print('mean pi(N={})= {:.4f}'.format(N, pi))\n", + "print('err pi(N={})= {:.4f}'.format(N, np.pi-pi))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I show this to you to help illustrate that you really are computing a numerical integration. An alternative way to find the area of a circle is by integrating the infinitely many circles that lie inside the circle:\n", + "\n", + "$$A = \\int_0^{2\\pi r} 2\\pi t\\, dt = \\pi r^2 $$\n", + "\n", + "The Monte Carlo technique does something very similar by summing the infinite number of points inside the circle. Computers can't sum infinities, so we settle for a representative sampling of points and less than infinite precision in the results.\n", + "\n", + "This insight leads us to the realization that we can use Monte Carlo to compute the probability density of any probability distribution. For example, suppose we have a Gaussian. The Gaussian has a probability distribution as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from stats import plot_gaussian\n", + "plot_gaussian(mean=2, variance=3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The *probability density function* (PDF) is the probability that the random value falls between 2 values. For example, we may want to know the probability of x being between 0 and 2 in the graph above. This is a continuous function, so we need to take the integral to find the area under the curve, as the area is equal to the probability for that range of values to occur. \n", + " \n", + "$$P[a \\le X \\le b] = \\int_a^b f_X(x) \\, dx$$\n", + "\n", + "It is easy to compute this integral for a Gaussian. But real life is not so easy. For example, the plot below shows a possible and realistic probability distribution. There is no way to analytically describe the curve, let alone integrate it symbolically." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAD9CAYAAAC1Fh+gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmczXX///HnYew0dtmy7zEhRdoIlZTsLbq04KKStm/b\npdJytV2lK5UkUV0hJUokskQk+95YsmdrmMxgZszMmfP74/Wba7hCY5xz3md53G+3czufGZN5jZl4\nndfn9X69PD6fzycAAAAgCuRzHQAAAAAQLCS/AAAAiBokvwAAAIgaJL8AAACIGiS/AAAAiBokvwAA\nAIgaMa4DAAAAOJWtW6WJE6Vx46Rffjn510qWlGrVkqpVs8cNN0jXXOMmToQXD3N+AQBAqIiPl6ZP\nlz7/XFq2LOf9ZctKTZpIu3fbIy3tz//tHXdIr78ulS8fvHgRfkh+AQCAc16v9PTT0ssv57yveHHp\n5pulXr2ka6+VChSw9/t8UkKCtGWL9Ntv0sqV0vDhlhDHxkpPPCE9/LBUsKCbrwWhjeQXAAA4lZgo\n9e4tzZgh5c8vde8u9eghdewoFSmSu9/j11+lQYOk776ztxs2lEaNklq3DlzcCE8kvwAAwJm1a626\nu327VKaMtTu0bZv332/WLOn++60qLEkDBkgvvSSVKuWfeBH+SH4BAIAT48ZJ/fpJqalSs2bS5Ml2\neO1cpaZKL74ovfaalJkp1awp/fijVKnSuf/eCH8kvwAAIKiOH5cefFAaOdLevvNOacSI3Lc45NaG\nDdZOsXq11KCBNH++VK6cfz8Hwg/JLwAACJqDB6UOHaRVq6RChaS33pL695c8nsB8vkOHpKuvltav\nlxo3lr7/XqpQITCfC+GB5BcAAARFaqolvgsXWivC559LzZsH/vPu3y+1aSNt3CjVrSvNmSNVqRL4\nz4vQRPILAAACzuu1CQ5TpkiVK0tLlthzsPz+uyXea9ZItWtLP/wQ3M+P0MF6YwAAEFA+nzR4sCW+\nJUtKM2cGP/EsX16aN09q2tTGorVtKx04ENwYEBpIfgEAQEANHSq9+64tnZgyRWrUyE0cpUpJs2dL\ncXHS5s1WCU5MdBML3KHtAQAABMzw4Vb1zZdPmjRJ6tLFdUTWAnHlldKmTVKLFtYDXKKE66gQLFR+\nAQBAQEyaZImvJH34YWgkvpK1QMyeLVWvLi1bJj3wgOuIEExUfgEAgN/9+KPUvr3N9H3lFenxx11H\n9Ge//GLTJtLSbPJEjx6uI0IwUPkFAAB+tW6ddNNNlvgOHCg99pjriE6tYUPpjTfsum9faedOt/Eg\nOKj8AgAAv0lOtlXFW7dam8MXX0j587uO6vR8Povz669tFvDs2dafjMjFtxcAAPjNww9b4hsXJ40b\nF9qJr2Sb5T74wNYez5tna5YR2aj8AgAAv5g2TbrxRltbvHKltRWEi8mTpW7dpCJFpLVrbREGIhOV\nXwAAcM727pXuusuu//nP8Ep8JalrV+m222wFc79+UlaW64gQKFR+AQDAOfF6bWHE3Lk24eG778Kz\nb/bgQUvaExKkkSOlv//ddUQIhDD80QQAAKHkrbcs8S1fXvrkk/BMfCWpbFnpnXfs+rHHpN273caD\nwAjTH08AABAKli+XnnzSrj/8UDr/fLfxnKsePaTOnW1qxcCBNg0CkYW2BwAAkCcpKVLTptLmzdK9\n90rvvus6Iv/Yt09q0EBKSpImTpR69nQdEfyJyi8AAMiTxx6zxLdRo5xlEZGgYkXptdfs+v/+z5Z1\nIHJQ+QUAAGdt3jypbVspJkZatky66CLXEfmX12tf0/r11gd8332uI4K/UPkFAABn5cgR6e677XrI\nkMhLfCVbzjF0qF2/8oqUnu40HPgRyS8AADgrQ4dKO3bYGuOnnnIdTeB06WItHb/9ZlMsEBloewAA\nALkWHy81aWJtAcuWSc2bu44osCZMsOUXtWpJGzdamwfCG5VfAACQaw89JGVm2ha0SE98JZv0UKeO\ntHWrJcIIf1R+AQBArsyaJV17rRQbK23ZIpUr5zqi4Bg71nqcGzSQNmyQPB7XEeFcUPkFAAB/yeu1\n0WaS9flGS+IrSb17S5UrW8vHd9+5jgbniuQXAAD8pY8/ltaskapWlQYNch1NcBUoIA0ebNfZ838R\nvmh7AAAAZ5SSItWtK+3ZI336qXT77a4jCr6kJKlKFenoUWnlSttsh/BE5RcAAJzR8OGW+DZtKt16\nq+to3IiNlfr2tet//cttLDg3VH4BAMBp/fGHVLOmdPiwHXhr3951RO7s2mUjz7Ky7MBfzZquI0Je\nUPkFAACn9eqrlvi2aRPdia8kXXCBzfzNypJGjHAdDfKKyi8AADilffus0pmaKi1ZIl1yieuI3Fu+\nXGrRQipZUtq9Wype3HVEOFtUfgEAwCm99JIlvl26kPhmu/hiqWVLq4Z/9ZXraJAXJL8AAOBPfvtN\nGjXKFjo8/7zraEJL7972PGmS2ziQNyS/AADgT15/XUpPl3r0kC680HU0oaVLF3ueOVM6csRtLDh7\nJL8AAOAkf/whjR5t10895TaWUFSpknT55VJamvTFF66jwdki+QUAACcZO1Y6dkxq106Ki3MdTWi6\n5x57/uADt3Hg7DHtAQAA/FdWltSggbR5sx3o6tzZdUShKSXFKsBJSdLatVLjxq4jQm5R+QUAAP81\na5YlvlWqSDfc4Dqa0FW0qHTLLXY9caLbWHB2SH4BAMB/vf22Pd93nxQT4zaWUNe1qz1/9ZXEffTw\nQdsDAACQJO3ZY1vM8ue3BRdlyriOKLSlp1vrw6FD0ooVUrNmriNCblD5BQAAkqQPP7Se386dSXxz\no2BBW3csSf/5j9tYkHtUfgEAgDIzperVrfo7e7Z0zTWuIwoPS5bYxrdKlaSdO2kVCQdUfgEAgKZO\ntcS3bl2pbVvX0YSPSy6RateW9u61w4IIfSS/AABAI0bY87332kpj5I7HI911l11/9JHTUJBLtD0A\nABDldu+2g26FC1sFs1Qp1xGFlz17pGrVLBHes0cqX951RDgTKr8AAES57BW9nTqR+OZF5crS9ddb\n3/T48a6jwV8h+QUAIMp9/rk99+zpNo5w1qePPY8Zw8zfUEfbAwAAUWzXLrtlX6SIlJAgFSvmOqLw\nlJ5uW/ESEqTly6XmzV1HhNOh8gsAQBQbM8aeb7qJxPdcFCwo9ehh1xMmuI0FZ0blFwCAKJWRYVXf\nffukuXOlNm1cRxTefv5ZatVKqlhR+u03KR8lxpDEtwUAgCj1zTeW+NavL119tetowt+ll9qikH37\npB9+cB0NTofkFwCAKJXd8tC/P7N9/cHjkXr3tuuxY93GgtOj7QEAgCi0f78d0GI2rX9t2ybVqmUz\nk/ftk0qWdB0R/heVXwAAotCUKZLXK113HYmvP9Wsab3TaWnSxImuo8GpkPwCABCFspcxZE8ogP/c\nfbc9jx7tNg6cGm0PAABEmY0bpQYNpOLFbZ1xiRKuI4osqak28SEpSVq9WoqLcx0RTkTlFwCAKPPZ\nZ/bcvTuJbyAUKZJz8G3UKLex4M+o/AIAEEW8XutL3bVL+v57qV071xFFpnXrpCZNpPPOs+o6C0RC\nB5VfAACiyPffW+Jbo4bUtq3raCJX48a28CI5mY1voYbkFwCAKJJ9G75vXzaQBdrAgfY8YoTEffbQ\nQdsDAABRYu9e6YIL7Hr3bjuUhcBJS7NZyocO2erjSy91HREkKr8AAESNDz6wnt+bbybxDYbChXPG\nno0Y4TYW5KDyCwBAFMjIkKpVs61jc+bQ7xss27ZJtWtLBQpYtZ2FIu5R+QUAIApMm2aJb4MGtoEM\nwVGzptSpk5SebpV3uEfyCwBAFBgzxp779pU8HrexRJtBg+x55EgpM9NtLKDtAQCAiLd9u1SrFrfe\nXcnKkurXl7ZskaZMsZ5ruEPlFwCACJc9aqtXLxJfF/Llyxl79vbbbmMBlV8AACLasWM2buvwYWnp\nUqlFC9cRRafDh+37cOyYtGGD1LCh64iiF5VfAAAi2CefWOLVsiWJr0slS0q9e9v1e++5jSXaUfkF\nACBCZWVJjRpJGzfait1bbnEdUXRbu1aKi5OKFZN27pTKlHEdUXSi8gsAQISaMcMS3ypVpG7dXEeD\nJk2ka6+11geqv+6Q/AIAEKGGDbPnBx6wSQ9w77HH7Pntt239MYKPtgcAACLQihXSxRdLJUrYeLPY\nWNcRQbKpG82bS6tWSR99JPXp4zqi6EPlFwCACPTqq/bcvz+JbyjxeKwSL9n3yOt1G080ovILAECE\n2bzZlirExNiCi8qVXUeEE6WnS3XqSLt2SV98IXXv7jqi6ELlFwCACPPKK3Z7/W9/I/ENRQUL5vT+\n/utf9r1C8FD5BQAgguzaZauMs7KkTZuk2rVdR4RTSUmRqlWTDh6UFiyQrrjCdUTRg8ovAAAR5PXX\npcxMqWdPEt9QVrSoNGCAXbPyOLio/AIAECF+/12qXl1KTZXWrLG5sghde/bY98vnk3bssHnMCDwq\nvwAARIg33rDEt1MnEt9wULmyLR/xell6EUxUfgEAiAB79tgEgdRUaelSqUUL1xEhNxYutH7f0qWt\nX7tYMdcRRT4qvwAARIChQy3x7daNxDectG4ttWwpJSba0gsEHpVfAADC3ObNUsOGdh0fbxVghI8v\nvrADijVr2oSOmBjXEUU2Kr8AAIS5Z5+1vtG77iLxDUddu9p4um3bpGnTXEcT+Uh+AQAIY2vWSJ99\nZosTnnnGdTTIi/z5pfvvt2vGngUeyS8AAGHK55MefdSu771XqlrVbTzIuzvvlEqUkObOtUNwCByS\nXwAAwtS330qzZ0slS0pDhriOBueiZEnpwQft+tVX3cYS6TjwBgBAGMrIsFm+GzdKw4ZJDz3kOiKc\nqxOXlKxeLcXFuY4oMlH5BQAgDL3/viW+depYywPCX/nyUv/+dk31N3Co/AIAEGYSEy3pTUyUpkyR\nbr7ZdUTwl127bOSZxMrjQKHyCwBAmHnqKUt827aVOnd2HQ386YILclYev/uu62giE5VfAADCyKpV\n0sUXS/nySWvXSg0auI4I/rZ4sXTZZbbyeM8eqXBh1xFFFnaIAECUS0+3gzZ//GGPjAzbMBUTY/NH\nMzOlrCz7B7hcOatM5c/vOuro5PPZPNisLOmBB0h8I1WrVlLz5tKKFTbD+c47XUcUWaj8AkAUSE62\n0+Pr10sbNkg7d0p790r790sHDlgylVsxMdaHWKeOJV/16kmNG0tNm0rFiwfua4Bt/7rxRqlsWWnr\nVum881xHhEAZO1a6+277f2vNGsnjcR1R5CD5BYAIs2+f9MMP0vLlNg0gPl7avv30H58vn50yL1PG\nZo0WLGjV3+yKb/789jFpaZYw79t36t+nUCHp+uul3r2lTp3sbfhPSoqNvvr1V0abRYPjx6UaNez/\nt3nzpKuvdh1R5CD5BYAw5vNJW7ZIP/5oCe+iRadOdAsWtApSkyZSw4ZWtT3/fKlyZUt8CxbM/edM\nS7PK8aZN9oiPt6ry6tUWjySVKiXddpt0111Ss2ZUrfzhoYekf/9batTIbofz4iLyPfus9PzzUq9e\n1v4A/yD5BYAw89tv0qxZ0syZVhFKSDj514sXl1q3li6/3BLd+vWl2rXPLsHNiz17pIkTpU8+sdu0\n2eLibHbpPfeQsOXV/PlW+YuJscNQF1/sOiIEw+7dVv31eOxFLWPP/IPkFwBC3MGDlvzMnSvNmWPV\n1hOVL2/Jbps20pVXWmUwxvFx5tWrpY8+kj79VDp0yN5Xs6b0+us2k5ZKcO6lpdkLiM2brRI4dKjr\niBBMPXtKX3whPfOM9NxzrqOJDCS/ABCCDhyQvvzSKqk//pjTTiBZZbdNG+naa6X27a2FIVSTyePH\npa++slu3v/xi7+vQQXrrLatI468NGSL985/257V6NdXzaDNvns1zrlTJ2o1cv7CNBCS/ABAiduyw\n0/xTplj/bvYEhkKFbOZnmzbSNddILVpIBQq4jPTsZWbaOt4hQ6TDh+0f8Icftkpm0aKuowtdK1ZI\nl15qPwsLFlgrC6KLz2cTVbZskb75xg6T4tyQ/AKAQ4mJNtLoo49sDFm2AgWsstuzp23wipSRVgkJ\n0j/+IY0ebf+o16ghjRghXXed68hCj9crtWxpUzsefFB6803XEcGVV1+VnnjCEt9vvnEdTfgj+QUA\nB1atkt55R5owQUpNtfeVKGEJ7403SjfdZGPHItXSpVK/frahTJIGDZLeeCP8KtqB9P770oABNpEj\nPt5+PhCdfv/dDrt5vXbw7YILXEcU3vK5DgAAokVqqlV4L7nExn+NGWPv69DB+mIPHrSDLX/7W2Qn\nvpL9GSxfbhWtAgWkt9+2lo79+11HFhoOHZKeesquhw0j8Y125ctLXbta+8uHH7qOJvxR+QWAAEtJ\nsfms//qX9btKltz26SPde69Ut67b+FxbskTq0sWG+VetKk2fbjOJo1nfvpbktG0rzZ4dugcaETzZ\nB9+qVLHzAawYzzuSXwAIkLQ0aeRIq25mVzRbtLBb2bfcwkGvE+3fL3XrJv30k1U5P/3UWj+i0fLl\nOYca165lKgaMz2cvlH/91V4gduzoOqLwRdsDAPhZZqa1N9Sta1u59u+Xmje3Ct7SpdLdd5P4/q/z\nz7cZxr16SUeO2CG/557LmXgRLXy+nLXFgweT+CKHx2N/d0jWMoW8o/ILAH6SlmYVy5dflrZts/c1\nbmwzWjt14tZ1bvh8Vil/6im7vv5664MuVsx1ZMExdqwlOOXK2Wir2FjXESGU7Nljh93y55f27pXK\nlnUdUXii8gsAfrBokSW6/fpZ4lu7tq35XbXKpjeQ+OaOx2Mjnb77TipTRpoxw27vpqS4jizwtm2T\nHnjArl9/ncQXf1a5sh2QzciwBTjIG5JfADgHKSnS449LV1xhvXgNGlj1Nz5euuMODqXkVYcO0uLF\nttVqwQKrACcnu44qcLxem/Jx9KjUvbv97ACnkv2zMW6c2zjCGW0PAJBHCxdKd94pbd0q5ctnSfCz\nz7J+1p82bbIT7nv32iGwGTOsIhxpXnlFevJJS/bXro3MrxH+cfSoVKGCvfDets0WxeDsUPkFgLOU\nmmqHka64whLfxo2t7eGll0h8/a1ePXuRUaOGtGyZdNVVkTcLePVq6Zln7HrMGBJfnFnx4nYgVJI+\n+8xtLOGK5BcAzsKSJTa5YfhwKSZGGjLEkrKWLV1HFrlq1LAEuGFDacMGe9Gxa5frqPzj+HG7jZ2R\nIQ0caBv+gL9y++32/MkndjAUZ4e2BwDIpZEjpfvvt/7M+vWtt7d5c9dRRY+EBEsOV62yZRizZoX/\nKLAnnrDpFrVrWwU4WqZa4NxkZNjht4QE+//hootcRxReqPwCwF/weqVHH7XKnNdrc1hXriTxDbZy\n5aS5c6XLLpN277YK8IoVrqPKu59/tq1/+fJZBY/EF7lVoICtO5akSZPcxhKOSH4B4AyOHJFuvll6\n4w1rcxgzRho2TCpSxHVk0alkSen77236w8GDdhguHBPgtDSb55uVJT3yiNSqleuIEG569bLniRNp\nfThbtD0AwGns2iXdcIO0fr1UurRVWNq0cR0VJCk93foeJ02y783330vNmrmOKveGDLHlJ/XqWbtD\n4cKuI0K48XqlihWt9WHdOunCC11HFD6o/ALAKaxbZ9W49eutr3TJEhLfUFKwoM05vfFGKTHRKsAL\nF7qOKncWLZJee82uP/yQxBd5kz+/vTiXpClT3MYSbkh+AeB//PCDdPnlNlv2yiuln36yA0kILQUL\nWuW3Rw8pKckWY8yd6zqqM9u8WbrpJjuwNHiw1Lq164gQzrp1s+cvv3QbR7ih7QEATjB9uh0kSU+3\nTVv/+Q+VuVDn9dpa6bFj7dDYrFl2KC7UJCbaSLwtW6ROnaxaFxPjOiqEs+PHpfLlbfvh5s1SnTqu\nIwoPVH4B4P+bO9cqKenp0n332QB5Et/Qlz+/NHq0rQc+dky67jpp5kzXUZ3s+HFbTLBlixQXJ02Y\nQOKLc1eokNSli11PmOA2lnBC8gsAstaGG2+0JGXAAOntty2pQnjIl8/6Z2+7zSZ0dOwovfOO66iM\nz2dj8hYutNms06bZli7AH3r2tOcvvnAbRzgh+QUQ9VatsmQpJcW2bb37ruTxuI4KZysmxtpUhgyx\nEWKDBtlSksxMt3G9+qq1ZBQpIn39tVSlitt4EFnatbOJJ+vXS/HxrqMJDyS/AKLaxo22NSwpyVoe\nxoyxKiLCU7580gsv2Pa9ggXthczNN1tPpAvTpklPPWUvpsaNYzEK/K9gwZypD9Onu40lXPBXPICo\ntWuX1L59ztrccePow4wUt98uzZljFbHp0+2g2ebNwY1h0yapd29re3jxxZzeTMDfOna05xkz3MYR\nLpj2ACAqHTxo48w2bbJxU7NmSUWLuo4K/vbrr1b53bBBio21FzjZVbJAmjxZuuce6fBhmx4yaRKt\nNAicQ4ekChXsZ2zfPqlsWdcRhTYqvwCizrFjlgBt2iQ1aWK3pkl8I1Pt2tLixVZ1TUqyEWO33mpV\n/0BITbXDbd26WeLbqZP08cckvgisMmWka66x/nZaH/4ayS+AqOLzSXfeKS1dKlWvLn33nVSypOuo\nEEglSljl9dVX7dDZZ5/ZWuEhQ/zbC7xli80XHjnS+jDffFOaOpXJDgiOTp3s+auv3MYRDmh7ABBV\nXnhBeuYZ6bzzbGVx/fquI0Iw7dwpPf64NHGivV2unPSPf9h4u0KF8vZ7+nzSe+9Jjz5qld9atWzj\nVlyc/+IG/srevTZJpEAB6cABXtSfCZVfAFFj6lRLfD0eGwhP4ht9qlWzyu9PP1mVNiFBevBBqUED\na084eDD3v1dyslXZOnWypSipqTZneMUKEl8EX6VKUps2tqSHdcdnRuUXQFTYvl1q1sz6MF9+WXri\nCdcRwTWfT/rmG+nJJ6Vffsl5f61aUosW9oiLs/FksbHSnj3WP7x4sTRvnrRuna1WlqzKNnKk1KuX\nm68FkGzRS9++Utu2Nu0Ep0byCyDiHT9uEx1WrJBuusmqdRxAQrbMTKv6jh9vFeG0tD9/zHnn/bk/\nOH9+G6HWrp3Ur59tbwNcOnzYJj14PHYXIzbWdUShieQXQMQbPFgaPlyqUcMS4FKlXEeEUJWRYVXg\npUvtZ2XNGmn1akuIY2OlSy+1hPeqq+yZKSEINW3aSD/8IH30kdSnj+toQhPJL4CINmWKzVmNibGq\nXosWriNCuPF6rYpWvjx3DBD63n/fDnC2b2/zy/FnJL8AItavv1q/ZnKyNGyY9NBDriMCgMBKTLSF\nF1lZ0v79NtEEJ2PaA4CIlJZmiwaSk23BwYMPuo4IAAKvdGmr+mZl2aZB/BnJL4CI9Oyz0tq1Up06\n1vvG7WoA0aJnT3v+7DO3cYQq2h4ARJwlS2yGqyQtWmQHkwAgWiQlWetDerqt8q5SxXVEoYXKL4CI\nkp4u3XWX3fJ75BESXwDRJzbWlq/4fDbCDycj+QUQUZ57ToqPl+rWlZ5/3nU0AOBG7972PGGC2zhC\nEW0PACLGqlXSxRdbtWP+fOmKK1xHBABupKVZ60Nysm0jvPBC1xGFDiq/ACJCZqZt2crKkgYNIvEF\nEN0KF5Zuu82ux4xxG0uoofILICIMG2Y9vlWrShs2SCVKuI4IANxatky65BJbebxnj1SwoOuIQgOV\nXwBhb8cO6emn7fq990h8AUCyNrDGjW1D4TffuI4mdJD8AghrWVnSPfdIKSlSr17SDTe4jggAQoPH\nY9NvJOmDD9zGEkpoewAQ1oYPlwYPlsqXt6UWFSq4jggAQsehQ1KlSlJGhrR9u1StmuuI3KPyCyBs\nbdokPfGEXY8aReILAP+rTBmpa1ebgvPhh66jCQ0kvwDCktcr9ekjpabaPMvOnV1HBAChacAAe/7g\nA1sEFO1IfgGEpffeszXGlStL77zjOhoACF1XXik1aiTt3y9Nnuw6GvdIfgGEnZ07pSeftOt33rFV\nngCAU/N4pPvus+vhw93GEgo48AYgrGRlSe3bS3PnSt26SZMmuY4IAELfsWNSlSrS4cPS0qVSixau\nI3KHyi+AsPLuu5b4lisnjRjhOhoACA/Fikl9+9r1sGFuY3GNyi+AsLFxo9S0qe2s//JLO8EMAMid\n3bulGjXsescOqwRHIyq/AMLC8eO2pz4tTbrzThJfADhbVatK3bvbtJxoPihM5RdAWHjkEbtVV7Om\ntHIlh9wAIC9+/llq1cr+Dt25Mzr/LqXyCyDkzZhhiW/+/NL48dH5lzUA+EPLltJVV0lJSdFb/aXy\nCyCk7dsnxcVJCQnSyy/nbHQDAOTNnDlSu3ZS6dK28vi881xHFFxUfgGELK9XuuMOS3yvuUZ67DHX\nEQFA+GvbVrr8cikxUXrzTdfRBB+VXwAh67nnpKFDbazZmjVSxYquIwKAyLBggbU/nHeetG2bVKaM\n64iCh8ovgJA0c6Ylvx6PNG4ciS8A+NOVV9rCoORk6fXXXUcTXFR+AYScXbukZs2kQ4es8vvss64j\nAoDIs2SJHYArVszm/pYt6zqi4KDyCyCkpKXZHMpDh6TrrpOeftp1RAAQmS69VLr+elt9/MYbrqMJ\nHiq/AEJK//7SBx9I1apJK1ZEVx8aAATb0qWWBBcrZr2/5cu7jijwqPwCCBmjRlniW7iwNHkyiS8A\nBNoll0idOln199VXXUcTHFR+AYSEH3+0cWYZGdJHH0l9+riOCACiw6pVUvPmUkyMtGmTVKOG64gC\ni8ovAOd27pS6dbPE96GHSHwBIJiaNpV697a/g4cOdR1N4FH5BeBUSop02WU2x7d9e+nbb636AAAI\nnm3bpAYNpPR0afVq26wZqaj8AnDG55PuuccS3zp1pIkTSXwBwIWaNaV777XrZ55xG0ugUfkF4MwL\nL9hfssWL27zJhg1dRwQA0Wv/fqlWLbsj9/PPNgUiElH5BeDEJ59Y4uvxSOPHk/gCgGvnny898IBd\nP/KI3Z2LRFR+AQTd7NlSx452uGL4cGnQINcRAQAkKSnJ2tASEqxIcccdriPyPyq/AIJq6VLp5pst\n8X34YRLyZov4AAAOrElEQVRfAAglsbHSa6/Z9UMPSb//7jaeQKDyCyBotmyRWrWy1cW9e0sffyzl\n4yU4AIQUn0/q0MHu0t12mzRunOuI/IvkF0BQ7NoltWlj43Q6dpS++koqUMB1VACAU9m2TWrUSEpL\nkxYskK64wnVE/kPNBUDAJSRYFWHbNunii22kGYkvAISumjWlxx+36/vvlzIz3cbjTyS/AALq4EGp\nbVtbmdmkifT99zbaDAAQ2h5/XKpeXVq7VhoxwnU0/kPbA4CAOXbMWh2WLbPNQXPn2igdAEB4mDpV\n6txZKlnSzm2ULes6onNH5RdAQBw/LvXoYYlvjRrSnDkkvgAQbm680VbPHz4sPfus62j8g8ovAL/L\nyJC6d7eKQdmy0sKFUr16rqMCAOTFhg3WtubxSOvXS/Xru47o3FD5BeBXPp80cKAlvqVK2agcEl8A\nCF+NGkl9+0per21+C3dUfgH41YsvSk8/LRUpIs2bF7m74QEgmhw4INWtKyUnS19/Ld10k+uI8o7K\nLwC/eeMNS3w9HunTT0l8ASBSVKggvfCCXT/4oJSS4jaec0HyC8Av3nxTevRRux49Wura1W08AAD/\nuvdeqXFjaft2acgQ19HkHW0PAM7ZBx9I/fvb9ahRUr9+buMBAATGihV2Vy8rS/r5Z+mSS1xHdPao\n/AI4J5MmSX//u10PH07iCwCRrHlzO/Tm80n33WeH4MINlV8AeTZvnnTddVJ6uh10+8c/XEcEAAi0\no0dt3NmePdLIkTkFkHBB8gsgT9aula64wk7+3n+/VX09HtdRAQCC4fPPpV69bKTlpk1SuXKuI8o9\n2h4AnLUdO6zim5xsyyzeeovEFwCiSY8etvntjz/C764flV8AZ2XfPunqq6XNm+15xgypcGHXUQEA\ngm3jRpv+4PVKy5dLzZq5jih3qPwCyLX9+6W2bS3xjYuTvvqKxBcAolX9+tKgQXb4bfBgew4HVH4B\n5Mrvv1ulNz7eXunPnSuVLes6KgCAS0lJUp06UkKC9Nln1gcc6qj8AvhLiYnW2xUfbzve58wh8QUA\nSLGxNu1Hkh57TEpNdRtPbpD8Ajij5GQ73LZ2rVSvniW+4XSqFwAQWPfcY61wu3ZJw4a5juav0fYA\n4LRSU6Xrr5fmz5dq1JAWLJCqVHEdFQAg1MybZ2dCihWzcyGVKrmO6PSo/AI4pcxM6dZbLfGtWFGa\nPZvEFwBwam3aSF26SMeO2ez3UEblF8CfZGVJAwdKo0bZAPMff7ReXwAATue336SGDaUjR6TJky0Z\nDkVUfgGc5MTEt1AhaepUEl8AwF+rUkV6+WW7vu8+mwQRikh+AfyX12sHF0aNsvm9X38tXX6566gA\nAOFiwADp0kttIdKQIa6jOTXaHgBIssS3Xz9p7FipaFFp2jTr4QIA4GysXWvb3rKypMWLLRkOJVR+\nAcjrle68MyfxnTGDxBcAkDdNmkiPPmob3/r3lzIyXEd0MpJfIMplZkp/+5v06adS8eLSt99KV17p\nOioAQDh75hkbkbl2rfTmm66jORltD0AUy058J0ywxHfGDHp8AQD+MXOmLUkqWtQ2hF5wgeuIDJVf\nIEodPizddFNO4vvddyS+AAD/ufZaqUcPKSVFevBB19HkoPILRKEdO+zV+KZNUpkyNs7ssstcRwUA\niDS//SY1aCAdPWptdddf7zoiKr9A1Fm+XGrZ0hLfCy+Uli0j8QUABEaVKtLQoXY9eLCUmuo0HEkk\nv0BUmT5duuoq6cAB28G+cKEdSAAAIFAGDbLNb1u2SE895Toa2h5wCmlpUmKidPCglJCQ80hMtHEl\nGRn2MceOScnJ1suTnm59o0WLSh6PPYoVk0qWlGJj7blKFaliRWt4L1vWPgbBM368HW7zeqU+fWyR\nRcGCrqMCAESDpUvtLqPXK82d63acJslvFMrMtB6crVvtVdj27dLmzdKvv0rbtlkyG2iFCkmVKkmV\nK0vVqknVq0t16tht+Pr1LXGGf/h80muvSU88YW8/8YT00ku8+AAABNfQodJzz0lVq9oItJIl3cRB\n8hvhjh2TfvlFWrlSWr1aWrFCWrPGKrWnU6CAHYIqU8YqtOXKSeXL29sFCtijUCFLUM87zyq+MTHW\nzJ7dy+P1WhJ9+LDt9k5MtIR73z5p5057/+l4PNYc36KFzZtt29aSY5y95GTb2vb55/bn+sYbduKW\nxBcAEGwZGTZVaOlSqXdv6T//cRMHyW8EyciwJHf+fPvBWrfOKrun+g5XqiTVrGnV1po1pdq17bp2\nbUtoA50cHTsm7dljj507reK8caO0YYNVoTMzT/746tWldu2kDh3sVknZsoGNLxKsWCHdeqv9DBQv\nbtvbund3HRUAIJpt2SLFxVmxbNYsqX374MdA8hvGUlPtwNIPP0g//2z7s//3FGVMjFS3rtS0qXTR\nRVLz5rZvOzbWSci5kpZm1eklS6R58+zrO7FS7PHY19Cpk9S5s31dVDJz+HzSe+9JDz1kFf7GjaVJ\nk+znAAAA1155RXrySSu6rVtnd5ODieQ3jPh89opp1ix7zJ7952S3bl07zd+6tb2yatAg+D9U/ub1\nSqtWSd9/b1/zokXS8eM5v16tmnTjjVKXLtIVV1hbRrRKSrI2hy++sLcHDpSGDZMKF3YbFwAA2dLT\nrXAVH29J8EsvBffzk/yGuCNHpDlzLNmdOdPaA0500UV2y6BVK+ujKVfOTZzBlJpqFeGpU6Wvv5b2\n78/5tVKlbGtZjx725xJN0wyWL5d69rQDjCVKSKNH29sAAISaRYusYOXxSAsWWNEuWEh+Q9COHbZq\ndto0q3aeeDitdGlbF9i2rXTDDTY6LJplZVl/89Sp0pQp1jecrXRpqVs36bbb7OBcvgidar1zpzRk\niDRunN0daNbMxprVq+c6MgAATu/JJ60Folo1O5QfrOkPJL8hwOeT1q+3BG7yZDu0ls3jsW1c111n\nh71atJDy53cXa6iLj7f+1s8/tz/TbFWr2uGv3r2tBzYSHD1qt4refNP6pAsUsEHi//wnbQ4AgNCX\nnm4V3+XLrXVx0qTgFKpIfh1JS7My//TplvTu2JHza8WK5SS7nTtLFSo4CzOsrV9vFdDx4606mu3C\nCy0JvvVWW7gRbrxeGw/z9NM2Pk6SbrlFevllRsIBAMLLr7/aYfzk5OD1/5L8BtG2bdbKMHOmTTA4\ncZlE+fJSx45S167Wq0rlzn+ysqy3aPx4aeJE6Y8/cn6tdWvri+3e3ca/hbK0NOnLLy3J3bDB3te8\nufTOO3Z3AACAcDRzprVyer3Sxx/bNtJAIvkNoJQU6ccfbULBzJk2zuNEcXHS9dfbAa1LL43cntRQ\nkp5u/dSffip9840llJK1l1x2mY1Pa9/eRsOFyvcjPl4aOdKqvdmJe7Vq0gsvSLffHjpxAgCQV++/\nLw0YYMW/xYvtQH+gkPz6kc9n82lnzrTHokUnH1YrUcKS3Y4draUh2g+ruXbkiFXiP//cEuLsRFiy\nVpMOHXK+V6VLBze2Y8dsXNno0fZzlK1ZM+nvf5f69An/EXYAAJyob1/pww+tJXHJEun88wPzeUh+\nz0FWlt1+XrjQtqrNn3/y2C2Px25Lt2snXXONjfQgYQlNR45YApz9wiW7l1ayyurFF1trwUUX2Vi5\nevX8u1gjI8NOui5aZD9PM2fagTbJtrPdeqvN7G3a1H+fEwCAUJKWZltcf/7ZDvjPny8VKeL/z0Py\nexa8Xkt2582z2buLFkmJiSd/TKVKdljt2mst4S1Txk2syDufT/rlF2nGDOnbby0Zzcg4+WPKlbN+\n4ebN7VGhgn2vK1Y8/WzhrCxLaJOSpEOHrMl/2TL7n3zZsj8vLGnVSrrnHqlXL0uAAQCIdL//bq2g\nO3bYuNKJE/0/5Yrk9zQyMy0BWrnSHmvWSCtW2O3oE1WpYhXdK6+0R4MGrNqNNEeOWP/RypU2juWn\nn6R9+079sR6PJcJly9rUjowMS3aPHLGE1+s9/eepW9f6jlu3tjnONWsG5usBACCUbdhg/xYmJUn3\n3iu9/bZ/z7dEffKblWW3uFeutD/srVutIrdixcnTGLJVq2ab1Nq1szXC1auT7Eab7DXTy5dbUhwf\nLx08aI99++xn6nSKFZNiY61KXLWqtTG0bGmPsmWD9zUAABDK5s2zO+np6VL//tJ77/kvAY6K5Nfn\nk3btkjZtsjJ69mPLFqvunirJlaQaNazXs2lT6/Vs3txGkgGnk5EhHThgUxmOHpViYmxjTfHidmiO\nnm8AAHJn1izbd5CWZge9R4+2f1fP1RmT3w4drBpasqRVqooXt0fRovbI7nEsXdqSwuxfL1bMRlUU\nLWrX/h7F5PNZwnrkiLUhHDpkPSKHDtlj7157OynJlhts3ZpzeOhUype3rV9xcXbruUYNS3ZJdAEA\nANyZM8dGwqak2C6E8ePPvZB0xuS3SZM/z6bNiyJFLBkuUsQOAxUsaIEXKmTX+fNb64DHY7eMMzNz\nHunp0vHj9khLs0NBKSlnvrV8KmXLSo0aWWJbvbo916ol1a/PoTQAAIBQtXixjYpNSrK208mTbXxs\nXp0x+c0+qJOYmHMb9+hRS0CPHrUex/37rdqakGBV2Oxq7PHjlqT+7wExfylSJKfKXKpUzmn7MmVs\nLlzFitZbWamSVXNLlQpMHAAAAAisNWtsktaBAzYG7dtv835WJuA9v16vJctpaTkV3PR0e6Sl2bPX\na60MPp+1SMTE5DxOrBIXLpzTTlGgQCCjBgAAQCjZutW2sG7fbvP2v/vO7uafrag48AYAAIDwt2+f\nVYDXrbMzaaNH2zzgs+Hno2gAAABAYFSsaJvfOnWSDh+WuneX+vU7uzZbkl8AAACEjVKlpKlTpeHD\nrS129GipWTObv58bJL8AAAAIKx6PNGiQtHSpTfPavFlq1Up68UWbFnbG/5aeXwAAAISrtDTpySel\nf//b3m7dWlq48PQfT/ILAACAqEHbAwAAAKIGyS8AAACiBskvAAAAogbJLwAAAKIGyS8AAACiBskv\nAAAAosb/A+uIHF8XikOwAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pf_internal.plot_random_pd()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But we have already stated that we can use Monte Carlo methods to compute any integral. The PDF is computed with an integral, hence we can compute the PDF of this curve using Monte Carlo. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Particle Filter\n", + "\n", + "All of this brings us to the particle filter. Consider tracking a robot or a car in an urban environment. For consistency I will use the robot localization problem from the ends of the EKF and UKF chapters. In this problem we tracked a robot that had a sensor that could detect the range and bearing to landmarks. \n", + "\n", + "This is a book on Bayesian filters, and I hope by now you expect us to use the standard Bayesian algorithm of update and predict cycles. We will. \n", + "\n", + "Taking insight from the discussion above we start by creating several thousand **particles**. Each particle has a position that represents a possible belief of where the robot is in the scene, and perhaps a heading and velocity. Suppose that when we initialize the filter we have no knowledge of the location of the robot. We would want to scatter the particles uniformly over the entire scene. If there was a large clump of particles near a specific location that would imply that we were more certain that the robot is there. If you think of all of the particles representing a probability distribution, locations where there are more particles represent a higher belief, and locations with fewer particles represents a lower belief.\n", + "\n", + "Think back to the *Discrete Bayes* chapter. In that chapter we modeled positions in a hallway as discrete and uniformly spaced. This is very similar except the particles are randomly distributed.\n", + "\n", + "Each particle needs a weight - a probability that it represents the true position of the robot. At initialization we have no reason to favor one particle over another, so we would typically assign a weight of $1/n$, where $n$ is the number of particles. We did the same thing in the discrete Bayes chapter. When we initialized the filter we assigned a probability of 1/N to each hallway position. The reason for $1/n$ is simple - the sum of all probabilities must equal one, and of course $\\sum\\limits_{i=1}^n \\frac{1}{n} = 1$.\n", + "\n", + "We will be operating on many particles so it is imperitive that we are as efficient in our programming as possible. That means storing the particles in an NumPy `array` and making full use of its vectorization capabilities.\n", + "\n", + "To track our robot we need to maintain states for x, y, and heading. We will store `N` particles in a `(N, 3)` shaped array. The three columns contain x, y, and heading, in that order.\n", + "\n", + "In this problem the robot can move on a plane of some arbitrary dimension, with the lower right corner at (0,0).\n", + "Here is a partial implementation of this problem. The particles are initially randomly distributed over the space, and are given a random heading. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from numpy.random import uniform\n", + "\n", + "class ParticleFilter(object):\n", + "\n", + " def __init__(self, N, x_dim, y_dim):\n", + " self.particles = np.zeros((N, 3)) # x, y, heading\n", + " self.N = N\n", + " self.x_dim = x_dim\n", + " self.y_dim = y_dim\n", + "\n", + " # assign reasonable default.\n", + " self.weights = np.array([1./N] * N)\n", + " self.particles[:, 0] = uniform(0, x_range, size=N)\n", + " self.particles[:, 1] = uniform(0, y_range, size=N)\n", + " self.particles[:, 2] = uniform(0, 2*np.pi, size=N)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Predict Step\n", + "\n", + "The predict step in the Bayes algorithm predicts the movement of the robot and to update our belief in the robot's position by that movement. How would we do that with particles? Each particle represents a possible position for the robot. Suppose we send a command to the robot move 0.1 m at an angle of 1.3 radians. We would want to update each particle by moving it using the same command. If we did that exactly we would soon run into a problem - it is very unlikely that any given particle exactly represents the robot's position. So, we will add some noise to the particle movement proportional to the noise in the real robot's movement mechanism. If it is highly likely to overshoot and very unlikely to undershoot then we will do the same to the particles - make most overshoot, and a few undershoot. If you do not model the uncertainty in the system the particle filter will not correctly model the probability distribution of our belief in the robot's position. \n", + "\n", + "If this wasn't a robot, but something you are tracking passively, then you would want to include things like velocity in the particle state and use that estimate to make the prediction. When using particle filters I try to minimize the dimensionality of the problem; if I add 2 random variables I will probably have to increase the number of particles to ensure I have enough samples to correctly sample from the probability distribution of each. This can quickly become intractable. Thus I've excluded velocity from this problem.\n", + "\n", + "I cannot easily modify a class definition in Jupyter Notebook, so I will show you the method in text. The entire class is in pf_internal, and we will be importing when we run the filter. \n", + "\n", + " def predict(self, u, std):\n", + " \"\"\" move according to control input u with noise std\"\"\"\n", + "\n", + " self.particles[:, 0:2] += u + randn(self.N, 2) * std" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Update Step\n", + "\n", + "Next we get a set of measurements - one for each landmark currently in view. How should these measurements be used to alter our probability distribution as modeled by the particles?\n", + "\n", + "Think back to the *Discrete Bayes* chapter. In that chapter we modeled positions in a hallway as discrete and uniformly spaced. We assigned a probability to each position. When a new measurement came in we multiplied the current probability of that position by the probability that the measurement matched that location. We implemented that like this:\n", + "\n", + " def update(map_, belief, z, prob_correct):\n", + " scale = prob_correct / (1. - prob_correct)\n", + " for i, val in enumerate(map_):\n", + " if val == z:\n", + " belief[i] *= scale\n", + " normalize(belief)\n", + "\n", + "We will want to do the same thing with our particles. Each particle has a position. We can also assign it a weight or probability based on how well it matches the measurement. We will want to multiply that new probability into the current weight of the particle. If we then normalize the weights of the particles those that are closest to the robot will generally have a higher weight than ones far from the robot.\n", + "\n", + "\n", + "\n", + "And that is the general framework for the particle filter. The particles and their weights represent the probability distribution of our belief. This algorithm works well for multiple objects; clusters of particles will group around each object. We can compute the position of the robot by computing the mean of the point positions multiplied by their weights. This is more complicated if we have multiple objects as we have to run some sort of clustering algorithm to determine which particles belong to which object, but that isn't hard. \n", + "\n", + "This is a complete implementation of a particle filter using the Bayesian framework that we have used throughout the book. If you were to implement it you would find that it rarely performs well. I'd rather get to a working example quickly, so I will skip implementing it and just tell you about the problems. If you do a historical survey of particle filters you will see that it took some time to discover and fix all of these issues. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Particle Resampling\n", + "\n", + "\n", + "The first problem we face is called the **degeneracy problem**. We initialize a large area with uniformly distributed particles. The number of particles near the robot are likely to be low. As we perform the algorithm above any particle modestly far from the robot will quickly acquire an extremely low weight, and only one or two particles near the robot with has an appreciable weight. The filter depends on many hundreds to thousands of particles to depict the probability distribution. Only one or two near the robot will cause it to fail.\n", + "\n", + "This problem is solved by some form of **resampling** of the particles. Suppose we notice that the number of particles that have relatively high weights is small. We want to " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## some title\n", + "\n", + "The particle filter is easy to understand, and I could explain the entire algorithm to you now. But I want you to understand it within the context of the other Bayesian filters in this book. When you design a filter you first have to choose which filter to use, and understanding the relative strengths and weaknesses of each is important.\n", + "\n", + "So let's start with a chart we first saw in the *Nonlinear Filtering* chapter. We started with a Gaussian with a mean of 0 and a variance of 1 and created 500,000 random points fitting that distribution. We passed each of those points through a nonlinear function, and plotted the result." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\ntra2UlRUlHTw4EG5IzVL7b+v+/+NzZgxQ+5ozaLv/4ogCNLixYvljtYs06dPlwICAiRbW1vJ09NT\nGjlypLRz5065YxlUTEyMNGfOHLljEBFRKzCLecSJiIiIiEyN0cyaQkRERERkSViIExERERHJgIU4\nEREREZEMWIgTEREREcmAhTgRERERkQxYiBMRERERyYCFOBERERGRDFiIExERERHJgIU4EREREZEM\nWIgTEREREcmAhTgRERERkQxYiBMRERERyYCFOBERERGRDFiIExERERHJgIU4EREREZEMWIgTERER\nEcmAhTgRERERkQxYiBMRERERyYCFOBERERGRDFiIExERERHJgIU4EREREZEMWIgTEREREcmAhTgR\nERERkQxYiJNR+Ne//oWwsDA4ODhAFEUsXrxY7khNFhcXB1EUsW7dOrmjEBERkQlgIU6y+/777zF3\n7lyoVCrMnTsXixYtwtChQ+WOpaO20K7rQ4IgCJofIiKSlyiKCAoKkjVDQ+8bRFZyByDasmULAOA/\n//kPoqOjZU7TsLoK7YkTJ6Jfv35o165dKyciIiJ9jKVjxFhykPFhIU6yy87OBgB4eXnJnKRxJEnS\n2+7i4gIXF5dWTkNERMaurvcNIg5NIdksWrQIoihi3759AICgoCCIoghRFJGZmQlRFDFjxgy9x06f\nPh2iKOLq1auatoyMDIiiiKFDh+LWrVuYOXMmvL29YWdnh27duiEuLq7OLLt27cK4cePg5eUFOzs7\n+Pn5YcyYMZre+unTp+O5554DACxevFiTUxRFHDhwAED9Y8STk5Px2GOPwcvLC7a2tvD398cLL7yA\njIyMOv9e1q1bh/j4eMTExMDFxQVKpRJjxozBhQsXGvPXS0Rk9H766ScMHToUSqUS9vb2CA0NxcKF\nC1FeXq61X2BgYJ3DTO5/7d23bx9E8W55U/u+UPtz73tK7dCV4uJizJo1Cz4+PrC3t0e3bt2watUq\nneepfdy6hpnExMRonhdo3PsGEXvESTZDhw6FIAiIi4tDZmYmXnvtNbi6umrtU9/XeXVtKyoqwoAB\nA2Bra4vHHnsMd+7cwfr16/Hcc89BFEVMmzZNa/+FCxdiyZIlcHJywoQJE+Dv74+cnBwkJiZizZo1\nGDNmDCZOnIji4mJs3rwZMTExiImJ0RwfGBhYb65t27Zh4sSJkCQJkyZNQseOHZGSkoI1a9bg559/\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from numpy.random import normal\n", + "from nonlinear_plots import plot_nonlinear_func\n", + "\n", + "gaussian = (1., 1.)\n", + "data = normal(loc=gaussian[0], scale=gaussian[1], size=500000)\n", + "\n", + "def g(x):\n", + " return .2*x**3 - .8*x**2\n", + "\n", + "with book_format.figsize(y=5):\n", + " plot_nonlinear_func(data, g, gaussian)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The EKF deals with this problem by linearizing the function at $x$ by evaluating the derivative at x: $f'(x)$. This computes the slope of the function at $x$, which is a linear function. If the function is smooth and 'fairly' linear locally the EKF produces a reasonable but suboptimal result. We can see from the chart above how much error is incurred with this linearization. \n", + "\n", + "The UKF handles larger nonlinearities by taking $2n+1$ samples near $x$. These samples are passed through the function, and the mean and standard deviation of the transformed points are used as the new estimate for the system state. In general this provides better estimates than the EKF at the cost of more computation. \n", + "\n", + "The EKF represents the nonlinearity of the function with one point, and the UKF represents it with $2n+1$ points. This allows them to handle the nonlinearity of the function, but in the end both assume a Gaussian distribution by taking the mean and standard deviation of the sampled points. \n", + "\n", + "It has probably occurred to you that the code that I used to graph the solution above constitutes an accurate solution, and it is. In other words, if we take a *large enough* sample from any probability distribution and pass them through our function the result will be an accurate representation of the new mean and probability distribution. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Monte Carlo Method\n", + "\n", + "All of this brings us to the particle filter. Consider tracking a robot or a car in an urban environment. For consistency I will use the robot localization problem from the ends of the EKF and UKF chapters. In this problem we tracked a robot that had a sensor that could detect the range and bearing to landmarks. \n", + "\n", + "Taking insight from the discussion above we start by creating a several thousand **particles**. Each particle has a position that represents a possible belief of where the robot is in the scene. Suppose that when we initialize the filter we have no knowledge of the location of the robot. We would want to scatter the particles uniformly over the entire scene. If there was a large clump of particles near a specific location that would imply that we were more certain that the robot is there. If you think of all of the particles representing a probability distribution, locations where there are more particles represent a higher belief, and locations with fewer particles represents a lower belief.\n", + "\n", + "Next we get a set of measurements - one for each landmark currently in view. How should these measurements be used to alter our probability distribution as modeled by the particles?\n", + "\n", + "Think back to the *Discrete Bayes* chapter. In that chapter we modeled positions in a hallway as discrete and uniformly spaced. We assigned a probability to each position. When a new measurement came in we multiplied the current probability of that position by the probability that the measurement matched that location. We implemented that like this:\n", + "\n", + " def update(map_, belief, z, prob_correct):\n", + " scale = prob_correct / (1. - prob_correct)\n", + " for i, val in enumerate(map_):\n", + " if val == z:\n", + " belief[i] *= scale\n", + " normalize(belief)\n", + "\n", + "We will want to do the same thing with our particles. Each particle has a position. We can also assign it a weight or probability. We can compute the probability of the measurements matching that \n", + "\n", + "Here is a function that creates a particle in a square with a random velocity. We ignore units, trusting that the caller will use self consistant units such as MKS. Each particle is represented as a list with the structure `[x_position, y_position, speed, direction]`" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from random import uniform\n", + "from math import pi\n", + "def make_particle(xrange=(0, 100), yrange=(0, 100), max_velocity=2.):\n", + " return [uniform(*xrange), uniform(*yrange), \n", + " uniform(0, max_velocity), uniform(0, 2*pi)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we create 1000 random plots and plot them." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "particles = np.asarray([make_particle((0, 100), (0, 100), 2) for i in range(1000)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can write code that moves the particle over a period of time." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move(particles, t=1.):\n", + " vx = particles[:, 2]*np.cos(particles[:, 3])\n", + " vy = particles[:, 2]*np.sin(particles[:, 3])\n", + " particles[:, 0] = (particles[:, 0] + vx*t) % 100\n", + " particles[:, 1] = (particles[:, 1] + vy*t) % 100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So let's plot the particles, move them, and plot them again" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nMv321VefG82Nl16ips3XQjenj47s5hMWtVqNXLkydBv/6Ed9Uq/PkKOjzLjPpphCBoyeMgE/Zx8+\nzKThBrq1gy0HbsP4/rC6ekJc1Ov8/ICsrZ2SDz54gbzxxgXnPioKOr2LGROm73/+89yr7nPZE2Ig\nRPuK2v+9wpY1FwmbU4fJyVAs0+UkL5ab5+r3zqHTMDu1Y9zYYqozMY/lykpP237VibwMJ75QcJ0H\nMtcbS7x/6VKfbmy06YMHz2i/33eek75csy5hIqZZTmIiZR0XGlWQvYib6VmWSVOn+UCzeULr9Ywu\nL5/Q5eXh/3cJe4Cys6QSfuTL0k5pcQ828G2r14eZlqB93QdC8J4qo5JhD77ib00mfCzSB8Xt6m4s\ny9opfoPNMSzrq/O8kCgNG8vX7/fp1tb42+v7+21lX7vMSdOxNK1LLN8k5CYWUtVxMVBW2fl5iH0+\n25fuzrJs9CKcaYw+Fi5xsNB/Q0YTFq+fggEDMza+Dzmq35rOFdY2Mf+5ST5/DHzyHiiMBqovlTli\ni8qRX5/xtz6tmT4nC7OYielubE9+vk6LPk/MLu1zLcs2nhmKx/NBfvMcTsS/sdEOarGB5PQ1HpC8\nLLZ5Sn6LR8qyy+agqJe2t4eGAR8kBgOeSLI42h//+Jn3C1O+dSK2z1IFlsCZ9JtM99nmf4fubWC8\nrFj45D17e/IUq5RWx1o8Jb+/gmxAfQx0VSYLD0g5+Ca/PvvNlwtNNU9c83eq5h90ETI0+cW20Qay\n8J2U8v2mquNiIFXZVXNQRoJ8kBgMRCtqvZ5NZORJZW7zYLr88LBHHz8ePoDEv8qYogdUrBPyhvqu\n32Z/Y3NN9viPL2+EC++5e/dsjl6/3pWG0rjWlRoqR36Z64l3D2MfpQhF6KoyWXRw2VRCk2lsWbrf\nyf7Ou7dMX25i8kPWfFbu669n9P33zcIefMPFsi1CnCubm226ttYNsmnZIlUdFwOpyq5an1j3d6PR\ncSJ4Moh7z/37z6zIUhHuZB9hSEUaeVqt4aMly8snwcKnXAhmq9WbIJmvv56BWTZs+tGl7037LkZf\nx0DlyG+zibsQoANTQlBMlGlKGOyiYXW2Wj1tntRUkWoYRSzyC8VB6/oDa816/fWMbmy06aNHxzTL\nsqgbZZ7no6eJfVr2QxERH0hVx8VAqrLrwoPEOwy84cMHwdMhyzLaaHRoo9GhBwddZVtjWaQxgA62\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_particles(particles, x_range=(0, 100), y_range=(0, 100)):\n", + " with book_format.figsize(4,4):\n", + " plt.scatter(particles[:, 0], particles[:, 1])\n", + " plt.axis('equal')\n", + " plt.xlim(*x_range)\n", + " plt.ylim(*y_range)\n", + " plt.gca().get_xaxis().set_ticks([])\n", + " plt.gca().get_yaxis().set_ticks([])\n", + "\n", + "plt.subplot(121)\n", + "plot_particles(particles)\n", + "move(particles, t=10)\n", + "plt.subplot(122)\n", + "plot_particles(particles)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is difficult to visualize the movement from two static images, so here is an animation.\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So we have a random distribution of particles, how do we use them to track objects? Think of these particles as *beliefs*. We want each particle to represent a possible belief for the movement of a tracked object. Each particle only contains a position and velocity, so we need a separate data structure to contain the probability that the particle is tracking an object. Much like we did in the **Discrete Bayes** chapter we can use a NumPy array to store the probabilities. \n", + "\n", + "We have not yet incorported any measurements, so if you recall from the Bayesian math sections we would call this our *prior*, as it contains the probability *prior* to adding a measurement. With no measurements we have no reason to believe any particular particle is more likely to be correct than any other particle, so it is reasonable to assign the same probability to each. We want a *probability distribution*, which means that the sum of the probabilities of all the particles must be one. Here is some code to do that." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "N=len(particles)\n", + "p = np.array([1/N]*N)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have 1,000 particles so the probability for each particle is 0.001 (1/1000). \n", + "\n", + "Now how do we incorporate measurements? Say we run our computer vision software on the first video frame and it reports that there is a blob at (43.2, 21.8). We can evaluate how likely each particle is taking that measurement into account. I don't want to get bogged down in the math at the moment, but recall that we would write that as $P(particle|blob)$. I bring that up to emphasize that this is a *Bayesian* filter- we incorporate new information to adjust our current beliefs. \n", + "\n", + "We don't yet know how to compute the new probabilities for the particles, but we can reason that a particle at (0,0), far from the measurement, would have a very low probability of representing the object, whereas a particle at (42.9, 21.9) should have a relatively high probability of representing the object." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.88266670220060" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sympy import *\n", + "from sympy.abc import x\n", + "\n", + "\n", + "a = cos(4*(x/2 + 0.7)) * sin(0.3*x) - 1.6*x\n", + "da = diff(a,x)\n", + "da.subs(x, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "objects in a two or three dimension space. via computer vision, radar, or other sensing technique. There might be zero, one, or multiple objects in view at once. We may or may not be able to mathematically describe the behavior of the tracked objects. If we are tracking passenger jets with radar we can model the behavior because large aircraft do not change direction or speed rapidly. If we are tracking people in a crowd, a ball on a football field, or fighter jets our prediction model will range from difficult to impossible. Finally, our measurements are likely to have very strong outliers. A bird flying in front of a camera tracking a sporting event is quite likely to fool the computer vision by creating spurious detections - the bird will be misidentified as a player or the ball. In radar design the designer has to account for noise - either domestic noise or hostile jamming in the case of war environments.\n", + "\n", + "So our problem is multi-modal, has a non-Gaussian to nonexistent process model, and has non-Gaussian measurements. Finally, both the measurements and behavior of the tracked objects are likely to be nonlinear.\n", + "\n", + "None of the filters that we have learned so far are particularly good at solving this problem. \n", + "The Kalman filter provides optimal output if and only if the data and object behavior is Gaussian and linear. The extended Kalman filter (EKF) and unscented Kalman filter (UKF) \n", + "\n", + "The discrete Bayes filter is multimodal and can handle nonlinear \n", + "\n", + "The filters that we have encountered so far is this book are very powerful, but they have significant limitations and difficulties. The discrete Bayes filter can track multiple objects at once because it is multi-modal, but it does not model the behavior of the tracked objects and it requires vast amounts of compute power and memory to represent large problems. The linear Kalman filter assumes that both the model and the measurements are Gaussian, and that both are linear. Of course, the world is not linear and data is rarely truly Gaussian. If these things are true then the Kalman filter produces an optimal solution, but in practice this is rare. Nonlinear Kalman filters, such as the unscented Kalman filter and extended Kalman filter deal with the nonlinearities in the process model and measurements by linearizing the problem. This allows the Kalman filter to work in nonlinear domains, but the linearization introduces inaccuracies that, in the worst case, causes the filter to diverge. There are filters which we haven't described in this book that are designed to handle data which is not fully Gaussian, but they again involve compromises.\n", + "\n", + "Particle filtering is a technique that largely transcends these problems. As we will see it is still non-optimal, but " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How the Particle Filter Works" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assume that we are trying to track objects in a two dimensional space. The particle filter starts by creating a random set of *particles*. Each particle is assigned a random location and velocity. Each particle represents one possible " + ] + } + ], + "metadata": { + "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.4.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/code/book_plots.py b/code/book_plots.py index 05bf66b..3e0646d 100644 --- a/code/book_plots.py +++ b/code/book_plots.py @@ -102,6 +102,62 @@ def plot_filter(xs, ys=None, c='#013afe', label='Filter', vars=None, **kwargs): facecolor='yellow', alpha=0.2) + + +def _blob(x, y, area, colour): + """ + Draws a square-shaped blob with the given area (< 1) at + the given coordinates. + """ + hs = np.sqrt(area) / 2 + xcorners = np.array([x - hs, x + hs, x + hs, x - hs]) + ycorners = np.array([y - hs, y - hs, y + hs, y + hs]) + plt.fill(xcorners, ycorners, colour, edgecolor=colour) + +def hinton(W, maxweight=None): + """ + Draws a Hinton diagram for visualizing a weight matrix. + Temporarily disables matplotlib interactive mode if it is on, + otherwise this takes forever. + """ + reenable = False + if plt.isinteractive(): + plt.ioff() + + plt.clf() + height, width = W.shape + if not maxweight: + maxweight = 2**np.ceil(np.log(np.max(np.abs(W)))/np.log(2)) + + plt.fill(np.array([0, width, width, 0]), + np.array([0, 0, height, height]), + 'gray') + + plt.axis('off') + plt.axis('equal') + for x in range(width): + for y in range(height): + _x = x+1 + _y = y+1 + w = W[y, x] + if w > 0: + _blob(_x - 0.5, + height - _y + 0.5, + min(1, w/maxweight), + 'white') + elif w < 0: + _blob(_x - 0.5, + height - _y + 0.5, + min(1, -w/maxweight), + 'black') + if reenable: + plt.ion() + +if __name__ == "__main__": + hinton(np.random.randn(20, 20)) + plt.title('Example Hinton diagram - 20x20 random normal') + plt.show() + if __name__ == "__main__": p = [0.2245871, 0.06288015, 0.06109133, 0.0581008, 0.09334062, 0.2245871, 0.06288015, 0.06109133, 0.0581008, 0.09334062]*2 diff --git a/code/particle_filter.py b/code/particle_filter.py index 0651f82..395fa0c 100644 --- a/code/particle_filter.py +++ b/code/particle_filter.py @@ -14,142 +14,20 @@ import matplotlib.pyplot as plt import random -class ParticleFilter(object): - - def __init__(self, N, x_range, y_range): - self.particles = np.zeros((N, 3)) # x, y, speed, hdg - self.N = N - self.x_range = x_range - self.y_range = y_range - - # assign - self.weights = np.array([1./N] * N) - self.particles[:, 0] = uniform(0, x_range, size=N) - self.particles[:, 1] = uniform(0, y_range, size=N) - self.particles[:, 2] = uniform(0, 2*np.pi, size=N) - def create_particles(self, mean, variance): - """ create particles with the specified mean and variance""" - self.particles[:, 0] = mean[0] + randn(self.N) * np.sqrt(variance) - self.particles[:, 1] = mean[1] + randn(self.N) * np.sqrt(variance) - - def create_particle(self): - """ create particles uniformly distributed over entire space""" - return [uniform(0, self.x_range), uniform(0, self.y_range), 0, 0] - '''def assign_speed_by_gaussian(self, speed, var): - """ move every particle by the specified speed (assuming time=1.) - with the specified variance, assuming Gaussian distribution. """ - - self.particles[:, 2] = np.random.normal(speed, var, self.N)''' - - def control(self, dx): - self.particles[:, 0] += dx[0] - self.particles[:, 1] += dx[1] - def move(self, hdg, vel, t=1.): - """ move the particles according to their speed and direction for the - specified time duration t""" - h = math.atan2(hdg[1], hdg[0]) - h = randn(self.N) * .4 + h - #vs = vel + randn(self.N) * 0.1 - vx = vel * np.cos(h) - vy = vel * np.sin(h) - - self.particles[:, 0] = (self.particles[:, 0] + vx*t) - self.particles[:, 1] = (self.particles[:, 1] + vy*t) - - - def move2(self, u): - """ move according to control input u""" - - dx = u[0] + randn(self.N) * 1.9 - dy = u[1] + randn(self.N) * 1.9 - self.particles[:, 0] = (self.particles[:, 0] + dx) - self.particles[:, 1] = (self.particles[:, 1] + dy) - - - def weight(self, z, var): - dist = np.sqrt((self.particles[:, 0] - z[0])**2 + - (self.particles[:, 1] - z[1])**2) - - # simplification assumes variance is invariant to world projection - n = scipy.stats.norm(0, np.sqrt(var)) - prob = n.pdf(dist) - - # particles far from a measurement will give us 0.0 for a probability - # due to floating point limits. Once we hit zero we can never recover, - # so add some small nonzero value to all points. - prob += 1.e-12 - self.weights *= prob - self.weights /= sum(self.weights) # normalize - - - def neff(self): - return 1. / np.sum(np.square(self.weights)) - - - def resample(self): - p = np.zeros((self.N, 3)) - w = np.zeros(self.N) - - cumsum = np.cumsum(self.weights) - for i in range(self.N): - index = np.searchsorted(cumsum, random.random()) - p[i] = self.particles[index] - w[i] = self.weights[index] - - self.particles = p - self.weights = w / np.sum(w) - - - def estimate(self): - """ returns mean and variance """ - pos = self.particles[:, 0:2] - mu = np.average(pos, weights=self.weights, axis=0) - var = np.average((pos - mu)**2, weights=self.weights, axis=0) - - return mu, var - - -def plot(pf, xlim=100, ylim=100, weights=True): - - if weights: - a = plt.subplot(221) - a.cla() - - plt.xlim(0, ylim) - #plt.ylim(0, 1) - a.set_yticklabels('') - plt.scatter(pf.particles[:, 0], pf.weights, marker='.', s=1) - a.set_ylim(bottom=0) - - a = plt.subplot(224) - a.cla() - a.set_xticklabels('') - plt.scatter(pf.weights, pf.particles[:, 1], marker='.', s=1) - plt.ylim(0, xlim) - a.set_xlim(left=0) - #plt.xlim(0, 1) - - a = plt.subplot(223) - a.cla() - - else: - plt.cla() - plt.scatter(pf.particles[:, 0], pf.particles[:, 1], marker='.', s=1) - plt.xlim(0, xlim) - plt.ylim(0, ylim) if __name__ == '__main__': - pf = ParticleFilter(50000, 100, 100) - pf.particles[:,2] = np.random.randn(pf.N)*np.radians(10) + np.radians(45) + N = 2000 + pf = ParticleFilter(N, 100, 100) + #pf.particles[:,2] = np.random.randn(pf.N)*np.radians(10) + np.radians(45) z = np.array([20, 20]) #pf.create_particles(mean=z, variance=40) @@ -159,21 +37,22 @@ if __name__ == '__main__': fig = plt.gcf() - fig.show() - fig.canvas.draw() + #fig.show() + #fig.canvas.draw() + #plt.ioff() - for x in range(50): + for x in range(10): z[0] = x+1 + randn()*0.3 z[1] = x+1 + randn()*0.3 - pf.move2((1,1)) + pf.predict((1,1), (0.2, 0.2)) pf.weight(z=z, var=.8) neff = pf.neff() - #print('neff', neff) - if neff < 1000: + print('neff', neff) + if neff < N/2 or N <= 2000: pf.resample() mu, var = pf.estimate() if x == 0: @@ -188,14 +67,17 @@ if __name__ == '__main__': #s=min(500, abs((1./np.sum(var)))*20), alpha=0.5) plt.plot([0,100], [0,100]) plt.tight_layout() + plt.pause(.002) - fig.canvas.draw() + #fig.canvas.draw() #pf.assign_speed_by_gaussian(1, 1.5) #pf.move(h=[1,1], v=1.4, t=1) #pf.control(mu-mu0) mu0 = mu + plt.ion() + diff --git a/code/pf_internal.py b/code/pf_internal.py index addf7ed..9908dbb 100644 --- a/code/pf_internal.py +++ b/code/pf_internal.py @@ -3,8 +3,9 @@ import pylab as plt from matplotlib.patches import Circle, Rectangle, Polygon, Arrow, FancyArrow import book_plots import numpy as np -from numpy.random import multivariate_normal +from numpy.random import randn, random, uniform, multivariate_normal, seed from nonlinear_plots import plot_monte_carlo_mean +import scipy def plot_random_pd(): def norm(x, x0, sigma): @@ -15,19 +16,22 @@ def plot_random_pd(): return 1. / (1. + np.exp(- (x - x0) / alpha)) x = np.linspace(0, 1, 100) - y2 = (0.1 * np.sin(norm(x, 0.2, 0.05)) + 0.25 * norm(x, 0.6, 0.05) + + y2 = (0.1 * np.sin(norm(x, 0.2, 0.05)) + 0.25 * norm(x, 0.6, 0.05) + + .5*norm(x, .5, .08) + np.sqrt(norm(x, 0.8, 0.06)) +0.1 * (1 - sigmoid(x, 0.45, 0.15))) - plt.xkcd() - #plt.setp(plt.gca().get_xticklabels(), visible=False) - #plt.setp(plt.gca().get_yticklabels(), visible=False) - plt.axes(xticks=[], yticks=[], frameon=False) - plt.plot(x, y2) + with plt.xkcd(): + #plt.setp(plt.gca().get_xticklabels(), visible=False) + #plt.setp(plt.gca().get_yticklabels(), visible=False) + plt.axes(xticks=[], yticks=[], frameon=False) + plt.plot(x, y2) + + def plot_monte_carlo_ukf(): def f(x,y): return x+y, .1*x**2 + y*y - + mean = (0, 0) p = np.array([[32, 15], [15., 40.]]) @@ -37,10 +41,10 @@ def plot_monte_carlo_ukf(): #generate random points xs, ys = multivariate_normal(mean=mean, cov=p, size=3000).T fxs, fys = f(xs, ys) - + plt.subplot(121) plt.gca().grid(b=False) - + plt.scatter(xs, ys, marker='.', alpha=.2, color='k') plt.xlim(-25, 25) plt.ylim(-25, 25) @@ -49,7 +53,181 @@ def plot_monte_carlo_ukf(): plt.gca().grid(b=False) plt.scatter(fxs, fys, marker='.', alpha=0.2, color='k') - + plt.ylim([-10, 200]) plt.xlim([-100, 100]) - plt.show() \ No newline at end of file + plt.show() + + + +class ParticleFilter(object): + + def __init__(self, N, x_dim, y_dim): + self.particles = np.empty((N, 3)) # x, y, heading + self.N = N + self.x_dim = x_dim + self.y_dim = y_dim + + # distribute particles randomly with uniform weight + self.weights = np.empty(N) + self.weights.fill(1./N) + self.particles[:, 0] = uniform(0, x_dim, size=N) + self.particles[:, 1] = uniform(0, y_dim, size=N) + self.particles[:, 2] = uniform(0, 2*np.pi, size=N) + + + def create_particles(self, mean, variance): + """ create particles with the specified mean and variance""" + self.particles[:, 0] = mean[0] + randn(self.N) * np.sqrt(variance) + self.particles[:, 1] = mean[1] + randn(self.N) * np.sqrt(variance) + + def create_particle(self): + """ create particles uniformly distributed over entire space""" + return [uniform(0, self.x_dim), uniform(0, self.y_dim), 0, 0] + + + '''def assign_speed_by_gaussian(self, speed, var): + """ move every particle by the specified speed (assuming time=1.) + with the specified variance, assuming Gaussian distribution. """ + + self.particles[:, 2] = np.random.normal(speed, var, self.N)''' + + def control(self, dx): + self.particles[:, 0] += dx[0] + self.particles[:, 1] += dx[1] + + + + self.particles[:, 1] = (self.particles[:, 1] + vy*dt) + + + def predict(self, u, std): + """ move according to control input u with noise std""" + + self.particles[:, 2] += u[0] + randn(self.N) * std[0] + self.particles[:, 2] %= 2 * np.pi + + d = u[1] + randn(self.N) + self.particles[:, 0] += np.cos(self.particles[:, 2]) * d + self.particles[:, 1] += np.sin(self.particles[:, 2]) * d + + self.particles[:, 0:2] += u + randn(self.N, 2) * std + + + def weight(self, z, var): + dist = np.sqrt((self.particles[:, 0] - z[0])**2 + + (self.particles[:, 1] - z[1])**2) + + # simplification assumes variance is invariant to world projection + n = scipy.stats.norm(0, np.sqrt(var)) + prob = n.pdf(dist) + + # particles far from a measurement will give us 0.0 for a probability + # due to floating point limits. Once we hit zero we can never recover, + # so add some small nonzero value to all points. + prob += 1.e-12 + self.weights += prob + self.weights /= sum(self.weights) # normalize + + + def neff(self): + return 1. / np.sum(np.square(self.weights)) + + + def resample(self): + p = np.zeros((self.N, 3)) + w = np.zeros(self.N) + + cumsum = np.cumsum(self.weights) + for i in range(self.N): + index = np.searchsorted(cumsum, random()) + p[i] = self.particles[index] + w[i] = self.weights[index] + + self.particles = p + self.weights = w / np.sum(w) + + + def estimate(self): + """ returns mean and variance """ + pos = self.particles[:, 0:2] + mu = np.average(pos, weights=self.weights, axis=0) + var = np.average((pos - mu)**2, weights=self.weights, axis=0) + + return mu, var + + + + +def plot_pf(pf, xlim=100, ylim=100, weights=True): + + if weights: + a = plt.subplot(221) + a.cla() + + plt.xlim(0, ylim) + #plt.ylim(0, 1) + a.set_yticklabels('') + plt.scatter(pf.particles[:, 0], pf.weights, marker='.', s=1, color='k') + a.set_ylim(bottom=0) + + a = plt.subplot(224) + a.cla() + a.set_xticklabels('') + plt.scatter(pf.weights, pf.particles[:, 1], marker='.', s=1, color='k') + plt.ylim(0, xlim) + a.set_xlim(left=0) + #plt.xlim(0, 1) + + a = plt.subplot(223) + a.cla() + + else: + plt.cla() + plt.scatter(pf.particles[:, 0], pf.particles[:, 1], marker='.', s=1, color='k') + plt.xlim(0, xlim) + plt.ylim(0, ylim) + + +def show_two_pf_plots(): + """ Displays results of PF after 1 and 10 iterations for the book. + Note the book says this solves the full robot localization problem. + It doesn't bother simulating landmarks as this is just an illustration. + """ + + seed(1234) + N = 3000 + pf = ParticleFilter(N, 20, 20) + z = np.array([20, 20]) + + #plot(pf, weights=False) + + for x in range(10): + + z[0] = x+1 + randn()*0.3 + z[1] = x+1 + randn()*0.3 + + pf.predict((1,1), (0.2, 0.2)) + pf.weight(z=z, var=.8) + pf.resample() + + if x == 0: + plt.subplot(121) + elif x == 9: + plt.subplot(122) + + if x == 0 or x == 9: + mu, var = pf.estimate() + plot_pf(pf, 20, 20, weights=False) + if x == 0: + plt.plot(x+1, x+1, marker='*', color='r', ms=10) + plt.scatter(mu[0], mu[1], color='g', s=100) + else: + plt.scatter(mu[0], mu[1], color='g', s=100, label="PF") + plt.scatter([x+1], [x+1], marker='*', color='r', s=60, label="True") + plt.legend(scatterpoints=1) + plt.tight_layout() + + +if __name__ == '__main__': + show_two_pf_plots()