Skip to content

Instantly share code, notes, and snippets.

@Cartman0
Created May 29, 2019 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cartman0/8e8c1787db004d6ecbd4706447695092 to your computer and use it in GitHub Desktop.
Save Cartman0/8e8c1787db004d6ecbd4706447695092 to your computer and use it in GitHub Desktop.
Lagrange
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# 不等式制約の場合のLagrange"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 等式制約の場合"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "等式制約条件 $g(\\vec{x}) = 0$の下で,\n目的関数$f(\\vec{x})$ の最大化・または最小化する(つまり,そのときの点を求めたい).\n \nまず解候補は,$g(\\vec{x})$と$f(\\vec{x})$の交点のどれかになる.\n交点は交差しているか接しているかの2パターンがある.\n\n$g(\\vec{x})$で表される平面(2次元の場合は直線)と\n$f(\\vec{x})$で表される平面が交差しているとき,\n$f(\\vec{x}) > 0$になる点または$f(\\vec{x}) < 0$が存在するので極大・極小値になりえない.\n(つまり,被っている領域のほうに解がある.)\n\nこの辺については,この記事 https://www.yunabe.jp/docs/lagrange_multiplier.html がわかりやすい.\n\n接している場合,$g(\\vec{x})$と$f(\\vec{x})$の2つの接線ベクトルが平行になり,また接線ベクトルと直交関係にある勾配ベクトルも平行になる.\nこの点から$f(\\vec{x})$の勾配方向にズラして最適化してしまうと,制約条件から外れてしまうので,接している点のときに,制約条件を満たした極大値または極小値になる.\n\n勾配ベクトルが平行になるを式に表すと\n\n$$\n\\vec{\\nabla} f = \\lambda \\vec{\\nabla} g\n$$\n\n(例えば2次元の時,$\\vec{\\nabla} f =(\\frac{df}{dx}, \\frac{df}{dy})$\n\n右辺0に直せば,以下の式になる.\n以下の式を満たす点が極大・極小値になる.\n\n$$\n\\vec{\\nabla} f - \\lambda \\vec{\\nabla} g = \\vec{0}\n$$\n\n勾配ベクトルを考えたときに上式になればいいので,目的関数を作り直すと,\n\n$$\nL(\\vec{x}, \\lambda) = f(\\vec{x}) - \\lambda g(\\vec{x})\n$$\n\n特にこれをラグランジュ関数(ラグランジアン)という.\nこの目的関数は,$f(\\vec{x}), g(\\vec{x})$の2つの勾配ベクトルが平行になる点があるかという最適化問題に置き換わっているので双対問題になっている.\nこの双対問題を解くことで極値を得られる.\n\n解き方:\n\n変数をn個として,偏微分すると\n\n\\begin{eqnarray}\n \\left\\{\n \\begin{array}{l}\n\\frac{\\partial L}{\\partial x_{1}} = \\frac{ \\partial f }{\\partial x_{1} } - \\lambda \\frac{\\partial g}{\\partial x_{1}} = 0 \\\\\\\\\n\\frac{\\partial L}{\\partial x_{2}} = \\frac{ \\partial f }{\\partial x_{2} } - \\lambda \\frac{\\partial g}{\\partial x_{2}} = 0 \\\\\\\\\n\\vdots \\\\\\\\\n\\frac{\\partial L}{\\partial x_{n}} = \\frac{ \\partial f }{\\partial x_{n} } - \\lambda \\frac{\\partial g}{\\partial x_{n}} = 0 \\\\\\\\\n\\frac{\\partial L}{\\partial \\lambda} = g(\\vec{x}) = 0 \\\\\\\\\n \\end{array}\n \\right.\n\\end{eqnarray}\n\n最後の式は等式制約条件を表しており,この連立方程式を解いた点が極値になる.\n連立方程式の式の数は,変数の数+等式制約条件の数 になる.\n上記の例だと$n+1$個になる.\n\n連立1次方程式になれば,行列と変数ベクトルに式変形して定数ベクトルを右辺に移項して,\n係数行列が(式の数と変数の数が一致し)正方行列なので逆行列を解いて求めることができる.\n\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 等式制約条件が複数ある場合"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "以下のような等式制約条件が2つある場合を考える.\n\n$$\ng(\\vec{x})_{1} = 0\\\\\\\\\ng(\\vec{x})_{2} = 0\\\\\\\\\n$$\n\n目的関数の勾配ベクトルと$g(\\vec{x})_{1}, g(\\vec{x})_{2}$の勾配ベクトルはそれぞれ平行するので,\n\n$$\n\\vec{\\nabla} f = a_{1} \\vec{\\nabla} g_{1} \\\\\\\\\n\\vec{\\nabla} f = a_{2} \\vec{\\nabla} g_{2} \\\\\\\\\n$$\n\nつまり,等式制約条件の勾配ベクトル同士も平行関係にあり,\n足しても定数倍されるだけで同じ向きになる.\n両辺を足すと,\n\n$$\n2 \\vec{\\nabla} f = a_{1} \\vec{\\nabla} g_{1} + a_{2} \\vec{\\nabla} g_{2} \\\\\\\\\n\\vec{\\nabla} f = \\frac{a_{1}}{2} \\vec{\\nabla} g_{1} + \\frac{a_{2}}{2} \\vec{\\nabla} g_{2}\n$$\n\n定数倍を$\\lambda$に置き直す.\n\n$$\n\\vec{\\nabla} f = \\lambda_{1} \\vec{\\nabla} g_{1} + \\lambda_{2} \\vec{\\nabla} g_{2} \\\\\\\\\n\\vec{\\nabla} f - \\lambda_{1} \\vec{\\nabla} g_{1} - \\lambda_{2} \\vec{\\nabla} g_{2} = \\vec{0}\n$$\n\nラグランジュ関数は,\n\n$$\nL(\\vec{x}, \\vec{\\lambda}) \n= f(\\vec{x}) - \\lambda_{1} g_{1}(\\vec{x}) - \\lambda_{2} g_{2}(\\vec{x})\n= f(\\vec{x}) - \\sum_{i=1}^{2} \\lambda_{i} g_{i}(\\vec{x}) \n$$\n\n制約条件が3個以上でも同じ.n個の制約条件のラグランジュ関数は以下になる.\n\n$$\nL(\\vec{x}, \\vec{\\lambda}) \n= f(\\vec{x}) - \\sum_{i=1}^{n} \\lambda_{i} g_{i}(\\vec{x}) \n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 不等式制約の場合"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "参考:https://github.com/levelfour/machine-learning-2014/wiki/%E7%AC%AC4%E5%9B%9E---%E4%B8%8D%E7%AD%89%E5%BC%8F%E5%88%B6%E7%B4%84%E6%9D%A1%E4%BB%B6%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AE%E6%9C%AA%E5%AE%9A%E4%B9%97%E6%95%B0%E6%B3%95\n\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "不等式制約条件$g(\\vec{x}) \\geq 0$の場合を考える.\n等式では面上(2次元では線上)のみであったが,不等式領域($\\geq 0$)により条件が緩くなっている.\n\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "下図のような停留点(Statinary Point)が制約条件を満たしている状況では,\nLagrange関数にg(x)を含める必要がない。 \n制約条件を含めることのない通常の目的関数の最適化で解ける.\n"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-05-29T13:35:38.413834Z",
"end_time": "2019-05-29T13:35:38.661171Z"
},
"hide_input": true,
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nx = sp.linspace(-3, 3)\ny = -x\nplt.plot(x, y, color=\"r\")\nplt.text(3.1, -3, \"$g(\\\\vec{x}) = 0$\", color=\"r\", fontsize=18)\n\ny2 = sp.zeros_like(x) + 3\nplt.fill_between(x,y,y2,facecolor='g',alpha=0.3)\n\n# 条件内\nplt.text(-2, 2.5, \"$g(\\\\vec{x}) > 0$\", color=\"g\", fontsize=18)\n\n# 条件外\nplt.text(-4.5, 2, \"$g(\\\\vec{x}) < 0$\", color=\"k\", fontsize=18)\n\n# 停留 Stationary point\nplt.scatter(2, 1, color=\"k\")\nplt.text(0.8, 1.5, \"StationaryP\", color=\"k\", fontsize=14)\n\nplt.xlim(-3, 3)\nplt.ylim(-3, 3)\nplt.axis(\"equal\")\nplt.tight_layout()\nplt.show()",
"execution_count": 33,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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nEaNGgFkXTYrV65crmOFhoYyZswYOnbsSOfOnfnqq6947LHHePbZZ3M9vnz58oBzeS43p0+f5tlnn2Xu3LkcOHCA2NhY/vrXv9K7d++swHRVcnJyrsEEzuwp85gChRMooETEawIunKy1vPfee7Ro0SLPmUu1atUoW7YscOGx3pdbUt+hQwduvPFGvvzyS3r06MErr7xy2fNfPO6lEhMTGTt2LACdOnXi9ddfp0qVKld+Y7mIjIzMMwRTUlKyjnGLAkpEvCDg7jkdOnSI/fv306RJkxz7rLVs3rw52wwlJsZ5jMOxY8fyHPP9999nw4YNAJQqVeqy32/IHCdz3EvFxsYyZ84c2rVrx8KFC4mLi6N169ZMmzaNpKSkK7/Bi1x99dUcOXIkx2INgH379hEdHV3wWdPFdA9KRIpYwIVTcnIyACEhOd/aokWLSExMzLqkB9CwYUOAPDs7LF68mD59+tClSxd69OjBtGnT2LJlS57n3759e7ZxLxUWFkavXr347LPP2LdvH2PHjuX48eMMGDCAihUr0rVrVz788MOsmc/lNG3alIyMDL777rts21NSUtiwYQPx8Vf8npvrFFAiUoTcDidjTFVjzNfGmC3GmE3GmCGeKKygqlatSlhYGMuWLcu2/dChQzz22GMA2WZOjRs3pnTp0qxZsybHWGvXrqVr1640b96cOXPm8PzzzxMSEsKIESPyPP+aNWuoWLEidevWvWKtFSpUYMiQIaxbt44tW7YwfPhwfvjhB7p160bFihXp168fJ0+ezPP13bt3xxjD+PHjs21/8803SU5Opnfv3lesIV8UUCJSRDwxc0oDhltr6wO3AI8aY669wmsKTbFixejfvz/r16+nffv2TJ48mdGjR9O4cWPCwpxbbBeHU2hoKF27duWrr77Kdnlsy5Yt3H333dSpU4f58+cTERFBrVq1GDBgAB9//DHffPNNjnOfOnWKlStX0q1bt3zXXa9ePf71r3/x+++/s3z5crp3787HH3/M0aNH83zNddddx6OPPsq8efPo2rUrb731FsOHD+eJJ56gZcuW9OrVK991XJECSkSKgMd76xljPgZes9YuyeuYwu6tl5yczN///nfmzZvHyZMnadq0KU899RSvvfYa33//Pfv27ct2/HfffcfNN9/Mhx9+yL333svu3btp3rw54eHhrF69mooVK2Yde+DA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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "問題は下図のように、\n停留点が制約の境界上にあるときである。\nこのとき$\\nabla f$の向きによっては、最適化しようとすると制約を外れる向き\n(つまり緑色の領域→白色の領域の向き)に動く可能性がある。\nそのため、この状況では等式制約条件下で解く必要がある.\n"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-05-29T13:48:57.469278Z",
"end_time": "2019-05-29T13:48:57.624572Z"
},
"hide_input": true,
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nx = sp.linspace(-3, 3)\ny = -x\nplt.plot(x, y, color=\"r\")\nplt.text(3.1, -3, \"$g(\\\\vec{x}) = 0$\", color=\"r\", fontsize=18)\n\ny2 = sp.zeros_like(x) + 3\nplt.fill_between(x,y,y2,facecolor='g',alpha=0.3)\n\n# 条件内\nplt.text(-2, 2.5, \"$g(\\\\vec{x}) > 0$\", color=\"g\", fontsize=18)\n\n# 条件外\nplt.text(-4.5, 2, \"$g(\\\\vec{x}) < 0$\", color=\"k\", fontsize=18)\n\n# 停留 Stationary point\nplt.scatter(0, 0, color=\"k\")\nplt.text(-0.5, 0.6, \"StationaryP\", color=\"k\", fontsize=14)\n\n# 勾配 f\nplt.quiver(0,0, -1,-1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(-1, -1, \"$\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.xlim(-3, 3)\nplt.ylim(-3, 3)\nplt.axis(\"equal\")\nplt.tight_layout()\nplt.show()",
"execution_count": 45,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "最大化,最小化と目的関数と制約条件の勾配ベクトルの向きによってラグランジュ関数がどうなるかみる.\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 最大化 and 目的関数と制約条件の勾配ベクトルの向きが同じ"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "下図の場合,最大化するには,$\\nabla f$の向きにそのまま動かせばよく,\nこれは制約条件を満たしている.\n制約条件なしの目的関数$f$の最大化$\\lambda =0$に等しい.\n"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-05-29T14:40:41.394304Z",
"end_time": "2019-05-29T14:40:41.558352Z"
},
"hide_input": true,
"trusted": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nx = sp.linspace(-3, 3)\ny = -x\nplt.plot(x, y, color=\"r\")\nplt.text(3.1, -3, \"$g(\\\\vec{x}) = 0$\", color=\"r\", fontsize=18)\n\ny2 = sp.zeros_like(x) + 3\nplt.fill_between(x,y,y2,facecolor='g',alpha=0.3)\n\n# 条件内\nplt.text(-2, 2.5, \"$g(\\\\vec{x}) > 0$\", color=\"g\", fontsize=18)\n\n# 条件外\nplt.text(-4.5, 2, \"$g(\\\\vec{x}) < 0$\", color=\"k\", fontsize=18)\n\n# 停留 Stationary point\nplt.scatter(0, 0, color=\"k\")\n# plt.text(-0.5, 0.6, \"StationaryP\", color=\"k\", fontsize=14)\n\n# 勾配g\nplt.quiver(0,0, 1,1, scale_units='xy', scale=1, linestyle=\"--\", color=\"r\") \nplt.text(1, 1, \"$\\\\vec{\\\\nabla} g$\", color=\"r\", fontsize=14)\n\n# 勾配 f\nplt.quiver(0,0, 1,1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(1/2, 0, \"$\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.xlim(-3, 3)\nplt.ylim(-3, 3)\nplt.axis(\"equal\")\nplt.tight_layout()\nplt.show()",
"execution_count": 55,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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VfBzn0TEfymcSsFay8cff0zPnj2Jjo72djml4+GAqhhWkdjIWOZvn0/6uXQqh1emVUwrRl83WlOrRaTEFE6lYIzh1KlTDBo0iHnz5hEaGurtkkrHgwHVvEZznrn5GY+VJiLBTfecztuwYQMVKlRg0aJFebZPmTKFRo0a5fsaN24cCxYs4PPPPwdgzpw5hIeHs22bn61IXUb3oERE3KHZeuf16NGDjIwMFi9e7FL7p59+mh07dvDvf/87d9vVV19Nw4YNmT27/O6BZGdn89JLL/HGG2+wa9cuYmNjueuuuxg/fjyVK1d2vaNynsUn4s80W6/0NFuvBH788UcWLVrEo48+6lJ7ay0333wzU6dOzbN99OjRfPrpp2zcuLEsyizQI488wqOPPspll13G5MmTGThwIC+//DK333472dkleFy4RlAi4kMUTsBrr71GzZo16d07/3OCCmKMoVOnToSF5f1A54ABA4iMjOT111/3SF1bt27l1KlThe7fuHEjkydPZsCAAcyePZuRI0cyceJEJk6cyHfffccHH3xQshMqoETERwR0OK1atYrevXsTHR1N9erVGTFiBGlpaURGRjJ06FAAMjMzmTNnDt27d88XNqdPnyYuLo74+HgyMvI+LXXEiBGEhobmCYCoqCi6du3Kxx+X/im0Bw8e5OWXX+baa6+lZcuWpKamFtr2/fffx1rLww8/nGf7yJEjiYyMZMaMGSUvQAElIj4gYMNp/vz5dOnShe3bt/OXv/yF8ePHs2bNGnr16sXp06dp3749AGvWrOHkyZNce+21+fqoVKkS48aNY8+ePbz22mu528eMGcO0adOYPHkygwfnffhdx44dOXDgAFu2bHG51vT0dN5//3169+5N/fr1GT16NKGhobz88svUrVu30ONWrVpFSEhIvtorVqxIu3btWLVqlcs15KGAEhEvC8ip5Pv372fIkCEkJCSwcOHC3IkBQ4cOpVGjRgC54bRp0yYAmjZtWmBfw4YN48UXX+S5555j5MiRvPXWW0yYMIFx48bxpz/lX44np5+NGzfSqlWrQmvMzs7mm2++YcaMGcyePZuTJ0/SunVrxo4dy5AhQ2jSpEmhx+ZITk4mJiaGiIj8D7arX78+y5cv5+zZs4SHhxfbVz5l8EFdERFXBWQ4Pf/88xw/fpxp06blmbFWrVo12rVrx+LFi2nXrh1A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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 最大化 and 目的関数と制約条件の勾配ベクトルの向きが逆"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$\\vec{\\nabla} f$の向きに最大化すると,制約条件を外れてしまうので等式制約条件を入れなければならない.\n\n勾配ベクトルは平行し,向きが逆なので\n\n$$\n\\vec{\\nabla} f = \\lambda (-\\vec{\\nabla} g) \\\\\\\\\n\\vec{\\nabla} f + \\lambda \\vec{\\nabla} g = \\vec{0}, (\\lambda > 0)\n$$\n\nラグランジュ関数は,\n\n$$\nL(\\vec{x}, \\lambda) = f(\\vec{x}) + \\lambda g(\\vec{x}), (\\lambda > 0 )\n$$"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-05-29T14:44:26.922457Z",
"end_time": "2019-05-29T14:44:27.097604Z"
},
"hide_input": true,
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nx = sp.linspace(-3, 3)\ny = -x\nplt.plot(x, y, color=\"r\")\nplt.text(3.1, -3, \"$g(\\\\vec{x}) = 0$\", color=\"r\", fontsize=18)\n\ny2 = sp.zeros_like(x) + 3\nplt.fill_between(x,y,y2,facecolor='g',alpha=0.3)\n\n# 条件内\nplt.text(-2, 2.5, \"$g(\\\\vec{x}) > 0$\", color=\"g\", fontsize=18)\n\n# 条件外\nplt.text(-4.5, 2, \"$g(\\\\vec{x}) < 0$\", color=\"k\", fontsize=18)\n\n# 停留 Stationary point\nplt.scatter(0, 0, color=\"k\")\n# plt.text(-0.5, 0.6, \"StationaryP\", color=\"k\", fontsize=14)\n\n# 勾配g\nplt.quiver(0,0, 1,1, scale_units='xy', scale=1, linestyle=\"--\", color=\"r\") \nplt.text(1, 1, \"$\\\\vec{\\\\nabla} g$\", color=\"r\", fontsize=14)\n\n# 勾配 f\nplt.quiver(0,0, -1, -1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(-1, -1, \"$\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.xlim(-3, 3)\nplt.ylim(-3, 3)\nplt.axis(\"equal\")\nplt.tight_layout()\nplt.show()",
"execution_count": 59,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAEYCAYAAAD4czk4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl8VNX9//HXyQoBwpawSAgIsgkqSERWUYsUEctiKQhFUQGtVhHpIvr9aaFW+doWUFQURVHh64IiKAiCG4IIAoKyCojsW9jCEhJIcn5/XAJZZsgkM8ls7+fjkQeZe8+c+5mp5c2599xzjbUWERGRQBLh7wJEREQKUjiJiEjAUTiJiEjAUTiJiEjAUTiJiEjAUTiJiEjAUTiJiEjAUTiJiEjAUTiJiEjAifLHQRMSEmz9+vX9cWgREfGjVatWHbLWJhbVzi/hVL9+fVauXOmPQ4uIiB8ZY3Z40k6n9UREJOAonEREJOAonEREJOAonEREJOB4HU7GmHLGmO+NMT8aY9YbY0b7ojAREQlfvpitlwncaK09aYyJBpYYY+ZZa5f5oG8REQlDXo+crOPkuZfR5370eN3SsHy5vysQESkTPrnPyRgTCawCLgNetNbqb1FfmzsXevTg6P/8leMjH/B3NSJhrV6Vev4uIeT5JJystdlAS2NMFeAjY0wLa+26vG2MMcOAYQDJycm+OGx46dYNBg6k6lP/Zv/JfWy97w/+rkgkbCVXTsYY4+8yQppPV4iw1h4zxnwNdAPWFdg3GZgMkJKSotN+xRUZCW++CUCzCdMAFFAiErJ8MVsv8dyICWNMeaALsMnbfsWF3IAaOJBmE6Zx2cvv+7uiMmWtZcnOJaSfTfd3KSJSynxxn1Nt4CtjzE/ACmChtXaOD/oVVwoG1Csz/F1RmTHGkJGVwbNLnyU7J9vf5YhIKfL6tJ619ieglQ9qEU/lPcU3/m0Att7b158VldiOYzsY/tlwnuz8JK1qXfjP6NMtnzJz40yX7zmYfpAVe1fQNqkty3Yv49mlz/LCzS9wSaVLyqpsESllflmVXHwgRAJqyuopNEtoli+YALo36k73Rt0LtX9v/XvsP7mftkltAWib1JZ6lesx9cepPNbxsTKpGSDH5vDJ5k+Yv3U+B08dpHJsZTokd2DgFQMpF1WuzOoQCVVaviiY5T3FN/7toDvFt+nQJtYcWEPPJj09am+t5cqaV/LANfmn0t/a+FaW7V7GzrSdpVGmS1NWT2HK6inUrVyXYa2H0SG5A3M2z+Gf3/yTHJtTZnWIhCqFU7AL4oD6dMunVIqpRMolKR61N8bQLKEZURH5B/ztktoRGxnLvK3z3L43IyuDPcf3eFVvrp1pO5mzeQ7tktrxWMfH+G3D33JPq3u4p9U9rD24lsU7FvvkOCLhTOEUCgIsoLYc3sLoRaPp90E/bv/wdiZ+P5FTZ07x+xm/Z9x34wDIzslm+Z7ltKzVslDYZGZlctfsu7j747s5m302376J30+k13u9+GbHN+e3lY8uz+WJl/Ptrm/d1pSWkcafPv0TIxeM5JPNn3As41iJP983O77BYvld49/l2961YVdiI2P5esfXJe5bRBwKp1ARIAG1au8q/v7F39l3ch+9m/Zm4BUD2XpkK6MXjeZM9hkaVG0AwNajWzmddZrG1RsX6iM2KpbbW9zOofRDfLr10/Pb3/zxTRZuW8iwq4dxXb3r8r2naUJTjmUcY/fx3S7rqla+GsOuHkaEieDVH17lrtl3MXrRaBbtWERmVmaxPuOWI1uIMBGFao+JjOHSqpey5ciWYvUnIoVpQkQoyQ0oa/0ySeLo6aP857v/cFm1yxhz/ZjzEwOur389Qz8ZCnA+nHal7QKgVsVaLvv6zaW/4ePNH/PBhg/o2qArC7Yt4MONHzKgxQCXEyVy+9mZtpOk+KRC+6Mjo+nRuAc9Gvdg34l9LNqxiG92fsN/v/sv5aPK0zapLdfXv56ral5FhLn4v9mOnD5CpZhKREdGF9pXvXx1Nh3axNnssy73i4hnFE6hJjIS3noLKPtZfDM3zeR01mkeavNQvhlrFWMqcmmVS1mXuu58OKVlpgFQKaaSy74iIyK588o7+efif/L0kqf56cBP9GjUg/4t+rtsHx8TD+DR6bralWrTv0V/+rfozy9HfuHrHV+zZOcSvtr+FdXKVaNTvU4XnXWXmZXpNnhiImOcNtnu24hI0RROoahgQFlb6ksdWWtZvHMxzRKauRy5ANSIq0HFmIoAGMz597lzTZ1raFi1IT8e+JFOyZ0YevVQ98c/txB+cdc7a1itIQ2rNaRnk55MWjmJFXtXMPvn2fRo1INyFV2HU2xULKczTrvcdyb7jNMmMrZYdYhIfgqnUJU3oMpgLb5jGcc4cvoInZI7FdpnrWXX8V00S2h2flvl2MoAnDhzwm2fS3Yu4ddjvwJQPqr8RYMnt5/cfj1x8sxJlu5ayjc7vmFd6joMhqtrX80N9W4gIS7B7fuqla/GruO7XJ66O3z6MPGx8Ro1iXhJ4RTKyjCgMrOdSQW5I6K8Vu5bSVpmGpdWvfT8tuQqzsr0+07uc9nf6n2rGbdsHG3rtCUyIpLPf/2cnk16UrdyXZft951w+kmufPEV789kn2HF3hUs2rGIVXtXcTbnLJdVvYy7W97NdfWuo0q5KkV+1kbVGrF6/2o2H95M8xrN8/X969Ff820TkZJROIW6MgqohLgEIk0k6w7mW4yeoxlHmbxqMnBhMgRAgyoNiIuO4+dDPxfq6+fDP/PMt8/QLKEZI9uN5FD6Ib7b/R1v/fQWj3d63OXxfz78M1XKVXF7SjH9bDqTV01m2Z5lpJ9Np0aFGvRq2osb6t/g9j3udEzuyIwNM/h488f5gmjBLwvIzM6kc73OxepPRApTOIWDMgioqIgoujTowme/fMboRaO5ts61HMs4xvyt8ykX7Vy7aVDlQjhFRkTSLqkdy/csz3d6bFfaLsYsGsMllS7h8U6PEx0ZTe1KtenSoAvzt85nQ+oGLk+8PN+xT589zYbUDXRp0MVtfScyT7B8z3I61u3I9fWvp3li8xI/j6d+lfp0b9SduVvm8vSSp0mpncKu47uYs3kOLRJbKJxEfEDhFC7KIKCGtBpCpInku93fsT51PY2qNeKhax9i7pa5ZGRlkFghMV/7my+7mS9+/YIVe1fQvm57Uk+l8uTXT1IhugJPdn6SuOi48237N+/Pl79+ydQfp/Jsl2fz9bN091IyszPp1rCb29qqx1XnrV5v+exa0JBWQ6hRoQYLflnAyr0riY+Np0fjHgxoMaDIqegiUjRzsdlSpSUlJcWuXLmyzI8rQHY23HknTJ/Oxof/WOqz+NIy0rjr47vo0qAL96fcX2j/k18/SWZWJmO7jC3xMUZ8NoLEColluvCrhLcejXvoSbglZIxZZa0tcs0y/RMv3JTSAwuzcrIKPWPpTPYZJiyfAFBoqZ9c97S6h02HN7F63+oSHXfZ7mXsSNvB4KsGl+j9IhKYdFovHJXCI983pm5k4oqJXJd8HYkVEjmcfpivt3/NwfSD3Nf6PreTDpIrJzOr36wSH7dtUltm/sH1c59EJHgpnErAWsuMGTPo1q0b8fHx/i6nZHwcUOWiy5EYl8i8rfNIP5tOhZgKNE1oyvBrh2tqtYgUm8KpBIwxnDp1in79+jFnzhwiIyP9XVLJ+DCgGlVrxL9u/JfPShOR8KZrTuesW7eOqKgoFi5cmG/7pEmTqF+/fqGf0aNHM3/+fD755BMAZs2aRUxMDFu2BNmK1KV0DUpExBuarXdO165dyczMZNGiRR61f+qpp/jll1944403zm9r3bo19erVY+bMsrsGkpOTw3PPPccrr7zC9u3bSUxM5A9/+ANjxoyhQoUKnndUxrP4RIKZZuuVnGbrFcN3333HwoULeeSRRzxqb63lxhtvZPLkyfm2Dx8+nI8++oj169eXRpkujRgxgkceeYTLL7+ciRMn0rdvX55//nluvfVWcnKK8bhwjaBEJIAonICXXnqJ6tWr07174ecEuWKMoX379kRH57+hs0+fPsTFxfHyyy/7pK7Nmzdz6tQpt/vXr1/PxIkT6dOnDzNnzmTo0KGMGzeOcePG8dVXX/Huu+8W74AKKBEJECEdTitWrKB79+7Ex8dTtWpVhgwZQlpaGnFxcQwaNAiArKwsZs2axU033VQobE6fPk1SUhLJyclkZuZ/WuqQIUOIjIzMFwAVK1akU6dOzJhR8qfQHjx4kOeff542bdrQpEkTUlNT3bZ95513sNby8MMP59s+dOhQ4uLimDZtWvELUECJSAAI2XCaN28eHTt2ZOvWrfzlL39hzJgxrFq1iptvvpnTp0/TqlUrAFatWsXJkydp06ZNoT7Kly/P6NGj2bVrFy+99NL57aNGjWLKlClMnDiR/v3zP/yuXbt2HDhwgE2bNnlca3p6Ou+88w7du3enTp06DB8+nMjISJ5//nlq167t9n0rVqwgIiKiUO3lypWjZcuWrFixwuMa8lFAiYifheRU8v379zNgwABSUlJYsGDB+YkBgwYNon79+gDnw2nDhg0ANGzY0GVfgwcPZvz48TzzzDMMHTqU1157jbFjxzJ69Gjuv7/wcjy5/axfv56mTZu6rTEnJ4cvvviCadOmMXPmTE6ePEmzZs148sknGTBgAA0aNHD73lx79+4lISGB2NjCD7arU6cOS5cu5cyZM8TExBTZVyGlcKOuiIinQjKcnn32WY4fP86UKVPyzVirUqUKLVu2ZNGiRbRs2RLg/GmzatWquewrMjKSsWPHcuutt9KrVy++/PJLHnzwQZ544gmX7atXrw44p+dcOXXqFE888QTvvPMO+/btIykpiXvvvZeBAweeD0xPpaenuwwmcEZPuW1KFE6ggBIRvwm5cLLW8t5779GxY0e3I5d69epRtWpV4MJjvS82pb5Hjx5cffXVfPHFF/Tv35/nnnvuosfP229BqampjBs3DoCePXvy4osvUqdOnaI/mAtxcXFuQzAjI+N8G68ooETED0LumtOBAwfYu3cvrVu3LrTPWsuGDRvyjVASE53HOBw5csRtn++//z5r1qwBoFKlShe9vyG3n9x+C0pKSmL69Ol069aNuXPnkpycTJcuXXj99ddJS0sr+gPmcckll3Do0KFCkzUA9uzZQ0JCQslHTXnpGpSIlLGQC6f09HQAIiIKf7RPP/2U1NTU86f0AFq0aAHgdmWHBQsWMGjQIHr37k3//v15/fXX2bhxo9vjb926NV+/BUVFRTFgwADmzZvHnj17GDduHMeOHeOee+6hZs2a9OnThw8++OD8yOdirrnmGnJycvj+++/zbc/IyGDNmjWkpBR5n5vnFFAiUoa8DidjTF1jzFfGmI3GmPXGmOG+KKyk6tatS1RUFF9//XW+7QcOHODBBx8EyDdyatWqFfHx8SxbtqxQX8uXL6dPnz506NCB6dOn89RTTxEREcGoUaPcHn/ZsmXUrFmTJk2aFFlrjRo1GD58OCtXrmTjxo2MHDmS1atX07dvX2rWrMngwYM5ceKE2/f369cPYwwTJkzIt/3VV18lPT2dgQMHFllDsSigRKSM+GLklAWMtNY2A9oCDxhjLi/iPaUmOjqau+++m1WrVtG9e3deeeUVxowZQ6tWrYiKci6x5Q2nyMhI+vTpw5dffpnv9NjGjRu55ZZbaNy4MbNmzSI2NpaGDRtyzz33MHv2bL799ttCxz558iSLFy+mb9++xa67adOm/Otf/2Lbtm0sWrSIfv36MXv2bA4fPuz2PVdccQUPPPAAM2fOpE+fPrz22muMHDmSRx55hM6dOzNgwIBi11EkBZSIlAGfr61njJkNvGCtXeiuTWmvrZeens5f//pXZs6cyYkTJ7jmmmt49NFHeeGFF/jhhx/Ys2dPvvbff/891157LR988AG33XYbO3fupEOHDsTExLB06VJq1qx5vu2+ffto2LAhrVq1KhRQb775JoMHD2bt2rVuT+sVR2ZmJhEREYVuDs4rOzubCRMmMHnyZLZv305CQgL9+vVjzJgxVKxY0esaLnJgrcUnYUtr65Wcp2vr+TScjDH1gW+AFtba4wX2DQOGASQnJ7fesWOHz47ridTUVJKSkrj77ruZNGlSof3dunXj1KlTLF68uMTH8MfCr36lgJIwpXAqOU/DyWdTyY0xFYEPgYcLBhOAtXYyMBmckZOvjlvQ2bNnMcacP4UHzgSBO++80+VSP7n++9//ctVVV7FgwQK6du1a7OPOmjWLtWvXFn89u2CWe4rPWk0zFxGf8kk4GWOicYJpurXWr8OGb7/9liFDhnD77beTnJzM7t27mTZtGtu3b2fSpEluJyo0b96crKysEh+3V69enDlzpsTvD1qRkfDWW4DugxIR3/E6nIwztp0CbLTWjvO+JO9UrFiR5ORkJk2aRFpaGlWqVKF9+/ZMnTqVTp06+bu80KSAEhEf88XIqQMwCFhrjFlzbttj1tpPfdB3saWkpPDll1/649DhTQElIj7kdThZa5cAujIoCigR8ZmQW1tP/EwBJSI+oHAS31NAiYiXFE5SOhRQIuIFhZOUntyAMkYBJSLFonCS0qXnQYlICSicpPQpoESkmBROUjYUUCJSDAonKTsKKBHxkMJJypYWixURDyicpOxpmrmIFEHhJP6hgBKRi1A4if8ooETEDYWT+JcCSkRcUDiJ/ymgRKQAhZMEBgWUiOShcJLAoYASkXMi/F2ASD65ATVgAM0mTOOyl9/3d0VhL/bAYa74x0uQk+PvUiSMaOQkgUermftVg6mzqb1gab5tFXbs5USjemwfeIufqpJwo3CSwKSljvxm2+CebBvc8/zrmKPHafnoBHb/7nr/FSVhR+EkgUsBFRDOVijPyomjyImJ9ncpEkYUThLYFFB+Z2Oisf4uQsKOwkkCnwKqzERknimyTU5UpPO/iUgpUjhJcNBq5mXiuj4jqPTLrou2+ebD8aQ1b1hGFUm4UjhJ8NB9UKVuZ9+uNHl+Ot98MK7QNabmY6dQft8hBZOUCd3nJMFF90GVql09b8BkZVN506+cTqp5/udM1XgSl/7Izr5dz7etuG037e54nO5X/Z7Otz5I1R82ckuL3lT/fp0fP4GECo2cJPhoBFVqzlaNZ99N7aj74efs7d7p/PZL5i8BLHt6XAc4wdSx70h29O/G2ifvI27nflo/8m8isrI53qS+f4qXkKJwkuCkgCo1O/t2pd3dT1B+byqnL0kEIPmDhey9uSNZFeMAaPHUZA61b8nGv94FwMmGdTk0fwnVV6znbOWKfqtdQodO60nw0im+UnG47ZWcqluLujM/B6DCtt1UW72JHedO6ZXbl0ri0jVsfqB/vvflxERzvGn9si5XQpTCSYKbAqpU7Ox7E3U/+gKsJfnDhRxvVI9jLZsCUHnDL+RERRY6fVfpl12kNW3gh2olFPkknIwxrxtjDhpjdCVUyp4Cyud29f4N5Q4eocbiH0ia/VW+iRA2IhKTnUPk6czz2yqv20q1HzZq5CQ+46uR01Sgm4/6Eik+BZRPnalehf03tuHKJ18k+kR6vnX10lpcRk5MNJf/+w3idu4jcfEqWv1tHADHm2nkJL7hk3Cy1n4DHPFFXyIllhtQAwcqoHxgR79uxB48wt5uHThbpdL57ZmJVVk99mFqLFpF554Pcem0uezq/Rsyq1UmvW4tP1YsoaTMZusZY4YBwwCSk5PL6rASbrTUUfHk5FBnziKON7mUEwWuIR1q35K562e5fNu+mzuy7+aOzgtruXbIP9j32/alW6uElTILJ2vtZGAyQEpKitaRlNKjgCqatSQu+YFm/32LrIrlWfr2Mx6/tdqqDcSmHiWteUOij52gwdTZVN60jTVPP1SKBUu40X1OEpoUUG5VXruFy/8zlYTlawFY8s6zYIzH749NPUqz/75JuQOHOVOtMofbtOCbD8eTWbN6aZUsYUjhJKFLAZVPhe17aTrhbS6Z/+35bftuasvRVk2L1c++bh3Y162Dr8sTyccn4WSMeQe4HkgwxuwGnrTWTvFF3yJe0WrmxB48QuOX3iV5xgIisnPOb7cREWwacYcfKxNxzyfhZK293Rf9iJSKMF3qKOpkOg2nzKTB1NlE5bknKdfO27pwskGSHyoTKZpO60l4CKOAijhzlnrvzqPRpPeJPXrcZZvscjFs/rP+TSmBS+Ek4SNMAqrS5h1U3rCNiKxst222DbqVDE1gkACmcJLwEgYBldbiMtaMfZjye1O5rvfDxKSdyLf/TOWKbB16m5+qE/GMwknCTxgEVGzqUa4d+o9CwQSw5d6+ZMXrsRYS2BROEp5COKBiU4/SbvD/UOmXXQCcrVSBoy2bUGPxD5yuncD2gbf4uUKRoimcJHyFYEC5CqZlU0ZjsnOosfgHNj00kJzYGD9XKVI0hZOEt9yAMiboA8pdMB27sjHk5HCgc0q+1cVFApnCSSQEVpK4aDABRESwatxfnc8qEgQUTiIQ1AFVZDCdk12hvD/KEykRhZNIriAMKE+DSSTYKJxE8gqigFIwSShTOIkUFAQBpWCSUKdwEnElgFczVzBJOFA4ibgTgPdBKZgkXCicRC4mgAJKwSThROEkUpQACCgFk4QbhZOIJ/wYUAomCUcKJxFP+SGgFEwSrhROIsVRhgGlYJJwpnASKa4yCCgFk4Q7hZNISZTiauYKJhGFk0jJlcJKEgomEYfCScQbPgwoBZPIBQonEW/5IKAUTCL5KZxEfMGLgFIwiRSmcBLxlRIElIJJxDWFk4gvFWM1cwWTiHsKJxFf8+A+KAWTyMUpnERKw0UCSsEkUjSfhJMxphvwHBAJvGatHeuLfkWCWoGA2vbzdv7+w0beP3CYSueaKJhEXPM6nIwxkcCLwE3AbmCFMeZja+0Gb/sWCXrnAurX7du5Zd4SUoCa53YdA6YO/h0NFUwihUT4oI82wFZr7TZr7RngXaCnD/oVCQ2RkVy/I5Pp3JIvmLoCT3/4uR8LEwlcvginOsCuPK93n9uWjzFmmDFmpTFmZWpqqg8OKxIc9u+HnXve4g5mM50BAEwHVgCH9h3ya20igcoX4WRcbLOFNlg72VqbYq1NSUxM9MFhRQLf/v1w440Al5NDJHfwPNOpxgPAo0BC7QT/FigSoHwxIWI3UDfP6yRgrw/6FQlqucG0cWPulmPkcDN3cAQLPAN0vKoJOf4rUSRg+WLktAJoZIy51BgTA/QHPvZBvyJBq2AwVa4Mo0cvo169g1hjeCI5mV/bt+eWeUu47JUZ/i1WJAB5PXKy1mYZY/4MfIYzlfx1a+16rysTCVKugmnBAmjTphtPPLH9QsPsbLjzTpqNfxuArff2LftiRQKUT+5zstZ+Cnzqi75EgsnRoxAdDRUrOq/dB5OLN+ddi08BJZKPVogQ8cL//i+0agX9+hUzmHIVDChrff7Id5FgpHASKaHdu+G55+CWW6Bz5xIEU65SeKKuSLBTOImU0D/+ARkZMHcurF8PmzY524sVTLmKsZq5SDhQOImUwIYN8MYbzu8ZGV4GUy4PVjMXCRcKJ5ESeOwxyHFxg9Lf/gZXX+1FxwooEcA39zmJhJVvv4XZs13ve/xxqF0bRo92HV4eyQ2oAQNoNmGa7oOSsKSRk0gxWAuPPup+f+XKMHIkPPQQRHjzT7+8IyhNM5cwpHASKYY5c2DJksLbY2LgwQdh1CioXt1HB1NASRhTOIl4KDu78KjJGLjjDuc0Xr16pXBQBZSEKYWTiIfeesuZpZfrllvgmWfgiitK+cAKKAlDCicRD5w+DU884fzetq2zMsR115VhAbkBZYwCSsKCwknEAy+8ABUqwMyZ0KuXczqvzGktPgkjCieRImRnQ4MGsG4dRPn7/zEKKAkT/v6/mkjAi4yE227zdxV5KKAkDCicRIKRVjOXEKcVIiTs7N0Lf/qTFys4BIrcgBo40FlJ4uX3/V2RiM9o5CQhb/x4+PDD/Nu2bIEWLeCBB/xTk89oNXMJUQonCXkjRjg/uQ4dgsGD4Y9/9FtJvqXFYiUEKZwk7MTHOyOp2Fh/V+JDBQPKGE2SkKCmcJKwExPj7wpKiVaSkBCiCRES0jIyiv7Jzr7Q/tVXnXuaoqLg3nv9V3eJ5X3cxvi39bgNCVoaOUlIu/pq2Ljx4m1WrXLabdrkzOKbMcNZoqhSpbKp0ec0gpIQoHCSkDZ0KPy//+cEUMFrTCNGwK5dF55c+/HHzgy+3r3Lvk6fU0BJkFM4SUi74w7nGUtr1kC/fhe2nzwJn38O//mP87pxY2d6OTjr5vXqBR99VPb1+pQCSoKYwklCWvXq0KcPvP56/nB6/33nqba33+68XrIEOnVywuyeeyAuzj/1+pxWM5cgpXCSkDd0KHTpAjt3QnKys23KFCes4uOd1/HxsG0bdOgAtWr5r9ZSobX4JAhptp6EvBtugIYN4Y03nNc//wxLlzqhlWvdOsjKgpYt/VNjqcu71JFm8UkQUDhJWBgyBKZOdU7lTZniTHxo2/bC/jVrnMesV6nitxJLX8GA0lp8EsC8CidjTF9jzHpjTI4xJsVXRYn42uDBsGcPzJ/vXILJO2oCJ5xCdtSUlxaLlSDh7TWndUAf4BUf1CJSamrUgJ49nRtr09IKr6u3Zo1zXSos5L0GpbX4JEB5NXKy1m601v7sq2JEStO99zqPy+jbF6pVu7DdWvjppzAZOeXKDagBAzSCkoCk2XoSNrp0cSY9FGQMHD9e9vX4nVYzlwBWZDgZYz4HXE2ufdxaO9vTAxljhgHDAJJz5/OKiH9pNXMJUEWGk7XWJ2firbWTgckAKSkp1hd9iogPaCUJCUA6rSciCigJOF6FkzGmNzARSATmGmPWWGt/65PKRKRsKaAkgHgVTtbaj4BgXx5TRHIpoCRA6LSeiOSngJIAoHASkcK0mrn4mcJJRFzTaubiRwonEXFPASV+onASkYsrGFDWaiUJKXUKJxEpmhaLlTKmcBIRz+QGlLUKKCl1CicR8ZwWi5UyonASkeJRQEkZUDiJSPFpNXMpZQonESkZrSQhpUjhJCIlp4CSUqJwEhHvKKCkFCicRMR7CijxMYWTiPiGAkod1WYsAAALf0lEQVR8SOEkIr6j1czFRxROIuJbWixWfEDhJCK+p4ASLymcRKR0aDVz8YLCSURKj1YzlxJSOIlI6dJq5lICCicRKX1aLFaKSeEkImVDASXFoHASkbKj1czFQwonESlbWklCPKBwEpGyp4CSIiicRMQ/FFByEQonEfEfBZS4oXASEf9SQIkLXoWTMebfwK3AGeAX4C5r7TFfFCYiYUSrmUsBEV6+fyHQwlp7JbAZGOV9SSISlnJXkhg4kGbj3+ayV2b4uyLxI69GTtbaBXleLgN+7105IhLWtJq5nOPLa053A++522mMGQYMA0hOTvbhYUUkpGg1c8GDcDLGfA7UcrHrcWvt7HNtHgeygOnu+rHWTgYmA6SkpNgSVSsi4UGrmYe9IsPJWtvlYvuNMXcCPYDfWGsVOiLiGwqosObtbL1uwN+BztbadN+UJCJyjgIqbHl7zekFIBZYaIwBWGatvc/rqkREcimgwpK3s/Uu81UhIiJuFQworWYe8rRChIgEB00zDysKJxEJHgqosKFwEpHgooAKCwonEQk+CqiQp3ASkeCkgAppCicRCV4KqJClcBKR4KaACkkKJxEJfgqokKNwEpHQoNXMQ4rCSURCh5Y6ChkKJxEJLQqokKBwEpHQo4AKegonEQlNCqigpnASkdCl1cyDlsJJREKbppkHJYWTiIQ+BVTQUTiJSHgIhYCyFmbMgG7dID7e39WUKoWTiISPYA8oY+DUKejXD+bMcT5PiIrwdwEiImUqN6AGDqTZ+Le57JUZ/q1n3TqIioKFC/NvnzQJ6tcv/DN6NMyfD5984rSbNQtiYmDLljItu7QpnEQk/ARSQD3yCHToADfdlH/7n/4E27cX/hkyBAYPhl69nHa9esEVV8Df/16WVUNODowfD02bQrlyULcujBzpjOx8QKf1RCQ8BcIpvu++c0ZMs2Z51t5auPHGwkE0fDjceSesXw/Nm/u+TldGjIDnn4fevZ1Q2rjReb16NXz+OUR4N/ZROIlI+PJ3QL30ElSvDt27e9beGGjfvvD2Pn2ckdbLL8PEib6t0ZX1653j9OkDH354Yfull8JDD8G778KAAV4dQqf1RCS8FTzF9/L73ve5YoUTOPHxULWqcyouLQ3i4mDQIKdNVpYzYrrpJoiOzv/+06chKQmSkyEzM/++IUOcmt9998K2ihWhUydnJl9ZeOcdZxT38MP5tw8d6nzGadO8PoRGTiIivlzqaN485zpQvXrwl7844fT663DzzU7otGrltFu1Ck6ehDZtCvdRvrwz8WHIEGd0NWKEs33UKJgyBV58Efr3z/+edu3gs89g0ybnOlBBOTlw5Ijnn6NaNfen5lascPYVrL1cOWjZ0tnvJYWTiAj4JqD273dOZ6WkwIIFUKGCs33QIGemHVwIpw0bnD8bNnTd1+DBzoSDZ55xRiSvvQZjxzqhdf/9hdvn9rN+vetw2rnTOe3mqV9/vVBzQXv3QkICxMYW3lenDixdCmfOOLMIS0jhJCKSy9uAevZZOH7cGd3kBhNAlSrOiGLRIudPgNRU589q1dzXMnYs3HqrMxL78kt48EF44gnX7atXd/48eND1/lq1Ck9Xv5hatdzvS093HUzgjJ5y2yicRER8pKQBZS289x507Oh65ALOqb6qVZ3fjbnwPnd69ICrr4YvvnBO4z333MWPn7ffgsqVgy5dLv4ZPBUX5z4EMzIutPGCwklEpKCSBNSBA87prn79Cu+z1jmN16HDhW2Jic6fF7sO9P77sGaN83ulSu6DJ28/uf0WlJ19YbTmicRE9ytQXHKJ83kyMwuPoPbscU75eTFqAoWTiIhrxQ2o9HTnT1eTCD791AmG3FN6AC1aOH+6W9lhwQLnWlXv3s5svtdfdyZGNGvmuv3Wrfn7LWjXLt9dc7rmGqe+7793ZgnmyshwwvS66zw/jhtehZMx5p9ATyAHOAgMttbu9boqEZFAUJyAqlvXWYbo66/zbz9wwLlWBBcmQ+T+Hh8Py5YV7mv5cuceog4dYPp02L3buZ9o1Cj3N+wuWwY1a0KTJq73+/KaU79+8PTTMGFC/nB69VUnpAcO9Pw47lhrS/wDxOf5/SHgZU/e17p1aysiEjSysqwdONBasBse/qPNyclx3W7YMGvB2ptvtvbll60dPdra2rWtbdTI2b5zZ/72gwdbW7WqtRkZF7Zt2GBt9erWtmplbVrahe333ef0sWRJ4eOeOGFtXJy1f/6z95/VU3/+s1NP797WvvqqtY88Ym1UlLWdO1ubne32bcBK60m+eNLIo45gFDDJk7YKJxEJOnkCKuepp1y3OXXK2vvvt7ZWLWsrVLD2+uutnT/f2h49rL3kksLtly93/hr+4APn9Y4d1iYlWduggbX79+dvu3evteXLW9u+feF+pk51+lm71rvPWBxZWdb+5z/WNm5sbUyM8/lGjHCC8iI8DSdjLzZTxAPGmH8BdwBpwA3WWpdX3Iwxw4BhAMnJya137Njh1XFFRMpcdrazhl1WFvzf/3m2flxqqrPaw913OyuNF9Stm7NY6uLFJa+rdWtnJuDMmSXvo4wYY1ZZa1OKbFdUOBljPgdcnXx83Fo7O0+7UUA5a+2TRR00JSXFrly5sqhmIiKBJzvbmX0XVeCS/dmzzmy6vNszMpxrR59/DmvXur4etH49XHWVM2mia9fi1zNrFvzhD04/jRoV//1lzNNwKnJChLXW04nx/wfMBYoMJxGRoOVuevW33zrLDd1+u7Mm3u7dzhpz27c7IyZ3ExWaN3dGYiXVq5ezGkOI8Xa2XiNrbe48yN8Bm7wvSUQkCFWs6ITSpEnOIq9VqjgriE+dmn9Gm3jE2/ucxhpjmuBMJd8B3Od9SSIiQSglxVliSHzCq3Cy1t7mq0JERERy6XlOIiIScBROIiIScBROIiIScBROIiIScLxeIaJEBzUmFWd2XyBLAA75u4ggoe+qePR9eU7fVfEEw/dVz1rr5rkeF/glnIKBMWalJ3cxi76r4tL35Tl9V8UTSt+XTuuJiEjAUTiJiEjAUTi5N9nfBQQRfVfFo+/Lc/quiidkvi9dcxIRkYCjkZOIiAQchZOIiAQchZMHjDF/McZYY0yCv2sJVMaYfxtjNhljfjLGfGSMqeLvmgKNMaabMeZnY8xWY8yj/q4nkBlj6hpjvjLGbDTGrDfGDPd3TYHOGBNpjFltjJnj71p8QeFUBGNMXeAmYKe/awlwC4EW1torgc3AKD/XE1CMMZHAi8DNwOXA7caYy/1bVUDLAkZaa5sBbYEH9H0VaTiw0d9F+IrCqWjjgb8BmjlyEdbaBdba3Md5LgOS/FlPAGoDbLXWbrPWngHeBXr6uaaAZa3dZ6394dzvJ3D+0q3j36oClzEmCbgFeM3ftfiKwukijDG/A/ZYa3/0dy1B5m5gnr+LCDB1gF15Xu9Gf9l6xBhTH2gFLPdvJQFtAs4/onP8XYivePsk3KBnjPkcqOVi1+PAY0DXsq0ocF3su7LWzj7X5nGcUzLTy7K2IGBcbNNovAjGmIrAh8DD1trj/q4nEBljegAHrbWrjDHX+7seXwn7cLLWdnG13RhzBXAp8KMxBpzTVD8YY9pYa/eXYYkBw913lcsYcyfQA/iN1Q10Be0G6uZ5nQTs9VMtQcEYE40TTNOttTP9XU8A6wD8zhjTHSgHxBtjpllr/+jnuryim3A9ZIzZDqRYawN9xV+/MMZ0A8YBna21qf6uJ9AYY6JwJor8BtgDrAAGWGvX+7WwAGWcfxG+CRyx1j7s73qCxbmR01+stT38XYu3dM1JfOUFoBKw0Bizxhjzsr8LCiTnJov8GfgM5+L++wqmi+oADAJuPPff05pzIwMJExo5iYhIwNHISUREAo7CSUREAo7CSUREAo7CSUREAo7CSUREAo7CSUREAo7CSUREAs7/By3nrrXF8YUAAAAAAElFTkSuQmCC\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 最小化 and 目的関数と制約条件の勾配ベクトルの向きが同じ"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "最小化により,$- \\vec{\\nabla} f$の方向に動かしていく.\n$- \\vec{\\nabla} f$は,$\\vec{\\nabla} g$の向きと逆向きになる.\n$- \\vec{\\nabla} f$の向きに動かしていくと,制約条件から外れてしまうので等式制約を含ませる必要がある.\n\n$$\n- \\vec{\\nabla} f = \\lambda (- \\vec{\\nabla}g )\\\\\\\\\n\\vec{\\nabla} f = \\lambda \\vec{\\nabla}g \\\\\\\\\n\\vec{\\nabla} f - \\lambda \\vec{\\nabla}g = \\vec{0}, (\\lambda > 0) \\\\\\\\\n\\vec{\\nabla} f + \\lambda \\vec{\\nabla}g = \\vec{0}, (\\lambda < 0) \\\\\\\\\n$$\n\nラグランジュ関数は,\n\n$$\nL(\\vec{x}, \\lambda) = f(\\vec{x}) - \\lambda g(\\vec{x}), (\\lambda > 0) \\\\\\\\\nL(\\vec{x}, \\lambda) = f(\\vec{x}) + \\lambda g(\\vec{x}), (\\lambda < 0) \\\\\\\\\n$$"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-05-29T15:15:22.956773Z",
"end_time": "2019-05-29T15:15:23.132389Z"
},
"hide_input": true,
"trusted": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nx = sp.linspace(-3, 3)\ny = -x\nplt.plot(x, y, color=\"r\")\nplt.text(3.1, -3, \"$g(\\\\vec{x}) = 0$\", color=\"r\", fontsize=18)\n\ny2 = sp.zeros_like(x) + 3\nplt.fill_between(x,y,y2,facecolor='g',alpha=0.3)\n\n# 条件内\nplt.text(-2, 2.5, \"$g(\\\\vec{x}) > 0$\", color=\"g\", fontsize=18)\n\n# 条件外\nplt.text(-4.5, 2, \"$g(\\\\vec{x}) < 0$\", color=\"k\", fontsize=18)\n\n# 停留 Stationary point\nplt.scatter(0, 0, color=\"k\")\n# plt.text(-0.5, 0.6, \"StationaryP\", color=\"k\", fontsize=14)\n\n# 勾配g\nplt.quiver(0,0, 1,1, scale_units='xy', scale=1, linestyle=\"--\", color=\"r\") \nplt.text(1, 1, \"$\\\\vec{\\\\nabla} g$\", color=\"r\", fontsize=14)\n\n# 勾配 f\nplt.quiver(0,0, 1, 1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(0, 0.5, \"$\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.quiver(0,0, -1, -1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(-1, -1, \"$-\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.xlim(-3, 3)\nplt.ylim(-3, 3)\nplt.axis(\"equal\")\nplt.tight_layout()\nplt.show()",
"execution_count": 63,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 最小化 and 目的関数と制約条件の勾配ベクトルの向きが逆向き"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "不等式領域に動かしていくので,制約条件なしの最適化に等しい.\nつまり,$\\lambda = 0$\n"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-05-29T15:42:22.718232Z",
"end_time": "2019-05-29T15:42:22.892063Z"
},
"hide_input": true,
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nx = sp.linspace(-3, 3)\ny = -x\nplt.plot(x, y, color=\"r\")\nplt.text(3.1, -3, \"$g(\\\\vec{x}) = 0$\", color=\"r\", fontsize=18)\n\ny2 = sp.zeros_like(x) + 3\nplt.fill_between(x,y,y2,facecolor='g',alpha=0.3)\n\n# 条件内\nplt.text(-2, 2.5, \"$g(\\\\vec{x}) > 0$\", color=\"g\", fontsize=18)\n\n# 条件外\nplt.text(-4.5, 2, \"$g(\\\\vec{x}) < 0$\", color=\"k\", fontsize=18)\n\n# 停留 Stationary point\nplt.scatter(0, 0, color=\"k\")\n# plt.text(-0.5, 0.6, \"StationaryP\", color=\"k\", fontsize=14)\n\n# 勾配g\nplt.quiver(0,0, 1,1, scale_units='xy', scale=1, linestyle=\"--\", color=\"r\") \nplt.text(1, 1, \"$\\\\vec{\\\\nabla} g$\", color=\"r\", fontsize=14)\n\n# 勾配 f\nplt.quiver(0,0, 1, 1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(-0.3, 0.5, \"$-\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.quiver(0,0, -1, -1, scale_units='xy', scale=2, linestyle=\"--\", color=\"b\") \nplt.text(-1, -1, \"$\\\\vec{\\\\nabla} f$\", color=\"b\", fontsize=14)\n\nplt.xlim(-3, 3)\nplt.ylim(-3, 3)\nplt.axis(\"equal\")\nplt.tight_layout()\nplt.show()",
"execution_count": 67,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAEYCAYAAAD4czk4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl8VNX9//HXyQohhDXsBATZBBU0IrtLkQKiLBZBqIoIaGsVkS6i358ItZWvbQFFRVEsKnxdQAQFQXBDEEFAUFbZhABhCVtYQgJJzu+PSwJJJskkM8lMZt7PxyMPMveeOfcz0+Kbc++55xprLSIiIv4kxNcFiIiI5KZwEhERv6NwEhERv6NwEhERv6NwEhERv6NwEhERv6NwEhERv6NwEhERv6NwEhERvxPmi4NWr17dNmzY0BeHFhERH1q3bt1Ra21sYe18Ek4NGzZk7dq1vji0iIj4kDFmrzvtdFpPRET8jsJJRET8jsJJRET8jsJJRET8jsfhZIwpZ4z5wRjzkzFmszFmnDcKExGR4OWN2XppwK3W2jPGmHBghTFmkbV2lRf6FhGRIOTxyMk6zlx8GX7xR4/XLQmrV/u6AhGRUuGV+5yMMaHAOuBK4BVrrf4r6m0LF0KvXpz4n79wavQjvq5GJKg1qNzA1yUEPK+Ek7U2A2htjKkMfGyMaWWt3XR5G2PMCGAEQFxcnDcOG1y6d4fBg6ny3L84dOYgOx++29cViQStuEpxGGN8XUZA8+oKEdbak8aYb4DuwKZc+6YB0wDi4+N12q+oQkPh7bcBaDF5JoACSkQCljdm68VeHDFhjCkPdAW2edqvuJAVUIMH02LyTK587UNfV1SqrLWsSFhByoUUX5ciIiXMG/c51Qa+Nsb8DKwBllprF3ihX3Eld0C9PtvXFZUaYwyp6am8sPIFMjIzfF2OiJQgj0/rWWt/Btp4oRZx1+Wn+Ca9C8DOh/r7sqJi23tyLyM/H8nYm8bSptal/xt9tuMz5m6d6/I9R1KOsCZxDe3qtWPV/lW8sPIFXu7xMnUq1imtskWkhPlkVXLxggAJqOnrp9OieoscwQTQs0lPejbpmaf9B5s/4NCZQ7Sr1w6AdvXa0aBSA2b8NIOnOj1VKjUDZNpMPt3+KYt3LubI2SNUiqxEx7iODL56MOXCypVaHSKBSssXlWWXn+Kb9G6ZO8W37eg2NhzeQO9mvd1qb63lmprX8MgNOafS39H0DlbtX0VCckJJlOnS9PXTmb5+OvUr1WfE9SPoGNeRBdsX8Pdv/06mzSy1OkQClcKprCvDAfXZjs+oGFGR+DrxbrU3xtCiegvCQnIO+NvXa09kaCSLdi7K972p6akcOHXAo3qzJCQnsGD7AtrXa89TnZ7it41/y4NtHuTBNg+y8chGlu9d7pXjiAQzhVMg8LOA2nFsB+OWjWPAnAHc89E9TPlhCmfPn+V3s3/HxO8nApCRmcHqA6tpXat1nrBJS0/jgfkPMPSToVzIuJBj35QfptDngz58u/fb7G3lw8tzVexVfLfvu3xrSk5N5g+f/YHRS0bz6fZPOZl6stif79u932Kx3Nn0zhzbuzXuRmRoJN/s/abYfYuIQ+EUKPwkoNYlruNvX/6Ng2cO0rd5XwZfPZidx3cybtk4zmecp1GVRgDsPLGTc+nnaFqtaZ4+IsMiuafVPRxNOcpnOz/L3v72T2+zdPdSRlw3gi4NuuR4T/PqzTmZepL9p/a7rKtq+aqMuG4EISaEN358gwfmP8C4ZeNYtncZaelpRfqMO47vIMSE5Kk9IjSCK6pcwY7jO4rUn4jkpQkRgSQroKz1ySSJE+dO8O/v/82VVa9k/M3jsycG3NzwZoZ/OhwgO5z2Je8DoFZ0LZd9/eaK3/DJ9k+Ys2UO3Rp1Y8nuJXy09SMGtRrkcqJEVj8JyQnUi6mXZ394aDi9mvaiV9NeHDx9kGV7l/Ftwrf85/v/UD6sPO3qtePmhjdzbc1rCTEF/5vt+LnjVIyoSHhoeJ591cpXY9vRbVzIuOByv4i4R+EUaEJD4Z13gNKfxTd321zOpZ/jsbaP5ZixFh0RzRWVr2BT0qbscEpOSwagYkRFl32FhoRy/zX38/flf+efK/7Jz4d/pleTXgxsNdBl+5iIGAC3TtfVrlibga0GMrDVQHYd38U3e79hRcIKvt7zNVXLVaVzg84FzrpLS0/LN3giQiOcNhn5txGRwimcAlHugLK2xJc6stayPGE5Laq3cDlyAagRVYPoiGgADCb7ffm5oe4NNK7SmJ8O/0TnuM4Mv254/se/uBB+Udc7a1y1MY2rNqZ3s95MXTuVNYlrmP/LfHo16UW5aNfhFBkWybnUcy73nc8477QJjSxSHSKSk8IpUF0eUKWwFt/J1JMcP3ecznGd8+yz1rLv1D5aVG+Rva1SZCUATp8/nW+fKxJW8OvJXwEoH1a+wODJ6ierX3ecOX+GlftW8u3eb9mUtAmD4bra13FLg1uoHlU93/dVLV+Vfaf2uTx1d+zcMWIiYzRqEvGQwimQlWJApWU4kwqyRkSXW3twLclpyVxR5YrsbXGVnZXpD5456LK/9QfXM3HVRNrVbUdoSChf/PoFvZv1pn6l+i7bHzzt9BNXqeAV789nnGdN4hqW7V3GusR1XMi8wJVVrmRo66F0adCFyuUqF/pZm1RtwvpD69l+bDsta7TM0fevJ37NsU1EikfhFOhKKaCqR1Un1ISy6UiOxeg5kXqCaeumAZcmQwA0qtyIqPAofjn6S56+fjn2C89/9zwtqrdgdPvRHE05yvf7v+edn9/h6c5Puzz+L8d+oXK5yvmeUky5kMK0ddNYdWAVKRdSqFGhBn2a9+GWhrfk+578dIrrxOwts/lk+yc5gmjJriWkZaRxU4ObitSfiOSlcAoGpRBQYSFhdG3Ulc93fc64ZeO4se6NnEw9yeKdiykX7ly7aVT5UjiFhoTSvl57Vh9YneP02L7kfYxfNp46FevwdOenCQ8Np3bF2nRt1JXFOxezJWkLV8VelePY5y6cY0vSFro26ppvfafTTrP6wGo61e/EzQ1vpmVsy2I/j6dh5Yb0bNKThTsW8s8V/yS+djz7Tu1jwfYFtIptpXAS8QKFU7AohYAa1mYYoSaU7/d/z+akzTSp2oTHbnyMhTsWkpqeSmyF2Bzte1zZgy9//ZI1iWvoUL8DSWeTGPvNWCqEV2DsTWOJCo/Kbjuw5UC++vUrZvw0gxe6vpCjn5X7V5KWkUb3xt3zra1aVDXe6fOO164FDWszjBoVarBk1xLWJq4lJjKGXk17MajVoEKnootI4UxBs6VKSnx8vF27dm2pH1eAjAy4/36YNYutj/++xGfxJacm88AnD9C1UVf+GP/HPPvHfjOWtPQ0JnSdUOxjjPp8FLEVYkt14VcJbr2a9tKTcIvJGLPOWlvommX6J16wKaEHFqZnpud5xtL5jPNMXj0ZIM9SP1kebPMg245tY/3B9cU67qr9q9ibvJch1w4p1vtFxD/ptF4wKoFHvm9N2sqUNVPoEteF2AqxHEs5xjd7vuFIyhEevv7hfCcdxFWKY96AecU+brt67Zh7t+vnPolI2aVwKgZrLbNnz6Z79+7ExMT4upzi8XJAlQsvR2xULIt2LiLlQgoVIirQvHpzRt44UlOrRaTIFE7FYIzh7NmzDBgwgAULFhAaGurrkorHiwHVpGoT/nHrP7xWmogEN11zumjTpk2EhYWxdOnSHNunTp1Kw4YN8/yMGzeOxYsX8+mnnwIwb948IiIi2LGjjK1IXULXoEREPKHZehd169aNtLQ0li1b5lb75557jl27dvHf//43e9v1119PgwYNmDu39K6BZGZm8uKLL/L666+zZ88eYmNjufvuuxk/fjwVKlRwv6NSnsUnUpZptl7xabZeEXz//fcsXbqUJ554wq321lpuvfVWpk2blmP7yJEj+fjjj9m8eXNJlOnSqFGjeOKJJ7jqqquYMmUK/fv356WXXuKOO+4gM7MIjwvXCEpE/IjCCXj11VepVq0aPXvmfU6QK8YYOnToQHh4zhs6+/XrR1RUFK+99ppX6tq+fTtnz57Nd//mzZuZMmUK/fr1Y+7cuQwfPpyJEycyceJEvv76a95///2iHVABJSJ+IqDDac2aNfTs2ZOYmBiqVKnCsGHDSE5OJioqinvvvReA9PR05s2bx2233ZYnbM6dO0e9evWIi4sjLS3n01KHDRtGaGhojgCIjo6mc+fOzJ5d/KfQHjlyhJdeeom2bdvSrFkzkpKS8m373nvvYa3l8ccfz7F9+PDhREVFMXPmzKIXoIASET8QsOG0aNEiOnXqxM6dO/nzn//M+PHjWbduHT169ODcuXO0adMGgHXr1nHmzBnatm2bp4/y5cszbtw49u3bx6uvvpq9fcyYMUyfPp0pU6YwcGDOh9+1b9+ew4cPs23bNrdrTUlJ4b333qNnz57UrVuXkSNHEhoayksvvUTt2rXzfd+aNWsICQnJU3u5cuVo3bo1a9ascbuGHBRQIuJjATmV/NChQwwaNIj4+HiWLFmSPTHg3nvvpWHDhgDZ4bRlyxYAGjdu7LKvIUOGMGnSJJ5//nmGDx/Om2++yYQJExg3bhx//GPe5Xiy+tm8eTPNmzfPt8bMzEy+/PJLZs6cydy5czlz5gwtWrRg7NixDBo0iEaNGuX73iyJiYlUr16dyMi8D7arW7cuK1eu5Pz580RERBTaVx4lcKOuiIi7AjKcXnjhBU6dOsX06dNzzFirXLkyrVu3ZtmyZbRu3Rog+7RZ1apVXfYVGhrKhAkTuOOOO+jTpw9fffUVjz76KM8884zL9tWqVQOc03OunD17lmeeeYb33nuPgwcPUq9ePR566CEGDx6cHZjuSklJcRlM4IyestoUK5xAASUiPhNw4WSt5YMPPqBTp075jlwaNGhAlSpVgEuP9S5oSn2vXr247rrr+PLLLxk4cCAvvvhigce/vN/ckpKSmDhxIgC9e/fmlVdeoW7duoV/MBeioqLyDcHU1NTsNh5RQImIDwTcNafDhw+TmJjI9ddfn2eftZYtW7bkGKHExjqPcTh+/Hi+fX744Yds2LABgIoVKxZ4f0NWP1n95lavXj1mzZpF9+7dWbhwIXFxcXTt2pW33nqL5OTkwj/gZerUqcPRo0fzTNYAOHDgANWrVy/+qOlyugYlIqUs4MIpJSUFgJCQvB/ts88+IykpKfuUHkCrVq0A8l3ZYcmSJdx777307duXgQMH8tZbb7F169Z8j79z584c/eYWFhbGoEGDWLRoEQcOHGDixImcPHmSBx98kJo1a9KvXz/mzJmTPfIpyA033EBmZiY//PBDju2pqals2LCB+PhC73NznwJKREqRx+FkjKlvjPnaGLPVGLPZGDPSG4UVV/369QkLC+Obb77Jsf3w4cM8+uijADlGTm3atCEmJoZVq1bl6Wv16tX069ePjh07MmvWLJ577jlCQkIYM2ZMvsdftWoVNWvWpFmzZoXWWqNGDUaOHMnatWvZunUro0ePZv369fTv35+aNWsyZMgQTp8+ne/7BwwYgDGGyZMn59j+xhtvkJKSwuDBgwutoUgUUCJSSrwxckoHRltrWwDtgEeMMVcV8p4SEx4eztChQ1m3bh09e/bk9ddfZ/z48bRp04awMOcS2+XhFBoaSr9+/fjqq69ynB7bunUrt99+O02bNmXevHlERkbSuHFjHnzwQebPn893332X59hnzpxh+fLl9O/fv8h1N2/enH/84x/s3r2bZcuWMWDAAObPn8+xY8fyfc/VV1/NI488wty5c+nXrx9vvvkmo0eP5oknnuCmm25i0KBBRa6jUAooESkFXl9bzxgzH3jZWrs0vzYlvbZeSkoKf/nLX5g7dy6nT5/mhhtu4Mknn+Tll1/mxx9/5MCBAzna//DDD9x4443MmTOHu+66i4SEBDp27EhERAQrV66kZs2a2W0PHjxI48aNadOmTZ6AevvttxkyZAgbN27M97ReUaSlpRESEpLn5uDLZWRkMHnyZKZNm8aePXuoXr06AwYMYPz48URHR3tcQwEH1lp8ErS0tl7xubu2nlfDyRjTEPgWaGWtPZVr3whgBEBcXNz1e/fu9dpx3ZGUlES9evUYOnQoU6dOzbO/e/funD17luXLlxf7GL5Y+NWnFFASpBROxeduOHltKrkxJhr4CHg8dzABWGunAdPAGTl567i5XbhwAWNM9ik8cCYI3H///S6X+snyn//8h2uvvZYlS5bQrVu3Ih933rx5bNy4sejr2ZVlWaf4rNU0cxHxKq+EkzEmHCeYZllrfTps+O677xg2bBj33HMPcXFx7N+/n5kzZ7Jnzx6mTp2a70SFli1bkp6eXuzj9unTh/Pnzxf7/WVWaCi88w6g+6BExHs8DifjjG2nA1uttRM9L8kz0dHRxMXFMXXqVJKTk6lcuTIdOnRgxowZdO7c2dflBSYFlIh4mTdGTh2Be4GNxpgNF7c9Za39zAt9F1l8fDxfffWVLw4d3BRQIuJFHoeTtXYFoCuDooASEa8JuLX1xMcUUCLiBQon8T4FlIh4SOEkJUMBJSIeUDhJyckKKGMUUCJSJAonKVl6HpSIFIPCSUqeAkpEikjhJKVDASUiRaBwktKjgBIRNymcpHRpsVgRcYPCSUqfppmLSCEUTuIbCigRKYDCSXxHASUi+VA4iW8poETEBYWT+J4CSkRyUTiJf1BAichlFE7iPxRQInJRiK8LEMkhK6AGDaLF5Jlc+dqHvq4o6EUePsbVz74KmZm+LkWCiEZO4n+0mrlPNZoxn9pLVubYVmFvIqebNGDP4Nt9VJUEG4WT+CctdeQzu4f0ZveQ3tmvI06covWTk9l/582+K0qCjsJJ/JcCyi9cqFCetVPGkBkR7utSJIgonMS/KaB8zkaEY31dhAQdhZP4PwVUqQlJO19om8ywUOd/E5ESpHCSskGrmZeKLv1GUXHXvgLbfPvRJJJbNi6liiRYKZyk7NB9UCUuoX83mr00i2/nTMxzjanlhOmUP3hUwSSlQvc5Sdmi+6BK1L7et2DSM6i07VfO1auZ/XO+SgyxK38ioX+37LbRu/fT/r6n6Xnt77jpjkep8uNWbm/Vl2o/bPLhJ5BAoZGTlD0aQZWYC1ViOHhbe+p/9AWJPTtnb6+zeAVgOdCrC+AEU6f+o9k7sDsbxz5MVMIhrn/iX4SkZ3CqWUPfFC8BReEkZZMCqsQk9O9G+6HPUD4xiXN1YgGIm7OUxB6dSI+OAqDVc9M42qE1W//yAABnGtfn6OIVVFuzmQuVon1WuwQOndaTskun+ErEsXbXcLZ+LerP/QKACrv3U3X9NvZePKVX7mASsSs3sP2RgTnelxkRzqnmDUu7XAlQCicp2xRQJSKh/23U//hLsJa4j5ZyqkkDTrZuDkClLbvIDAvNc/qu4q59JDdv5INqJRB5JZyMMW8ZY44YY3QlVEqfAsrr9vX9DeWOHKfG8h+pN//rHBMhbEgoJiOT0HNp2dsqbdpJ1R+3auQkXuOtkdMMoLuX+hIpOgWUV52vVplDt7blmrGvEH46Jce6esmtriQzIpyr/vVfohIOErt8HW3+OhGAUy00chLv8Eo4WWu/BY57oy+RYssKqMGDFVBesHdAdyKPHCexe0cuVK6YvT0ttgrrJzxOjWXruKn3Y1wxcyH7+v6GtKqVSKlfy4cVSyAptdl6xpgRwAiAuLi40jqsBBstdVQ0mZnUXbCMU82u4HSua0hHO7Rm4eZ5Lt92sEcnDvbo5LywlhuHPcvB33Yo2VolqJRaOFlrpwHTAOLj47WOpJQcBVThrCV2xY+0+M87pEeXZ+W7z7v91qrrthCZdILklo0JP3maRjPmU2nbbjb887ESLFiCje5zksCkgMpXpY07uOrfM6i+eiMAK957AYxx+/2RSSdo8Z+3KXf4GOerVuJY21Z8+9Ek0mpWK6mSJQgpnCRwlbGAOnY4kg+mNuXhZzYSUgI3eVTYk0jzye9SZ/F32dsO3taOE22aF6mfg907crB7R2+XJ5KDV8LJGPMecDNQ3RizHxhrrZ3ujb5FPOLHq5nPn9GIlUtq59iWuLcCDZqc5vbBe7x2nMgjx2n66vvEzV5CSEZm9nYbEsK2Ufd57Tgi3uSVcLLW3uONfkRKhJ8uddR7yG56D9md/frUiQgmP9mam+/c75X+w86k0Hj6XBrNmE/YZfckZUm4qytnGtXzyrFEvE2n9SQ4+GlAXa58hQuMmbKW8IjMwhsXIOT8BRq8v4gmUz8k8sQpl20yykWw/U/6N6X4L4WTBA8/D6jwCAteeCB6xe17qbRlNyHpGfm22X3vHaRqAoP4MYWTBBc/CKjzaYXPdggNy8zxJPTPP4xjzrQrSTpYntvu2scj43/O973Jra5kw4THKZ+YRJe+jxORfDrn8StFs3P4XcWuX6Q0KJwk+Pg4oEb168K+XRULbDPpo29p3DIZgP27o5k67mr+Nnkdza49QfkK6YUeIzLpBDcOfzZPMAHseKg/6TF6rIX4N4WTBCcfBlS3/gnMeqkZE+d8m+f60vQJLTl6sHx2MAGs/qomDZqcpv1th9zqPzLpBO2H/A8Vd+0D4ELFCpxo3Yway3/kXO3q7Bl8u/c+jEgJUThJ8PJRQN3Sex/vTGzOr9sq0blnYvb2c2dD+WllLA/8dUv2tod/ewuJe51Rzp3N76Bd14M89fLafPt2FUyrpo/DZGRSY/mPbHtsMJmRESX0yUS8R+EkwS0roIwptYCKqXKB9rcd5IuP6ucIpxWL62CBLr0OZG+b8H/fMWZwR27ps5/b7kogsnz+kxzyC6aT1zSFzEwO3xSfY3VxEX+mhw2KZN2oW4qrmXfrn8BP38eSlFg+e9vSOXF06pFIVPSla0pR0ekc2h9FizbHqRKblmPf5QoMJoCQENZN/As5ZlmI+DGNnETAK0sdzZzcjA9fa1pgm3+8vZKrbzzGNe2OUav+Wb6YW597/rSd/bsrsG19VYb+bXOO9nu3VyQjPYQrWiTn06MbwXRRRoXyrt4u4pcUTiJZPAyoO+//lZvvPFBgm9ja57J/v61/Aovea8jAR7az9KM4GjQ5RfPWJ3O0/3VbJWrUSSE6ppgjJpEySuEkcjkPAiqmynliqpx3+1C/6buPWS8258flNfh6fj36j9iZp83urTFc0cL1Kg8KJglkCieR3EppNfPK1c7T9tZDvDL2GlJOh7tcU+/XbZW4tn1Snu0KJgl0mhAh4kpWQA0aVKKTJLoP2MvxI5F07J5IxcoXcuyzFvb8UpFGuUZOWcEUrWCSAKaRk0h+SuE+qNYdjjJv80KX+4yBD9YtzrEtMukE8fc/y7u7e9GMX+hScbWCSQKSwkmkIH6wFl+W8MMnSLx7NTce/pxozrAquouCSQKWwkmkMH4QUFsWRfLBk61Zn+Y8HHBB+d788NazCiYJWAonEXf4KKB2bYlh5vNNWLemTva2W0K/oeKMLgomCWgKJxF3lWJAHdoXxawXm7FsQd4n1Q78+36Sr1UwSWBTOIkURQkH1MljEXw4tQmLP2hI+oW8k2lvaf8LtftV8trxRPyVwkmkqEogoM6dDWX+jEZ8PP1KzqW4/msZGprBgLEFr0AhEigUTiLF4eXVzM+eDic8MpO6jc6wc1Nll21+OyCBOg3PFvsYImWJwkmkuLy4kkT1WqncNWwX3TttYszvbmRPeoMc+8tFpTPgDzs8q1ekDFE4iXjCiwF1dts5nu3fJk8wAfQespsqsWnFr1OkjFE4iXjKCwGVFUy/XGgCQCVOcku3Pcxb0pqYKmn0HbrLuzWL+DmFk4g3eBBQroLpf/+5kOhbqvHJl5kM+MOOfB8yKBKoFE4i3lKMgMovmOr0iwEu8Nu7E+g+cG+Jli3ijxROIt6UFVDWFhpQBQeTY/hTmwgLtyVft4ifUTiJeJsb90G5E0yAgkmClsJJpCQUEFDuBpNIMPNKOBljugMvAqHAm9baCd7oV6RMyxVQu3/ZwxNrjpF+dA67UTCJFMTjJ+EaY0KBV4AewFXAPcaYqzztVyQgXAyoXzt04PZFKxh29LfsxvnrEcNJHuj/HwWTiAveeEx7W2CntXa3tfY88D7Q2wv9igSG0FBu3pvGLG7nL0zmSZ4nhpPUpRuzvnvd19WJ+CVvnNarC+y77PV+4MbcjYwxI4ARAHFxcV44rEjZcOgQJBx4h/toBtzH8zxFDV7hCQ5gDhpflyfil7wxcnL1tyvPFCNr7TRrbby1Nj42NtYLhxXxf4cOwa23AlxFJqHcx0vMoiqjOMCTQPXa1X1coYh/8sbIaT9Q/7LX9YBEL/QrUqZlBdPWrVlbTpJJD+7jOBZ4Huh0bTMyfVeiiN/yxshpDdDEGHOFMSYCGAh84oV+Rcqs3MFUqRKMG7eKBg2OYI3hmbi47EkSV74+27fFivghj0dO1tp0Y8yfgM9xppK/Za3d7HFlImWUq2BasgTatu3OM8/sudQwIwPuv58Wk94FYOdD/Uu/WBE/5ZX7nKy1nwGfeaMvkbLkxAkID4foaOd1/sHk4s2Xr8WngBLJQStEiHjgf/8X2rSBAQOKGExZcgeUtR4/8l0kECicRIpp/3548UW4/Xa46aZiBFMWLz6wUCRQKJxEiunZZyE1FRYuhM2bYds2Z3uRgilLEVYzFwkGCieRYtiyBf77X+f31FQPgymLG6uZiwQLhZNIMTz1FGS6uEHpr3+F667zoGMFlAjgnfucRILKd9/B/Pmu9z39NNSuDePGuQ4vt2QF1KBBtJg8U/dBSVDSyEmkCKyFJ5/Mf3+lSjB6NDz2GIR48k+/y0dQmmYuQUjhJFIECxbAihV5t0dEwKOPwpgxUK2alw6mgJIgpnAScVNGRt5RkzFw333OabwGDUrgoAooCVIKJxE3vfOOM0svy+23w/PPw9VXl/CBFVAShBROIm44dw6eecb5vV07Z2WILl1KsYCsgDJGASVBQeEk4oaXX4YKFWDuXOjTxzmdV+q0Fp8EEYWTSCEyMqBRI9i0CcJ8/TdGASVBwtd/1UT8Xmgo3HWXr6u4jAJKgoDCSaQs0mrmEuC0QoQEncRE+MMfPFgtdvEBAAAO5klEQVTBwV9kBdTgwc5KEq996OuKRLxGIycJeJMmwUcf5dy2Ywe0agWPPOKbmrxGq5lLgFI4ScAbNcr5yXL0KAwZAr//vc9K8i4tFisBSOEkQScmxhlJRUb6uhIvyh1QxmiShJRpCicJOhERvq6ghGglCQkgmhAhAS01tfCfjIxL7d94w7mnKSwMHnrId3UX2+WP25j0rh63IWWWRk4S0K67DrZuLbjNunVOu23bnFl8s2c7SxRVrFg6NXqdRlASABROEtCGD4f/9/+cAMp9jWnUKNi379KTaz/5xJnB17dv6dfpdQooKeMUThLQ7rvPecbShg0wYMCl7WfOwBdfwL//7bxu2tSZXg7Ounl9+sDHH5d+vV6lgJIyTOEkAa1aNejXD956K2c4ffih81Tbe+5xXq9YAZ07O2H24IMQFeWber1Oq5lLGaVwkoA3fDh07QoJCRAX52ybPt0Jq5gY53VMDOzeDR07Qq1avqu1RGgtPimDNFtPAt4tt0DjxvDf/zqvf/kFVq50QivLpk2Qng6tW/umxhJ3+VJHmsUnZYDCSYLCsGEwY4ZzKm/6dGfiQ7t2l/Zv2OA8Zr1yZZ+VWPJyB5TW4hM/5lE4GWP6G2M2G2MyjTHx3ipKxNuGDIEDB2DxYucSzOWjJnDCKWBHTZfTYrFSRnh6zWkT0A943Qu1iJSYGjWgd2/nxtrk5Lzr6m3Y4FyXCgqXX4PSWnzipzwaOVlrt1prf/FWMSIl6aGHnMdl9O8PVate2m4t/PxzkIycsmQF1KBBGkGJX9JsPQkaXbs6kx5yMwZOnSr9enxOq5mLHys0nIwxXwCuJtc+ba2d7+6BjDEjgBEAcVnzeUXEt7SaufipQsPJWuuVM/HW2mnANID4+HjrjT5FxAu0koT4IZ3WExEFlPgdj8LJGNMXmALEAguNMRustb/1SmUiUroUUOJHPAona+3HQFlfHlNEsiigxE/otJ6I5KSAEj+gcBKRvLSaufiYwklEXNNq5uJDCicRyZ8CSnxE4SQiBcsdUNZqJQkpcQonESmcFouVUqZwEhH3ZAWUtQooKXEKJxFxnxaLlVKicBKRolFASSlQOIlI0Wk1cylhCicRKR6tJCElSOEkIsWngJISonASEc8ooKQEKJxExHMKKPEyhZOIeIcCSrxI4SQi3qPVzMVLFE4i4l1aLFa8QOEkIt6ngBIPKZxEpGRoNXPxgMJJREqOVjOXYlI4iUjJ0mrmUgwKJxEpeVosVopI4SQipUMBJUWgcBKR0qPVzMVNCicRKV1aSULcoHASkdKngJJCKJxExDcUUFIAhZOI+I4CSvKhcBIR31JAiQsehZMx5l/AHcB5YBfwgLX2pDcKE5EgotXMJZcQD9+/FGhlrb0G2A6M8bwkEQlKWStJDB5Mi0nvcuXrs31dkfiQRyMna+2Sy16uAn7nWTkiEtS0mrlc5M1rTkOBD/LbaYwZAYwAiIuL8+JhRSSgaDVzwY1wMsZ8AdRysetpa+38i22eBtKBWfn1Y62dBkwDiI+Pt8WqVkSCg1YzD3qFhpO1tmtB+40x9wO9gN9YaxU6IuIdCqig5ulsve7A34CbrLUp3ilJROQiBVTQ8vSa08tAJLDUGAOwylr7sMdViYhkUUAFJU9n613prUJERPKVO6C0mnnA0woRIlI2aJp5UFE4iUjZoYAKGgonESlbFFBBQeEkImWPAirgKZxEpGxSQAU0hZOIlF0KqIClcBKRsk0BFZAUTiJS9imgAo7CSUQCg1YzDygKJxEJHFrqKGAonEQksCigAoLCSUQCjwKqzFM4iUhgUkCVaQonEQlcWs28zFI4iUhg0zTzMknhJCKBTwFV5iicRCQ4BEJAWQuzZ0P37hAT4+tqSpTCSUSCR1kPKGPg7FkYMAAWLHA+T4AK8XUBIiKlKiugBg+mxaR3ufL12b6tZ9MmCAuDpUtzbp86FRo2zPszbhwsXgyffuq0mzcPIiJgx45SLbukKZxEJPj4U0A98QR07Ai33ZZz+x/+AHv25P0ZNgyGDIE+fZx2ffrA1VfD3/5WmlVDZiZMmgTNm0O5clC/Powe7YzsvECn9UQkOPnDKb7vv3dGTPPmudfeWrj11rxBNHIk3H8/bN4MLVt6v05XRo2Cl16Cvn2dUNq61Xm9fj188QWEeDb2UTiJSPDydUC9+ipUqwY9e7rX3hjo0CHv9n79nJHWa6/BlCnerdGVzZud4/TrBx99dGn7FVfAY4/B++/DoEEeHUKn9UQkuOU+xffah573uWaNEzgxMVClinMqLjkZoqLg3nudNunpzojpttsgPDzn+8+dg3r1IC4O0tJy7hs2zKn5/fcvbYuOhs6dnZl8peG995xR3OOP59w+fLjzGWfO9PgQGjmJiHhzqaNFi5zrQA0awJ//7ITTW29Bjx5O6LRp47Rbtw7OnIG2bfP2Ub68M/Fh2DBndDVqlLN9zBiYPh1eeQUGDsz5nvbt4fPPYds25zpQbpmZcPy4+5+jatX8T82tWePsy117uXLQurWz30MKJxER8E5AHTrknM6Kj4clS6BCBWf7vfc6M+3gUjht2eL82bix676GDHEmHDz/vDMiefNNmDDBCa0//jFv+6x+Nm92HU4JCc5pN3f9+uulmnNLTITq1SEyMu++unVh5Uo4f96ZRVhMCicRkSyeBtQLL8CpU87oJiuYACpXdkYUy5Y5fwIkJTl/Vq2afy0TJsAddzgjsa++gkcfhWeecd2+WjXnzyNHXO+vVSvvdPWC1KqV/76UFNfBBM7oKauNwklExEuKG1DWwgcfQKdOrkcu4Jzqq1LF+d2YS+/LT69ecN118OWXzmm8F18s+PiX95tbuXLQtWvBn8FdUVH5h2Bq6qU2HlA4iYjkVpyAOnzYOd01YEDefdY6p/E6dry0LTbW+bOg60AffggbNji/V6yYf/Bc3k9Wv7llZFwarbkjNjb/FSjq1HE+T1pa3hHUgQPOKT8PRk2gcBIRca2oAZWS4vzpahLBZ585wZB1Sg+gVSvnz/xWdliyxLlW1bevM5vvrbeciREtWrhuv3Nnzn5z27fPe9ecbrjBqe+HH5xZgllSU50w7dLF/ePkw6NwMsb8HegNZAJHgCHW2kSPqxIR8QdFCaj69Z1liL75Juf2w4eda0VwaTJE1u8xMbBqVd6+Vq927iHq2BFmzYL9+537icaMyf+G3VWroGZNaNbM9X5vXnMaMAD++U+YPDlnOL3xhhPSgwe7f5z8WGuL/QPEXPb7Y8Br7rzv+uuvtyIiZUZ6urWDB1sLdsvjv7eZmZmu240YYS1Y26OHta+9Zu24cdbWrm1tkybO9oSEnO2HDLG2ShVrU1Mvbduyxdpq1axt08ba5ORL2x9+2OljxYq8xz192tqoKGv/9CfPP6u7/vQnp56+fa194w1rn3jC2rAwa2+6ydqMjHzfBqy17uSLO43c6gjGAFPdaatwEpEy57KAynzuOddtzp619o9/tLZWLWsrVLD25putXbzY2l69rK1TJ2/71aud/wzPmeO83rvX2nr1rG3UyNpDh3K2TUy0tnx5azt0yNvPjBlOPxs3evYZiyI93dp//9vapk2tjYhwPt+oUU5QFsDdcDK2oJkibjDG/AO4D0gGbrHWurziZowZAYwAiIuLu37v3r0eHVdEpNRlZDhr2KWnw//9n3vrxyUlOas9DB3qrDSeW/fuzmKpy5cXv67rr3dmAs6dW/w+SokxZp21Nr7QdoWFkzHmC8DVycenrbXzL2s3BihnrR1b2EHj4+Pt2rVrC2smIuJ/MjKc2XdhuS7ZX7jgzKa7fHtqqnPt6IsvYONG19eDNm+Ga691Jk1061b0eubNg7vvdvpp0qTo7y9l7oZToRMirLXuToz/P2AhUGg4iYiUWflNr/7uO2e5oXvucdbE27/fWWNuzx5nxJTfRIWWLZ2RWHH16eOsxhBgPJ2t18RamzUP8k5gm+cliYiUQdHRTihNneos8lq5srOC+IwZOWe0iVs8vc9pgjGmGc5U8r3Aw56XJCJSBsXHO0sMiVd4FE7W2ru8VYiIiEgWPc9JRET8jsJJRET8jsJJRET8jsJJRET8jscrRBTroMYk4czu82fVgaO+LqKM0HdVNPq+3KfvqmjKwvfVwFqbz3M9LvFJOJUFxpi17tzFLPquikrfl/v0XRVNIH1fOq0nIiJ+R+EkIiJ+R+GUv2m+LqAM0XdVNPq+3KfvqmgC5vvSNScREfE7GjmJiIjfUTiJiIjfUTi5wRjzZ2OMNcZU93Ut/soY8y9jzDZjzM/GmI+NMZV9XZO/McZ0N8b8YozZaYx50tf1+DNjTH1jzNfGmK3GmM3GmJG+rsnfGWNCjTHrjTELfF2LNyicCmGMqQ/cBiT4uhY/txRoZa29BtgOjPFxPX7FGBMKvAL0AK4C7jHGXOXbqvxaOjDaWtsCaAc8ou+rUCOBrb4uwlsUToWbBPwV0MyRAlhrl1hrsx7nuQqo58t6/FBbYKe1dre19jzwPtDbxzX5LWvtQWvtjxd/P43zH926vq3Kfxlj6gG3A2/6uhZvUTgVwBhzJ3DAWvuTr2spY4YCi3xdhJ+pC+y77PV+9B9btxhjGgJtgNW+rcSvTcb5R3SmrwvxFk+fhFvmGWO+AGq52PU08BTQrXQr8l8FfVfW2vkX2zyNc0pmVmnWVgYYF9s0Gi+EMSYa+Ah43Fp7ytf1+CNjTC/giLV2nTHmZl/X4y1BH07W2q6uthtjrgauAH4yxoBzmupHY0xba+2hUizRb+T3XWUxxtwP9AJ+Y3UDXW77gfqXva4HJPqoljLBGBOOE0yzrLVzfV2PH+sI3GmM6QmUA2KMMTOttb/3cV0e0U24bjLG7AHirbX+vuKvTxhjugMTgZustUm+rsffGGPCcCaK/AY4AKwBBllrN/u0MD9lnH8Rvg0ct9Y+7ut6yoqLI6c/W2t7+boWT+mak3jLy0BFYKkxZoMx5jVfF+RPLk4W+RPwOc7F/Q8VTAXqCNwL3Hrx/08bLo4MJEho5CQiIn5HIycREfE7CicREfE7CicREfE7CicREfE7CicREfE7CicREfE7CicREfE7/x87+Hmq247h7AAAAABJRU5ErkJggg==\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### まとめる"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "以上をまとめる.\n\n$$\n\\text{subject to } g(\\vec{x}) \\geq 0 \\\\\\\\\n\\text{max} f(\\vec{x}) \\\\\\\\\n\\Rightarrow \nL(\\vec{x}, \\lambda) = f(\\vec{x}) + \\lambda g(\\vec{x}), (\\lambda \\geq 0)\n$$\n\n$$\n\\text{subject to } g(\\vec{x}) \\geq 0 \\\\\\\\\n\\text{min} f(\\vec{x}) \\\\\\\\\n\\Rightarrow \nL(\\vec{x}, \\lambda) = f(\\vec{x}) - \\lambda g(\\vec{x}), (\\lambda \\geq 0)\n$$\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 相補条件"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "- 等式条件(境界)上に停留点があれば,$g(\\vec{x}) = 0$\n\n- 不等式領域$g(\\vec{x}) > 0$に停留点があれば,制約を考える必要がない通常の最適化より$\\lambda = 0$\n\n以上をまとめると,以下の条件を満たす.\n\n$$\n\\lambda g(\\vec{x}) = 0\n$$\n\nこれを特にKKT条件の中では相補条件という.\n\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"hide_input": false,
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {
"height": "calc(100% - 180px)",
"width": "165px",
"left": "10px",
"top": "150px"
},
"toc_section_display": true,
"toc_window_display": true
},
"language_info": {
"name": "python",
"version": "3.7.0",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "",
"data": {
"description": "Lagrange",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment