From d7f38501d9d3a6c5b01054d5cb7499eb38b4acab Mon Sep 17 00:00:00 2001 From: chzhang Date: Wed, 11 Jan 2023 22:51:51 +0800 Subject: hill climbing --- search/02_hill_climbing_discrete_space.ipynb | 446 +++++++++++++++++++++++++++ vis/animation/tutorials/z_f_x_y.py | 27 ++ 2 files changed, 473 insertions(+) create mode 100644 search/02_hill_climbing_discrete_space.ipynb create mode 100644 vis/animation/tutorials/z_f_x_y.py diff --git a/search/02_hill_climbing_discrete_space.ipynb b/search/02_hill_climbing_discrete_space.ipynb new file mode 100644 index 0000000..d6e2643 --- /dev/null +++ b/search/02_hill_climbing_discrete_space.ipynb @@ -0,0 +1,446 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "id": "d738c689", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:01:59.306932Z", + "start_time": "2023-01-11T14:01:59.304487Z" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm" + ] + }, + { + "cell_type": "markdown", + "id": "541530d2", + "metadata": {}, + "source": [ + "## lanscape (value function)" + ] + }, + { + "cell_type": "markdown", + "id": "b778e1b3", + "metadata": {}, + "source": [ + "- landscape\n", + "- value function\n", + "- `cost` function/objective\n", + "- evaluation\n", + " - f(x1,) 与 f(x2) 比大小,当个点更优" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "b0206f11", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:39:41.865315Z", + "start_time": "2023-01-11T14:39:41.861286Z" + } + }, + "outputs": [], + "source": [ + "landscape = np.random.randint(1, high=50, size=(10, 10))" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "7a92c050", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:39:42.905795Z", + "start_time": "2023-01-11T14:39:42.899745Z" + }, + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[31, 3, 13, 44, 35, 48, 47, 25, 25, 45],\n", + " [12, 46, 43, 35, 17, 43, 25, 43, 14, 17],\n", + " [23, 14, 17, 15, 49, 13, 28, 34, 40, 14],\n", + " [32, 38, 49, 38, 26, 10, 33, 26, 39, 35],\n", + " [32, 39, 25, 4, 18, 11, 20, 35, 23, 20],\n", + " [44, 31, 49, 30, 26, 2, 20, 42, 10, 2],\n", + " [21, 10, 17, 47, 8, 36, 34, 5, 6, 28],\n", + " [45, 27, 32, 47, 2, 40, 25, 18, 5, 36],\n", + " [32, 43, 7, 17, 5, 37, 14, 5, 2, 16],\n", + " [49, 35, 22, 20, 21, 4, 28, 26, 5, 2]])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "landscape" + ] + }, + { + "cell_type": "markdown", + "id": "646d0935", + "metadata": {}, + "source": [ + "- 把(离散的)二维矩阵视为 z=f(x,y)\n", + "- 而 z=f(x,y) 是三维空间的一个surface(ax.plot_surface(x, y, z))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "fcf3411f", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:40:44.931303Z", + "start_time": "2023-01-11T14:40:44.682288Z" + }, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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RUVFajW2N9De3q6Kp3KStFgsBAUFMWvWLH72s59hNpv5z3/+Q1hYmKeXy4kTJ7jrrrv48MMP6ejoYNq0abz00kssWLDA00vzGJpgavRByWUp5vAVFRUsXryY/Px8Vq5cSWRk5IAnVGXcmLIFNtwTryiKavWnyWRSqz9jY2PH1N+2Jz2rRieS163NZqO4uBhBEIiPj6e+vh6z2Yyvr69DDm68iac3imVvurq6MJvNvPjiizz11FOEhYUhyzIvv/wyF198sceNCRobG8nMzGTJkiX86le/Ijo6mgMHDjB16tRhVxhPJFTBzHORYL6tCeaEQpZlDhw4oIqnYqSQl5fH6tWriY2NVU+oZWVl1NTU9DtubCT0rv7U6XRqznMkxRQjQZZlKioqqK+vJzMzc8LklKxWK0VFReqWuXKCVjyFlUhIsUVUKm693btUmaQydepUr84vK9hsNq6//noOHDjA7Nmz+eSTT9DpdKxbt45HHnnEY+u6++67+eqrr/jyyy89tgZvRBXMlS4SzPc0wZywKKbiyrbtzp07WbhwIatWreLQoUNs3ryZHTt2uCW3pzSRKzk4WZYdLPrccSIXRVGdDDORCmGU3tGgoCDmzp074HunGJb3tEVU+mujoqK8znFGEctp06aNi1mqdrudG264gd27d7N161ZiY2Ox2+3s2LGD+vp61qxZ47G1zZ49m4svvpjq6mo+//xzEhMTufHGG1m3bp3H1uQNaIKpMSJkWaaqqop///vf/O///i8tLS0sWLBArbh1p4tP79YJu93u8kkfdrudkpISJEmaMMbw0N0/WFhYSHh4OLNnz3b6byTLMi0tLWquubOz06GAxdPvz3gTS1EUWb9+PV9//TXbtm0b0+kvzqBcHN5+++38+Mc/ZufOnfz617/mueeeY+3atR5enedQBXOZiwTzI00wvze0tbVxxRVXcPToUV566SW+++47CgoK+OKLL5g/f74603PatGluFc+Wlha1gMVqtTpY9I0kCurq6qK4uBij0Uh6errH80muQpn7GBMTM2oP3/b2dvWCRTGnUMRzrPsGGxsbKS4uZsaMGQNaSHoTkiRx6623snXrVrZu3eqVW8dGo5EFCxawY8cO9bZbbrmFnTt38vXXX3twZZ5FFcylLhLMT71PML1r32gC8c0339DV1cX27dsJCwsjJyeHG2+8EbPZzObN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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xs, ys = np.meshgrid(range(10), range(10))\n", + "zs = landscape[xs, ys]\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "surf = ax.plot_surface(xs, ys, zs, rstride=1, cstride=1, cmap=cm.jet, linewidth=0)\n", + "fig.colorbar(surf)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "e3ccf391", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:42:03.300562Z", + "start_time": "2023-01-11T14:42:03.295890Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 4) 49\n" + ] + } + ], + "source": [ + "global_pos = np.unravel_index(np.argmax(landscape, axis=None), landscape.shape)\n", + "print(global_pos, landscape[global_pos])" + ] + }, + { + "cell_type": "markdown", + "id": "0c1b2ce1", + "metadata": {}, + "source": [ + "## 邻域的定义" + ] + }, + { + "cell_type": "markdown", + "id": "6c71a021", + "metadata": {}, + "source": [ + "- 2d 搜索空间的 8 邻域" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "03cac173", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:42:57.995556Z", + "start_time": "2023-01-11T14:42:57.987068Z" + } + }, + "outputs": [], + "source": [ + "def find_neighbors(pos, M, N):\n", + " neighbours = []\n", + " for dx in [-1, 0, 1]:\n", + " for dy in [-1, 0, 1]:\n", + " if dx == dy == 0:\n", + " continue\n", + " new_x, new_y = np.asarray(pos) + np.asarray([dx, dy])\n", + " if new_x < 0 or new_x > M-1:\n", + " continue\n", + " if new_y < 0 or new_y > N-1:\n", + " continue\n", + " neighbours.append((new_x, new_y))\n", + " return neighbours" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "69d41bf3", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:43:08.650116Z", + "start_time": "2023-01-11T14:43:08.644275Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0, 1), (0, 2), (0, 3), (1, 1), (1, 3), (2, 1), (2, 2), (2, 3)]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "neighbors([1, 2], 10, 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "38d1862a", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:43:10.633643Z", + "start_time": "2023-01-11T14:43:10.628706Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[31, 3, 13, 44, 35, 48, 47, 25, 25, 45],\n", + " [12, 46, 43, 35, 17, 43, 25, 43, 14, 17],\n", + " [23, 14, 17, 15, 49, 13, 28, 34, 40, 14],\n", + " [32, 38, 49, 38, 26, 10, 33, 26, 39, 35],\n", + " [32, 39, 25, 4, 18, 11, 20, 35, 23, 20],\n", + " [44, 31, 49, 30, 26, 2, 20, 42, 10, 2],\n", + " [21, 10, 17, 47, 8, 36, 34, 5, 6, 28],\n", + " [45, 27, 32, 47, 2, 40, 25, 18, 5, 36],\n", + " [32, 43, 7, 17, 5, 37, 14, 5, 2, 16],\n", + " [49, 35, 22, 20, 21, 4, 28, 26, 5, 2]])" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "landscape" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "d62f3cdf", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:44:40.306534Z", + "start_time": "2023-01-11T14:44:40.301956Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 0] 43\n", + "(0, 1) 3\n", + "(1, 0) 12\n", + "(1, 1) 46\n" + ] + } + ], + "source": [ + "print([0, 0], landscape[1, 2])\n", + "for pos in find_neighbors([0, 0], 10, 10):\n", + " print(pos, landscape[pos])" + ] + }, + { + "cell_type": "markdown", + "id": "fbcd72ff", + "metadata": {}, + "source": [ + "## 爬山算法" + ] + }, + { + "cell_type": "markdown", + "id": "de924d39", + "metadata": {}, + "source": [ + "- 对初始点敏感\n", + " - 从初始点(设为当前点)出发,对其8邻域,取8邻域的最大值(局部),\n", + " - 如果该邻域没有比当前点更大的点,搜索结束;\n", + " - 否则沿着该邻域最大值对应的点(作为当前点),继续搜索\n", + "- (局部)极值点而非(全局)最值点\n", + " - 凸函数/凹函数,极值点就是最值点" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "aabb95ed", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:46:45.352818Z", + "start_time": "2023-01-11T14:46:45.347730Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[31, 3, 13, 44, 35, 48, 47, 25, 25, 45],\n", + " [12, 46, 43, 35, 17, 43, 25, 43, 14, 17],\n", + " [23, 14, 17, 15, 49, 13, 28, 34, 40, 14],\n", + " [32, 38, 49, 38, 26, 10, 33, 26, 39, 35],\n", + " [32, 39, 25, 4, 18, 11, 20, 35, 23, 20],\n", + " [44, 31, 49, 30, 26, 2, 20, 42, 10, 2],\n", + " [21, 10, 17, 47, 8, 36, 34, 5, 6, 28],\n", + " [45, 27, 32, 47, 2, 40, 25, 18, 5, 36],\n", + " [32, 43, 7, 17, 5, 37, 14, 5, 2, 16],\n", + " [49, 35, 22, 20, 21, 4, 28, 26, 5, 2]])" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "landscape" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "4431d5c0", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:48:35.257694Z", + "start_time": "2023-01-11T14:48:35.250433Z" + } + }, + "outputs": [], + "source": [ + "def one_hill_climb(curr_pos, landscape):\n", + " M, N = landscape.shape\n", + " neighbors = find_neighbors(curr_pos, M, N)\n", + " ascended = False\n", + " next_pos = curr_pos\n", + " for neighbor in neighbors: #Find the neighbour with the greatest value\n", + " if landscape[neighbor] > landscape[next_pos]:\n", + " next_pos = neighbor\n", + " ascended = True\n", + "\n", + " return ascended, next_pos\n", + "\n", + "def hill_climb(landscape):\n", + " M, N = landscape.shape\n", + " init_pos = (np.random.randint(0, M), np.random.randint(0, N))\n", + " ascending = True\n", + " next_pos = init_pos\n", + " iteration = 0\n", + " while ascending:\n", + " print('iteration {}: {}, {}'.format(iteration, next_pos, landscape[next_pos]))\n", + " ascending, next_pos = one_hill_climb(next_pos, landscape)\n", + " print('iteration {}: {}, {}'.format(iteration, next_pos, landscape[next_pos]))\n", + " iteration += 1\n", + " global_pos = np.unravel_index(np.argmax(landscape, axis=None), landscape.shape)\n", + " print(global_pos, landscape[global_pos])" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "f156aabd", + "metadata": { + "ExecuteTime": { + "end_time": "2023-01-11T14:49:43.698448Z", + "start_time": "2023-01-11T14:49:43.691609Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "iteration 0: (6, 3), 47\n", + "iteration 0: (5, 2), 49\n", + "iteration 1: (5, 2), 49\n", + "iteration 1: (5, 2), 49\n", + "(2, 4) 49\n" + ] + } + ], + "source": [ + "hill_climb(landscape)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/vis/animation/tutorials/z_f_x_y.py b/vis/animation/tutorials/z_f_x_y.py new file mode 100644 index 0000000..845db0c --- /dev/null +++ b/vis/animation/tutorials/z_f_x_y.py @@ -0,0 +1,27 @@ +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.ticker import MaxNLocator +from matplotlib import cm + +landscape = np.random.randint(1, high=50, size=(10, 10)) + +xs, ys = np.meshgrid(range(10), range(10)) + +# zs = landscape[xs, ys] +zs = (xs-4)**2 + (ys-3)**2 +fig = plt.figure() +ax = fig.add_subplot(111, projection='3d') + +surf = ax.plot_surface(xs, ys, zs, rstride=1, cstride=1, cmap=cm.jet, linewidth=0) +fig.colorbar(surf) + +title = ax.set_title("plot_surface: given X, Y and Z as 2D:") +title.set_y(np.max(zs)+0.01) + +# ax.xaxis.set_major_locator(MaxNLocator(5)) +# ax.yaxis.set_major_locator(MaxNLocator(6)) +# ax.zaxis.set_major_locator(MaxNLocator(5)) + +fig.tight_layout() + +plt.show() -- cgit v1.2.3