HPCC2025/Q_learning/test.ipynb
2025-03-28 10:53:41 +08:00

278 lines
69 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import pylab as plt\n",
"from IPython.display import clear_output\n",
"import numpy as np\n",
"import asyncio\n",
"\n",
"class TSP(object):\n",
" '''\n",
" 用 Q-Learning 求解 TSP 问题\n",
" 作者 Surfer Zen @ https://www.zhihu.com/people/surfer-zen\n",
" '''\n",
" def __init__(self, \n",
" num_cities=15, \n",
" map_size=(800.0, 600.0), \n",
" alpha=2, \n",
" beta=1,\n",
" learning_rate=0.001,\n",
" eps=0.1,\n",
" ):\n",
" '''\n",
" Args:\n",
" num_cities (int): 城市数目\n",
" map_size (int, int): 地图尺寸(宽,高)\n",
" alpha (float): 一个超参,值越大,越优先探索最近的点\n",
" beta (float): 一个超参,值越大,越优先探索可能导向总距离最优的点\n",
" learning_rate (float) 学习率\n",
" eps (float): 探索率,值越大,探索性越强,但越难收敛 \n",
" '''\n",
" self.num_cities =num_cities\n",
" self.map_size = map_size\n",
" self.alpha = alpha\n",
" self.beta = beta\n",
" self.eps = eps\n",
" self.learning_rate = learning_rate\n",
" self.cities = self.generate_cities()\n",
" self.distances = self.get_dist_matrix()\n",
" self.mean_distance = self.distances.mean()\n",
" self.qualities = np.zeros([num_cities, num_cities])\n",
" self.normalizers = np.zeros(num_cities)\n",
" self.best_path = None\n",
" self.best_path_length = np.inf\n",
"\n",
"\n",
" def generate_cities(self):\n",
" '''\n",
" 随机生成城市(坐标)\n",
" Returns:\n",
" cities: [[x1, x2, x3...], [y1, y2, y3...]] 城市坐标\n",
" '''\n",
" max_width, max_height = self.map_size\n",
" cities = np.random.random([2, self.num_cities]) \\\n",
" * np.array([max_width, max_height]).reshape(2, -1)\n",
" return cities\n",
"\n",
" def get_dist_matrix(self):\n",
" '''\n",
" 根据城市坐标,计算距离矩阵\n",
" '''\n",
" dist_matrix = np.zeros([self.num_cities, self.num_cities])\n",
" for i in range(self.num_cities):\n",
" for j in range(self.num_cities):\n",
" if i == j:\n",
" continue\n",
" xi, xj = self.cities[0, i], self.cities[0, j]\n",
" yi, yj = self.cities[1, i], self.cities[1, j]\n",
" dist_matrix[i, j] = np.sqrt((xi-xj)**2 + (yi-yj)**2)\n",
" return dist_matrix\n",
"\n",
" def rollout(self, start_city_id=None):\n",
" '''\n",
" 从 start_city 出发,根据策略,在城市间游走,直到所有城市都走了一遍\n",
" '''\n",
" cities_visited = []\n",
" action_probs = []\n",
" if start_city_id is None:\n",
" start_city_id = np.random.randint(self.num_cities)\n",
" current_city_id = start_city_id\n",
" cities_visited.append(current_city_id)\n",
" while len(cities_visited) < self.num_cities:\n",
" current_city_id, action_prob = self.choose_next_city(cities_visited)\n",
" cities_visited.append(current_city_id)\n",
" action_probs.append(action_prob)\n",
" cities_visited.append(cities_visited[0])\n",
" action_probs.append(1.0)\n",
"\n",
" path_length = self.calc_path_length(cities_visited)\n",
" if path_length < self.best_path_length:\n",
" self.best_path = cities_visited\n",
" self.best_path_length = path_length\n",
" rewards = self.calc_path_rewards(cities_visited, path_length)\n",
" return cities_visited, action_probs, rewards\n",
"\n",
" def choose_next_city(self, cities_visited):\n",
" '''\n",
" 根据策略选择下一个城市\n",
" '''\n",
" current_city_id = cities_visited[-1]\n",
" \n",
" # 对 quality 取指数,计算 softmax 概率用\n",
" probabilities = np.exp(self.qualities[current_city_id])\n",
"\n",
" # 将已经走过的城市概率设置为零\n",
" for city_visited in cities_visited:\n",
" probabilities[city_visited] = 0\n",
"\n",
" # 计算 softmax 概率\n",
" probabilities = probabilities/probabilities.sum()\n",
" \n",
" if np.random.random() < self.eps:\n",
" # 以 eps 概率按softmax概率密度进行随机采样\n",
" next_city_id = np.random.choice(range(len(probabilities)), p=probabilities)\n",
" else:\n",
" # 以 (1 - eps) 概率选择当前最优策略\n",
" next_city_id = probabilities.argmax()\n",
"\n",
" # 计算当前决策/action 的概率\n",
" if probabilities.argmax() == next_city_id:\n",
" action_prob = probabilities[next_city_id]*self.eps + (1-self.eps)\n",
" else:\n",
" action_prob = probabilities[next_city_id]*self.eps\n",
" \n",
" return next_city_id, action_prob\n",
"\n",
" def calc_path_rewards(self, path, path_length):\n",
" '''\n",
" 计算给定路径的奖励/rewards\n",
" Args:\n",
" path (list[int]): 路径,每个元素代表城市的 id\n",
" path_length (float): 路径长路\n",
" Returns:\n",
" rewards: 每一步的奖励,总距离以及当前这一步的距离越大,奖励越小\n",
" '''\n",
" rewards = []\n",
" for fr, to in zip(path[:-1], path[1:]):\n",
" dist = self.distances[fr, to]\n",
" reward = (self.mean_distance/path_length)**self.beta\n",
" reward = reward*(self.mean_distance/dist)**self.alpha\n",
" rewards.append(np.log(reward))\n",
" return rewards\n",
"\n",
" def calc_path_length(self, path):\n",
" '''\n",
" 计算路径长度\n",
" '''\n",
" path_length = 0\n",
" for fr, to in zip(path[:-1], path[1:]):\n",
" path_length += self.distances[fr, to]\n",
" return path_length\n",
" \n",
" def calc_updates_for_one_rollout(self, path, action_probs, rewards):\n",
" '''\n",
" 对于给定的一次 rollout 的结果,计算其对应的 qualities 和 normalizers \n",
" '''\n",
" qualities = []\n",
" normalizers = []\n",
" for fr, to, reward, action_prob in zip(path[:-1], path[1:], rewards, action_probs):\n",
" log_action_probability = np.log(action_prob)\n",
" qualities.append(- reward*log_action_probability)\n",
" normalizers.append(- (reward + 1)*log_action_probability)\n",
" return qualities, normalizers\n",
"\n",
" def update(self, path, new_qualities, new_normalizers):\n",
" '''\n",
" 用渐近平均的思想,对 qualities 和 normalizers 进行更新\n",
" '''\n",
" lr = self.learning_rate\n",
" for fr, to, new_quality, new_normalizer in zip(\n",
" path[:-1], path[1:], new_qualities, new_normalizers):\n",
" self.normalizers[fr] = (1-lr)*self.normalizers[fr] + lr*new_normalizer\n",
" self.qualities[fr, to] = (1-lr)*self.qualities[fr, to] + lr*new_quality\n",
" \n",
" async def train_for_one_rollout(self, start_city_id):\n",
" '''\n",
" 对一次 rollout 的结果进行训练的流程\n",
" '''\n",
" path, action_probs, rewards = self.rollout(start_city_id=start_city_id)\n",
" new_qualities, new_normalizers = self.calc_updates_for_one_rollout(path, action_probs, rewards)\n",
" self.update(path, new_qualities, new_normalizers)\n",
"\n",
" async def train_for_one_epoch(self):\n",
" '''\n",
" 对一个 epoch 的结果进行训练的流程,\n",
" 一个 epoch 对应于从每个 city 出发进行一次 rollout\n",
" '''\n",
" tasks = [self.train_for_one_rollout(start_city_id) for start_city_id in range(self.num_cities)]\n",
" await asyncio.gather(*tasks)\n",
"\n",
" async def train(self, num_epochs=1000, display=True):\n",
" '''\n",
" 总训练流程\n",
" '''\n",
" for epoch in range(num_epochs):\n",
" await self.train_for_one_epoch()\n",
" if display:\n",
" self.draw(epoch)\n",
"\n",
" def draw(self, epoch):\n",
" '''\n",
" 绘图\n",
" '''\n",
" _ = plt.scatter(*self.cities)\n",
" for fr, to in zip(self.best_path[:-1], self.best_path[1:]):\n",
" x1, y1 = self.cities[:, fr]\n",
" x2, y2 = self.cities[:, to]\n",
" dx, dy = x2-x1, y2-y1\n",
" plt.arrow(x1, y1, dx, dy, width=0.01*min(self.map_size), \n",
" edgecolor='orange', facecolor='white', animated=True, \n",
" length_includes_head=True)\n",
" nrs = np.exp(self.qualities)\n",
" for i in range(self.num_cities):\n",
" nrs[i, i] = 0\n",
" gap = np.abs(np.exp(self.normalizers) - nrs.sum(-1)).mean()\n",
" plt.title(f'epoch {epoch}: path length = {self.best_path_length:.2f}, normalizer error = {gap:.3f}')\n",
" plt.savefig('tsp.png')\n",
" plt.show()\n",
" clear_output(wait=True)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGzCAYAAADe/0a6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACsWUlEQVR4nOzdd3zT5fbA8U/SvQd00hbKpgKizCJLQIaAIlAvThwXfyIOwIlXBdx7Xvd148QJKCACikBliuxN6aALSidNR/L9/fFktgVaaEnTnvfrlVeb5NvkSdskJ+c5z3l0mqZpCCGEEEK4GL2zByCEEEIIcTYkiBFCCCGES5IgRgghhBAuSYIYIYQQQrgkCWKEEEII4ZIkiBFCCCGES5IgRgghhBAuSYIYIYQQQrgkCWKEEEII4ZIkiDlLc+fORafTcezYMWcPpUnR6XTceeedZ/WzKSkp6HQ6Pv744/odVANo06YNY8eOdfYwhKjm999/R6fT8fvvv1svu+mmm2jTpo3TxiTEqUgQ4yR79+5l5syZ9O/fH29vb3Q6HSkpKTUeW1xczIwZM4iJicHLy4suXbrw9ttv13js8uXLGTBgAL6+voSEhDBp0qRT3q6zrFu3jrlz55Kfn+/soTSoXbt2MXfu3Eb3+6/q6aefpl+/foSFheHt7U2HDh2YMWMGubm51Y41mUw8//zzxMfH4+3tTffu3fnyyy9rvN3du3czatQo/P39CQ0N5YYbbqjxNu19/vnn6HQ6/P39z+qxTJ06FZ1OV2OA2KZNG3Q6XbXT7bffflb3JYQzvf322yQlJREXF4dOp+Omm26q8bjMzEweeughLr30UgICAqoFqGfyww8/MHLkSKKjo/Hy8iImJoZJkyaxY8eOasee7XPsdM/bM3Gv80+IepGcnMzrr79OQkICXbp0YevWrTUeZzQaGTlyJJs2bWL69Ol06NCBZcuWcccdd3DixAkefvhh67GLFy/myiuv5OKLL+bZZ5+lsLCQ1157jQEDBvD3338TFhZ2nh7d6a1bt4558+Zx0003ERwc7OzhNJhdu3Yxb948hgwZ0qg/xW7evJkePXowefJkAgIC2L17N++//z4///wzW7duxc/Pz3rsf/7zH5599lmmTp1K7969+emnn7j22mvR6XRMnjzZelx6ejqDBg0iKCiIp59+muLiYl588UW2b9/Ohg0b8PT0rDaO4uJiHnjgAYf7q4tNmzbx8ccf4+3tfcpjevTowb333utwWceOHc/q/pqT999/H5PJ5OxhCDvPPfccRUVF9OnTh8zMzFMet3fvXp577jk6dOhAt27dSE5OrtP9bN++nZCQEO655x5atmxJVlYWH374IX369CE5OZkLL7zQ4fi6Psdq87w9LU2clTlz5miAlpube1Y/f/z4ca2wsFDTNE174YUXNEA7fPhwteO++eYbDdA++OADh8snTpyoeXt7a9nZ2dbLEhIStPbt22tlZWXWy7Zu3arp9Xpt1qxZZzXOhnC6xwto06dPP6vbPXz4sAZoH3300bkNsJ4sWLBAA7RVq1ZVu65169bamDFjzv+gaunbb7/VAO3LL7+0Xpaenq55eHg4/H1MJpM2cOBALSYmRqusrLRePm3aNM3Hx0c7cuSI9bLly5drgPbuu+/WeJ8PPvig1qlTJ+26667T/Pz86jRek8mkJSYmarfccsspf7eN/Xd+KsXFxef1/latWnXK/9vzpaKiwuF1rD6VlJQ02H2ez79VSkqKZjKZNE3TND8/P23KlCk1HldYWKgdP35c07TTvybVRVZWlubu7q793//9n8PldX2O1eZ5eyaNejopIyODW265hYiICLy8vLjgggv48MMPHY6xzN9+/fXXPPzww0RGRuLn58cVV1xBWlpatdtcsGABPXv2xMfHh5YtW3L99deTkZFR7bg9e/Zw9dVXExYWho+PD506deI///lPtePy8/OtGYWgoCBuvvlmTp48ecbHFhoaSkBAwBmP+/PPPwEcPuVazhsMBn766ScA8vLy2LVrF1dddZXDp9wLL7yQLl268NVXXzn8fGZmJnv27KGiouK092+pM3nxxRd55ZVXaN26NT4+PgwePLhaOnHbtm3cdNNNtG3bFm9vbyIjI7nllls4fvy49Zi5c+dy//33AxAfH29NN1adcvnxxx/p2rWr9e++dOnSM/6uTmXPnj1MmjSJ0NBQvL296dWrFwsXLnQ45uOPP0an07F27VpmzZpFWFgYfn5+XHXVVdWmQEwmE3PnziU6OhpfX18uvfRSdu3aRZs2bawp3Y8//pikpCQALr30UuvjrJrGXbNmDX369MHb25u2bdvy6aefnvXjrE+WzJH9lN9PP/1ERUUFd9xxh/UynU7HtGnTSE9Pd/iE99133zF27Fji4uKslw0fPpyOHTvyzTffVLu//fv388orr/Dyyy/j7l73BPFnn33Gjh07eOqpp854bHl5OSUlJXW+j5pYarhq8//6999/M3r0aAIDA/H392fYsGH89ddfDsdY/g//+OMP7rjjDsLDw4mJiQFgyJAhdO3alW3btjF48GB8fX1p37493377LQB//PEHffv2tb5e/fbbbw63feTIEe644w46deqEj48PLVq0ICkpqVbTnVVrYoYMGVLjtEHVmrT8/HxmzJhBbGwsXl5etG/fnueee84hq2P/GvPqq6/Srl07vLy82LVr12nHNH/+fOtreWhoKJMnT672mm/5nW3evJlBgwbh6+vLww8/fMb7XLlyJQMHDsTPz4/g4GCuvPJKdu/e7XDblrrIXbt2ce211xISEsKAAQPO+LusL61bt0an053xuICAAEJDQ+v1vsPDw/H19T1lSUBtn2N1ed6eSqOdTsrOzqZfv37WF4mwsDCWLFnCrbfeSmFhITNmzHA4/qmnnkKn0/Hggw+Sk5PDq6++yvDhw9m6dSs+Pj6AeoG4+eab6d27N8888wzZ2dm89tprrF27lr///ts6tbFt2zYGDhyIh4cHt912G23atOHgwYMsWrSo2i/76quvJj4+nmeeeYYtW7bwv//9j/DwcJ577rl6+T2UlZXh5uZWLf3u6+sLqKmAqVOnUlZWBmB9rFWP3blzJ1lZWURGRgIwe/ZsPvnkEw4fPlyrqY5PP/2UoqIipk+fjsFg4LXXXmPo0KFs376diIgIQNXjHDp0iJtvvpnIyEh27tzJe++9x86dO/nrr7/Q6XRMmDCBffv28eWXX/LKK6/QsmVLAIeprjVr1vD9999zxx13EBAQwOuvv87EiRNJTU2lRYsWdfr97dy5k0suuYRWrVrx0EMP4efnxzfffMP48eP57rvvuOqqqxyOv+uuuwgJCWHOnDmkpKTw6quvcuedd/L1119bj5k9ezbPP/8848aNY+TIkfzzzz+MHDkSg8FgPWbQoEHcfffdvP766zz88MN06dIFwPoV4MCBA0yaNIlbb72VKVOm8OGHH3LTTTfRs2dPLrjggtM+rhMnTmA0Gs/4+H19fa3/K6ejaRrHjx+nsrKS/fv389BDD+Hm5saQIUOsx/z999/4+fk5PAaAPn36WK8fMGAAGRkZ5OTk0KtXr2r306dPH3755Zdql8+YMYNLL72Uyy+/vMYg53SKiop48MEHrR9iTmflypX4+vpiNBpp3bo1M2fO5J577qnT/VVVm//XnTt3MnDgQAIDA3nggQfw8PDg3XffZciQIdbgw94dd9xBWFgYjz32mMObwYkTJxg7diyTJ08mKSmJt99+m8mTJ/P5558zY8YMbr/9dq699lpeeOEFJk2aRFpamvXD0saNG1m3bh2TJ08mJiaGlJQU3n77bYYMGcKuXbtq9X9i8Z///Id///vfDpfNnz+fZcuWER4eDsDJkycZPHgwGRkZ/N///R9xcXGsW7eO2bNnk5mZyauvvurw8x999BEGg4HbbrsNLy+v077xPvXUUzz66KNcffXV/Pvf/yY3N5c33niDQYMGObyWAxw/fpzRo0czefJkrr/+euvr1anu87fffmP06NG0bduWuXPnUlpayhtvvMEll1zCli1bqr1eJiUl0aFDB55++mk0TTvlmE0mE3l5eWf4zSpBQUF4eHjU6tjzJT8/n4qKCrKysnj11VcpLCxk2LBh1Y6r7XOsLs/b06pz7uY8ufXWW7WoqCjt2LFjDpdPnjxZCwoK0k6ePKlpmi312apVK+v0jKbZpmFee+01TdM0rby8XAsPD9e6du2qlZaWWo9bvHixBmiPPfaY9bJBgwZpAQEBDqlwTdOsqTtNs00n3XLLLQ7HXHXVVVqLFi3q9FhPN73y0ksvaYD2559/Olz+0EMPaYA2duxYTdM0zWg0asHBwdqwYcMcjjt27Jjm5+enAdqmTZusl0+ZMuWU92nPMkXj4+OjpaenWy9fv369BmgzZ860Xmb5m9j78ssvNUBbvXp1rR4voHl6emoHDhywXvbPP/9ogPbGG2/Uaqz200nDhg3TunXrphkMButlJpNJ69+/v9ahQwfrZR999JEGaMOHD3f4O8+cOVNzc3PT8vPzNU2zpVHHjx/vcN9z587VAIeU7pmmk6r+XnJycjQvLy/t3nvvPe3jtP/5M53mzJlzxtvSNE3LzMx0+LmYmBjt66+/djhmzJgxWtu2bav9bElJiQZoDz30kKZpmrZx40YN0D799NNqx95///0a4PD3WLx4sebu7q7t3LlT0zT1v1mX6aT77rtPi4+Pt97mqdLS48aN05577jntxx9/1D744ANt4MCBGqA98MADtb6vqmr7/zp+/HjN09NTO3jwoPWyo0ePagEBAdqgQYOsl1n+DwcMGOAwPadpmjZ48GAN0L744gvrZXv27NEATa/Xa3/99Zf18mXLllV7LtT0/ExOTq72t6ppOmnKlCla69atT/l7WLt2rebh4eHwevjEE09ofn5+2r59+xyOfeihhzQ3NzctNTVV0zTb8zYwMFDLyck55X1YpKSkaG5ubtpTTz3lcPn27ds1d3d3h8stv7N33nnH4djT3WePHj208PBw6xSMpqm/qV6v12688UbrZZb3gGuuueaMY7a/z9qc6jrdc7rpJHvnMp3UqVMn6/j8/f21Rx55RDMajQ7H1OU5Vtvn7Zk0ykyMpml89913XH311Wia5rCMeeTIkXz11Vds2bKFSy65xHr5jTfe6DA9M2nSJKKiovjll1+4++672bRpEzk5OcydO9ehgGjMmDF07tyZn3/+mXnz5pGbm8vq1au55557HFLhQI2pu6pV1wMHDuSHH36gsLCQwMDAc/5dXHvttTz++OPccsstvPnmm3To0IFff/2Vt956C4DS0lIA9Ho9//d//8dzzz3H7NmzueWWWygsLOSBBx6gvLzc4VhQWam6LEUeP348rVq1sp7v06cPffv25ZdffuHll18GHLNABoOB4uJi+vXrB8CWLVsYOHBgre5r+PDhtGvXznq+e/fuBAYGcujQoVqPF9QU28qVK3n88ccpKiqiqKjIet3IkSOZM2cOGRkZDo/rtttuc/g7Dxw4kFdeeYUjR47QvXt3VqxYQWVlpcOUCqgMzty5c+s0voSEBIffSVhYGJ06darV4/z8888d/p6n0rZt21qNJTQ0lOXLl2MwGPj777/5/vvvKS4udjimtLQULy+vaj9reT5ZxmP5eqZjvby8KC8vZ+bMmdx+++0kJCTUaqz29u3bx2uvvcaXX35Z4/3ZqzqFePPNNzN69Ghefvll7rrrLuu0TV2d6f/VaDTy66+/Mn78eIe/R1RUFNdeey3vv/9+tdeLqVOn4ubmVu2+/P39HaaWO3XqRHBwMK1atXLI5li+t/9fsn9+VlRUUFhYSPv27QkODmbLli3ccMMNZ/X4s7KymDRpEj169LC+LoGauh84cCAhISEOr+HDhw/n2WefZfXq1Vx33XXWyydOnFirxQfff/89JpOJq6++2uF2IyMj6dChA6tWrXJY8ODl5cXNN99c421Vvc/MzEy2bt3KAw884JAJ6t69O5dddlmNWcTarm6LjIxk+fLltTq2arFsY/DRRx9RWFjIoUOH+OijjygtLcVoNKLX26pSavscq8vz9kwaZRCTm5tLfn4+7733Hu+9916Nx+Tk5Dic79Chg8N5nU5H+/btrfO9R44cAdSTvqrOnTuzZs0awPak79q1a63GWjXQCQkJAVTatz6CmMjISBYuXMgNN9zAiBEjAAgMDOSNN95gypQpDktRH3/8cY4dO8bzzz/Ps88+C8CIESO49dZbeeedd8562SpU//0C1eob8vLymDdvHl999VW1v09BQUGt76vq7xTU7/XEiRN1GLGartE0jUcffZRHH320xmNycnIcgpjT/T3B9n/Uvn17h+NCQ0Otx9bWuTxO+wC+Pnh6ejJ8+HAAxo4dy7Bhw7jkkksIDw+3Lnv08fGxTlvas0yjWd4kLV9rc+wrr7zCsWPHmDdv3lmN+5577qF///5MnDixzj+r0+mYOXMmy5Yt4/fff+f6668/qzGc6e+Ym5vLyZMna3zt6dKlCyaTibS0NIcpxPj4+BrvKyYmptqHqaCgIGJjY6tdBjj8L5WWlvLMM8/w0UcfkZGR4TD1UZfnp73KykquvvpqjEYj33//vcMb0v79+9m2bdspA5OqrxGnesxV7d+/H03TanxNAqpNw7Rq1arG1XA13efp3ie6dOnCsmXLKCkpcVhBV9txe3t7W59jrigxMdH6/eTJk63Tyi+++OIpf+ZUz7Fzed5W1SiDGEvR1/XXX8+UKVNqPKZ79+7nc0inVNOnJeC0c6N1NWjQIA4dOsT27dspKSnhwgsv5OjRo4Dj0jVPT0/+97//8dRTT7Fv3z4iIiLo2LEj1157LXq9vtobb327+uqrWbduHffffz89evTA398fk8nEqFGj6rQ8s75+p5b7vO+++xg5cmSNx1T9nZyPv2d93Fdubm6tamL8/f3PKnjt378/UVFRfP7559YgJioqilWrVqFpmsMbqWV5Z3R0tPU4+8vtZWZmEhoaipeXFwUFBTz55JPccccdFBYWUlhYCKil1pqmkZKSgq+vr7XGoqqVK1eydOlSvv/+e4fi1MrKSkpLS0lJSSE0NPS0HyYsb/61rVWoSUP8z9RU23a6+6rNGO666y4++ugjZsyYQWJiIkFBQdal8We7fPr+++8nOTmZ3377rVomy2Qycdlll/HAAw/U+LNVl92e6jFXZTKZ0Ol0LFmy5JTZqtrebm3v83RqextGo/GMfZIsQkNDTxl4NQYhISEMHTqUzz///LRBDFR/jtXH89ZeowxiwsLCCAgIwGg01jpy3b9/v8N5TdM4cOCANdhp3bo1oNbMDx061OHYvXv3Wq+3pHtrauTjTG5ubvTo0cN63rLyoKbfT0REhLV4zWg08vvvv9O3b99zysRU/f2CSglaitxOnDjBihUrmDdvHo899thpf642FfX1wfK39PDwqLdPQJb/kwMHDjh8Ajt+/Hi1DEpDPs7evXtbPzWezpw5c+o8zWVhMBgcPqH36NGD//3vf+zevdth6mf9+vXW60F98g0LC2PTpk3VbnPDhg3W406cOEFxcTHPP/88zz//fLVj4+PjufLKK/nxxx9rHF9qaioAEyZMqHZdRkYG8fHxvPLKK9UWAdizZF4bsodSWFgYvr6+7N27t9p1e/bsQa/XV8ukNIRvv/2WKVOm8NJLL1kvMxgMZ9108quvvuLVV1/l1VdfZfDgwdWub9euHcXFxfWefWjXrh2aphEfH1/vPX7s3yeq2rNnDy1btjzrPkZpaWm1ztqsWrXKoai+MSotLa1VBq/qc6w+nrf2GmUQ4+bmxsSJE/niiy/YsWNHtamd3Nzcai86n376KbNnz7bWxXz77bdkZmby4IMPAtCrVy/Cw8N55513uOWWW6xpzyVLlrB7927rG29YWBiDBg3iww8/ZNasWQ6p4qqfQJ0lNzeX5557ju7du5/xBeLFF18kMzOTN954w+HyzMxMCgoKaNeuXa2q4H/88UeH+pENGzawfv166z+a5RNR1U+fVVcgANYXgYbu2BseHs6QIUN49913ueuuu6wZAoua/o/OZNiwYbi7u/P2229z2WWXWS//73//W+3Yhnyc9VUTU1JSgk6nq7Yy5bvvvuPEiRMOK4yuvPJKZs6cyVtvvWV9vJqm8c4779CqVSv69+9vPXbixIl88sknpKWlWd+gV6xYwb59+5g5cyag/j4//PBDtTG9/vrrJCcn8+WXXzr8zar+zw4dOrTGn7/tttto3bo1//nPf+jWrRugPgUGBQU5fHKvqKjg2WefxdPTk0svvfS0v6dz4ebmxogRI/jpp59ISUmxBv7Z2dl88cUXDBgwoF6mnmszjqrPzzfeeKNWGb2qduzYwb///W+uv/76U67uuvrqq5k7dy7Lli2rlgnNz8/H39//rJbTT5gwgdmzZzNv3jzmz5/v8JqsaRp5eXl1XsVoERUVRY8ePfjkk0+YPXu2dZXTjh07+PXXX896yhFcoyYmNTWVkydP0rlzZ+tlOTk51bKhKSkprFixwuH1obbPsbo8b2ujUQYxAM8++yyrVq2ib9++TJ06lYSEBPLy8tiyZQu//fZbtfRvaGgoAwYM4OabbyY7O5tXX32V9u3bM3XqVEB9Gn/uuee4+eabGTx4MNdcc411iXWbNm2sL6ygXkQHDBjAxRdfzG233UZ8fDwpKSnWDqb1oaCgwBpYrF27FlBvhMHBwQQHBzvsHzR48GASExNp3749WVlZvPfeexQXF7N48WKHoqr58+fz3XffMWjQIPz9/fntt9/45ptv+Pe//11t7rGuS6zbt2/PgAEDmDZtGmVlZbz66qu0aNHCmioODAxk0KBBPP/881RUVNCqVSt+/fVXDh8+XO22evbsCahlmpMnT8bDw4Nx48ad9Sec03nzzTcZMGAA3bp1Y+rUqbRt25bs7GySk5NJT0/nn3/+qdPtRUREcM899/DSSy9xxRVXMGrUKP755x+WLFlCy5YtHV5Qe/TogZubG8899xwFBQV4eXkxdOjQU06P1EV91cTs37+f4cOH869//YvOnTuj1+vZtGkT8+fPp02bNg5vUDExMcyYMYMXXniBiooKevfuzY8//siff/7J559/7vDi9fDDD7NgwQIuvfRS7rnnHoqLi3nhhRfo1q2btcjS19eX8ePHVxvTjz/+yIYNG6pdV/V/Ni4ursZ6lBkzZhAREeHw8wsXLuTJJ59k0qRJxMfHk5eXZ/2Q9PTTTzss8UxJSSE+Pp4pU6bU2z5cTz75pHVLkDvuuAN3d3feffddysrKasxCNYSxY8fy2WefERQUREJCgnUa6Gze8C1/w0GDBjF//nyH6/r370/btm25//77WbhwIWPHjrW2DigpKWH79u18++23pKSkWFss1EW7du148sknmT17NikpKYwfP56AgAAOHz7MDz/8wG233cZ9991X59u1eOGFFxg9ejSJiYnceuut1iXWQUFBZ53VhPqviVm0aJH19auiooJt27bx5JNPAnDFFVc4lFxYLt+5cyeg+rNY6kAfeeQR63E33ngjf/zxh0Ow261bN4YNG0aPHj0ICQlh//79fPDBB9YAxaK2z7G6PG9rpc7rmc6j7Oxsbfr06VpsbKzm4eGhRUZGasOGDdPee+896zGW5YBffvmlNnv2bC08PFzz8fHRxowZU22JtKZp2tdff61ddNFFmpeXlxYaGqpdd911DkuHLXbs2KFdddVVWnBwsObt7a116tRJe/TRR63Xn6pjr2WJZG2XLtd0qrqUcebMmVrbtm01Ly8vLSwsTLv22msdlmparF+/Xhs0aJAWEhKieXt7axdeeKH2zjvvOCwZtqjrEusXXnhBe+mll7TY2FjNy8tLGzhwoPbPP/84HJuenm79nQUFBWlJSUna0aNHa1zq+8QTT2itWrXS9Hq9wzg4Rcfe1q1bn3EJ4ak69h48eFC78cYbtcjISM3Dw0Nr1aqVNnbsWO3bb7+1HmP5u23cuNHhZ2tablpZWak9+uijWmRkpObj46MNHTpU2717t9aiRQvt9ttvd/j5999/X2vbtq3m5ubmcDunWk44ePBgbfDgwad9nPUpNzdXu+2227TOnTtrfn5+mqenp9ahQwdtxowZNXajNhqN2tNPP621bt1a8/T01C644AJt/vz5Nd72jh07tBEjRmi+vr5acHCwdt1112lZWVlnHNOplljX9n+2pt/tpk2btHHjxmmtWrXSPD09NX9/f23AgAHaN998U+3nt2/f7rBk/HTq8v+6ZcsWbeTIkZq/v7/m6+urXXrppdq6descjjnV/6Gmqf+NCy64oFaPt6axnThxQrv55pu1li1bav7+/trIkSO1PXv2VBtrbZZYn26Jv/3zr6ioSJs9e7bWvn17zdPTU2vZsqXWv39/7cUXX9TKy8s1TXN8jamL7777ThswYIDm5+en+fn5aZ07d9amT5+u7d2794y/szPd52+//aZdcsklmo+PjxYYGKiNGzdO27Vrl8Mx59q1/VxZng9n+htomnba5dz2LEvS7c2ZM0fr1auXFhISorm7u2vR0dHa5MmTtW3btjkcV5fnWE3Odom1zvwAXdbvv//OpZdeyoIFC5g0aZKzh9PkWD6VvvDCC+f06aapy8/PJyQkhCeffLLGzs7Cdbz11ls88MADHDx40KExmhCi8WnU2w4I0RjVVItiqf1p7MV44sxWrVrF3XffLQGMEC6g0dbECNFYff3113z88cdcfvnl+Pv7s2bNGr788ktGjBhR7/1bxPm3YMECZw9BCFFLEsQI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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tsp = TSP()\n",
"await tsp.train(200)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "PPO2",
"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.10.16"
}
},
"nbformat": 4,
"nbformat_minor": 2
}