Skip to content

Instantly share code, notes, and snippets.

@NTT123
Created July 6, 2018 11:47
Show Gist options
  • Save NTT123/bd53a3ff63df64145d218c8251716aef to your computer and use it in GitHub Desktop.
Save NTT123/bd53a3ff63df64145d218c8251716aef to your computer and use it in GitHub Desktop.
Sampling.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Sampling.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [
"IZ6k1-7cwWo9",
"ULLpp4ly2a9z",
"twzARHsO3Xk8"
],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"[View in Colaboratory](https://colab.research.google.com/gist/NTT123/bd53a3ff63df64145d218c8251716aef/sampling.ipynb)"
]
},
{
"metadata": {
"id": "EJT5qtGN7kZ-",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Sinh số ngẫu nhiên\n",
"\n",
"\n",
"Giả sử ta muốn sinh ra một số ngẫu nhiên với biến ngẫu $X$ theo một phân phối xác suất có hình parabol như bên dưới. Công thức của hàm số mật độ xác suất là:\n",
"$$\n",
"f_X(x) = \\frac{3}{256} \\left(-x^2 + 16 \\right), x \\in [-4, 4]\n",
"$$\n",
"\n",
"Mật độ xác suất tập trung cao nhất tại xung quanh giá trị $0$ và giảm dần về hai phía theo hình parabol."
]
},
{
"metadata": {
"id": "lTBWtDEJ8W4q",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"outputId": "756a0720-58f9-4766-e929-cf5e8203cde7"
},
"cell_type": "code",
"source": [
"#@title\n",
"import matplotlib.pyplot as plt\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"fig= plt.figure()\n",
"axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.5)\n",
"#axes.plot(a,b)\n",
"plt.show()\n"
],
"execution_count": 1,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376fde41d0>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "4HFvASDT-iPE",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## Cách 1: Inverse transform sampling\n",
"\n",
"\n",
"Giả sử ta được cung cấp một biến ngẫu nhiên $Y$ phân phối đều trên khoảng $[0,1]$:\n",
"$$\n",
"Y \\sim \\text{Uniform}(0, 1)\n",
"$$\n",
"\n",
"Giá trị ngẫu nhiên của $Y$ có thể dễ dàng được sinh ra bởi lời gọi hàm \n",
"``numpy.random.uniform()``.\n",
"\n",
"Bây giờ ta muốn thiết kế một hàm số $g: \\mathcal{R} \\to \\mathcal{R}$, sao cho \n",
"$$\n",
"X = g(Y)\n",
"$$\n",
"Tức là, để sinh ra một giá trị ngẫu nhiên của $X$, ta đơn giản sinh ra giá trị $Y$ ngẫu nhiên, và sau đó áp dụng hàm $g$ để sinh ra $X$ ngẫu nhiên tương ứng.\n",
"\n",
"Hàm số ta cần tìm có nghịch đảo như sau:\n",
"$$\n",
"g^{-1}(x) = F_X(x) = \\Pr[X < x] = \\int_{u=-\\infty}^x f_X(u) du\n",
"$$\n"
]
},
{
"metadata": {
"id": "y9HVJLYz_wOt",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"\n",
"\n",
"<details><summary>Click để xem chứng minh vì sao vậy</summary>\n",
"<p>\n",
"Ta có $$\n",
"Y = g^{-1}(X)\n",
"$$\n",
"\n",
"Xét commulative distribution function của $Y$,\n",
"$$\n",
"\\begin{align}\n",
"F_Y(y) &= \\Pr[Y < y] \\\\\n",
"& = \\Pr[g^{-1}(X) < y]\\\\\n",
"&=\\Pr[ X < g(y) ] \\\\ \n",
"&=F_X(g(y) )\\\\\n",
"&= g^{-1}(g(y)) \\\\\n",
"&=y\n",
"\\end{align}\n",
"$$\n",
"\n",
"Ở đây ta sử dụng tính chất đồng biến của $g^{-1}$, nên \n",
"$$\n",
"g^{-1} (X) < y \\iff X < g(y)\n",
"$$\n",
"\n",
"Bởi vì $F_Y(y) = y$ cho nên $Y \\sim \\text{Uniform}(0,1)$.\n",
"</p>\n",
"</details>\n",
"\n"
]
},
{
"metadata": {
"id": "jkhzulJ6TaYM",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Ta có:\n",
"\n",
"$$\n",
"\\begin{align}\n",
"g^{-1}(x) &= \\int_{u=\\infty}^ x f_X(u) du\\\\\n",
"&= \\int_{u=-4}^x \\frac 1 {128} \\left( -u^2 + 16\\right) du \\\\\n",
"&= \\left.\\frac 3 {256} \\left( -\\frac 1 3 u^3 + 16u\\right) \\right|_{-4}^x \\\\\n",
"&=- \\frac 1 {256}(x-8) (x+4)^2 \n",
"\\end{align} \n",
"$$\n",
"\n",
"Ở đây chúng ta sẽ lợi dụng tính chất đồng biến của hàm $g^{-1}(x)$ (hình minh họa bên dưới), để có thể tính $g(x)$ bằng phương pháp tìm kiếm nhị phân trên khoảng $[-4,4]$. "
]
},
{
"metadata": {
"id": "kh8GZPTpijpC",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "1f4b7f31-640e-45c3-883e-5fe7d7044609"
},
"cell_type": "code",
"source": [
"#@title\n",
"import matplotlib.pyplot as plt\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=-1.0 / 256 * ((x/10 + 4)**2 * (x/10 - 8))\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"fig= plt.figure()\n",
"axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.5)\n",
"#axes.plot(a,b)\n",
"plt.show()\n"
],
"execution_count": 2,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n8Q+7R5mz4eFhffOb39Stt96quro6HTlyxO6R5iyZTOpHP/qRvvzlL+tLX/qS3nrrLbtHmrPm5mat\nX79ehw4dsnuUOdu9e7e2bt2quro6vf3223aPMy/Hjh1TbW2tnnvuObtHmbdHH31UW7du1c0336xX\nX33V7nHmJBqN6nvf+55uueUWbdmyxdXfJyfFYjHV1taqsbEx7+9Vmvd3KJBHH31Ul19+ud1jzMvL\nL7+sL3zhC/rc5z6n5uZm/eIXv9Bvf/tbu8eakz/96U+68MIL9cILL6i1tVX333+/Dhw4YPdYs9bT\n06NnnnlGa9eutXuUOWtublZ3d7caGhrU3t6u+vp6NTQ02D3WnEQiET300ENav3693aPM25tvvqnW\n1lY1NDQoFArppptu0qc//Wm7x5q1Q4cO6corr9Sdd96p/v5+3XHHHbruuuvsHmtennzySS1durQg\n7+WJCDc1NWnJkiW64oor7B5lXr7+9a9nvh4cHNQll1xi4zTz8/nPf1433nijJKmyslKjo6M2TzQ3\nVVVVevzxx7Vjxw67R5mzpqYm1dbWSpJWrVqlsbExhcNhlZWV2TzZ7C1cuFBPP/20nn76abtHmbd1\n69ZpzZo1kqSLLrpI0WhUqVRKJSUlNk82OzfccEPma7f/3JKk9vZ2tbW16dprry3I+7l+d/TU1JSe\neOIJ3XvvvXaPkhOBQEA333yznnzySd1zzz12jzNnCxYs0KJFiyRJv//97zNBdpsLL7zQdT8U/1cw\nGFRFRUXmcWVlpQKBgI0TzV1paakuuOACu8fIiZKSEi1evFiSdODAAW3cuNHV/9bq6uq0bds21dfX\n2z3KvOzZs0fbt28v2Pu5akv4xRdf1Isvvnja723cuFFbtmzRRRddZNNUc3O2tXz3u9/Vpz71Kf3x\nj3/U3//+d91///2u2B19vrU8//zzamlp0VNPPWXTdDN3vnV4CXeqdZa//vWvOnDggCu+189n//79\n+u9//6sf/OAHevnll2WMsXukWXvppZd01VVXFfTQpqsivGXLFm3ZsuW036urq1M6ndbzzz+vnp4e\nvf322/rFL36hD3/4wzZNOTNnW0tzc7PGxsa0dOlSbdq0ST/84Q9tmm52zrYW6UTU/va3v+lXv/qV\nFixYYMNks3OudbhddXW1gsFg5rHf71dVVZWNE+Gk1157TU899ZR+85vfqLy83O5x5uTo0aO6+OKL\ntWzZMn3kIx9RKpXSyMiILr74YrtHm7XDhw+rt7dXhw8f1vHjx7Vw4UJdeuml+uQnP5m393RVhM9m\n//79ma+3b9+um266yfEBPpdXX31V//nPf/S1r31N7777rpYtW2b3SHPW29ur/fv367nnnsvsloY9\nNmzYoL1796qurk4tLS2qrq7awOCNAAABHklEQVR25fFgr5mYmNCjjz6q3/3ud3rf+95n9zhz9tZb\nb6m/v187duxQMBhUJBI57fCHm/z85z/PfL13714tX748rwGWPBBhL/n2t7+t7du36y9/+Yumpqb0\n4IMP2j3SnL344osaHR3VXXfdlfm9ffv2aeHChTZONXuHDx/Wvn371NHRoZaWFj377LOu2224du1a\n1dTUqK6uTsYY7dy50+6R5uzo0aPas2eP+vv7VVpaqoMHD2rv3r2ujNgrr7yiUCh02rkfe/bs0WWX\nXWbjVLNXV1enHTt26Ctf+YpisZgeeOAB+XyuP92oYPgoQwAAbMJ/VwAAsAkRBgDAJkQYAACbEGEA\nAGxChAEAsAkRBgDAJkQYAACbEGEAAGzy/wGLBJpTwQ+dAwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376fde4128>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "292_SaMOahBJ",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"import math \n",
"\n",
"def g_inverse(x):\n",
" return -1.0 / 256 * (x-8) * (x + 4)**2\n",
"\n",
"def g(x):\n",
" l,r = -4.0, 4.0\n",
" m = 0.0\n",
" while math.fabs(l-r) > 1e-6:\n",
" m = (l + r) / 2\n",
" v = g_inverse(m)\n",
" if v < x:\n",
" l = m\n",
" else:\n",
" r = m\n",
" return m\n",
" "
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "sjdMaq5vjQyJ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"\n",
"\n",
"\n",
"Ta có được hàm sinh giá trị ngẫu nhiên cho $X$ như sau "
]
},
{
"metadata": {
"id": "SGJhu0-KjWCA",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"\n",
"def generateX():\n",
" y = np.random.uniform()\n",
" return g(y)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "rUjnfUD9joWN",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Ta kiểm tra kết quả bằng cách sinh ngẫu nhiên $100000$ giá trị và vẽ nên hàm mật độ tương ứng "
]
},
{
"metadata": {
"id": "4BwDIJxjj1Zo",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"Xs = [generateX() for _ in range(100000)]"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "PzptVdDbj6Uv",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 349
},
"outputId": "6f88c79a-e474-44ad-933f-950760502d4f"
},
"cell_type": "code",
"source": [
"#@title\n",
"# the histogram of the data\n",
"n, bins, patches = plt.hist(Xs, 50, density=True, facecolor='g', alpha=0.35)\n",
"\n",
"\n",
"plt.ylabel('Probability')\n",
"#plt.show()\n",
"\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"#fig= plt.figure()\n",
"#axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.85)\n",
"#axes.plot(a,b)\n",
"plt.show()\n",
"\n"
],
"execution_count": 6,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfsAAAFMCAYAAADMRBUfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xt0VOW9//H3s4MphAQkmCB4RQqW\nxvI7cmqrpIJY0KXLHrUVTKlYe+zFpeKlWrFpufRU8IguVovW2ovas7xmQbN6WGfZA0eP9uevhlBv\noFEhCSHknplkMskkk9vM/v0RGUWSkMvM7Jk9n1f/aGZ29sznEZjvPM9+9vMY27ZtRERExLUspwOI\niIhIbKnYi4iIuJyKvYiIiMup2IuIiLicir2IiIjLqdiLiIi43IRYvvjmzZvZt28fxhgKCwtZsGBB\n5NiePXvYunUrlmUxe/ZsNm3ahGVZg57T0NDAfffdRygUIicnh4cffpj09PRYRhcREXGNmPXs9+7d\nS3V1NUVFRWzatIlNmzYdc3z9+vVs27aNF198kc7OTl5//fUhz9m2bRurVq3i+eef56yzzmLHjh2x\nii0iIuI6MevZl5SUsGzZMgDmzJmD3+8nEAiQmZkJQHFxceTn7OxsfD4f77777qDnlJaW8otf/AKA\npUuX8tRTT7Fq1aoh39vj6Yh6e6ZNy8Dn64r668abW9oBakuicktb3NIOUFsSVbTbkpOTNeSxmBV7\nr9dLXl5e5HF2djYejydS4I/+f3NzM3//+9+588472bp166DnBIPByLD99OnT8Xg8w773tGkZTJiQ\nFu0mDfsfMpm4pR2gtiQqt7TFLe0AtSVRxastMb1m/2mDrcrb0tLCLbfcwoYNG5g2bdqIzhnJ6r6x\n+NaXk5MVkxGDeHNLO0BtSVRuaYtb2gFqS6KKdluG++IQs2v2ubm5eL3eyOPm5mZycnIijwOBAD/4\nwQ+46667+NrXvjbsORkZGXR3dwPQ1NREbm5urGKLiIi4TsyKfX5+Prt27QKgrKyM3NzcyNA9wL//\n+7/z3e9+l8WLF5/wnEWLFkWe3717NxdffHGsYouIiLhOzIbxFy5cSF5eHgUFBRhj2LBhA8XFxWRl\nZfG1r32Nv/zlL1RXV0dm1l911VVcf/31x50DsGbNGtauXUtRURGzZs3immuuiVVsERER1zFu3OI2\n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\nxAsvvEB5eTk//elPHVlKORqOHDnC008/zcKFC52OMiafXuq6srKSwsJCioqKnI41Jl1dXfzyl7/k\noosucjrKuO3Zs4fy8nKKiorw+Xxce+21XHbZZU7HGrVXX32V8847jx/84AfU1dXxr//6ryxdutTp\nWOPy29/+lqlTp8bt/VTsR6ikpITJkyczb948p6OMy/e+973Izw0NDcyYMcPBNOPzL//yL1x11VXA\nwGqLbW1tDicau5ycHB577DF+9rOfOR1lTIZa6vro7bbJJD09nT/84Q/84Q9/cDrKuF1wwQWRDcim\nTJlCMBgkFAqRlpbmcLLRufLKKyM/J/vnFkBlZSUVFRVccsklcXtPDeOPQG9vL7/5zW+4++67nY4S\nFR6Ph29961v89re/5a677nI6zpiddNJJfO5znwPgP/7jPyKFPxlNmjQp6T6AP83r9TJt2rTI46NL\nXSejCRMmMHHiRKdjREVaWhoZGRkA7Nixg8WLFyf137OCggLuvfdeCgsLnY4yLg899BD3339/XN9T\nPfvP2L59O9u3bz/mucWLF7NixQqmTJniUKqxGawta9as4eKLL+bPf/4zf/vb3/jpT3+aFMP4w7Xl\nueeeo6ysjCeeeMKhdKMzXFvcQnf0JpaXX36ZHTt2JMW/9eG8+OKLfPjhh/zkJz9h586dGJN825P9\n5S9/4Z/+6Z/ifklYxf4zVqxYwYoVK455rqCggHA4zHPPPceRI0fYv38/v/71r5k7d65DKUdmsLbs\n3bsXv9/P1KlTWbJkCffdd59D6UZnsLbAQOH83//9Xx5//PGkWWhpqLYks+GWxxZnvf766zzxxBP8\n8Y9/JCsrfvunR9P777/P9OnTmTlzJvPnzycUCtHa2sr06dOdjjZqr732GjU1Nbz22ms0NjaSnp7O\nqaeeyqJFi2L6vir2I/Diiy9Gfr7//vu59tprE77QD2X37t188MEH3HTTTRw4cICZM2c6HWnMampq\nePHFF3n22Wcjw/nijPz8fB599FEKCgqOWx5bnNPR0cGWLVv405/+xMknn+x0nDF78803qaur42c/\n+xler5eurq5jLhslk1/96leRnx999FFOO+20mBd6ULFPObfeeiv3338///M//0Nvby8bN250OtKY\nbd++nba2Nn74w0+2Hn7yyScj2yEnk9dee40nn3ySQ4cOUVZWxjPPPJNUQ64LFy4kLy+PgoKCyFLX\nyer999/noYceoq6ujgkTJrBr1y4effTRpCyWL730Ej6f75i5OQ899BCzZs1yMNXoFRQU8LOf/YxV\nq1bR3d3N+vXrsSxNORsNLZcrIiLicvpqJCIi4nIq9iIiIi6nYi8iIuJyKvYiIiIup2IvIiLicir2\nIiIiLqdiLyIi4nL/H8IVJEGJTJrfAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376dd01d68>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "JW16knpRkGYg",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "IZ6k1-7cwWo9",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## Cách 2: Rejection Sampling\n",
"\n",
"Thay vì sinh một số thực ngẫu nhiên trong khoảng $[-4, 4]$, ta sẽ sinh một điểm ngẫu nhiên trong mặt phẳng 2 chiều, điểm này có phân phối đều và nằm bên trong hình parabol. \n",
"\n",
"Chiếu xuống trục hoành sẽ cho ta biến ngẫu nhiên $X$.\n",
"\n",
"Để sinh một điểm ngẫu nhiên bên trong parabol, trước tiên ta sinh ra một điểm ngẫu nhiên nằm bên trong hình chữ nhật (màu đỏ) bao lấy parabol (màu xanh) và sau đó loại đi những điểm nằm ngoài parabol. (Hình minh họa bên dưới.)\n",
"\n"
]
},
{
"metadata": {
"id": "p49FbAq2zAx6",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "c8f2f983-6fd5-43d8-f68f-17627634e54b"
},
"cell_type": "code",
"source": [
"#@title\n",
"import matplotlib.pyplot as plt\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"fig= plt.figure()\n",
"axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.5)\n",
"#axes.plot(a,b)\n",
"\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y= 0.2\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"plt.fill_between(a,b,color=\"red\", alpha=0.1)\n",
"#axes.plot(a,b)\n",
"plt.show()\n"
],
"execution_count": 7,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n8fFxfvCDH/Doo486XUpBhEIhvvzlL/PDH/6QRx55xOlyZm3RokVcddVVAPzLv/xLLsDdqKqqynUf\npO8XDodZtmxZ7nFtbS2hUMjBimavoqKCq6++2ukyCqK8vJzq6moAWltb2bRpk6v/O2tsbORb3/oW\nTU1NTpcyJ8888wxPPPHEgr6nZ4+0X3vtNV577bXLfrZp0ya2b9/OkiVLHKpqdq7Uy+7du7nlllv4\n13/9V/7rv/6Lb3/72644PT5VLy+//DJdXV08//zzDlU3M1P14hWa5bi4/PKXv6S1tdUVv+tTefXV\nV/nf//1f/vZv/5ajR49ijHG6pBn7+c9/zp/8yZ8s+FCrZ0N7+/btbN++/bKfNTY2MjExwcsvv8y5\nc+d46623+N73vsfatWsdqnJ6rtRLZ2cnsViMpUuXcuutt/L44487VN3MXKkXyAbgf/7nf/KP//iP\nLFq0yIHKZm6yXtwsEAgQDodzj4PBIH6/38GK5JI33niD559/nn/6p3+ipqbG6XJm5e2336auro4V\nK1awfv16MpkMg4OD1NXVOV3ajP3617+mp6eHX//61/T391NZWcl1113HzTffPK/v69nQvpJXX301\n9+cnnniCu+66q+gDezLHjx/nf/7nf7jvvvv44x//yIoVK5wuadZ6enp49dVXeemll3KnycUZDQ0N\nPPfcczQ2NtLV1UUgEHDleLbXjIyMcPDgQf75n/+Za665xulyZu13v/sdFy5c4Dvf+Q7hcJixsbHL\nhmPc5B/+4R9yf37uuef4yEc+Mu+BDSUW2l7yjW98gyeeeIL/+I//YHx8nH379jld0qy99tprDA0N\n8Td/8ze5nx05coTKykoHq5qdX//61xw5coR3332Xrq4ufvrTn7rqVObGjRupr6+nsbERYwzNzc1O\nlzRrb7/9Ns888wwXLlygoqKCY8eO8dxzz7ky9P793/+daDR62bUrzzzzDCtXrnSwqplrbGzkO9/5\nDjt37iSZTLJ3717Kykrq0qo509KcIiIiLqGvOCIiIi6h0BYREXEJhbaIiIhLKLRFRERcQqEtIiLi\nEgptERERl1Boi4iIuIRCW0RExCX+Pxb8tHM3HJ+mAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376d974b70>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "thkfsdrq1Aou",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Ta có được hàm sinh biến ngẫu nhiên $X$ như sau:"
]
},
{
"metadata": {
"id": "o4sPytAX0Gd2",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"def pdf(x):\n",
" if x <-4:\n",
" return 0\n",
" if x > 4:\n",
" return 0\n",
" return 3.0 / 256 * (-x**2 + 16 )\n",
"\n",
"def generateX_RS():\n",
" while True:\n",
" x = np.random.uniform(-4, 4)\n",
" y = np.random.uniform(0, 0.2)\n",
" if pdf(x) > y:\n",
" return x"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "IDxNvh820kY3",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"Xs_RS = [generateX_RS() for _ in range(100000)]"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "lYJyA8Sf1FwV",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Một lần nữa, ta sinh ra $100000$ giá trị ngẫu nhiên và kiểm tra kết quả"
]
},
{
"metadata": {
"id": "omCkJ5RH0oAG",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 348
},
"outputId": "eac08e09-09e4-4429-b425-4e8a93353bdc"
},
"cell_type": "code",
"source": [
"#@title\n",
"# the histogram of the data\n",
"n, bins, patches = plt.hist(Xs_RS, 50, density=True, facecolor='g', alpha=0.35)\n",
"\n",
"\n",
"plt.ylabel('Probability')\n",
"#plt.show()\n",
"\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"#fig= plt.figure()\n",
"#axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.85)\n",
"#axes.plot(a,b)\n",
"plt.show()\n",
"\n"
],
"execution_count": 10,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfsAAAFLCAYAAADRQSWnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xt0VeWd//H3sxNSiARIMIeLaFUE\ny+DQKTO2I6kgCrp02VHbghHFOmNtXbV4qY7YtALrV8URXawWrdqLbafV2izSrA5rxg6MjnY5GhO1\nGiBccoGE3HNOcnI5ueec/fsjchQIIZdzzj5n5/Pyj+Zkn73zeazJ9zzPfvbzGNu2bURERMS1LKcD\niIiISHSp2IuIiLicir2IiIjLqdiLiIi4nIq9iIiIy6nYi4iIuFxyNC++detWiouLMcaQk5PDkiVL\nwsfeffddtm/fjmVZXHDBBTz++ONYljXkOfX19Tz88MMEg0EyMzN56qmnSElJiWZ0ERER14hasS8q\nKqKqqorc3FwqKirIyckhNzc3fHzTpk389re/Zfbs2dx777289dZbTJkyZchzduzYwbp167j22mvZ\nvn07eXl5rFu37rQ/2+vtiHh70tNT8fu7In7dWHNLO0BtiVduaYtb2gFqS7yKdFsyM9NOeyxqw/gF\nBQWsWrUKgPnz59PW1kYgEAgfz8/PZ/bs2QBkZGTg9/tPe05hYSFXXXUVACtXrqSgoCBasU8rOTkp\n5j8zGtzSDlBb4pVb2uKWdoDaEq9i2ZaoFXufz0d6enr4dUZGBl6vN/x66tSpADQ1NfH222+zYsWK\n057T3d0dHrafOXPmCdcRERGR4UX1nv2nDbUqb3NzM3fffTebN28+ocgPd85IVvdNT0+Nyiem4YZI\nEolb2gFqS7xyS1vc0g5QW+JVrNoStWLv8Xjw+Xzh101NTWRmZoZfBwIB7rrrLu6//36+/OUvD3tO\namoqPT09TJ48mcbGRjwez7A/Oxr3czIz06IyFyDW3NIOUFvilVva4pZ2gNoSryLdFkfu2WdlZbF7\n924ASkpK8Hg84aF7gH/7t3/jG9/4BsuXLz/jOcuWLQt/f8+ePVx++eXRii0iIuI6UevZL126lMWL\nF5OdnY0xhs2bN5Ofn09aWhpf/vKX+dOf/kRVVRV5eXkAXH/99dx8882nnAOwYcMGNm7cSG5uLnPn\nzuXGG2+MVmwRERHXMW7c4jYaQzxuGTpySztAbYlXbmmLW9oBaku8csUwvoiIiMQHFXsRERGXU7EX\nERFxORV7ERERl1OxFxERcTkVexEREZeL2XK5IpIY8st2Dnv8qwvWxCiJiESKevYiIiIup2IvIiLi\ncir2IiIiLqdiLyIi4nIq9iIiIi6n2fgiLhPvs+njIV88ZBCJJRV7ERk3G5sQIUIE+e2+3xLo6MPC\nwjgdTEQAFXsRGYYN9NBNJ+300scAA7xnCug3ffTRywADHxf5wX9sY/NeVyEhywbbYGEwGJJIIolk\nku1kjv+TxCSmMpVUzsLSHUWRqFKxF5lgTjeEbWPTSYB22uilh17TSx999Js+gHAvvcGqHfb6xws/\nBkIff6//+MFPdfXtj/83yU4mhRQ+Y3+GFD5DLTXMYjbJ+vMkEjH6bRKZoGwgQDvttNJFFz2mm76T\nCvvJX0fS8euGzAA9DNBjugD4IKmASXYKaUxjmj2NdHsmc5lHkv5ciYyZfntEJpAQIVppoY02Ok2A\nXtMz6sJeWPrusMctM74heYNhwPTjpxm/aaaSIxyw9zHDTmcmZzPPPp/JTB7XzxCZaFTsRVzOxsZP\nC36a6TQB+k1/uKgnwgQ6g6HP9NJkGmiknlIOMt1Ox2PP4rP2fFJIcTqiSNxTsRdxqS468eGl3bSd\n0INPhAJ/OgZDkCAtxkez8VJhl3G27WGufQ5zmIdJ6NaJRI+KvYiLhAjho4kW4yNgAhyfBufGEmgw\n9Js+6k0N9VRzlp3GbHsuF9kXk8JnnI4nEldU7EVcoJ8+KkwZ9aaGKutoQhf3M80J+NLCfxziu4ZO\nE6DcHKbarsRjz2W+vYBpTI9OSJEEo2IvksB66OawOUiDqaPXdH/8VPvENXh/v48aU0kdxzg7NIuL\n7IuZydlORxNxlIq9SALqo5fDpoRaU0Of6f24yE/kMn+qECGarHq8NOIJzWKBvYh0MpyOJeIIFXuR\nBNJHH6XmALWm5lM9eRX54diEaAwX/TkstBc5HUkk5lTsRRJAiBAVppRKU0G36VKRH8aZ7vkbLNKZ\nyTmcyyQmxSiViLNU7EXiXAN1lFoHaTUtGAxFpYVOR0poNiGaLS8ddhtn2x5mM1cfnMT1VOxF4lSA\nDg6afTRa9djYKkgRZIB+00edqaHV9jPHPocZpDsdSyRqolrst27dSnFxMcYYcnJyWLJkSfhYb28v\nmzZtoqysjPz8fAB27tzJrl27wu/Zv38/H374IevXr6erq4vU1FQANm7cyCWXXBLN6CKOCRGizByk\n0lSE16qXT5xpmH40DNBtOjliypgRSudcztfQvrhS1Ip9UVERVVVV5ObmUlFRQU5ODrm5ueHj27Zt\nY9GiRZSVlYW/t2bNGtasWRM+/89//nP42BNPPMHChQujFVckLrTSwn6rmBbjU08+pmz8Vguddidz\n7LlOhxGJuKgV+4KCAlatWgXA/PnzaWtrIxAIMHXqVAAeeOABWltbT+jJf9pPf/pTnn766WjFE4kr\nITtEiSnmmFXJ26VvOR1nQhoc2u/lmDlKofk/rghe7nQkkYgZ3/ZUw/D5fKSnf3IPLCMjA6/XG359\nvOgPZe/evcyZM4fMzMzw93bs2MGtt97Kpk2b6OnpiU5oEQf4aea/Av9FhVXKwCc7v4uDGq16/qvz\nvzhKhdNRRCIiZhP0bNse8Xvz8vK46aabwq9vv/12Lr74Ys477zw2b97Myy+/zJ133nna89PTU0lO\nThpX3qFkZqZF/JpOcEs7ILHbYts2+3r3UdJXQl+oj+Skwf9mx7tFbDxI9DYkJyXRY/dwaNJeuia1\nsmzKMlKsxN5dL5F/V06mtoxe1Iq9x+PB5/OFXzc1NZ3QUx9OYWEhP/zhD8OvV69eHf76yiuv5NVX\nXx32fL+/a5RpzywzMw2vtyPi1401t7QDErstPXTzkXkfr9UIQFKSRTAYAgaH9BOZZayEb0MwGCIp\nyWIgFKSi9wiNPV4uCX0BD7OcjjYmify7cjK1ZfjrnU7UPn5nZWWxe/duAEpKSvB4PMMO3R/X2NjI\nWWedRUrK4Kdo27a54447aG9vBwY/CCxYsCBasUWirpZq/s96gyarwekoMgLm40123k96hwNmLyES\n+4OMTExR69kvXbqUxYsXk52djTGGzZs3k5+fT1paGqtXr+bee++loaGBo0ePsn79etauXctXvvIV\nvF4vGRmfrF9tjGHt2rXccccdTJkyhVmzZrFhw4ZoxRaJGhubA2YvR60KbEKabZ9gggQptw7TGvKz\n1P4Sk5nsdCSRETP2aG6mJ4hoDPG4ZejILe2AxGpLLz381byH12oYssh/ehg/ks+RO8ENw/hfWviP\nJ/x/8mk2NlPtNJaE/p6zGdmtSacl0u/Kmagtw1/vdLSCnkiUteDjI+t9AqZDvfkEUVj67hk/tLzJ\nm8wNnYOH2acc++qCNdGMJzJqKvYiUXSUcg5bB+g3fSr0LhNigBqris5QJ+dzof7/lbimYi8SBTY2\n+81HVFlHsHHdnTL5lBbLR1+olwtZoKV2JW6p2ItEUH7ZToIEqaSCVss/4r6eG+5zT1QGCFgdlNkH\nOd++iFRSnY4kcgoVe5FRyC/bOezxPvo4YsroNAEN6k4gBugx3ZRzmPPs852OI3KKxF7mSiSOdBKg\nzBxUoZ/ABkwflVYFRyg785tFYkjFXiQCWvFTYUrpNT0q9BNciCAHkvZxwOzVfA2JGyr2IuPUjJcq\n6wgDRpvYyCCbEOVWKXvNX1XwJS6o2IuMQyMNVFuVBBlwOorEGQNUWUf4wLyrJXbFcZqgJzJGddTQ\nYNWBem5ykk+vgmhTyOuh17iQBSQxuLOhFt2RWFPPXmSUbKCaShqsWlTo5UwM0G61UWYO0Y9u9Ygz\nVOxFRsEGjnE0vDWtyEgYoNMEqDClKvjiCBV7kRGysTnGEZqtJqejSAI6XvDLzWF66HE6jkwwKvYi\nI2BjU2zep9nyOh1FEpgBukwnhdb/0UO303FkAtEEPZEzsLH5yLxPjVXldBRxAQPsKftv/s9+i4vs\nhUwi5ZT3aAKfRJp69iLDsLH50BRRbVU6HUVc5HgPv8wcpo8+p+PIBKBiL3Iax4fua6xj2r5UIs4A\n3aZLk/YkJlTsRU5jv/mIaqtKhV6i5ngPv8KUEiTodBxxMRV7kSEcNPuotCqcjiETQPixPA4T1Ep7\nEiUq9iInKTOHqLBKnY4hE4gBOqwOjlKqtfQlKlTsRT7lCOUctg7oD67EnAHarDaOUK7//iTiVOxF\nPlZDJYeS9mFrKFUcYoBWq4WPzPsq+BJRes5eBGiigX1WMe+Uvu10FJngDPDH8lz+L/QW53DukO/R\nc/gyWurZy4TXRivF1gfaj17iSqNVTxMNTscQl1Cxlwmtmy4+sN6lx2jpUok3NnVWDS00Ox1EXEDF\nXiasfvp5zyogYDqcjiIypBBBakwlAdqdjiIJTsVeJqQQId43BbSaFi2aI3FtwAxQaY7QrY1zZBxU\n7GVCKjYf4LUaVeglIfSZXo6acgYYcDqKJKiozsbfunUrxcXFGGPIyclhyZIl4WO9vb1s2rSJsrIy\n8vPzASgsLOS+++5jwYIFACxcuJBHH32U+vp6Hn74YYLBIJmZmTz11FOkpJy6U5TISBw2B7UMriSc\nbtPFUbuci7jY6SiSgKJW7IuKiqiqqiI3N5eKigpycnLIzc0NH9+2bRuLFi2irKzshPO++MUvsmPH\njhO+t2PHDtatW8e1117L9u3bycvLY926ddGKLgksv2znsMdbaKbKOqJn6SXhGKDdauNYqNLpKJKA\nojaMX1BQwKpVqwCYP38+bW1tBAKB8PEHHnggfPxMCgsLueqqqwBYuXIlBQUFkQ8srtdFJzWmSoVe\nEpYBmq0myjnsdBRJMFEr9j6fj/T09PDrjIwMvF5v+PXUqVOHPK+8vJy7776bW265hbffHlzgpLu7\nOzxsP3PmzBOuIzIS/fQN3vPUs/TiAqVJB6mnzukYkkBitoKebZ956cfzzz+f7373u1x77bVUV1dz\n++23s2fPnlFfJz09leTkpDFnPZ3MzLSIX9MJbmkHnNqWaQ1TTnlPiBB7ew7TF+rFiuM5qZaJ32yj\n5Za2xG07kkIcSi5m3lmZZCRljOgUN//eJ7JYtSVqxd7j8eDz+cKvm5qayMzMHPacWbNmcd111wFw\n3nnncfbZZ9PY2Ehqaio9PT1MnjyZxsZGPB7PsNfx+7vG34CTZGam4fUm/vPYbmkHDN2W9o5TH0+q\npAK/1YqBuF1v3DIWIdsdtxfc0pZ4bkcwGCJAJ6+3vkFW6AomMfyEZbf/3ieqSLdluA8OUfvYmpWV\nxe7duwEoKSnB4/Gcduj+uF27dvHiiy8C4PV6aW5uZtasWSxbtix8rT179nD55ZdHK7a4TCP1tFg+\nzbsXV2o3bfzVFMXth1iJH1Hr2S9dupTFixeTnZ2NMYbNmzeTn59PWloaq1ev5t5776WhoYGjR4+y\nfv161q5dy5VXXslDDz3E66+/Tn9/P1u2bCElJYUNGzawceNGcnNzmTt3LjfeeGO0YouLtNNGvVXr\ndAyRqDEYmqwGDoX2s8j+W6fjSBwz9khugieYaAzxuGXoyC3tgKHbcvzRuz76KDUH6TM9TkQbtXge\nMh4tt7QlkdphsPhs6EIymAmcuiue23/vE5UrhvFFnGJjU0k5vQlS6EXGyyZEjTmmJXXltFTsxXWO\nUUmH1aH79DKhDJg+Kk0FQYJOR5E4pGIvruKjiWbLq0IvE1KX6aSKI5qwJ6dQsRfXaKOVOlMD+kMn\nE5QB/FYLRyh1OorEGRV7cYUBBvjIel8r5MmEZ4BS6xAtNDsdReKIir24wl7zV9qM3+kYInFhwPRT\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376d8ed160>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "SjGSerXC0tiI",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "ULLpp4ly2a9z",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## Cách 3: Metropolis-Hastings algorithm\n",
"\n",
"\n",
"Ở đây chúng ta sẽ định nghĩa một Markov chain (xích Markov) sao cho stationary distribution của Markov chain này chính là phân phối xác suất mà ta muốn sinh số ngẫu nhiên.\n",
"\n",
"Nói khác đi, ta muốn thiết kế một hệ vật lý, sao cho một vật thể nằm trong hệ vật lý này sẽ thay đổi vị trí một cách ngẫu nhiên theo một Markov chain định trước.\n",
"\n",
"Kết quả là, vị trí của vật thể sau một thời gian dài sẽ phân bố theo phân phối xác suất mà ta muốn sinh số ngẫu nhiên.\n",
"\n",
"Tính chất của Markov chain là phân phối xác suất cho vị trí tương lai của vật thể $P(x_{t+1})$ chỉ phụ thuộc vào vị trí hiện thời của nó $x_t$ , và không phụ thuộc vào quỹ đạo chuyển động trong quá khứ của nó, $x_{i<t}$. \n",
"\n",
"Vì vậy, đối tượng quan trọng nhất của một Markov chain là\n",
"$$\n",
"P(x_{t+1}) = P(x_{t+1} \\mid x_{t})\n",
"$$\n",
"\n",
"Ý tưởng chủ đạo của thuật toán Metropolis-Hastings là chia $P(x_{t+1} \\mid x_{t})$ ra làm hai phân phối tách biệt nhau:\n",
"\n",
"$$\n",
"P(x_{t+1} \\mid x_t) = Q(x_{t+1} \\mid x_t) A(x_{t+1} \\mid x_t)\n",
"$$\n",
"\n",
"\n",
"Proposal Distribution $Q(x_{t+1} \\mid x_t)$ được dùng để \n",
"sinh ra vị trí mới của vật thể tại thời điểm tiếp theo.\n",
"\n",
"Acceptance Distribution $A(x_{t+1} \\mid x_t)$ được dùng để quyết định: liệu chúng ta có chấp nhận vị trí mới được để xuất bởi $Q$ hay không. Nếu không chúng ta sẽ duy trì vị trí cũ.\n",
"\n",
"$A(x_{t+1} \\mid x_t)$ sẽ được chọn sao cho stationary distribution của Markov chain $P(x)$ đồng nhất với $f_X(x)$. Cụ thể là, ta muốn thỏa điều kiện detailed balance để đạt được mục tiêu này. Với hai trạng thái bất kì $x$, $x^\\prime$ và $P(x) = f_X(x)$, ta cần thỏa: \n",
"$$\n",
"P(x^\\prime \\mid x) P(x) = P(x \\mid x^\\prime) P(x^\\prime)\n",
"$$\n",
"\n"
]
},
{
"metadata": {
"id": "DT7cNuvdA6Qz",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"\n",
"\n",
"<details><summary>Click để xem vì sao ta muốn detailed balance</summary>\n",
"<p>\n",
"Về mặt trực quan, có thể hiểu rằng detailed balance đảm bảo ở mỗi bước tại trạng thái căn bằng, probability mass từ trạng thái $x$ chuyển qua trạng thái $x^\\prime$ sẽ bằng với probability mass từ trạng thái $x^\\prime$ chuyển qua $x$. Như vậy tổng probability mass tại $x$ sẽ không đổi theo thời gian.\n",
" \n",
" Xét một trạng thái $x^{(i)}$ bất kỳ tại bước thứ $t$ và $t+1$, ta có\n",
" $$\n",
" \\begin{align}\n",
" P(x^{(i)}_{t+1}) &= \\sum_{\\forall j} P(x_{t+1}^{(i)} \\mid x_t^{(j)}) P(x_t^{(j)}) \\\\\n",
" &= \\sum_{\\forall j} P(x_{t+1}^{(j)} \\mid x_t^{(i)}) P(x_t^{(i)}) \\\\\n",
" &= \\left( \\sum_{\\forall j} P(x_{t+1}^{(j)} \\mid x_t^{(i)}) \\right) P(x_t^{(i)}) \\\\\n",
" &= P(x_t^{(i)})\n",
" \\end{align}\n",
" $$ \n",
"</p>\n",
"</details>\n",
"\n"
]
},
{
"metadata": {
"id": "uxaI5_4mXXVW",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "JjrEfUZoFRhk",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Từ đó ta có \n",
"$$\n",
"\\begin{align}\n",
"Q(x_{t+1} \\mid x_t) A(x_{t+1} \\mid x_t) f_X(x_t) &= Q(x_{t} \\mid x_{t+1}) A(x_{t} \\mid x_{t+1}) f_X(x_{t+1})\\\\\n",
"\\iff \\frac{A(x_{t+1} \\mid x_t)}{A(x_t \\mid x_{t+1})} &= \\frac{Q(x_t \\mid x_{t+1})}{Q(x_{t+1} \\mid x_t)} \\cdot \\frac{f_X(x_{t+1})}{f_X(x_t)}\n",
"\\end{align}\n",
"$$\n",
"\n",
"Ở đây ta chọn $A(x_{t+1} \\mid x_t) = \\min \\left(1, \\frac{Q(x_t \\mid x_{t+1})}{Q(x_{t+1} \\mid x_t)} \\cdot \\frac{f_X(x_{t+1})}{f_X(x_t)} \\right)$ để thỏa mãn điều kiện bên trên.\n",
"\n",
"Trong trường hợp $Q$ thỏa điều kiện đối xứng $Q(x \\mid y) = Q(y \\mid x)$, chẳng hạn normal distribution $Q(x \\mid y) = \\mathcal N(y, \\sigma^2)$, ta đơn giản chọn \n",
"$$\n",
"A(x_{t+1} \\mid x_t) = \\min \\left(1, \\frac{f_X(x_{t+1})}{f_X(x_t)} \\right)\n",
"$$\n",
"\n",
"Từ đó chúng ta có được thuật toán Metropolis-Hastings như sau:"
]
},
{
"metadata": {
"id": "fcAqSRgAHQeg",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"def MetropolisHastings():\n",
" Xs = [] \n",
" x = np.random.uniform(-4,4)\n",
" \n",
" for t in range(100000):\n",
" x1 = np.random.randn() + x # propose new location\n",
" p = min([1.0, pdf(x1) / pdf(x)]) # acceptant probability\n",
" if np.random.uniform() < p: # if accepted\n",
" x = x1\n",
" Xs.append(x)\n",
" return Xs"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "23Hj4vU-JSbO",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"Xs_MH = MetropolisHastings()"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "EPNbQtgyJT5B",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 348
},
"outputId": "04915e1a-febc-4813-d748-008b4d3bed35"
},
"cell_type": "code",
"source": [
"#@title\n",
"# the histogram of the data\n",
"n, bins, patches = plt.hist(Xs_MH, 50, density=True, facecolor='g', alpha=0.35)\n",
"\n",
"\n",
"plt.ylabel('Probability')\n",
"#plt.show()\n",
"\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"#fig= plt.figure()\n",
"#axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.85)\n",
"#axes.plot(a,b)\n",
"plt.show()\n",
"\n"
],
"execution_count": 13,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfsAAAFLCAYAAADRQSWnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xt0VPW9///nZwciRAIkOEFQ8ULB\ncvDwO2VVW00FUdClyx4vLZiiWM+xti4VL9UjNq3A71vFI/pltWjVXmh7TrVtfqRZPayz7IGjR/v1\nqyGpN9AgkISQ+2UmmVwm98zs3x/RUSQJSZg9e2bn9XCtlpk9e+b1EZP3fD77sz8fY9u2jYiIiHiW\n5XYAERERcZaKvYiIiMep2IuIiHicir2IiIjHqdiLiIh4nIq9iIiIx01y8s23bNnCvn37MMaQm5vL\nkiVLosf27t3Ltm3bsCyLc889l8cffxzLsoY8p76+nocffphwOIzP5+Opp54iNTXVyegiIiKe4Vix\nLy4uprKykry8PMrLy8nNzSUvLy96fOPGjfz7v/87p59+Ovfeey9vvPEGU6dOHfKc7du3s3btWq6+\n+mq2bdtGfn4+a9euHfaz/f6OmLcnIyONYLAr5u8bb15pB6gticorbfFKO0BtSVSxbovPlz7sMceG\n8QsLC1m5ciUA8+fPp62tjVAoFD1eUFDA6aefDkBmZibBYHDYc4qKirjiiisAWLFiBYWFhU7FHtak\nSSlx/0wneKUdoLYkKq+0xSvtALUlUcWzLY4V+0AgQEZGRvRxZmYmfr8/+njatGkANDU18eabb7J8\n+fJhz+nu7o4O28+aNeuY9xEREZGROXrN/rOGWpW3ubmZO++8k02bNh1T5Ec6ZzSr+2ZkpDnyjWmk\nIZJk4pV2gNqSqLzSFq+0A9SWRBWvtjhW7LOysggEAtHHTU1N+Hy+6ONQKMQdd9zB/fffz9e+9rUR\nz0lLS6Onp4cpU6bQ2NhIVlbWiJ/txPUcny/dkbkA8eaVdoDakqi80havtAPUlkQV67a4cs0+Ozub\n3bt3A1BSUkJWVlZ06B7gX//1X/n2t7/NsmXLTnjOJZdcEn1+z549XHrppU7FFhER8RzHevZLly5l\n8eLF5OTkYIxh06ZNFBQUkJ6ezte+9jX+/Oc/U1lZSX5+PgDXXnstN91003HnAKxfv54NGzaQl5fH\n3Llzuf76652KLSIi4jnGi1vcOjHE45WhI6+0A9SWROWVtnilHaC2JCpPDOOLiIhIYlCxFxER8TgV\nexEREY9TsRcREfE4FXsRERGPU7EXERHxuLgtlysiAlBQunPE4zcuWB2nJCITh3r2IiIiHqdiLyIi\n4nEq9iIiIh6nYi8iIuJxmqAn4iGa/CYiQ1HPXkRExONU7EVERDxOw/giMqIBBgjSQptppZ8+/uvw\nywwwQNj0EyFCBJsIEfj4f5ed8jXClo31mX9SmESqncpkUqmhiklMIpVTSCedSaRi3G6kiMep2ItM\nICe6pt9PHxct+Aoh004XXXSZLnpMF330YT7+p9lqGvE9euwewiZy/IGPK3qTVQ+ADRgMqXYqqZzC\nKfYppHIKbQSZzkzMOL8CaN6CyPFU7EUmsF56CNJCN110m256TA9TU1KPK7SWA1f8Bj/Bps/00kcv\nITP4BeD/pLzCVPtUptszSGc6Pvt0ZnHauIu/iKjYi0woNtBJO0GCdJoQXaYTG/uYMupmUTUf/2+3\n6aLbdNFIPaUcYpo9jQw7E589mzmcSQoprmUUSUYq9iIJxKkh6BDtNBMgZDroNT3HHEv0/rIBOk2I\nThOimkqm2PvJsDM53T6DM5jnyKiDiNeo2It4VB99+Gmkw7TTZUJux4kJg6HX9NJg6qmnjkP2R/js\nLObZ55DBLLfjiSQsFXsRD7GBNlpppokOq50w4YTvuX9e0eG9Ix7/ysKvAoOFv9t0UmUqqOIoGXYG\nc+wzP74skWytFnGWir2IB0SIUEUFh80BOk1H9PmJU/JsgqaFFtNMidnPTDuD2cxhMpPdDiaSEFTs\nRZLYAP2UmkPUmxpCpuOYQj8RGQx9podGU0+z7We6ncEc5jKFKW5HE3GVir1IEgoTpswcotocpct0\nRu+Bj4UTDaMnAwOEzQBB46eNFmZGMpjDWZxCqtvRRFyhYi+SRP5U+v/RSB0BE6DX9CTkMP3eg3uJ\n2EMsquOSCGGarQBtdisz7Uy66WIqaW7HEokrFXuRJGADLfhpNPV0m24ME+l6/Mn7pKcfME381XqV\ns+x5nG8vZpJ+BcoEof/SRRJcJyHqqKHdalOR5+QuMxig3/RSbg7TaNfzhcj5nMU5mr0vnqdiL5Kg\n+umnjmparGZsIipHMfLZLwuv8grpkemcwVmcyjRAa+eLNzla7Lds2cK+ffswxpCbm8uSJUuix3p7\ne9m4cSOlpaUUFBQAsHPnTnbt2hV9zYcffsh7773HunXr6OrqIi1t8Drbhg0buOCCC5yMLuIaG/DT\nSKOpo8/0qcg7yAAhq53DfMSsiI8zOMvtSCKOcKzYFxcXU1lZSV5eHuXl5eTm5pKXlxc9vnXrVhYt\nWkRpaWn0udWrV7N69ero+X/5y1+ix5544gkWLlzoVFyRhNBLD1VU0m61asg+jmwi+K1GQnYHDdRx\nOnPdjiQSU44tKl1YWMjKlSsBmD9/Pm1tbYRCny7Z+cADD0SPD+VnP/sZd911l1PxRBKKbduUmkMc\nMgfo+LjQS3wZoMd08XbKXt41RfRGet2OJBIzjhX7QCBARkZG9HFmZiZ+vz/6eNq0acOeu3//fubM\nmYPP54s+t337dm6++WY2btxIT0/PsOeKJJsQIXZ37uag9QEDpt/tOBOeTYQaq4r/7PxP6qhxO45I\nTMRtgp5t26N+bX5+PjfccEP08a233sr555/PvHnz2LRpEy+99BK33377sOdnZKQxaVLst8D0+dJj\n/p5u8Eo7IPnbcrj3MO/1vkdPuIeUFAvLeGMHt2RuR0rKYPZQJMQHqe/QNbmVi6ZeRIpJ7m11k/1n\n5bPUlrFzrNhnZWURCASij5uamo7pqY+kqKiIH/3oR9HHq1ativ758ssv5+WXXx7x/GCwa4xpT8zn\nS8fvT/6lSL3SDkjMtox2i9p++tlv3qXOqgFsUlIswuFIQi1GM16WsZK6HeHwYPaUFIu+cD8Hwh9R\n193IkshSZpJxgrMTUyL+rIyX2jLy+w3Hsa/f2dnZ7N69G4CSkhKysrJGHLr/RGNjI6eeeiqpqYPL\nWtq2zW233UZ7ezsw+EVgwYIFTsUWcVwAP//Xeo1aq4rBufeSyAyGNhNkr/UGZRzC1t+ZJCHHevZL\nly5l8eLF5OTkYIxh06ZNFBQUkJ6ezqpVq7j33ntpaGigoqKCdevWsWbNGr7+9a/j9/vJzMyMvo8x\nhjVr1nDbbbcxdepUZs+ezfr1652KLeIYGyg1BymzDjLAgBZySTL9po8DKR8QjDTzD/aF2lFPkoqx\nx3IxPUk4McTjlaEjr7QDErMtww3jhwlTRQULvrhgyBL/yTC+FzahSfZh/K8s/Crw6d/J59nYzLAz\n+FLkQqYzI97xxiURf1bGS20Z+f2GoxX0RBzWTTdHTfnHu9PpElSyMxj+u/S/eM3+H86055HJrONe\no1X4JNGo2Is4qIVmakwVA1oJL2l8MrpyohGKAdPHUXOErkgnZzBPf7+S0FTsRRxSTy0NVh02yTuk\nLScSodGqpyfSzbl8gRSS+/Y88a7kvRlWJEHZ2BzlCHVWjQr9BGCANquVUnOQXrTqniQm9exFYijM\nAEcopd1qH3JYd7gJeMk+qW2iM0CXCVHKQc6xz3M7jshx1LMXiZEQ7RwyHw1b6MX7+kwPR8xhaql2\nO4rIMdSzFxmD4W6tC9HOUXOEPtOrQj/BDZgB3k95m+5wF1/gfLfjiADq2YuctDaCHDFl9Bldr5VB\nEcIcTPmQA2a/VtyThKBiL3ISWghw1Dqi3erkODY2ZdZh9pt3VfDFdRrGFxmnJhqos6qJaMa9DMMA\nldYR+iP9LLUvwlL/SlyiYi8yDvXUUm/Voo1s5EQMhjqrmoFIP1+2v8okrakvLtDXTJExqqVKhV7G\nxGBoshooMm/Sjy75SPyp2IuMQS1VNFr1qNDLWBkMzZafYvN/VfAl7lTsRUapxOz7uNCLjM9gwQ+o\n4EvcqdiLnICNTYl5nyNWqdtRxAM+KfhFKvgSRyr2IiMYLPT7KLfK3I4iHmIwtFgBiqw36KfP7Tgy\nAWg2vsgIDpj9HLHKtCqejMlweyB84isLvzpY8E0zReZNvmJ/jcmapS8OUs9eZBiHzAEVenHUJz38\nt02h1msQR6nYiwyhjEOUWh+hWffiNIPBbzXyNxV8cZCG8UU+5yjlHEo5oCVOxTFDDfPbwBuR/8O5\nfIFvLFgd/1DiaSr2Ip9RQxUHUvYTIex2FJlgDBC0mkmJWNjYGF1AkhjSML7Ix+qp48OU9wir0ItL\nDNBs+Tlg9rkdRTxGxV4ECNLMB9a7uu9ZEkKFVU6pOeh2DPEQFXuZ8DoJ8Y5VTK/pcTuKCDC4vsNh\n6yOqOep2FPEIFXuZ0Pro429WId2m0+0oIseIEOZDax9NNLgdRTxAE/RkQiko3Rn9c4QIZRykw+rQ\nVChJSAOmn33WO1wUyWYGM92OI0lMPXuZkGyggjIVekl4Paabd6y9dNPldhRJYir2MiHVcJRWK6hC\nL0khZDp42ypkQBNIZZwcHcbfsmUL+/btwxhDbm4uS5YsiR7r7e1l48aNlJaWUlBQAEBRURH33Xcf\nCxYsAGDhwoU8+uij1NfX8/DDDxMOh/H5fDz11FOkpqY6GV08rIlG/FaTCr0krOEW3dkb2ct5LNSi\nOzJmjhX74uJiKisrycvLo7y8nNzcXPLy8qLHt27dyqJFiygtPXbb0Isuuojt27cf89z27dtZu3Yt\nV199Ndu2bSM/P5+1a9c6FV08rI026qwatAyuJBsDtFlBaiNVbkeRJOTYMH5hYSErV64EYP78+bS1\ntREKhaLHH3jggejxEykqKuKKK64AYMWKFRQWFsY+sHheB+1UmSNEGHA7isi4NVkNVHLE7RiSZBzr\n2QcCARYvXhx9nJmZid/vZ9q0aQBMmzaN1tbW484rKyvjzjvvpK2tjXvuuYfs7Gy6u7ujw/azZs3C\n7/c7FVs8qp8+3rGK6DfaO1ySnc2Osl9wnr2A6Uwf8hU3aphfPidut97Z9omHTc855xzuuecerr76\naqqrq7n11lvZs2fPmN8nIyONSZNSxp11OD5feszf0w1eaQeMri0RO8KrXXvp7G/HMok7JzWRs42V\nV9qSsO0wEepMJbNO+XumWlOPOzzUz8VE+7lPFvFqi2PFPisri0AgEH3c1NSEz+cb8ZzZs2dzzTXX\nADBv3jxOO+00GhsbSUtLo6enhylTptDY2EhWVtaI7xMMxv4WFZ8vHb+/I+bvG29eaQeMvi0fmHep\nsqoxGCJ2Ym4hahkrYbONlVfakujt6LK7+KCrhAX2IlI+d0X28z8XE/HnPhnEui0jfXFw7GtrdnY2\nu3fvBqCkpISsrKzoEP5wdu3axY4dOwDw+/00Nzcze/ZsLrnkkuh77dmzh0svvdSp2OIxlVRQaVVo\nBzHxpE4Tooojmm4qJ+RYz37p0qUsXryYnJwcjDFs2rSJgoIC0tPTWbVqFffeey8NDQ1UVFSwbt06\n1qxZw+WXX85DDz3Eq6++Sn9/P5s3byY1NZX169ezYcMG8vLymDt3Ltdff71TscVDWmnhoPWB9qUX\nzzJAi9XM1EgapzPX7TiSwIw9movgScaJIR6vDB15pR0wclv66ONN63VCpv2Y54e6fzkRJPqQ8Vh4\npS3J1A6LFM6LLGA6M4DjJ+hNlJ/7ZOOJYXwRt9jYvGuK6TBtbkcRiYsIYapMBX3obhMZmoq9eM5H\n5gOarHpdp5cJpc/0UmHKdNlKhqRiL55SSzUVVpkKvUxIIdNBFRVux5AEpGIvnhEixAFrPxGS4zqr\nSKwZoNkKaIU9OY72sxdPiBDhmbL/TafxxsQdkfGzOWiVkBGZFZ2wJ6KevXjCh+Z9Qir0IsDg9fv3\nrb8xoH0g5GMq9pL0aqmiyqrQVXqRz2g1QT4w77kdQxKEir0ktRAdlGjhHJHjGAy1VpWu3wugYi9J\nLGJHeN96m17T7XYUkYRkf3z9viXc4nYUcZmKvSSt4p5iWkzgxC8UmcD6TC9vdr2pu1QmOBV7SUr1\n1FLWp/vpRUajOdzMB+Z9t2OIi1TsJen00EOJtZ8wYbejiCQFYwzV1lHqqHE7irhE99lL0igo3YkN\nlHOYNitIShJtVCLiNpsIB6z9ZEZmMYWpbseROFPPXpJKI/W0WUEN3ouMQ5fp5H3zju5emYDUs5ek\n0UUnjaZOhV7kBD6/lfPnt+t9N/IOpzN32PM/v0WuJD/17CUpRIhQZY4SNloRTORkNZp6uuh0O4bE\nkYq9JIUPzft0mpDbMUQ8IWwGqDIVGs6fQFTsJeE10UC1Vanhe5EY6jSd1FDpdgyJExV7SWj99FNi\n7SOi2+xEYmpwO1w/7bS5HUXiQMVeEtqH5n06TLvbMUQ8KUKEGlOlNSsmABV7SVh11FBrVWmVPBEH\ndZsuaqhyO4Y4TLfeScIoKN0Z/fMAAxw0JfSZHhcTiXifAVqsADMiM5lJhttxxCHq2UtCquYovSr0\nInFhE6FWw/mepmIvCaeZAEGrRYP3InHUY3qoosLtGOIQFXtJKP30U29qQPf/isSVAYJWC0Fa3I4i\nDlCxl4RSQyW9ptftGCITlE2dqaaffreDSIxpgp4kjCAtGr4XcVmP6eHZ0m2czXnDvkZr5ycf9ewl\nIfTTT52pRsP3Iu4anJ3frMV2PMbRnv2WLVvYt28fxhhyc3NZsmRJ9Fhvby8bN26ktLSUgoKC6PNb\nt27lnXfeYWBggO9973tceeWVPPLII5SUlDBz5kwAbr/9di677DIno0uclZh99Jge9epFEoD98WI7\n59uLSVGf0BMcK/bFxcVUVlaSl5dHeXk5ubm55OXlRY9v3bqVRYsWUVpaGn1u7969lJaWkpeXRzAY\n5IYbbuDKK68E4Pvf/z4rVqxwKq64qImGjxfPEZFE0W26qLOrOItz3I4iMeBYsS8sLGTlypUAzJ8/\nn7a2NkKhENOmTQPggQceoLW1lV27dkXPufDCC6O9/+nTp9Pd3U04rPs+vWyAAQ5Y+4kQOfGLRSRu\nBtfOD5ARyWQa092OIyfJsfGZQCBARsanqzFlZmbi9/ujjz8p+p+VkpJCWloaAPn5+SxbtoyUlBQA\nXnzxRW699VYeeOABWlp0a4hXfGQ+oN3o2qBIIooQpsZUaytcD4jbbHzbHv1/LK+88gr5+fn8+te/\nBuC6665j5syZLFq0iF/84hc8++yzbNy4cdjzMzLSmDQp5aQzf57Plx7z93RDorSjaaCJ+s5qJjH4\nd2WZsX/3HM85iUptSTxeaQeMvy3dppPg5CbOmXxO9Dm3f4e4/fmxFK+2OFbss7KyCAQC0cdNTU34\nfL4TnvfGG2/wwgsv8Ktf/Yr09MF/CRdffHH0+OWXX87mzZtHfI9gsGt8oUfg86Xj93fE/H3jLVHa\nYWPzprWXXtMXfS5ij20o3zLWmM9JVGpL4vFKO+Dk21LdW0NazwymMAXA1d8hifI7LBZi3ZaRvjg4\n9rU1Ozub3bt3A1BSUkJWVtaQQ/ef1dHRwdatW/n5z38enXkPsH79eqqrqwEoKipiwYIFTsWWOCkz\nhwmaZrdjiMgohM0A1VS6HUNOgmM9+6VLl7J48WJycnIwxrBp0yYKCgpIT09n1apV3HvvvTQ0NFBR\nUcG6detYs2YNXV1dBINB7r///uj7PPnkk9x8883cf//9TJ06lbS0NJ544gmnYouDPtnVro8+DpoS\nBj7TqxeRxNZhtRKI+DmNE4/QSuIx9lgupicJJ4Z4vDJ05GY7Pin25ZTSGoOV8jTMmpi80havtANi\n15ZUewqL7MWsXvCtGKQaH6/8LgaPDOOLDCVIC21WUPfUiyShXtNDDVVux5BxULGXuAkT0Y52Ikls\ncGe8Zprxn/C1kli0EY7EzCfD9MOpo5pu061evUgSixDhgLWf7MgKLPUXk4b+piQuuuii2fKr0It4\nQNC0UGYOuR1DxkA9e3GcDdRSRQQtfSziBcWHi3jXfo9F9mImk3rccW2Bm3jUsxfHteCn3dKSuCJe\n0m/6NFkviYyq2D/99NMcPXrU4SjiRWHCNJh6Dd+LeMzgZL2g9r1PEqMq9jNmzODBBx9k3bp1/PnP\nf6a3t9fpXOIRddTQY7rdjiEijohQZ2p0f00SGNU1+zvuuIM77riD6upq/vKXv/Dtb3+bL37xi6xb\nt4758+c7nVGSVDddNFsB9epFPKzThGi06ziduW5HkRGM6Zp9Q0MDlZWVdHZ2cuqpp/LII4/w+9//\n3qlskuRqqCbCgNsxRMRBBvCbRvrpdzuKjGBUPftnn32WXbt2cc4553DTTTfxv/7X/yIlJYW+vj6+\n+c1vsnbtWqdzSpJpJkCH1ep2DBGJgz7TR41dxblopDdRjarYBwIBfvOb33DGGWdEn6uuruass87i\noYceciycJKcwERpNndsxRCRODNBqtRCK+JjGdLfjyBBOOIwfiUQoLy9n7ty5RCIRIpEIfX193HXX\nXQAsW7bM8ZCSXBqopVuT8kQmFFuT9RLaiD37//zP/+SZZ56hsrKSRYsWRZ+3LIuvfe1rjoeT5NNH\nHwGjlfJEJqKQ6SBgN7kdQ4YwYrG/9tprufbaa3nmmWdYv359vDJJEquligHTr2IvMkE1mXoG6GcS\nk92OIp8xYrH/61//yvLlyzn99NPJz88/7vg3v/lNx4JJ8umgnVZtXysyofWYHg6ZAyy2/x+3o8hn\njFjsDx06xPLly3n33XeHPK5iL5+wsak3NdhE3I4iIi4yQLWp5Bx7Pqcyze048rERi/13v/tdAJ54\n4om4hJHkVUkFIdPhdgwRSQB9ppePzAd82b7Y7SjysRGL/fLlyzFm+EHZ119/PdZ5JAkN0M8R67Db\nMUQkQRgMDVY9TeFGspjtdhzhBMVeq+PJaBwyB9SrF5GoosN7AfjA/oCF9t8NOY9H2+DG14jFvqys\njOXLlw85OQ90zX6iKSjdedxzvfRx0HxA2GhZXBE5VqfpwG+rd58IRjVB75133hnyuIq91FHFgBnQ\nDHwRGZLfNHCa7cMa21YsEmNjmqDX0tICQGZmpsOxJBl0EtKtdiIyoh7TQ71dyxmc5XaUCW1Ua+O/\n/PLLPP744xhjiEQiTJo0iUcffZRVq1Y5nU8SWB261U5ERmaAZhMgy57NZFLdjjNhjarYP//88/zh\nD39g3rx5AFRUVHDvvfeq2E9gQYJ0WO1uxxCRJNBv+qizazib89yOMmGN6iJKVlZWtNADnHvuuZx1\nloZkJiobPt7VTlteiMiJGSBoNdNFl9tRJqwRe/aFhYUAnHfeefz4xz/mkksuwbIsCgsLOfvss+MS\nUBKPnwY6TUjX6kVk1CJEqKeG+Sx0O8qENGKxf+655455fPjwpwunjLTYjnhXmDBNplGFXkTGrM1q\npS3SxgxmuB1lwhmx2P/ud78b9tju3btP+OZbtmxh3759GGPIzc1lyZIl0WO9vb1s3LiR0tJSCgoK\nRjynvr6ehx9+mHA4jM/n46mnniI1VRM93NBALb2mR8VeRMbBpsHUMt1WsY+3UU3Qq6ur48UXXyQY\nDALQ19dHUVERV1111bDnFBcXU1lZSV5eHuXl5eTm5pKXlxc9vnXrVhYtWkRpaekJz9m+fTtr167l\n6quvZtu2beTn57N27drxtlnGqZ8+mk1AhV5Exq3TdNBs+92OMeGMaoLeww8/zMyZM3n//fe54IIL\nCAaDbN26dcRzCgsLWblyJQDz58+nra2NUCgUPf7AAw9Ej5/onKKiIq644goAVqxYEZ1LIPFVRy39\npt/tGCKS5JpMAxHdthtXoyr2KSkpfPe73+W0007j5ptv5vnnn+ell14a8ZxAIEBGRkb0cWZmJn7/\np9/mpk07fuvD4c7p7u6ODtvPmjXrmPeR+AjRQdBqUa9eRE5at+niiNHmWfE0qmH83t5eGhoaMMZQ\nXV3N3Llzqa2tHdMH2fbYb9Ma6pzRvE9GRhqTJqWM+fNOxOdLj/l7umE87TjQ9S6YSMIteWmZxMpz\nMtSWxOOVdkDitaX+lGq+fOo/MNmaPOZzvfK7GOLXllEV++985zu89dZb3H777Vx33XWkpKRw7bXX\njnhOVlYWgUAg+ripqQmfzzeuc9LS0ujp6WHKlCk0NjaSlZU14vsEg7G/l9PnS8fvT/6d3cbTjiAt\nVKQcJWIn1rCbZayEyzReakvi8Uo7IDHbEuxvpbDlbyyy/35M53nldzHEvi0jfXEY1Ve9lStXcuON\nN7J8+XKKi4t55ZVX2LRp04jnZGdnR2fsl5SUkJWVNeTQ/WjOueSSS6LP79mzh0svvXQ0sSVGDpuP\ndH1NRGLKYKgxlfTR53aUCWFUPfuysjK2b99OeXk5xhgWLlzIPffcw3nnDb/04dKlS1m8eDE5OTkY\nY9i0aRMFBQWkp6ezatUq7r33XhoaGqioqGDdunWsWbOGr3/968edA7B+/Xo2bNhAXl4ec+fO5frr\nr49N6+UYQ21h204bZdYhtFqeiMRat+nmkCnh7+0vuR3F84w9iovgN954I2vXruVLXxr8C3nnnXfI\ny8vjT3/6k+MBx8OJIR6vDB2N1I7PF3sbKOUAISsx252IQ5PjpbYkHq+0AxKzLV9Z+FUAJtupLI+s\nZCppozrPK7+LIb7D+KPq2Z966qnH7F0/f/78US2qI8ktSDMdVodm4IuIY/pMLwfNh3zJvsjtKJ42\n4jX7SCRCJBLh4osvZs+ePYRCITo7O3nllVe48MIL45VRXGAzeC+sCr2IOMlgqLfqaKfN7SieNmLP\n/u/+7u8wxgx5u9ukSZO48847HQsm7grQqM1uRCQuwgxw2HzEl+2vuh3Fs0Ys9gcPHoxXDkkgNjZ+\n06RCLyKOKTq895jHBouPIh9xKoN3bd24YLUbsTxrVNfsOzs7+e1vf8sHH3yAMYYvfelL3HrrrUyZ\nMsXpfOICP410my4VexGJG5vg7zz+AAAb1ElEQVQIDdRpC1yHjOo++0cffZRQKEROTg5r1qzB7/fz\nox/9yOls4gIbm4B69SLignarjRDemGmfaEbVsw8EAmzbti36eMWKFaxbt86xUOKeRurpNt0q9iIS\nd4O9+3q+gHeWw00Uo+rZd3d3093dHX3c1dVFb2+vY6HEHREiNBu/Cr2IuKbdaqWddrdjeM6oevY3\n3XQTV199NRdccAEwuJTtfffd52gwib9G6ukxPSr2IuIim0bq3A7hOaNaQQ+gvr6ekpISjDFccMEF\nzJ492+ls46YV9IY3XDsG6GdL2f9Ln+lxIdX4JOKqYOOltiQer7QDkrEthvmRBcwg47gj09On0t7R\n7YnZ+gm3gt7999/PT37yE+bMmROzUJJYSs1BetWrF5GEYNNIw5DFXsZnVMX+zDPPJD8/ny996Uuk\npqZGnz/rrLMcCybx008/NaZKhV5EEkbIaicYaSGDTLejeMKoiv3LL7983Ep6xhheffVVx4JJ/JSa\nj+g2XW7HEBE5ht80MNPOVEckBkYs9qFQiOeee46FCxfy5S9/mW9/+9tMnjw5XtkkDvrpp9ZUY/Tj\nJCIJJmQ6aLODzNRw/kkb8da7zZs3A4Oz8cvLy3nuuefikUniqMwcVK9eRBJWE/VuR/CEEXv2tbW1\nPP300wAsW7aM2267LR6ZJE4Ge/VV6tWLSMIKWR20RtS7P1kj9uwnTfr0u0BKSorjYSS+ysxButSr\nF5EE10SD2xGS3ojF3hgz4mNJXrpWLyLJImR10ErQ7RhJbcRh/Pfee4/LLrss+ri5uZnLLrsM27Yx\nxvD66687HE+cUm4O0WU6VexFJAnYNNGgofyTMGKx/6//+q945ZA4GojeV69CLyLJIWR10BYJMp2p\nbkdJSiMW+zPOOCNeOSSOysxh9epFJMnYNNHIWcx1O0hSGtWud+Id/RH16kUkOXVY7bSEW9yOkZRG\ntYKeeENB6U6C1U0c6atQqReRJGRTO1DL2XzB7SBJRz37CcTGpjHcqEIvIkkrGA7Sof3ux0zFfgJp\npIHuSLfbMURETkqj7rsfMxX7CSJChBYT0LV6EUl6HVYbQXTtfixU7CeIKiq0Br6IeIJNhHJz2O0Y\nSUXFfgKwsamyNClPRLyjyWqggza3YyQNR2fjb9myhX379mGMITc3lyVLlkSPvfXWW2zbto2UlBSW\nLVvG3Xffzc6dO9m1a1f0NR9++CHvvfce69ato6uri7S0NAA2bNjABRdc4GR0T6mhijajpSZFxDvC\nDFBqDrHUvsjtKEnBsWJfXFxMZWUleXl5lJeXk5ubS15eXvT4Y489xo4dO5g9eza33HILV111FatX\nr2b16tXR8//yl79EX//EE0+wcOFCp+J6lo1NpVUO6teLiMc0WvV0hTtJ41S3oyQ8x4bxCwsLWbly\nJQDz58+nra2NUCgEQHV1NTNmzGDOnDlYlsXy5cspLCw85vyf/exn3HXXXU7FmzAaqCVoNJFFRLyn\nnz5KzUdux0gKjhX7QCBARsanmxZkZmbi9/sB8Pv9ZGZmDnkMYP/+/cyZMwefzxd9bvv27dx8881s\n3LiRnp4ep2J7zlFT7nYEERFHGAz1po4edEvxicRtBT3btkf92vz8fG644Ybo41tvvZXzzz+fefPm\nsWnTJl566SVuv/32Yc/PyEhj0qSUk8o7FJ8vPebv6aTa/lqCXc2kfPydzjLH/r8XqC2JyStt8Uo7\nwHttSUkZbE/Y7qd26hG+mvZVl1ONT7zqimPFPisri0AgEH3c1NQU7al//lhjYyNZWVnRx0VFRfzo\nRz+KPl61alX0z5dffjkvv/zyiJ8dDMb+FjOfLx2/vyPm7+uk98x+wlYk+jhiR7CMRcSOjHBW8lBb\nEpNX2uKVdoA32xIOf9qe8u4K5nUuYDKpLiYbu1jXlZG+ODj2VS87O5vdu3cDUFJSQlZWFtOmTQPg\nzDPPJBQKUVNTw8DAAK+99hrZ2dnAYOE/9dRTSU0d/EuzbZvbbruN9vbB5RGLiopYsGCBU7E9o5UW\nAlaT2zFERBzXY7opM4fcjpHQHOvZL126lMWLF5OTk4Mxhk2bNlFQUEB6ejqrVq1i8+bNPPjggwBc\nc801nHvuucDx1/ONMaxZs4bbbruNqVOnMnv2bNavX+9UbM8oN6VE8MY3eRGRkRgMdaaG8+3FWFo+\nZkjGHsvF9CThxHB7Mg3jd9HJ6yn/TZiBY54vOrzXk8N5XqC2JB6vtAMmRlts4MzIPGYzB4AbF6yO\nc7Kx88Qwvrin1BxkgH63Y4iIxI0BWkwznuu9xoiKvcf00UuDqdOGNyIy4XSbTprxn/iFE5CKvceU\nmoP0Gq1DICITU7NRsR+Kir2HhAlTb2rVqxeRCavTdNCK9gL5PBV7DzliDtNlOt2OISLiqgC67fjz\nVOw9IkKEGlOtXr2ITHjtVjtBmt2OkVDitlyuOKuKCjpMm4q9iAgRdpT+gvP4wrCvSIZb82JJPXsP\nsLGpsapU6EVEPtZutdJLr9sxEoaKvQc00UDQaMhKROQTYcI0Uu92jIShYu8BleaI2xFERBKKAVpN\nkDBht6MkBF2zT3JttOK3GoHB5XBFRGRQv+mj0a5nLme6HcV16tknOW14IyIytMHefQu2FtFVsU9m\nPXTTaOrcjiEikrC6Tbfuu0fFPqmVmcP0mz63Y4iIJCxtkDNIxT5JhQnToKVxRUROqNN00DbBl9BV\nsU9SR0yplsYVERmliT6Ur2KfhGxs6kyNevUiIqPUYbXTRZfbMVyjYp+Eaqmi3UzsISkRkbGwidA0\ngRfZUbFPQtWmEtSrFxEZkzbTSj8DbsdwhYp9kgnSTLMVcDuGiEjSGTADNDExb1dWsU8yFaYcW4vo\niIiM2SdL6E7ERXZU7JNID900mYl7zUlE5GT1mJ4JOTNfa+MnkV+UPkejVa+r9SIi42SAoGmmoHTn\niK/z2n736tkniQgRWk1QhV5E5CSFTIh22tyOEVcq9kniKOX0mh63Y4iIeIA94YbyVeyTgI1NnVWt\nXr2ISIy0W6300ut2jLhRsU8CTTQQNC1uxxAR8YwwERon0CI7KvZJoNJUuB1BRMRTDNBmgoQJux0l\nLhydjb9lyxb27duHMYbc3FyWLFkSPfbWW2+xbds2UlJSWLZsGXfffTdFRUXcd999LFiwAICFCxfy\n6KOPUl9fz8MPP0w4HMbn8/HUU0+RmprqZPSEEaKDgNXodgwREc/pM3347QZO5wy3ozjOsWJfXFxM\nZWUleXl5lJeXk5ubS15eXvT4Y489xo4dO5g9eza33HILV111FQAXXXQR27dvP+a9tm/fztq1a7n6\n6qvZtm0b+fn5rF271qnoCeWIOcwAA9r0RkQkxgZvwwsy2z7D879hHRvGLywsZOXKlQDMnz+ftrY2\nQqEQANXV1cyYMYM5c+ZgWRbLly+nsLBw2PcqKiriiiuuAGDFihUjvtZLBuinwTSo0IuIOKTLdNKK\n9+dEOVbsA4EAGRkZ0ceZmZn4/X4A/H4/mZmZQx4rKyvjzjvv5Fvf+hZvvvkmAN3d3dFh+1mzZkVf\n63VHTTk9ZuJuySgi4jQDtOD9/UbitoKebZ94LeJzzjmHe+65h6uvvprq6mpuvfVW9uzZM+b3ychI\nY9KklHFnHY7Plx7z9xyObdsUdzYxKfxpOywTm+9msXqfRKC2JCavtMUr7QC1ZSSdKR1MmmKTZqVF\nn4vX7/t4fY5jxT4rK4tA4NNvS01NTfh8viGPNTY2kpWVxezZs7nmmmsAmDdvHqeddhqNjY2kpaXR\n09PDlClToq8dSTAY+96wz5eO398R8/cdTgP1NKYcu+hDxD75DXAsY8XkfRKB2pKYvNIWr7QD1JYT\nCRPhSGcl8zgn+lw8ft/Huq6M9MXBsa962dnZ7N69G4CSkhKysrKYNm0aAGeeeSahUIiamhoGBgZ4\n7bXXyM7OZteuXezYsQMYHOpvbm5m9uzZXHLJJdH32rNnD5deeqlTsRNGtW63ExGJi09uw4t4eEdR\nx3r2S5cuZfHixeTk5GCMYdOmTRQUFJCens6qVavYvHkzDz74IADXXHMN5557Lj6fj4ceeohXX32V\n/v5+Nm/eTGpqKuvXr2fDhg3k5eUxd+5crr/+eqdiJ4QuOvHrdjsRkbjpM3002Y2czhy3ozjC2KO5\nCJ5knBh+iecw/gfmPSqssuNm4Rcd3nvS763hvMSktiQer7QD1JbRSrOncb69GEN8dr3zxDC+jE+E\nCI2mXrfbiYjEWZcJ0U6r2zEcoWKfYI5STpfpdDuGiMiEFMCbt3bH7dY7GVlB6U4ADpkDdJr4zfoX\nEZFPdVht9Eb63I4Rc+rZJ5B22ug0IbdjiIhMWGHCNFHndoyYU7FPIIPDR56bLykikjQGb8Nr89xt\neCr2CaKfftpNm9sxREQmvF7TQxXeWutExT5BNNFA2Ay4HUNEZMIzQJ2pcTtGTKnYJwAbmzbTqpvt\nREQSRIsV8NRueCr2CaCOau1uJyKSQGxsKky52zFiRsU+AdSYKrcjiIjI5zSZBvrpdztGTKjYuyxE\nBwHLm4s4iIgks17Tw1FT5naMmFCxd1mFKSOMJuaJiCQag6He1GF74JZoraDnosF18Bu0Dr6ISIL5\n7MZjRyIVTGfGMcfjsVFOLKnYx8kny+F+lp9GqqyjKvUiIgksQNNxxT7ZaBjfRUHTrEIvIpLg2k0b\n/ST3evkq9i7pIkRI6+CLiCS8sAnTRIPbMU6Kir1LmmhC6+CLiCS+wfXyW5P6N7aKvQvChGk3rW7H\nEBGRUeox3QRpdjvGuKnYu8BPE/3GGws1iIhMFCr2MiZtJqiJeSIiSabDaqMvSSfqqdjHWYgOOk2H\n2zFERGSMwkRoTNKJeir2cRZAS+OKiCQjA3Qk6UQ9Ffs4GpyY1+Z2DBERGadknainYh9HfhrpN8l5\nvUdERAYFCbgdYcxU7OOozbRqYp6ISJLrsNrposvtGGOiYh8nIdo1MU9ExAPCRKgwpW7HGBMV+zjR\nxDwREW8wQKNpIELE7SijpmIfB/30027a3Y4hIiIxEjLt1FHjdoxRc3SL2y1btrBv3z6MMeTm5rJk\nyZLosbfeeott27aRkpLCsmXLuPvuuwHYunUr77zzDgMDA3zve9/jyiuv5JFHHqGkpISZM2cCcPvt\nt3PZZZc5GT2mjppy+k2frteLiHiEwVBrqjjTnud2lFFxrNgXFxdTWVlJXl4e5eXl5ObmkpeXFz3+\n2GOPsWPHDmbPns0tt9zCVVddRSAQoLS0lLy8PILBIDfccANXXnklAN///vdZsWKFU3Ed1WjqVOhF\nRDym2fLTFe4kjVPdjnJCjg3jFxYWsnLlSgDmz59PW1sbodDglq7V1dXMmDGDOXPmYFkWy5cvp7Cw\nkAsvvJCf/vSnAEyfPp3u7m7C4bBTEeOihWaCpsXtGCIiEmMDDFBhytyOMSqOFftAIEBGRkb0cWZm\nJn7/4CQ1v99PZmbmccdSUlJIS0sDID8/n2XLlpGSkgLAiy++yK233soDDzxAS0vyFM8qc8TtCCIi\n4gCDwW8asZNgTT1Hr9l/lm2P/l/GK6+8Qn5+Pr/+9a8BuO6665g5cyaLFi3iF7/4Bc8++ywbN24c\n9vyMjDQmTUo56cyf5/Olj+n1A/YArR3NpNgWlkmcuZCJlOVkqS2JyStt8Uo7QG2JtZSUwQyddgfd\n04OcPfnscb3PWOvKeDlW7LOysggEPl1lqKmpCZ/PN+SxxsZGsrKyAHjjjTd44YUX+NWvfkV6+uC/\nhIsvvjj62ssvv5zNmzeP+NnBYOwXO/D50vH7x3af/BFKaU/pwGCI2Ilxi4ZlrITJcrLUlsTklbZ4\npR2gtjghHP40Q0nbIdLszBFePbTx1JUTvd9wHPt6lJ2dze7duwEoKSkhKyuLadOmAXDmmWcSCoWo\nqalhYGCA1157jezsbDo6Oti6dSs///nPozPvAdavX091dTUARUVFLFiwwKnYMdVg6jCamici4mnN\npoleet2OMSLHevZLly5l8eLF5OTkYIxh06ZNFBQUkJ6ezqpVq9i8eTMPPvggANdccw3nnntudBb+\n/fffH32fJ598kptvvpn777+fqVOnkpaWxhNPPOFU7Jhpp5WglXybJYiIyNj0mT4qTBlftBe7HWVY\nxh7LxfQkEcthkU+Mdbhlv3mPSqs8+rjo8N6YZxqPRBkCiwW1JTF5pS1eaQeoLU74ysKvHvN4hp3B\npZHLxzSaG89h/LhN0JtIIkTwmwa3Y4iIiEOG6sAdiVQwnRkA3LhgdbwjjUjFPkYKSndG/9yMn6PW\nEV2tFxGZQJoJRIt9onH//gUPCtKiQi8iMsF0mHbCJOZCcCr2MdZLLyFLm96IiEw0/aYPP41uxxiS\nin2M+WkknETbHoqISGwYoN20uh1jSCr2MWQD7aZNQ/giIhNUyITootPtGMdRsY+hNoJ0m9iv3ici\nIsnCxk+T2yGOo2IfQy00q1cvIjLBdZh2Igl2OVfFPkbCDBAybW7HEBERl/WaHmqpcjvGMVTsY8RP\nE/1mwO0YIiLiMgPUm1q3YxxDxT5G2k2rhvBFRASAgOWnm263Y0Sp2MdAG62ETOLNvhQREXcM0M9R\nU37iF8aJin0MVJojkGCTMURExD0Gg980YJMYe82p2J+kwU1vEnPFJBERcU+baaUZv9sxABX7k1ZL\nNZ0m5HYMERFJQNXmqNsRABX7k9Zgasa0f7GIiEwcfuNPiM1xVOxPQi89BExiDNGIiEji6TFdVFHh\ndgwV+5NRYcrpN/1uxxARkQRlMDSYOrdjqNifjCbToCF8EREZUYsVoBN353ap2I9TC820maDbMURE\nJMGFCbt+z72K/TglygxLERFJbIP33De5es/9JNc+Ocn84YM/0N4xuPShjU2J2U+f6XE5lYiIJKKi\nw3uPeWwDRyOVTGcGADcuWB3XPOrZj0MLzfSq0IuIyCgZBmuHW1Tsx6GVFk3LExGRMWk3ba7tc69i\nP0YDDNBhOtyOISIiSabf9Lm2fK6K/Rj5aSSsfetFRGSMDNBKqyufrWI/Ru2mTUP4IiIyLp1WO330\nxf1zVezHoIsuOrVvvYiIjFOYCH7iv1Oqo7febdmyhX379mGMITc3lyVLlkSPvfXWW2zbto2UlBSW\nLVvG3XffPew59fX1PPzww4TDYXw+H0899RSpqalORh9SgCa0b72IiIyXATpMe9w/17GefXFxMZWV\nleTl5fH444/z+OOPH3P8scce45lnnuEPf/gDb775JmVlZcOes337dtauXcvvf/97zj77bPLz852K\nPSwbmw7TFvfPFRERb+kyobjfhudYsS8sLGTlypUAzJ8/n7a2NkKhwbWBq6urmTFjBnPmzMGyLJYv\nX05hYeGw5xQVFXHFFVcAsGLFCgoLC52KPaxAOECP7q0XEZEYiPcqrI4V+0AgQEZGRvRxZmYmfv/g\nLQd+v5/MzMzjjg13Tnd3d3TYftasWdH3iadAOKCJeSIiEhN+00TEjt9l4bgtl2vbY18TeKhzRvM+\nPl/6mD/rRFanr6bPjv8MShER8Z4IEfrsPkfq1VAcK/ZZWVkEAoHo46amJnw+35DHGhsbycrKYvLk\nyUOek5aWRk9PD1OmTIm+Nt7+fsrfx/0zRUREYsGxYfzs7Gx2794NQElJCVlZWUybNg2AM888k1Ao\nRE1NDQMDA7z22mtkZ2cPe84ll1wSfX7Pnj1ceumlTsUWERHxHGOPZ3x9lJ5++mnefvttjDFs2rSJ\nAwcOkJ6ezqpVq/jb3/7G008/DcCVV17J7bffPuQ5X/ziF2lqamLDhg309vYyd+5cnnjiCSZPnuxU\nbBEREU9xtNiLiIiI+7SCnoiIiMep2IuIiHiciv0YBAIBLrzwQoqKityOMm7Nzc185zvfYd26deTk\n5LBv3z63I43bwMAAGzZs4Fvf+hZr1qzh7bffdjvSSSkuLubiiy/mtddeczvKuGzZsoWbbrqJnJwc\n9u/f73ack3L48GFWrlzJiy++6HaUk7Z161ZuuukmvvGNb7Bnzx6344xLd3c39913H7fccgurV69O\n2p+Rz+rp6WHlypUUFBTE5fPidp+9F2zdupWzzjrL7RgnZdeuXVx33XV8/etfp7i4mJ/+9Kf8+te/\ndjvWuPzHf/wHU6dO5Q9/+AOlpaX84Ac/cGUp5VioqqriN7/5DUuXLnU7yrh8dqnr8vJycnNzycvL\nczvWuHR1dfHjH/+Yiy++2O0oJ23v3r2UlpaSl5dHMBjkhhtu4Morr3Q71pi99tprXHDBBdxxxx3U\n1tbyz//8z6xYscLtWCfl+eefZ8aMGXH7PBX7USosLOTUU09l4cKFbkc5Kf/0T/8U/XN9fT2zZ892\nMc3J+cd//EeuvfZaYHC1xdZWd/aJjgWfz8ezzz7LD3/4Q7ejjMtwS11/crttMklNTeWXv/wlv/zl\nL92OctIuvPDC6AZk06dPp7u7m3A4TEpKisvJxuaaa66J/jnZf28BlJeXU1ZWxmWXXRa3z9Qw/ij0\n9fXxs5/9jAceeMDtKDHh9/v5xje+wfPPP8/999/vdpxxmzx5MqeccgoA//Zv/xYt/Mlo6tSpSfcL\n+LNGWh472UyaNIkpU6a4HSMmUlJSSEtLAyA/P59ly5Yl9X9nOTk5PPTQQ+Tm5rod5aQ8+eSTPPLI\nI3H9TPXsP2fnzp3s3LnzmOeWLVvG6tWrmT59ukupxmeotqxfv55LL72UP/3pT/z1r3/lBz/4QVIM\n44/UlpdeeomSkhJeeOEFl9KNzUht8Qrd0ZtYXnnlFfLz85PiZ30kf/zjH/noo4/4l3/5F3bt2oUx\nybdjyZ///Gf+4R/+Ie6XhFXsP2f16tWsXr36mOdycnKIRCK89NJLVFVVsX//fn7605+yYMECl1KO\nzlBtKS4upq2tjRkzZrB8+XIefvhhl9KNzVBtgcHC+T//8z8899xzSbPQ0nBtSWYjLY8t7nrjjTd4\n4YUX+NWvfkV6enzWYY+1Dz/8kFmzZjFnzhwWLVpEOBympaWFWbNmuR1tzF5//XWqq6t5/fXXaWho\nIDU1ldNPP51LLrnE0c9VsR+FP/7xj9E/P/LII9xwww0JX+iHs2fPHg4cOMBtt93GoUOHmDNnjtuR\nxq26upo//vGPvPjii9HhfHFHdnY2zzzzDDk5Occtjy3u6ejoYOvWrfz2t79l5syZbscZt7fffpva\n2lp++MMfEggE6OrqOuayUTL5yU9+Ev3zM888wxlnnOF4oQcV+wnnrrvu4pFHHuG///u/6evrY/Pm\nzW5HGredO3fS2trKd7/73ehzO3bsiG6HnExef/11duzYwZEjRygpKeF3v/tdUg25Ll26lMWLF5OT\nkxNd6jpZffjhhzz55JPU1tYyadIkdu/ezTPPPJOUxfLll18mGAweMzfnySefZO7cuS6mGrucnBx+\n+MMfsnbtWnp6eti4cSOWpSlnY6HlckVERDxOX41EREQ8TsVeRETE41TsRUREPE7FXkRExONU7EVE\nRDxOxV5ERMTjVOxFREQ8TsVeRETE4/5/MPolHuzlKQwAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376d609b70>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "twzARHsO3Xk8",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## Cách 4: Langevin Dynamics\n",
"\n",
"Trong cách này, ta sẽ xét hệ vật lý của các hạt vi mô chuyển động ngẫu nhiên bên trong môi trường. Ví dụ điển hình cho loại chuyển động này là chuyển động Brownian. Ở đây ta sẽ định nghĩa \n",
"$$\n",
"U(x) = - \\log( f_X(x) )\n",
"$$\n",
"\n",
"là trường thế năng mô tả thế năng của vật trong hệ tại vị trí tương ứng.\n",
"\n",
"Từ đó ta thiết kế một hệ động học vật lý như sau:\n",
"$$\n",
"M \\frac{d^2 X}{dt^2} = - \\nabla U(X) - \\gamma \\frac{dX}{dt} + \\sqrt{2k_B \\gamma T} R(t)\n",
"$$\n",
"\n",
"Ở đây $M$ là khối lượng của vật $\\frac{d^2 X}{dt^2}$ là gia tốc của vật, $ \\frac{dX}{dt}$ là vận tốc. $T$ là nhiệt độ của hệ. $k_B$ là hằng số Boltzmann. $\\gamma$ là hệ số giảm sóc. $R(t)$ là một quá trình Gaussian ngẫu nhiên với giá trị trung bình $0$ và chỉ correlated với nhau tại lân cận của $t$. Phương trình Fokker–Planck đảm bảo rằng mật độ phân bố xác suất của vật sau thời gian sẽ đồng nhất với $f_X(x)$.\n",
"\n",
"Ở đây ta sẽ chọn vật không khối lượng $M = 0$ và đặt $\\epsilon_t = \\frac 1 \\gamma, k_B = 1, T=1$ và chọn $R(t) = \\mathcal N(0, 1)$. Rời rạc hóa giá trị của thời gian $\\frac{dX}{dt} = X_{t+1} - X_t$, ta có:\n",
"$$\n",
"X_{t+1} = X_t - \\epsilon_t\\nabla U(X) + \\mathcal N(0, 2\\epsilon_t)\n",
"$$\n",
"\n",
"\n",
"Ta có $$\\nabla U(x) = - \\nabla \\log(f_X(x)) = -\\frac{\\nabla f_X(x)}{f_X(x)} = \\frac{2x}{-x^2 + 16}$$"
]
},
{
"metadata": {
"id": "zZMV3dTxmo-p",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"#@title\n",
"# http://pytorch.org/\n",
"from os import path\n",
"from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag\n",
"platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())\n",
"\n",
"accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu'\n",
"\n",
"!pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.4.0-{platform}-linux_x86_64.whl torchvision\n",
"import torch"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "lHhJ-eH8mslN",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"#@title\n",
"def gradientOfU(x):\n",
" if x < -4 or x > 4:\n",
" return 50*x\n",
" return - ( -2.0 *x) / ( - x*x + 16)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "QpliqTBMnjzZ",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"def LangevinDynamics():\n",
" \n",
" x = 0.0\n",
" Xs = []\n",
" et = 1e-3\n",
" \n",
" for t in range(10000000):\n",
" grad = gradientOfU(x)\n",
" noise = np.random.randn() * math.sqrt(2*et)\n",
" x = x - et*grad + noise\n",
" Xs.append(x)\n",
" return Xs"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "k8g1jpBon9Ip",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"Xs_LD = LangevinDynamics()"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "Tldn1ej4n_Ou",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "bc0d2b3e-93d0-45ad-ab71-25d1a6ac7f25"
},
"cell_type": "code",
"source": [
"#@title\n",
"# the histogram of the data\n",
"n, bins, patches = plt.hist(Xs_LD, 50, density=True, facecolor='g', alpha=0.35, range=(-4,4))\n",
"\n",
"\n",
"plt.ylabel('Probability')\n",
"#plt.show()\n",
"\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"#fig= plt.figure()\n",
"#axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.85)\n",
"#axes.plot(a,b)\n",
"##plt.xlim(-4, 4)\n",
"plt.show()\n",
"\n"
],
"execution_count": 18,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n+Z//4cknnwTguuuu46677hr0nE996lP4fD4efPBBent7mTNnDo899hgTJkxwKraIiIinOFrsRURE\nxH1aQU9ERMTjVOxFREQ8TsV+FAKBAJdffjnFxcVuRxmzpqYmvvrVr7J+/Xry8/M5cuSI25HGLBQK\n8eCDD3L77bezdu1a3nrrLbcjjUtJSQlXXHEFhw4dcjvKmGzfvp3bbruN/Px83n33XbfjjMvx48dZ\ntWoVzz//vNtRxm3Hjh3cdtttfPGLX+TgwYNuxxmT7u5u7r33Xu644w7WrFmTtL8jH9XT08OqVavY\nt29fXD4vbvfZe8GOHTu48MIL3Y4xLvv37+fmm2/m85//PCUlJTz11FP8/Oc/dzvWmPzHf/wHkydP\n5sUXX6SsrIzvfe97riylHAtVVVX84he/YNmyZW5HGZOPLnVdXl5OQUEBhYWFbscak66uLn74wx9y\nxRVXuB1l3N58803KysooLCykpaWFW265heuuu87tWKN26NAhLrvsMr72ta9RW1vLv/7rv7Jy5Uq3\nY43Lj3/8Y6ZPnx63z1OxH6GioiKmTJnCokWL3I4yLl/5yleiP9fX1zNr1iwX04zPP//zP3PTTTcB\nA6sttra2upxo7HJycnj66af5/ve/73aUMRlqqevTt9smk4kTJ/LTn/6Un/70p25HGbfLL788ugHZ\ntGnT6O7uJhwOk5aW5nKy0bnxxhujPyf73y2A8vJyTpw4wdVXXx23z9Qw/gj09fXxzDPPsGnTJrej\nxITf7+eLX/wiP/7xj7nvvvvcjjNmEyZM4BOf+AQAv/rVr6KFPxlNnjw56f4Af9Rwy2Mnm/T0dCZN\nmuR2jJhIS0sjIyMDgL1797J8+fKk/v8sPz+fBx54gIKCArejjMvjjz/OQw89FNfPVM/+Y1566SVe\neumlM55bvnw5a9asYdq0aS6lGpvB2rJx40auuuoqfve73/GnP/2J733ve0kxjD9cW1544QVKS0t5\n7rnnXEo3OsO1xSt0R29ieeWVV9i7d29S/K4P57e//S3vv/8+3/3ud9m/fz/GJN+OJb///e/5u7/7\nu7hfElax/5g1a9awZs2aM57Lz88nEonwwgsvUFVVxbvvvstTTz3FwoULXUo5MoO1paSkhLa2NqZP\nn86KFSvYvHmzS+lGZ7C2wEDh/O///m+effbZpFloaai2JLPhlscWd73++us899xz/OxnPyMzMz7r\nsMfa0aNHmTlzJrNnz2bx4sWEw2Gam5uZOXOm29FG7bXXXqO6uprXXnuNhoYGJk6cyPnnn8+VV17p\n6Oeq2I/Ab3/72+jPDz30ELfcckvCF/qhHDx4kPfee48777yTY8eOMXv2bLcjjVl1dTW//e1vef75\n56PD+eKOvLw8du/eTX5+/lnLY4t7Ojo62LFjB7/85S+ZMWOG23HG7K233qK2tpbvf//7BAIBurq6\nzrhslEx+9KMfRX/evXs3F1xwgeOFHlTsU863vvUtHnroIf7rv/6Lvr4+tm3b5nakMXvppZdobW3l\n61//evS5PXv2RLdDTiavvfYae/bs4eTJk5SWlvLrX/86qYZcly1bxpIlS8jPz48udZ2sjh49yuOP\nP05tbS3p6ekcOHCA3bt3J2WxfPnll2lpaTljbs7jjz/OnDlzXEw1evn5+Xz/+99n3bp19PT0sGXL\nFixLU85GQ8vlioiIeJy+GomIiHicir2IiIjHqdiLiIh4nIq9iIiIx6nYi4iIeJyKvYiIiMep2IuI\niHicir2IiIjH/f/bgj4hUjozYAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f376d8b9f28>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "Woa33AxY3gVD",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## Cách 5: Hamiltonian Monte Carlo\n",
"\n",
"Một lý do mà cách 4 tốn rất nhiều bước để có thể hội tụ về được stationary distribution là bởi vì nó chỉ sử dụng thông tin gradient tại vị trí hiện thời. \n",
"Ở đây chúng ta sẽ sử dụng thông tin về hình dáng của toàn bộ phân phối xác suất để có thể nhanh chóng hội tụ về stationary distribution.\n",
"\n",
"Trong cách này, chúng ta xét một hệ vật lý với hàm thế năng mô tả bởi $U(x) = -\\log( f_X(x))$ như phương pháp 4.\n",
"Tuy nhiên, thay vì chỉ xem xét vị trí của vật, ta xem xét cả vị trí $x$ và động lượng $p$ của vật. Do đó, vector trạng thái của hệ vật lý này là:\n",
"$$\n",
"(x, p)\n",
"$$\n",
"\n",
"Động năng của vật là: $$ K(p) = \\frac {p^2} {2M}$$\n",
"\n",
"Cho nên, Hamiltonian của hệ vật lý này là:\n",
"$$\n",
"H(x, p) = K(p) + U(x)\n",
"$$\n",
"\n",
"Và phươngtrình động lực học tương ứng với Halmiltonian này là:\n",
"$$\n",
"\\begin{align}\n",
"\\frac{dp}{dt} &= - \\frac{\\partial H}{\\partial x} = - \\frac{dU(x)}{dx}\\\\\n",
"\\frac{dx}{dt} &= + \\frac{\\partial H}{\\partial p} = + \\frac{dK(p)}{dp}\n",
" \\end{align}\n",
"$$\n",
"\n",
"\n",
"Ý tưởng chủ đạo của HMC là như sau: ta sẽ xây dựng một Markov chain cho vector trạng thái của hệ $(x, p)$.\n",
"Markov chain này sẽ hội tụ về phân phối xác suất được đặc tả bởi Hamiltonain $H(x, p)$ của hệ.\n",
"Tại mỗi bước, ta sẽ gieo ngẫu nhiên một giá trị $p$, sao cho:\n",
"$$\n",
"\\Pr(p_t) \\propto \\exp(-K(p_t)) = \\exp\\left(- \\frac{p_t^2}{2M} \\right)\n",
"$$\n",
"\n",
"Phân phối này chính là marginal distribution của $\\exp(-H(x, p))$cho biến $p$. Trong trường hợp của cơ học cổ điển như trên, ta gieo ngẫu nhiên $p$ từ một Gaussian distribution.\n",
"\n",
"Tiếp theo chúng ta sẽ từ trạng thái $(x_t, p_t)$ đi tới trạng thái $(x_{t+1}, p_{t+1})$ bằng cách tích phân hai phương trình động lực học của hệ vật lý được mô tả ở trên theo biến thời gian.\n",
"\n",
"Trong trường hợp này chúng ta sẽ dùng Leapfrog integration để xấp xĩ tích phân với thời gian rời rạc.\n",
"\n",
"Cuối cùng chúng ta sẽ dùng Acceptant Distribution $A$, như định nghĩa ở cách 3, để đảm bảo rằng stationary distribution đồng nhất với $H(x, p)$.\n"
]
},
{
"metadata": {
"id": "TeBZrE96sZuX",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "IxmUEVKCi3Yq",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"#@title\n",
"\n",
"\n",
"def gradientOfU(x):\n",
" if x < -4 or x > 4:\n",
" return 50*x\n",
" return - ( -2.0 *x) / ( - x*x + 16)\n",
"\n",
"\n",
"def gradientOfK(p):\n",
" return p\n",
"\n",
"def computeK(p):\n",
" return p*p / 2\n",
"\n",
"def computeU(x):\n",
" if x <=-4:\n",
" return -20\n",
" if x >= 4:\n",
" return -20\n",
" return -math.log(3.0 / 256 * (-x**2 + 16 ))\n",
"\n",
"def computeH(x, p):\n",
" return computeK(p) + computeU(x)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "8mMJwpsSpM1y",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "J4auGaTlfWuU",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"def HMC():\n",
" \n",
" x = 0.0\n",
" Xs = []\n",
" \n",
" epsilon = 1e-2\n",
" \n",
" for t in range(100000):\n",
" p = np.random.randn()\n",
" \n",
" H_old = computeH(x, p)\n",
" x_old, p_old = x, p\n",
"\n",
" # leapfrog integration\n",
" p = p - epsilon /2 * gradientOfU(x) \n",
" for k in range(200):\n",
" x = x + epsilon * gradientOfK(p)\n",
" if k != 200:\n",
" p = p - epsilon * gradientOfU(x)\n",
" p = p - epsilon / 2 * gradientOfU(x)\n",
" \n",
" \n",
" # to guarantee that the proposal distribution is symmetric \n",
" p = -p \n",
" \n",
" H_new = computeH(x, p)\n",
" pr = 1\n",
" if H_new - H_old < 0:\n",
" pr = min([1, math.exp(H_new - H_old)])\n",
" \n",
" if np.random.uniform() > pr:\n",
" x = x_old\n",
" Xs.append(x)\n",
" \n",
" return Xs"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "zIjv6CXIja0t",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"Xs_HMC = HMC()"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "H_cXr5ZLjcto",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "9679ff24-0a22-4c9f-c15c-9aa88621f237"
},
"cell_type": "code",
"source": [
"#@title\n",
"# the histogram of the data\n",
"n, bins, patches = plt.hist(Xs_HMC, 50, density=True, facecolor='g', alpha=0.35, range=(-4,4))\n",
"\n",
"\n",
"plt.ylabel('Probability')\n",
"#plt.show()\n",
"\n",
"\n",
"a=[]\n",
"b=[]\n",
"# y=0\n",
"# x=-50\n",
"\n",
"for x in range(-40,41,1):\n",
" y=3.0 / 256 * (-(x/10)**2 + 16)\n",
" a.append(x/10)\n",
" b.append(y)\n",
" #x= x+1\n",
"\n",
"#fig= plt.figure()\n",
"#axes=fig.add_subplot(111)\n",
"plt.fill_between(a,b,color=\"lightgreen\", alpha=0.85)\n",
"#axes.plot(a,b)\n",
"##plt.xlim(-4, 4)\n",
"plt.show()\n",
"\n"
],
"execution_count": 22,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nxcuGWx5b3PXGG2/w3HPP8ctf/pLMzOSsw55ohw4dYvbs2cydO5clS5YQjUZpbW1l9uzZbkcbtddf\nf52amhpef/11GhsbSU9P5+yzz2bFihWOvq+K/Qj8/ve/j//8wAMPcMMNN6R8oR/K3r17+eCDD7jl\nllv48MMPmTt3rtuRxqympobf//73vPDCC/HhfHFHXl4eTz/9NPn5+Sctjy3u6ejoYPv27fzmN79h\n5syZbscZs7feeou6ujp++MMfEgwG6erqOuGykZf8+Mc/jv/89NNPc8455zhe6EHFfsL57ne/ywMP\nPMCf/vQn+vr62Lp1q9uRxmznzp20tbXxrW99K/67559/Pr4dspe8/vrrPP/88xw9epSSkhJ++9vf\nemrIdfny5SxdupT8/Pz4UtdedejQIR577DHq6uqYNGkSe/bs4emnn/ZksXzllVcIhUInzM157LHH\nmDdvnoupRi8/P58f/vCHbNiwgZ6eHh566CEsS1PORkPL5YqIiPicvhqJiIj4nIq9iIiIz6nYi4iI\n+JyKvYiIiM+p2IuIiPicir2IiIjPqdiLiIj4nIq9iIiIz/3/VBbrtG9hCGAAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f37567c05c0>"
]
},
"metadata": {
"tags": []
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment