Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gauravsdeshmukh/f735e3dbd34ec6b6e3dcd1f154f264ef to your computer and use it in GitHub Desktop.
Save gauravsdeshmukh/f735e3dbd34ec6b6e3dcd1f154f264ef to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Monte-Carlo Simulation to solve a Putnam Competition problem\n",
"\n",
"### Created by: Gaurav S. Deshmukh\n",
"\n",
"This notebook details a Monte-Carlo simulation used to solve the following problem:\n",
">If you choose 4 random points on a sphere and join them, what is the probability that the resulting tetrahedron contains the centre of the sphere?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Import Required Modules"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import scipy as sci\n",
"import matplotlib.pyplot as plt\n",
"import scipy.linalg\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Define Sample Space"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Define number of points and create empty arrays to store coordinates"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"points=10000\n",
"x=sci.zeros((points,3))\n",
"y=sci.zeros((points,3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Store all 3D vectors on the surface of a sphere of radius 1 in 'y'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for i in range(points):\n",
" vector=sci.random.rand(1,3)-0.5\n",
" if(sci.linalg.norm(vector)!=0 and sci.linalg.norm(vector)<=1.0):\n",
" x[i,:]=vector\n",
" y[i,:]=x[i,:]/sci.linalg.norm(x[i,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Check if all the norms of vectors in 'y' are equal to 1; if \"All Clear\" then proceed"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"All Clear\n"
]
}
],
"source": [
"y_norms=sci.zeros(points)\n",
"for i in range(points):\n",
" y_norms[i]=sci.linalg.norm(y[i,:])\n",
" tol=1e-10\n",
" norm_diff=abs(y_norms-1)\n",
" danger_array=y_norms[norm_diff>tol]\n",
" \n",
"if(len(danger_array)==0):\n",
" print(\"All Clear\")\n",
"else:\n",
" print(\"Danger\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Create functions to determine whether the centre lies inside a tetrahedron"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The CheckSide function checks if the fourth vertex and a stray point lie on the same side of the plane formed by the remaining three vertices"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def CheckSide(vertices,point):\n",
" t1,t2,t3,t4=vertices\n",
" p=point\n",
" side_1=t2-t1\n",
" side_2=t3-t1\n",
" normal=sci.cross(side_1,side_2)\n",
" ref_vector=t4-t1\n",
" ref_sign=sci.dot(normal,ref_vector)\n",
" point_vector=p-t1\n",
" point_sign=sci.dot(normal,point_vector)\n",
" if(sci.sign(ref_sign)==sci.sign(point_sign)):\n",
" return 1\n",
" else:\n",
" return 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The CheckTetrahedron function calls the CheckSide function 4 times and concludes whether the stray point lies inside or outside the tetrahedron"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def CheckTetrahedron(vertices,point):\n",
" vert=sci.copy(vertices)\n",
" check_1=CheckSide(vert,point)\n",
" vert=sci.roll(vert,1,axis=0)\n",
" check_2=CheckSide(vert,point)\n",
" vert=sci.roll(vert,1,axis=0)\n",
" check_3=CheckSide(vert,point)\n",
" vert=sci.roll(vert,1,axis=0)\n",
" check_4=CheckSide(vert,point)\n",
" sum_check=check_1+check_2+check_3+check_4\n",
" if(sum_check==4.):\n",
" return 1\n",
" else:\n",
" return 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Initialization"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"centre=[0,0,0] #Centroid of the sphere\n",
"number_of_samples=50000 #Number of samples of tetrahedra to be taken\n",
"sample_span=sci.arange(0,number_of_samples,1) #Array for plotting\n",
"check_point=sci.zeros(number_of_samples) #Array to store 0s and 1s based on success or failure\n",
"prob=sci.zeros(number_of_samples) #Array to store resultant probabilities "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. The Run"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for i in range(number_of_samples):\n",
" indices=sci.random.randint(0,points,4) #Get any 4 random numbers as indices for the 'y' array\n",
" vertex_list=y[indices] #Get 4 random points from 'y' based on indices obtained\n",
" check_point[i]=CheckTetrahedron(vertex_list,centre) #Return 1 for success and 0 for failure\n",
" prob[i]=len(check_point[check_point==1.])/(i+1) #Store resultant probability of run"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6. Plotting"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5,1,'Variation of resultant probability with increase in the number of iterations')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA38AAAJiCAYAAAB3iHt+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XmcTuX/x/H3NZhdEoMYZhJiMCSR\npSzJ0pSRJUokUd+08I1QKktKq+XborKXorKkVFokpfgy1mwlMfbtV1Iiy1y/P8499/e+77nv2YwZ\n3K/n43E/OOdc5zrXuc65zn1/zrnONcZaKwAAAADAhS2koAsAAAAAADj7CP4AAAAAIAgQ/AEAAABA\nECD4AwAAAIAgQPAHAAAAAEGA4A8AAAAAggDBH3COMsZMN8Z8mAf5jDTGrMmLMp0pY8y1xpgfjTEn\njTFfFXR5fBljdhlj+hV0OfJLXuyvMaaXMeZwTtJkNV1QstPmjDEtjDHWGHNxDvNeYowZe2YlPH+d\nrf03xhR2HY92eZ13QTqXrtvpsnP9zqvvrbx2rpYLKAgEf0AuGGM+zuTLr5rrx8gNZ7iZ+yX1yEGZ\nKrm2W9tn0bOSrj/DsuSVlyWtlHSZpE4FXJZMnc0flRfqD9ZMvCOpSnaXF+APX682l8cBS1tJT+RR\nXuejM97/czEgCjLZuX6fzTaUpUxuzuTo+xS4kBH8AbkzUVJzY0y8n2V3S0qVtDA3GRtjikiStfYP\na+0ZPw2x1v5lrf2/M80nj1SStNBau8ta+3t2VjDGhJ7lMl1w0s+hc4W19pi19kBul+eXvGpzAfL+\nzVr759nIW5KMMSHGmEJnK/8zdbb3H9lzhtfTLK/fZ6sNnen3wNls28D5huAPyJ1PJO2XdJfnTNeP\n7m6SJltr01zzXjTG/GyMOWaM2WaMedYYE+axzkhjzBpjzN3GmF8lHTfGhPt2UzHG3Oi6i3rYGPOb\nMeYzY8wVrmWFJW1xJV3tuvP5lWf+HvmEGGOGurr8/WOMWWeMudljefoTxFuMMQuNMX8bYzYYY5pn\nViGuMv/HGHPAGHPcGLPUGNPQM09JUZLecuV/R4B8lhhjXjHGjDbGHJS02DX/YmPMRFf+R4wx3xhj\n6nisV9wY844x5qBr+1uNMQ+k14+/J20m826P213/znWt+4trncrGmI+MMfuNMX8ZY1YaY9r4yfdR\nV3mPGGN2GmMezipvP3WRXu77XMf7b2PMdmPMbR5p0o9XZ2PMImPMcTk3IGSM6WiMWe86zjtcZTI+\nmylqjHnXtS97jTH/9inDI8bp6nXUtV9vGGOK+SlrO9d5ftx13sR7LMu0W6fncmNML0lDJNVy7Zc1\nxtxhjHnL+HTbMsYUMsbsNsY8FCDflcaY/h7T7xlj0owxMa7paON0Yavvmna3OWPMdEmNJPX1KEes\nR/Z1jDErXMdkhTGmVqD9c+Xn9QQkG+dI+jn/hjFmn6teNxpjOnrWmTHmZmPMBkknJFX2WLbJtc5P\nxpiHPI97Vsc0s7bkUa6AbTGv9t9nfb/nhUeSksaY2a592urZRlzrlzfGvG+M+d0418/5xpjLM9le\netvrFShf46e3hfG51nikudUY861xvgdWGWOqG2MSjTHLXHl/a4yJ81OOe11187cxZo4xpoRvvQQ6\n1h5l+ZcxZp4x5qikEQH2N6+u39lqQ8aYGsa5pv3p2uY7xpjSvvkYYx4zxuyWc0NVxpg7jTEprvX2\nG6dNX5peTklfurL43bW9ib7lymp/XcvTnyA2NwHaeVbtBDhnWWv58OGTi4+c7pSpkkI85rWXdFpS\neY95T0pqKCleUpKkXZKGeiwfKekvSQskXSmpppwbM9MlfeiRrpMr/8qSakmaLelnSUVcy6+RZOV0\n8SwjqbhH/ms88nlE0h+SbpN0haSnJZ2SVMO1vJIrn02u8lZ2leWgpMhM6uNVSbsl3SgpQdJkSUck\nlZZUyFWm43K635SRFB4gnyWS/pT0vKt81Vz1sVTSR5Lqusr0jKTDkkq71hsvp0vS1ZLiJDWT1NG1\nrLBrn9r5bGuXpH7+piVd6lqnh6u8JV3z60i613WcKruO7wlJlX3y+T9JfVz1+W9XXvUyy9tPXaSX\n+5Ck3nK6Rj4p5xyr7XO8trnOj8sklZNUT1KaK30VOTcljkq6z6ecRyQ96kpzn6STktp6pHnYVZeX\nSWoqab2kKR7Le7n2f4WkBq76WeI6FsYjzWGfdfxOS4qQNMa1nTLp54qka11lK+2xXpKcc+qSAPX3\nkqT5HtN75ZzH6edFGznnWmHXtLvNSSom6b+S3vQoR4ikFq76XiapiaSqkr5ylddk0j6WSBqbg3Mk\nxLWN9ZJaSqoop20l+9T793KuL1dIinYdwz2SOriOWbKkA5L+lYNjmllbyrIt5sX++1k/0HmR3kZ2\nSrrdldcLkv6RFOtaN1rSVkmTJCW6jtkUOW0mIou2l1m+6W2vtp/12vm5nrZ2bftbSeskLXLVfw1J\nqyXN9fO98LWk2pIau/KY45Em02PtUZb9knq6zqH4s3z9zk4bKuc69s+46qOWnBuqP+h/14zpctrm\nW5Kq63/fT73ktNuKkurLuTm4yLWskJzvSSvnelZG0kW+5cpqf13Ls2znyqSd8OFzLn8KvAB8+Jyv\nHzk/eqyklh7zPpH0WRbrPSBps8f0SDk/4mJ80nl9WfnJ5yI5P+6vcU1n+CHikb9n8Ldf0mM+aZZI\nmuqTz90ey+Nc867JpCwnJd3uMa+wnCdcwzzmHZd0Rxb1s0TSap95LeUErGE+89dLetj1/08lTQiQ\nZ26CP7/rBMg/RdJgn3ze9kmzLT1NdvP2SDfeZ/43fo5XX58070n6ws+5sN2nnJ/5pJkq6ZtMynST\npL/lHdhZSfU90lR0nZtNPdJkK/jzd856zN8kaYDH9GxJMzMp682u86aQnJsIhyWNkvSqa/lznvuv\njD8QvQIW17z0H4XXe8xr4ppXJovz2jf4yewcaSMnyK8SIL/0eq/lM3+3pNt85g2QtC4HxzSztpRl\nW8yL/Q+QR4bzQv9rI095zAuVE6R1cU3fI2mzPIJz13qHJbXPou1llm9Ogj/P62k71zzPmyz+2sAp\nuQJN17ymrvUuy86x9ijLmEB16kqXl9fv7LShZyR97jOvpKusdTzy2ScpNIvt1ZBH29P/2ufFgcqV\nnf1VNtq5MmknfPicyx+6fQK5ZK3dIucObk9JMsaUldRKzvuAbsbpjve9cbpu/SXpRUkVfLJLtdYe\nzGx7xuluOMMY86sx5oicO77GT16Z5XGJpFJynhZ4WiLn7qendR7/3+P6t1SArCvJ+fJ052utPSXn\nrqlvvtmR4jN9lZy79/9nnO6Jf7nqsqqk9K5br0nqapwutC8YY67LxXazZJyugi+6uloddpWjtjIe\nh3U+03sUuP6ystTPtG+9+tZZNfk/znHGmMjs5u3q/rTQON0r/5T0vpynMDEe65zy3L619lc5Nxly\nc+wzM1H/a28l5QR3kzJJ/62c86aOnB/O38p5ktLUtbypnEA6N3LSPrKTR3o+6XlcKWmXtfbnTNY/\n4ZmHq/tbWUmTfNrJSP2vnWTnmGbWlrLTFrMrL9uIOy9r7Qk5T8vT87pKzjXqT4/yHpYTBGRV5szy\nzVX55LQNSfrRZ14x4/1u2w5r7S6P6WVygo9q2T3WLr7XBl95ff3OylWSmvmUe7trmWfZf3TVuZsx\npq5xut2nus7d/7oWZft7UDnb38zaeb585wB5rXBBFwA4z02UNMEVVPWQ9Juc7lCSJGNMYzkjGQ6V\n9IWcHxy3yLnz6eloNrb1iZw7473lfAmlSdoo5250dqW/92P9LPOdd9LPskA3jHKSb3b41keInC57\nTf2k/UOSrLXzjfPOTBs5d20/M8a8a63t7VEG3/fdcjMwyhhJzeV0n/1FzhOTd5TxOJz0mbY6u+9Z\n+9aZ0RkeD2NMRUnz5XRvGiLn/L5azl103/3NzXHOqWmSnjHGXCOni+keZTKwkrX2D+O879pMzg/O\nRXJ+8FVyvR9UR5Lf9wWzISftIzt5pOeTnofvuerPMWutZ72nr9tb//tR7Jl3to5pFm0py7aYA3nZ\nRjLLK0RO97yuftbLajCszPJNc/3reawCXVP8nS85PYesx7ayPNYesvp+yevrd1ZCJH0saZCfZfs8\n/u9VbmNMUUmfy3lF4g45XbhLy7mBk+/fg1m0E+CcxZM/4MzMkqsrjJwnEm9Zaz2/LBrJear3tLV2\nhetpYXxON+J6Eb6ypJHW2oXW2k1y3qfwbMPpd0gDjvhnnVE/D8h5f8RTYzmBZG5tkfP0x52vcQah\nueYM8023Ss77G6estb/4fNxPTK21B621b1lru8vp6tXTGFPEWntazo/cSz3KV1aZ38E/7fr41mdj\nOV0u51hr18kJQCrmcH8C5R3INX6mN2Wxzkb5P86p1tq/s5n31a4y9rfWLnM9hSrnZ1uF5bz/JUky\nxlwm50dZVmUM5IT81I219pCkeXLa2l1yjkOabzof38gJ/q6T0531bzlPQh6X03ZX5rQc+WSVpFhj\nTGZ/IsPXHjlPkCr6aSdbXWmydUwDtSVlsy2eJbk9HqvkXD8P+ClztkYdDiB9hNpLPeb5/qmdM1HB\ndZ1Kl95WNyt7xzq7zub1298xWyXnPb7tfsr+VyZ5JUi6RE7X4O+stZvlXGd8tyc/2/SUZ/ubSTsB\nzlk8+QPOgLX2mDHmXUnDJBVXxi5oP8v5Ar9N0nI5dwhvzcWmDskJXu4xxuyVFCtn8AHPH7775LyP\n0toYs0vOU4EjfvJ6QdITxpitcgYZuFPOl96/clEuSZK19ogx5g1JLxhjfpMzEM4AOV/U43Obr4fP\n5dTfh8aYQZJ+kvODq42kBdbaH4wxI+UMOrJRzt33WyRt8QjGv5b0gDHmv3Lu4I6S8+M/0D5ZY8wO\nSdcbY76X9I/rh+LPktobY+bLCeCGSwoLlE8O8w6kkzFmpaTv5Jw/TeQRbAXwkqRlxpgn5Lz/V1/O\noBoDfNI1MsYMlDRXzmBBXfW/c3SLnO+Jh4wx8+QMLPKgn22dlPSyMaavnHNwnKS1yn2Xyu2SLjPO\nKIq7JP1prf3HtWyCnCdXReR0+8zKN5L6yhnMYa3HvEGSvnR198qsHPVdd/ePymmD+eVzOYHpHOOM\ngrlFTgATbq39yN8KrvNqmKTRrq7hC+TU01Vy3lN6Ttk4ppm1JWNMlm0xD+vA13b5nBdy2mBW3pbU\nX9I8Y8yTrnUryHn37mVXN+Ucs9b+ZYxJkTTYGLNdzvVuVG7yCuC4pGnGmAFyutq+Jmleenmzcayz\nux9n8/q9XRnb0MtyRiSeYYx5Qc732+WSOkt60Fp7LJO8Tkh60BgzXk4AOdwnTarr3yRjzGdyvge9\nAsq82t9sfOcA5ySe/AFnbqKcwO8H1xM5N2vtXDndBP8jaY2crlJDc7oB15OrznK6qa2X8+X5qDy6\npLjejegrJ4jbI2lOgOxGuz4vufK6WdIt1tr1OS2XjwFyBuB4S86+JkhqbfPg77e5nu60lhP8TJYT\ngL0v58fwXleyE3J+eK2V825buJzR79L9W87IfYtd645X1l2+HpZ0g2u9Fa55fSX9Lqf74Cdy3iPL\nzQ9ef3kHMlTO8V8rp5tXd2vtqsxWsNYulxPEdZZznJ+W8z7Q6z5JX5Lzg3GNnJsYj1lrP3TlscpV\nzkfk/MDpIWmgn839LWfwlHfkvDdzWlIHny6JOfGBnG7S38jp2uX5B6W/knPMv7LWpmZcNYNv0//1\neEq4SM6TgW+yWPd5OTdYNrnKUTbz5HnH45z/r5x63SRprLLoqmytfV3OE4gecs6Xb+UMJrLNtTw7\nxzRgW8pmWzxbMjsvAnL9+L9W0g4516jNckb7LCqnK/6Z6CEnmE6RE5w9fob5efpFznX8Uznn/RY5\nx1JS1sc6h87W9TtDG3K9x9hIThv8XNIGSa/IuY4EDJystfvl7GtHV36PyzmXPdOkygkIn5fzZDTQ\nH5jPi/3N6jsHOCeZ3H83AwDOJldXpJNygvMPs0ofDFyD1eyRdK+19r2CLg8AAOcTun0CAM55xpgQ\nOe+a9ZfThXN2wZYIAIDzD8EfAOB8UFFOt7edku7K4l09AADgB90+AQAAACAIMOALAAAAAAQBgj8A\nAAAACALn/Tt/JUuWtPHx8QVdDAAAAAAoECtXrjxkrY3JKt15H/zFx8crJSWloIsBAAAAAAXCGJOd\nv31Lt08AAAAACAYEfwAAAAAQBAj+AAAAACAIEPwBAAAAQBAg+AMAAACAIHDej/YJADj3HTlyRAcO\nHNDJkycLuigAAJxXihQpolKlSumiiy4647wI/gAAZ9WRI0e0f/9+lStXThERETLGFHSRAAA4L1hr\ndezYMe3evVuSzjgApNsnAOCsOnDggMqVK6fIyEgCPwAAcsAYo8jISJUrV04HDhw44/wI/gAAZ9XJ\nkycVERFR0MUAAOC8FRERkSevThD8AQDOOp74AQCQe3n1PUrwBwAAAABBgOAPAIBzXHx8vF588cWC\nLka+yYv9nTp1qqKjo3OUJqvpvPT9998rMTFRoaGhatq06VnZRl46m3Xhq2nTpnrggQfOOJ8ePXro\npptuyoMSARcOgj8AAPzo0aOHjDEyxqhw4cKqUKGC7rvvPv3+++8FXTQZYzRr1qzzLu9zTefOnfXr\nr79me/mwYcNUo0aNPNl23759VatWLW3dulVz5szJkzzPpqzqqiB98803Msbo0KFDXvPHjRun6dOn\nF1CpgHMTf+oBAIAAWrRoobffflunTp3Sxo0b1bNnTx0+fFgzZswo6KKdl06ePKkiRYoUdDHcIiIi\nMh2MKKvlZ+KXX37R/fffr/LlywdMcy7V19msi7OlWLFiBV0E4JzDkz8AAAIICwtTmTJlFBsbq5Yt\nW6pz58764osvvNL88ccfuueee1SqVCkVLVpUTZo0UUpKitfybt26qVSpUgoPD1fFihU1duxY93J/\nT9oy6/YYHx8vSerUqZOMMe7prVu3Kjk5WWXKlFFUVJTq1Kmj+fPnZ1h35MiRuvfee3XRRRcpNjZW\nL7zwQpZ5+2OM0SuvvKKkpCRFRkYqLi7O6ynL9u3bZYzRjBkz1Lx5c0VEROiNN96QJM2ZM0c1a9ZU\nWFiYypcvr6efflrWWq/8//rrL91xxx2Kjo5WmTJlMtTH6NGjlZiYqKioKJUrV069evXS4cOHM5Tz\n448/VpUqVRQeHq5mzZp5Pb3Kqiuj5/KpU6dq+PDh2rBhg/uJ8NSpU9WzZ88MXQvT0tJUoUIFjR49\nOkOe6fXyxx9/qGfPnu580p9effrpp6pXr55CQ0P1+eefS5LeeOMNVapUSaGhoapUqZImTJiQ4ViM\nHz9eycnJioyMVJUqVbRo0SLt2rVLrVq1UlRUlGrXrq1Vq1YF3FfJOS6JiYmKiIjQJZdcoiZNmmj/\n/v1+6yr9Kei0adMUHx+v6Oho3XXXXTpx4oRee+01lS9fXiVKlNDDDz+stLQ093r+zu2sunlOnz5d\nV199tYoWLapSpUqpU6dO7r95tn37djVr1kySFBMTI2OMevToISljt89//vlH/fr1U+nSpRUeHq5r\nrrlGS5YscS9PPwYLFy5U/fr1FRkZqbp162ZZb8D5hOAPAIBs+PXXX7VgwQKvJzHWWiUlJWn37t2a\nP3++Vq9ereuuu07NmzfX3r17JUmPP/64fvzxR82fP1+bN2/W5MmTVa5cuVyXY8WKFZKkCRMmaO/e\nve7pv/76S23atNGXX36ptWvXqkOHDmrfvr02b97stf6YMWNUs2ZNrVq1SoMGDdLAgQO1dOnSTPMO\nZOjQoWrbtq3WrFmje+65R927d/cKfCXp0UcfVZ8+fbRx40a1a9dOK1euVKdOndS+fXv9+OOPevbZ\nZzVq1Ci98sorXuuNHj1a1apV06pVqzR8+HA99thjXt0jQ0JCNHbsWG3YsEHvvvuuli9frgcffNAr\nj3/++UfDhw/XlClTtHTpUp0+fVq33HJLhkAzOzp37qz+/fvriiuu0N69e7V371517txZvXv31oIF\nC9zHW5K+/PJL7du3T926dcuQT/ny5bV3715FRkZq7Nix7nzSDRo0SCNHjtTmzZtVv359zZ07Vw88\n8ID69eun9evXq2/fvurTp48+/vhjr3xHjhypLl26aO3atapbt65uu+023X333erTp49Wr16tsmXL\nuoMif/bt26cuXbrozjvv1KZNm/Ttt9/6Lb+n7du3a968eZo/f75mz56tDz74QMnJyVqxYoW++OIL\nTZw4US+//LLmzp2bzVr278SJExo+fLjWrl2r+fPn69ChQ7rtttskOfU5e/ZsSdKGDRu0d+9ejRs3\nzm8+AwcO1HvvvafJkydr9erVqlmzplq3bu117CTnnH322We1atUqlShRQl27ds3VOQOci+j2CQDI\nd/36LdCaNfvydZu1a5fR2LGtc7TOggULFB0drdOnT+v48eOS5PU0Z9GiRVqzZo0OHjzo7hL31FNP\n6eOPP9bbb7+tgQMHKjU1VVdeeaXq1asnSZk+TcuOmJgYSdLFF1+sMmXKuOfXqlVLtWrVck8PGTJE\nH3/8sWbNmqXHH3/cPb9ly5bupywPPvig/vOf/2jhwoVq0KBBwLwDad++ve6991739hYtWqSxY8d6\nPQF88MEH1bFjR/f0oEGD1KRJEw0fPlySVKVKFW3ZskXPPfecV/BWv359DRkyxJ1mxYoVGj16tNq3\nby9J6tevnzttfHy8nn/+eSUnJ2vatGkKCXHubZ86dUrjxo1To0aNJElvv/22KlasqIULF6pFixZZ\n7p+niIgIRUdHq3Dhwl5106BBA1WtWlXTpk3T4MGDJUmTJ09W27Zt3fXpqVChQipTpoyMMSpWrFiG\neh42bJhatmzpnn7xxRfVrVs39zGrUqWKVq5cqeeee04333yzO1337t3dAdFjjz2mGTNmqFWrVkpO\nTpbkBD7NmjXToUOHVLJkyQzl2rNnj06ePKmOHTsqLi5OkrJ8v/H06dOaMmWKihUrpho1aqh169Za\nvHixdu/erdDQUFWrVk2NGjXSokWL1KFDh0zzykzPnj3d/69YsaLGjx+vatWqadeuXYqNjdUll1wi\nSSpVqpTffZOko0ePavz48Zo4caKSkpIkSa+//rq+/vprvfrqqxo5cqQ77VNPPeV+mvjkk0+qcePG\n2r17t2JjY3O9D8C5gid/AAAEcN1112nNmjXup0o33nijHnroIffylStX6u+//1ZMTIyio6Pdn/Xr\n12vr1q2SpPvuu0/vv/++atWqpQEDBmjx4sVnpaxHjx7VwIEDlZCQoOLFiys6OlopKSnasWOHV7rE\nxESv6bJly+rAgQO52maDBg0yTG/cuNFrXt26db2mN23a5A7G0qX/uD5y5Ei28/766691ww03KDY2\nVkWLFlX79u114sQJ7dv3v5sKISEh7qBbkuLi4lS2bNkMZTxTvXv31pQpUyRJv/32m+bNm6e77747\nV3llt75898HzuJYuXVqSVLNmzQzzAh3rWrVqqUWLFqpRo4Y6dOig8ePH6+DBg5mWtUKFCl7v1ZUu\nXVpVqlRRaGio17zcnl/pVq1apeTkZMXFxalo0aLuOvI9tzOzdetWnTx50qsuCxUq5Pec9azLsmXL\nSgpcb8D5hid/AIB8l9MncAUlMjJSlSpVkiT95z//UbNmzfTUU09p2LBhkpx3u0qXLq3vvvsuw7oX\nXXSRJKlNmzZKTU3VZ599poULFyopKUmdOnVyBwvGmAxdyk6ePJnjsg4YMEALFizQiy++qMqVKysy\nMlLdu3fXiRMnvNL5DiBijPF6JyuvRUVFeU1bawP+seLs/hHj1NRUJSUlqXfv3hoxYoRKlCihVatW\n6bbbbsuwv/mhW7duGjRokJYsWaLVq1erZMmSXk/vcsK3viT/9eI7z/O4pi/zNy/QsS5UqJC++OIL\nLVu2TF988YUmTZqkRx99VIsXL/Z6ohxom+nb8Dfv9OnT7umQkJAcne9Hjx5Vq1at3IMvlSpVSocO\nHdK1116bo2Odvs3c1uXZbCNAfsrXJ3/GmNbGmJ+MMb8YYwb7Wd7DGHPQGLPG9emVn+UDACAzQ4cO\n1XPPPac9e/ZIkurUqaP9+/crJCRElSpV8vqUKlXKvV7JkiXVrVs3TZ06VZMmTdK0adP0zz//SHK6\ncXq+c7R///4M7yD5KlKkiNcPaklasmSJunfvrg4dOigxMVGxsbHup4854S/vQJYtW5Zhulq1apmu\nk5CQ4DXIhuSUPf0JXnbyTklJ0YkTJzRmzBg1aNBAVapUcR8TT2lpaV7vLe7YsUN79uzJsoyBhIaG\n+q2bSy65RO3bt9fkyZM1efJk9ejRQ4UKFcrVNnxVq1bNb30lJCTkSf6ejDFq0KCBhg4dqhUrVqhs\n2bJ677338nQbvuf78ePHM7yX6mnz5s06dOiQnnnmGV133XWqWrVqhqdw6U8aMztv0wfM8azL06dP\na+nSpWelLoFzVb49+TPGFJL0qqQbJO2StMIY85G11rfvxXvW2jP/y54AAOSxpk2bqnr16ho5cqRe\ne+01tWjRQo0aNVJycrKef/55Va1aVfv27dOCBQvUokULXXvttXryySdVp04dVa9eXadOndKcOXNU\nsWJFhYWFSZKaN2+uV199VQ0bNlShQoX02GOPKTw8PNNyxMfHa+HChWrSpInCwsJUvHhxValSRXPn\nzlVycrKKFCmi4cOHu99TzAl/eQcyZ84cXX311WratKlmzZqlhQsX6r///W+m+ffv319XX321hg0b\npttvv10rVqzQSy+9pGeeecYr3bJlyzRq1Ch17NhR33zzjd566y298847kqTKlSsrLS1NY8eOVfv2\n7bVs2TKvEVTTFS5cWP369dO4ceMUERGhf//736pevXqO3/dLFx8fr9TUVK1atUoVKlRQ0aJF3cex\nd+/eat26tU6ePJmnfyfxkUceUadOnXTVVVepZcuWWrBggd555508/9uAy5Yt01dffaVWrVqpdOnS\nWr16tXbu3JnngVHz5s293ol8+umnM33yV6FCBYWFhemVV17R/fffr02bNumJJ57wShMXFydjjD75\n5BPdfPPN7vczPUVFRem+++4oIaOmAAAgAElEQVTT4MGDVbJkSV122WUaM2aM9u/frz59+uTpPgLn\nsvx88ldP0i/W2l+ttSckzZSUnI/bBwDgjD388MOaNGmSUlNT3UPzN2/eXL1799YVV1yhW2+9VT/9\n9JP7XaGwsDANGTJEtWrVUqNGjfTnn396jdT40ksvqWLFimratKk6duyoXr16eT019Oell17SokWL\nVL58eV155ZWSnIFoSpUqpWuvvVZt2rTRNddco2uvvTbH++cv70CGDRum2bNnKzExUePHj9eUKVN0\n9dVXZ7pOnTp19MEHH2j27NmqUaOGBg8erMGDB2cY6v/hhx/WunXrdOWVV+rxxx/XiBEj3APHJCYm\naty4cRo9erQSEhI0ceJEv38aI73uu3fvrvr16ystLU1z5szJdvdSXx06dNCNN96o66+/XjExMV5/\n77Fp06aKjY1V06ZNdfnll+cqf3/atWunl19+WWPGjFFCQoLGjRun1157zWuwl7xQrFgxff/997rp\npptUuXJl9e/fX0888YTuuOOOPN3Oo48+qubNmys5OVktW7ZU48aNVadOnYDpY2JiNG3aNH344YdK\nSEjQ8OHDM/wJjXLlymn48OEaMmSISpcuHfDPRjz33HO69dZbddddd6l27dpat26dFixYoEsvvTRP\n9xE4l5n8GrrWGNNRUmtrbS/XdDdJ9T2f8hljekgaJemgpJ8l/dtauzOzfOvWrWt9h5UuaBMnrtIP\nP+zU5MnEtgCwadOmXHezw7nLGKMPPvjAayTPYHbs2DGVK1dOL7/8srp27VrQxQFwAcrs+9QYs9Ja\nW9fvQg/5+eTP320238jzY0nx1tpESV9JmuY3I2PuMcakGGNSshqJqiD07v2xpkxZU9DFAAAAZ1la\nWpr27t2roUOHKiIiQp06dSroIgFAQPk52ucuSeU9pmMleb2dba39P4/JCZKe85eRtfZNSW9KzpO/\nvC0mAABA9uzYsUOXXXaZYmNjNWXKFK8/cwAA55r8DP5WSKpsjLlM0m5JXSTd7pnAGHOptTZ9CKi2\nkjblY/kAAEA25ddrI+e6+Ph46gLAeSPfgj9r7SljzAOSPpdUSNJka+0GY8wISSnW2o8kPWSMaSvp\nlKTfJPXIr/IBAAAAwIUsX//Iu7X2U0mf+sx70uP/j0p6ND/LBAAAAADBIF//yDsAAAAAoGAQ/AEA\nAABAECD4AwAAAIAgQPAHAAAAAEGA4A8AgPPQN998I2OMDh06VNBF8csYo1mzZhV0MfJNXuzvsGHD\nVKNGjRylyWo6L82bN0+VK1dW4cKF1aNHj7OyjXNV06ZN9cADD5xxPnndLvKqXIFMnTpV0dHReZJX\nfHy8XnzxxTzJKytTp05V8+bN82VbeaFjx44aPXp0vmyL4A8AgEysXr1ahQoVUqNGjXK87tn8IX4+\n2b59u4wxSklJOa/yPhcNGDBAixcvzvbyHj166KabbsqTbffq1UsdOnRQamqqxo0blyd5XqgC1fve\nvXt18803F0CJ8k+g696KFSvUp0+fs779EydO6PHHH9fQoUO95s+ePVsJCQkKCwtTQkKC5s6dm2k+\nx48fV48ePZSYmKgiRYqoadOmGdLMmTNHLVu2VExMjIoWLar69evro48+8kozdepUGWMyfI4fP+5O\nM3ToUI0cOVJ//PFH7nc8mwj+AADIxIQJE9SnTx+tX79emzZtKujinJETJ04UdBHOOydPnizoIniJ\njo5WiRIlcr08tw4fPqxDhw6pVatWKleunIoVK5YhTVpamk6fPp3n276QlClTRmFhYQVdjAIRExOj\nyMjIs76dWbNmKTw8XE2aNHHPW7p0qTp37qyuXbtqzZo16tq1qzp16qT//ve/AfM5ffq0wsPD9cAD\nDygpKclvmsWLF6t58+b65JNPtHr1at1444265ZZb9N1333mli4yM1N69e70+4eHh7uU1a9ZUxYoV\nNX369DPc+6wR/AEAEMCxY8f07rvvqnfv3urYsaMmTZqUIc2ePXvUtWtXlShRQpGRkapdu7YWLVqk\nqVOnavjw4dqwYYP7Tu/UqVMl+e/65dslavTo0UpMTFRUVJTKlSunXr166fDhwzkqf3x8vIYNG6ae\nPXvq4osvVteuXSVJu3fvVpcuXVS8eHEVL15cSUlJ2rJli3u9nTt3Kjk5WZdccokiIyNVtWpVzZw5\nU1LgJ22ZdWe77LLLJElXX321jDHuO+grVqxQy5YtVbJkSV100UVq3Lixli5dmiHfN998U506dVJU\nVFSGH0iB8vaVXu53331XjRs3Vnh4uKpWraovvvjCnSa9K+2nn36qevXqKTQ0VJ9//rkk6Y033lCl\nSpUUGhqqSpUqacKECRm2sW/fPiUlJSkyMlJxcXEZfsgNHjxYV1xxhSIiIhQfH6+BAwd63f1PN3Hi\nRFWoUEERERFq166dV9ferJ4mey4fNmyYpk2bpk8++cR9Dn7zzTdq3rx5hq6CR44cUWRkpObMmZMh\nz2+++UbFixeXJDVv3tydT3qXwE8//VQ1atRQaGioNm3apLS0ND311FMqX768wsLCVLNmTc2bNy/D\nsZg5c6aaNGmiiIgIXXnllVq3bp3Wr1+vhg0bKioqSo0bN9a2bdsC7quUdTtJL+PChQtVo0YNRUVF\nqVmzZl75bt26VcnJySpTpoyioqJUp04dzZ8/P+A2R4wY4fcYNGrUSA899FDAepcytpNA14/clMuf\nP/74Q926dVOpUqUUHh6uihUrauzYse7lO3bs0C233KKiRYuqaNGiat++vXbt2hUwP3/nn2fX0Myu\ne77XuKy2nb6tmTNn6vLLL1fRokUztAd/3n33XbVt29Zr3tixY9WsWTMNGTJE1apV05AhQ9S0aVOv\nuvAVFRWl119/Xffcc49iY2P9phk3bpwGDx6sevXqqVKlSho6dKiuuuoqffjhh17pjDEqU6aM18dX\n27ZtNWPGjEz3LS8Q/AEAEMCsWbMUFxenxMREdevWTW+99ZbXk6CjR4+qSZMm2r59u+bOnasff/xR\nTz75pCSpc+fO6t+/v6644gr3nd7OnTtne9shISEaO3asNmzYoHfffVfLly/Xgw8+mON9GD16tKpW\nraqUlBQ988wz+vvvv9WsWTOFh4dr8eLFWrp0qS699FK1aNFCf//9tySpT58++vvvv7Vo0SJt2LBB\nY8eO1cUXX5zjbadbvny5JGnBggXau3evO8D4888/1a1bN3333Xdavny5ateurRtvvDHDj7sRI0Yo\nOTlZa9euVefOndWzZ0+lpqZmmncgAwcO1EMPPaQ1a9bohhtuUHJysnbv3u2VZtCgQRo5cqQ2b96s\n+vXra+7cuXrggQfUr18/rV+/Xn379lWfPn308ccfe603dOhQtW3bVmvWrNE999yj7t27ewXJUVFR\nmjx5sjZt2qTXXntNM2fO1NNPP+2Vx/bt2zV9+nTNmzdPX331lbZs2aKePXtmt6q9DBgwQLfeeqta\ntGjhPgcbNmyo3r17691339U///zjTjtjxgxFR0f77ZLYsGFDbdiwQZLTdS49H8npGjdy5Ei98cYb\n2rhxo+Li4jRu3Di98MILeu655/Tjjz/qlltuUfv27bVmzZoM9TVo0CCtXr1aF198sW6//XY9+OCD\nevrpp7V8+XIdP35cDz30UKb7mJ128s8//2jUqFGaPHmyli5dqsOHD+tf//qXe/lff/2lNm3a6Msv\nv9TatWvVoUMHtW/fXps3b/a7zZ49e2rz5s3uc0+SfvrpJ/3www+6++67A9a7r8yuH7kplz+PP/64\nfvzxR82fP1+bN2/W5MmTVa5cOUmStVbt2rXT/v379fXXX2vRokXas2eP2rVrJ2tttrfhKbvXvexu\ne/v27Xrvvfc0d+5cffHFF1q9erWGDBmSaRmWLFmiunXres1bunSpWrZs6TWvVatW+uGHH3K1n5n5\n888/3TdL0h07dkxxcXGKjY3VTTfdpNWrV2dYr169elq+fLmOHTuW52XyYq09rz9XXXWVPddIw6w0\nrKCLAQDnhI0bN2ac2bevtU2a5O+nb98cl/26666zL7zwgrXW2rS0NBsXF2dnzZrlXv7mm2/a6Oho\ne/DgQb/rDx061FavXj3DfEn2gw8+8JoXFxfn3pY/n332mQ0NDbWnT5+21lq7aNEiKyngttPzvOmm\nm7zmTZo0yVaqVMmmpaW55506dcpecskl9r333rPWWluzZk07bJj/77Ft27ZZSXbFihWZ7pPndKB1\nfKWlpdkyZcrYt99+2yufwYMHu6dPnjxpIyIi3Gmym3d6upEjR7rnnT592lauXNkOGTLEWvu/OvU8\nxtZa27BhQ3vXXXd5zbvzzjtto0aNvMrZq1cvrzTXX3+97dq1a8AyjR8/3l5++eXu6aFDh9qQkBCb\nmprqnvfdd99ZSfbnn392p/E8p7KavvPOO21SUpLXdo8fP25LlChhZ8yY4Z5Xr149279//4BlPXjw\noJVkFy1a5J43ZcoUK8mmpKR4pS1btqwdPny417wmTZq46yL9WLz++uvu5R9//LGVZGfPnu2Vf1RU\nVMAy+ePbTtLLuHnzZnea6dOn2yJFirjT+FO/fn371FNPeZX//vvvd08nJSXZe++91z09cOBA6/mb\n1F+9W+vdLrK6fuSmXL5uvvlm26NHD7/LvvjiCxsSEmK3bdvmnrd161ZrjLFffvmltTbjMfB3TctO\nGmu9r3HZ2fbQoUNtWFiYPXz4sDvNyJEjvdqMr99//91Ksl9//bXX/CJFithp06Z5zZs2bZoNDQ0N\nmJen+++/3zZp0iTLdK+88oqNjo6227dvd8/74Ycf7NSpU+3q1avtt99+azt06GAjIiLcbTrd2rVr\nrST7yy+/BMzf7/epi6QUm43YiSd/AAD48csvv+j777/X7bffLsnpttO1a1dNnDjRnWb16tVKTExU\nyZIl83z7X3/9tW644QbFxsa6u0SdOHFC+/bty1E+vnfAV65cqW3btqlo0aKKjo5WdHS0ihUrpt9/\n/11bt26VJPXt21cjR45UgwYN9Pjjj2vlypV5tl+eDhw4oHvvvVdVqlRRsWLFVLRoUR04cEA7duzw\nSpeYmOj+f+HChRUTE6MDBw7kapsNGjRw/z8kJET169fXxo0bvdL41tmmTZsyDPjTuHHjDOt55p0+\n7Zlm1qxZaty4scqUKaPo6Gj9+9//zrCv5cqVU4UKFdzT9evXV0hISJ6+bxoWFqZu3bpp8uTJkqSN\nGzdq+fLluXrCWLhwYdWuXds9feTIEe3Zsydb9eV5XEuXLi3JeffJc97Ro0fdT6T9yU47CQsL0xVX\nXOGeLlu2rE6ePOnuHnr06FENHDhQCQkJKl68uKKjo5WSkpLh2Hjq3bu3Zs6cqWPHjun06dN6++23\ndffddwdM709W14/clMvXfffdp/fff1+1atXKMBjQpk2bVLZsWcXHx7vnVaxYUWXLls1wrPJadrcd\nFxfn9X5p2bJlM2376U/NPN+nS2eM8Zq21maYdyZmz56tRx55RO+8847i4uLc8xs0aKA777xTtWvX\n1rXXXqv33ntPl19+uV5++WWv9SMiIrz24WwpfFZzBwDAn0zeszhXTJw4UadPn/b6IW5d3ZF27typ\n8uXL57prlDEmw7qe3UlTU1OVlJSk3r17a8SIESpRooRWrVql2267LceDtkRFRXlNp6WlqXbt2u53\n+DxdcsklkqS7775brVq10qeffqqvvvpKDRs21KOPPqphw4YpJMS5b+xZ/twOinLnnXdq//79GjNm\njOLj4xUWFqbrr78+wz4WKVLEa9oYo7S0tFxtMzt86yx9m9mZF8iyZcvUpUsXDR06VGPGjNHFF1+s\njz76SAMGDDijsuZWr169lJiYqB07dmjSpElq0KCBEhIScpxPWFiYChUqlGF+durL87imL/M3L9Cx\nzm47KVzY++eub74DBgzQggUL9OKLL6py5cqKjIxU9+7dM21r6e92zp49W8WKFdPhw4d12223BUzv\nT1bXj9yUy1ebNm2Umpqqzz77TAsXLlRSUpI6deqkKVOmZBr8BJofEhKS6bUru7K77Zy2/RIlSsgY\no99//91rfpkyZTLcODtw4ID7psOZmj17tvvVAN/3DX0VKlRIdevW9XrPWpJ+++03Sc7AOGcTT/4A\nAPBx6tQpTZs2TaNGjdKaNWvcn7Vr1yoxMVFTpkyRJNWpU0fr1q0LOABBaGio39EPY2JitHfvXvf0\n/v37vaZTUlJ04sQJjRkzRg0aNFCVKlW0Z8+ePNm3OnXq6JdfflHJkiVVqVIlr0968CdJsbGxuuee\ne/T+++9rxIgRevPNN91ll+RVXt93uXyFhoZKUoa6WLJkiR588EElJSWpevXqKlq0qFe+2REo70CW\nLVvm/r+1VsuXL1e1atUyXadatWpasmRJhrL7BkueeadPp+f9/fffq1y5cnriiSd09dVXq3Llyu73\nFj3t3r1bO3fudE8vX75caWlpWZYxkEDnYPXq1VW/fn1NmDBB06dPz/V7hb4uuugilS1bNlv1daby\nqp0sWbJE3bt3V4cOHZSYmKjY2Fj3U/BA0v/W4eTJkzV58mS1b9/e673YQPXuKavrR27K5U/JkiXV\nrVs3TZ06VZMmTdK0adP0zz//KCEhQbt379b27dvdaX/99Vft2bMn4LGKiYnR/v37vQJA3/afnX3P\nzbazIzQ0VAkJCX6fyn/55Zde87788ku/72Lm1Pvvv6877rhDU6dOVceOHbNMb63VunXrdOmll3rN\nX79+vcqWLZtnAWkgBH8AAPj45JNPdOjQIfXu3Vs1atTw+nTp0kWTJ09WWlqabr/9dpUqVUrt2rXT\nd999p23btumjjz5yj9YXHx+v1NRUrVq1SocOHXIPsNG8eXO9+uqrSklJ0erVq9WjRw+vbkqVK1dW\nWlqaxo4dq23btmnGjBmZjkqXE127dlXp0qWVnJysxYsXa9u2bfr222/Vv39/953ovn37asGCBfr1\n11+1Zs0aLViwwP2DLCIiQtdcc42ee+45bdiwQT/88EOWT69KlSqliIgIff7559q/f7/7b1lVqVJF\n06dP18aNG7VixQp16dLFHcxlV6C8Axk/frxmzZqln376Sf369VNqaqruu+++TNd55JFH9Pbbb+vV\n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\nOOEhffzx+kbtQ4bcqqFDi/TJJ7+QmSkajSsWizeZgbSec04rVpRpxIjbVV0dkSS99NJUHXxwSZNt\nX3ttlQ488O5m9/PBB2sVDF6j3Xcv0qpV5aqpSQxh3bTp0tTQ2Lq6mBYvXqe99uohv/+b0dEHH3yP\nXnll5TZf72GH3bfN9RMn7qF77z1eBQWhbW4HAAAApBM9fxnQsOfvtNP21H33TZSUuK5f/eUdmvOH\nPxypCy8c2+y66uqI8vISPXr77ddHb7xxVvoK/hY+/3yT1q6t1OTJj2rVqvKtbvf886dp/PiBqeXl\ny0v17rtrdNttb+vll7cdojZtulS5uVn6858X6L/+a+42t+3fv7MOPrhEBx3UT3/84zt6//21zW7n\n95v69u2sFSu2PhNqa91xx7E688zvatWqcvn9psGDb200oc/WXHzxfho2rFivv75Kd931gSTp+9/v\nq5dfPkOBQCJwrlmzWTU1UQWDfhUUBHXAAXdr8eJ1TfaVl5el//3fH2jp0k3697+XqVevAhUV5aiw\nMFs33ni4/H6fotG4AgGfli8v1fz5X+rUU0cwRBUAAGAXwLDPdtQw/E2ePDI1EcsDD3yoKVMe2+Zj\ntzac87rrXk1dfqFhD1VH8MUX5frww691zDGzdcMN43XppYkZRKurf6OcnKytPq65IaTp9uGHP9eN\nN76h++//ULHYVanzDKurI5o8+R/aZ59eCodj+v73++roo//eon0uXnyuhg/f9jUPV6wo0/LlpQqH\nY5owYXDqOf/2tw9VWlqjyy57YcdeWCuZSdv7VR84sIuWLStVSUmhRozoroMP7q+LLhorv98n55ye\neWaJsrJ8+u53eyked1q5skxr1lRq7Ng+6tkzv8W1XHfdqzrwwP4aNqxYr722Sps3h9W/f2Gqp7ao\nKEdduuTossv219Spo+T3J35mH320Xs8+u0RffFGusrKwzj9/X33ve32+9XsCAACwqyD8taOG4e+k\nk4brwQd/JElau7ZSvXr9rtG2P/vZ3vrLX76Z6bOy8nLl518nSVq27AINGNClyT5bMjHMzigWi2vZ\nslK99lqiJ+y111al1v3oR8P08MOTmjwmGo3r9NMf0+zZi5us+zbvU21tVKGQP9Uj5pzTxx+v13e+\nU6xly1p+PcbticedZs58SbNmvaIDDuinUaN66Cc/+a4mTXpYy5aVbvOxixadq2HDihtNmPPOO19p\n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\n2WX61a9+JUk65JBDtHTpUl122WXbDX933HGHfL7EgLNt9cS+9957jd6TQw45RM45TZ8+XcuWLdPA\ngQMbbV9WVqaLLrpIN998syZPntxkf08//bQ2bNig119/XUOHDpUkHXroofr888913333Ef7gOQz7\nBACgHbz//vs68MADlZubqyFDhujPf/5zk22WL1+uH//4xyouLlYoFNKoUaP02GOPbXO/M2bMSA0x\nPeuss2RmqSF2Ww77fOmll2RmevLJJ3X++eerW7duKi4u1pQpU1RWVtZov7fddpv2228/de3aVYWF\nhRo7dqyeeeaZb/XaZ8yYITPTokWLdMghhyg3N1e9evXSVVddpXg83qS+Rx99VD/96U9VXFysHj16\npNY/99xz2m+//ZSTk6POnTvr+OOP16efftrscz7xxBMaMWKEQqGQ9thjDz300EON1i9dulSnnXaa\nBgwYoJycHA0cOFDnnnuuSktLm93fG2+8oX333VfZ2dkqKSnRrbfe2mh9c0M6t7TlNmYmSbr22mtT\nw4VnzJihm266SaFQSOvXr2/0eOecBg4cqFNPPXWrz1G/34a90J999pkmTpyo7t27Kzs7W/369dOk\nSZO2OQxy7ty5qqur05QpUxq1T5kyRYsWLdLy5cu3WUN98Nue5sLwvvvuKynxpcaWLr30Ug0fPnyr\n70H9cNFOnTo1ai8sLGx0rAFeQfgDAKCNVVRUaPLkyZoyZYqeeOIJ7bvvvjr33HM1b9681DZffPGF\nvve972nhwoW6+eab9eSTT2rvvffWiSeeqCeffHKr+z777LNTw+OuuOIKzZ8/f7vDPS+88EKZmf7+\n97/rqquu0j/+8Q9deOGFjbZZsWJFat8PPvigRo8erWOOOUb//Oc/v/X7cPzxx2v8+PF6/PHHNXny\nZF199dWaNWtWk+1++ctfyjmn+++/P3U+4XPPPaejjz5a+fn5evDBB3X77bdr8eLFOuCAA5qEhKVL\nl+qCCy7QxRdfrEcffVSDBw/WKaec0uj9Xr16tfr06aM//OEPmjt3rq666iq98MILzfZoVVRU6OST\nT9bUqVP1+OOPa9y4cbrgggt2+FzH+uHDZ5xxhubPn6/58+fr7LPP1plnnimfz6e777670fb/+te/\ntHz5cp1zzjmtep5jjjlGX331lW6//XbNnTtXv/3tbxUKhbYZhj766COFQiENHjy4Ufvw4cMlSR9/\n/HGramiNl19+WT6fL9VzV++1117Tfffdt83je9KkSerWrZvOP/98LV++XBUVFXrsscd0//336+KL\nL85YzUCH5ZzbqW/77LOP62hOP/0xV1Lyh/YuAwDQTvr37+9+/OMfN7tu6tSpTpJ78cUXU221tbWu\nqKjI/fSnP021nXnmma5bt25uw4YNjR4/fvx4t9dee23z+ZcsWeIkubvvvrtR+8EHH+wOPvjg1PK8\nefOcJHf66ac32u4Xv/iFC4VCLh6PN7v/WCzmIpGIO/zww91xxx2Xal++fHmzz7ul6dOnO0nuuuuu\na9R+9tlnu/z8fFdaWtqovuOPP77JPvbZZx83ePBgF4lEUm3Lli1zgUDAXXTRRY1esyQ3f/78VFs0\nGnW77767O+CAA7ZaYyQSca+++qqT5N57771Ue/3Pb/bs2Y22Hz9+vOvXr1/qPbv77rudJLd8+fLU\nNv3793dTp05NLTe3jSQ3bdq0JvVMnTrVDRo0qNHPZOLEiW733Xff6mtouM/p06c755xbv369k+Se\neOKJ7T6uoZ/+9KeuR48eTdrrj7X77ruvxfvaf//9Gx2H27Jw4UKXnZ3tzj777EbtdXV1btiwYY3e\nq629d0uWLHHDhg1zkpwkZ2Zu5syZLa4X2BlIWuBakJ3o+QMAoI3l5ubqkEMOSS2HQiENGTJEq1at\nSrU999xzOuqoo9S5c2dFo9HU7cgjj9TChQtVUVGRtnqOPvroRssjR45UOBzW119/nWp79913dcwx\nx6hHjx4KBALKysrS888/v9Vhli1x0kknNVo+5ZRTVFlZqcWLFzdqnzhxYqPlqqoqvffeezr55JMV\nCHwzfcGAAQO0//776+WXX260fd++fRud9+b3+zVp0iS9/fbbqd6uuro6/c///I/22GMP5eTkKCsr\nSwceeKAkNXmNfr9fJ554YpPaV61a1ezQxHQ477zz9Pnnn+uFF16QJK1Zs0ZPPfVUq3v9ioqKNHDg\nQF122WW64447tGTJkhY9zjmXGpa6ZXumrFmzRj/84Q81aNAg/f73v2+07vrrr1dNTY2mTZu2zX2s\nX79eJ5xwgvLy8vTII49o3rx5uuKKK3TNNddwvh88ifAHAEAb69KlS5O2UCjUaBbEdevW6b777lNW\nVlaj2yWXXCJJ2rhxY9rq6dq1a5NaJKXq+eKLL3TYYYdp06ZNuvXWW/XGG2/onXfe0YQJE7Y5c+P2\nNDx/r+HylgFqyxkzS0tL5ZxrdibNnj17atOmTdt8nvq2urq61Hl0l19+uWbMmKEpU6bomWee0dtv\nv61HH31Ukpq8xi5duigrK6tFtafLmDFjNHr06NS5oXfeeacCgYCmTp3aqv2YmZ5//nmNHj1al19+\nuYYOHaqBAwfq9ttv3+bjunbtmnrfG6o/J3LLY2hHbdy4UYcffricc5o7d64KCgpS61atWqVrr71W\nV199tcLhsMrKylLnqNYvx2IxSdINN9ygFStWaO7cuTrxxBM1btw4zZo1S5dccomuvPJKbdiwIa11\nAx0ds30CANABFRUV6cADD9Svf/3rZtf37t27zWp57rnnVF5eroceeqjRJQOqq6t3aL9ff/11o9kb\n63sad9ttt0bbbdnj1KVLF5mZ1q5d22Sfa9euVVFRUZPnae65g8FgaoKROXPm6PTTT290nbjKyspm\n6y4tLVUkEmkUALdWezqde+65Ouecc/TVV1/pzjvv1KRJk75V6Bo4cKDuu+8+Oee0cOFC3XbbbTrv\nvPNUUlKiH/zgB80+Zvjw4QqHw/r8888bnfdXf65fOmeSraio0JFHHqmNGzfq1VdfbfKeLlu2TLW1\ntU0mn5Gkm266STfddJPef/99jRo1SosWLdLgwYObfOEyZswYRSIRLV26VN26dUtb7UBHR88fAAAd\n0IQJE/Thhx9q+PDhGj16dJNbW17uoD7kNQw7n332mV5//fUd2u+WM27OmTNH+fn5GjFixDYfl5eX\np3322UcPP/xwqodHklauXKk33nhDBx98cKPtv/jiC7355pup5VgspocfflhjxoxJzUJZXV3dpDdv\nywlWGj5+y4ubz5kzR/369dvh8BcMBlVTU9PsulNPPVUFBQWaPHmyVq1apZ///Oc79FxmplGjRqWG\nVG453LahCRMmKBgM6oEHHmjU/re//U0jRozQgAEDdqiWetXV1Tr66KO1fPly/etf/2oywYwkjRo1\nSvPmzWtykxKzj86bNy/1uJ49e2rp0qVNZm196623JGU2rAMdET1/AAB0QLNmzdKYMWN00EEH6fzz\nz1dJSYlKS0u1ePFiLVu2THfddVeb1TJ+/HgFAgGdfvrpuvjii7VmzRpNnz5d/fr126Hp8u+44w7F\n43Htu+++mjt3ru68807NmDFDhYWF233s1VdfraOPPlrHHHOMzjvvPFVWVmr69Onq3Llzk1kce/To\n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\nzMzMOsB/AV/aS5opdK6KAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1c9e8710eb8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Plot blank figure\n",
"plt.figure(figsize=(15,10))\n",
"#Plot resultant probability from simulation\n",
"plt.plot(sample_span,prob,color=\"navy\",linestyle=\"-\",label=\"Resultant probability from simulation\")\n",
"#Plot resultant probability from analytical solution\n",
"plt.plot(sample_span,[0.125]*len(sample_span),color=\"red\",linestyle=\"-\",label=\"Actual resultant probability from analytical solution (0.125)\")\n",
"#Plot value of final resultant probability in text\n",
"plt.text(sample_span[int(number_of_samples/2)],0.05,f\"The final probability is {prob[-1]:.4f}\",fontsize=16)\n",
"#Display axis labels\n",
"plt.xlabel(\"Number of iterations\",fontsize=14)\n",
"plt.ylabel(\"Probability\",fontsize=14)\n",
"#Display legend\n",
"plt.legend(loc=\"upper right\",fontsize=14)\n",
"#Display title of the plot\n",
"plt.title(\"Variation of resultant probability with increase in the number of iterations\",fontsize=14)"
]
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment