diff --git a/notebooks/ExactEntropyRegularizedPolicyGradient.ipynb b/notebooks/ExactEntropyRegularizedPolicyGradient.ipynb new file mode 100644 index 0000000..080938d --- /dev/null +++ b/notebooks/ExactEntropyRegularizedPolicyGradient.ipynb @@ -0,0 +1,1037 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "ExactEntropyRegularizedPolicyGradient.ipynb", + "version": "0.3.2", + "provenance": [], + "collapsed_sections": [ + "g9Uu9n6-rQEq", + "Vy2E9igiaY8f" + ] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "metadata": { + "id": "g9Uu9n6-rQEq", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "##### Copyright 2018 Google LLC.\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "SPDX-License-Identifier: Apache-2.0" + ] + }, + { + "metadata": { + "id": "LXrEc0PsrLu8", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "eAU8jLpqqtx9", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "\n", + "\n", + "##### Instructions to run on Colab:.\n", + "\n", + "1. Run the cell below to install dependencies and then _restart the runtime_.\n", + "2. Continue from the cell after that in the new runtime.\n", + "\n" + ] + }, + { + "metadata": { + "id": "AD01aIK7qooe", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 207 + }, + "cellView": "form", + "outputId": "0460aad0-c57a-41f2-c656-d7361dde80ab" + }, + "cell_type": "code", + "source": [ + "#@title Click Install dependencies.\n", + "!pip install http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-linux_x86_64.whl # PyTorch\n", + "!pip install -e git+https://github.com/zafarali/emdp.git#egg=emdp --user # MDP Simulator" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Collecting torch==0.4.1 from http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-linux_x86_64.whl\n", + "\u001b[?25l Downloading http://download.pytorch.org/whl/cpu/torch-0.4.1-cp36-cp36m-linux_x86_64.whl (91.1MB)\n", + "\u001b[K 100% |████████████████████████████████| 91.1MB 38.6MB/s \n", + "\u001b[?25hInstalling collected packages: torch\n", + "Successfully installed torch-0.4.1\n", + "Obtaining emdp from git+https://github.com/zafarali/emdp.git#egg=emdp\n", + " Cloning https://github.com/zafarali/emdp.git to ./src/emdp\n", + "Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from emdp) (1.14.6)\n", + "Installing collected packages: emdp\n", + " Running setup.py develop for emdp\n", + "Successfully installed emdp\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "8y4TUjgRr7iT", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "##### Library of tools to simplify experiments" + ] + }, + { + "metadata": { + "id": "FcLDMr-EsWu4", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 86 + }, + "cellView": "form", + "outputId": "ee371564-f20c-4b7d-e382-a7661dd1bfe4" + }, + "cell_type": "code", + "source": [ + "#@title Run to initialize a small library of components to simplify experiments.\n", + "%pylab inline\n", + "import copy\n", + "import io\n", + "import json\n", + "\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import torch\n", + "from torch import nn\n", + "from torch import autograd\n", + "\n", + "from emdp import examples\n", + "from emdp import actions\n", + "from emdp import analytic\n", + "\n", + "sns.set_style('whitegrid')\n", + "sns.set_context('paper', font_scale=1.5)\n", + "\n", + "class Policy(nn.Module):\n", + " def __init__(self, state_space, action_space, mix_coeff=0.0):\n", + " \"\"\"A simple linear policy.\n", + " Args:\n", + " state_space: An int representing the size of the input vectors.\n", + " action_space: An int representing the number of available actions.\n", + " mix_coeff: Controls the stochasticity of the policy.\n", + " \"\"\"\n", + " super().__init__()\n", + " self.linear = nn.Linear(state_space, action_space)\n", + " self.softmax = nn.Softmax(1)\n", + " self.mix_coeff = mix_coeff\n", + " self.action_space = action_space\n", + "\n", + " def forward(self, states):\n", + " \"\"\"Returns a probabilities over actions for a batch of states\n", + " \n", + " Args:\n", + " states: torch.FloatTensor shape |B| x |S|\n", + " \n", + " Returns:\n", + " actions: torch.FloatTensor of shape |B| x |A| representing the probability\n", + " of taking each action in a state of the batch.\n", + " \"\"\"\n", + " logits = self.linear(states)\n", + " probs = self.softmax(logits)\n", + " scaled_probs = (1-self.mix_coeff) * probs\n", + " unif_probs = self.mix_coeff * 1/self.action_space\n", + " mixed_probs = scaled_probs + unif_probs\n", + " return mixed_probs\n", + "\n", + "\n", + "\n", + "class History(object):\n", + " \"\"\"Store data about training.\"\"\"\n", + "\n", + " def __init__(self):\n", + " self.history = {\n", + " 'true_objective':[],\n", + " 'opt_objective':[],\n", + " 'update':[],\n", + " 'mean_ent': []\n", + " }\n", + " def update(self, i, true, opt, ent):\n", + " self.history['true_objective'].append(true)\n", + " self.history['opt_objective'].append(opt)\n", + " self.history['update'].append(i)\n", + " self.history['mean_ent'].append(ent)\n", + "\n", + "\n", + "def evaluate_policy(grid_world, policy, w_reward=1.0, w_ent=0.0):\n", + " \"\"\"Evaluates the policy exactly.\n", + " \n", + " Args:\n", + " grid_world: The empd.MDP with accessible transition dynamics.\n", + " policy: A torch nn.Module that returns a softmax over actions given state.\n", + " w_reward: A float weighting for the reward term.\n", + " w_ent: A float weighting for the entropy term.\n", + "\n", + " Returns:\n", + " The exact expected discounted return.\n", + " \"\"\"\n", + " with torch.no_grad():\n", + " pi = policy(torch.eye(mdp.state_space)).detach().numpy()\n", + " H = (-pi*np.log(pi)).sum(1).reshape(-1, 1)\n", + " augmented_reward = w_reward * mdp.R + w_ent * H\n", + " return (\n", + " analytic.calculate_V_pi(\n", + " mdp.P, augmented_reward , pi, mdp.gamma) * mdp.p0).sum()\n", + "\n", + "def interpolate_between_policy_parameters(\n", + " start_params,\n", + " end_params,\n", + " grid_world,\n", + " policy,\n", + " alpha_start=-0.5,\n", + " alpha_end=1.5,\n", + " n_alphas=50,\n", + " w_ent=0.0):\n", + " \"\"\"Interpolates between policy parameters for a gridworld.\n", + " \n", + " Args:\n", + " start_params: The flattened starting parameter vector.\n", + " end_params: The flattened ending parameter vector.\n", + " grid_world: The emdp.MDP with accessible transition dynamics.\n", + " policy: A torch nn.Module whose parameters can be reset. Note that this will\n", + " overwrite the policy so it is best to make a copy using `copy.deepcopy`.\n", + " alpha_start: The float starting point for the interpolation.\n", + " alpha_end: The float ending point for the interpolation.\n", + " n_alphas: The number of points between the starting and ending points to do\n", + " the interpolations in between.\n", + " w_ent: The weighting for the entropy term.\n", + " \n", + " Returns:\n", + " alphas: The points along the interpolation at which evaluations were made.\n", + " E_vpi: The true expected discounted reward (no weighting term).\n", + " E_vpi_regularized: The entropy agumented discounted reward.\n", + " E_vpi_ent_only: The expected discounted entropy.\n", + " \"\"\"\n", + "\n", + " alphas = []\n", + " E_vpi = []\n", + " E_vpi_regularized = []\n", + " E_vpi_ent_only = []\n", + " for alpha in np.linspace(alpha_start, alpha_end, n_alphas):\n", + " params = (1 - alpha) * start_params + alpha * end_params\n", + " if isinstance(params, np.ndarray):\n", + " params = torch.FloatTensor(params)\n", + " nn.utils.vector_to_parameters(params, policy.parameters())\n", + " try:\n", + " alphas.append(alpha)\n", + " V_pi = evaluate_policy(\n", + " grid_world, policy, w_reward=1.0, w_ent=0.0)\n", + " E_vpi.append(V_pi)\n", + "\n", + " V_pi_reg = evaluate_policy(\n", + " grid_world, policy, w_reward=1.0, w_ent=w_ent)\n", + " E_vpi_regularized.append(V_pi_reg)\n", + " \n", + " V_vpi_ent_only = evaluate_policy(\n", + " grid_world, policy, w_reward=0.0, w_ent=w_ent)\n", + " E_vpi_ent_only.append(V_vpi_ent_only)\n", + "\n", + " except np.linalg.linalg.LinAlgError as e:\n", + " print('LinAlgError: {} for {}. Skipping this.'.format(e, alpha))\n", + " continue\n", + "\n", + " alphas = np.array(alphas)\n", + " E_vpi = np.array(E_vpi)\n", + " E_vpi_regularized = np.array(E_vpi_regularized)\n", + " E_vpi_ent_only = np.array(E_vpi_ent_only)\n", + " return alphas, E_vpi, E_vpi_regularized, E_vpi_ent_only\n", + "\n", + "\n", + "def train(\n", + " mdp,\n", + " policy, \n", + " learn_updates=500,\n", + " w_reward=1.0,\n", + " w_ent=0.0,\n", + " w_ent_decay=1.0,\n", + " print_interval=10,\n", + " step_size=0.1,\n", + " update_counts=0,\n", + " history=None):\n", + " \"\"\"Trains a policy in an mdp using gradient ascent.\n", + "\n", + " Args:\n", + " mdp: The emdp.MDP to train on. \n", + " policy: The nn.Module that represents the policy.\n", + " learn_updates: The number of updates to train for.\n", + " w_reward: A float weighting for the reward term.\n", + " w_ent: A float weighting for the entropy term.\n", + " w_ent_decay: A float <=1.0 representing how much to decay the w_ent term at\n", + " every update.\n", + " print_interval: The number of intervals after which to print.\n", + " step_size: The step size for the updates.\n", + " update_counts: An integer representing what number to start the counting at.\n", + " Use this to continue learning.\n", + " history: A History object. Use only when continuing the learning process.\n", + "\n", + " Returns:\n", + " history: A History object containing learning curves.\n", + " \"\"\"\n", + " if history is None:\n", + " history = History()\n", + " else:\n", + " update_counts = history.history['update'][-1]\n", + " \n", + " for i in range(learn_updates):\n", + " true_obj_val = evaluate_policy(mdp, policy)\n", + " policy.zero_grad()\n", + " \n", + " # Glossary of terms and shapes.\n", + " # Probability for each action in each state:\n", + " pi = policy(torch.eye(mdp.state_space)) # |S| x |A|.\n", + "\n", + " # Reward for each action in each state:\n", + " mdp.R # |S| x |A|.\n", + "\n", + " # Transition probability for going from s to s' by taking action a:\n", + " mdp.P # |S| x |A| x |S|.\n", + "\n", + " # Entropy for the probability at each state.\n", + " H = (-pi*pi.log()).sum(1) # |S|, \n", + "\n", + " # Augmented reward for each action in each state.\n", + " augmented_reward = (\n", + " w_reward * mdp.R + w_ent * H.detach().numpy().reshape(-1, 1)) # |S| x |A|\n", + "\n", + " # A numpy representation of the policy (to detach gradients from graph.)\n", + " pi_numpy = pi.detach().numpy()\n", + "\n", + " # We use emdp.analytic library to compute analytic things.\n", + " # Expected transition matrix.\n", + " P_pi = analytic.calculate_P_pi(mdp.P, pi_numpy) # |S| x |S| \n", + "\n", + " # Discounted state occupancy of going from any s to s', (I-gamma * P_pi)^-1.\n", + " Phi = analytic.calculate_successor_representation(\n", + " P_pi, mdp.gamma) # |S| x |S| \n", + " \n", + " # Expected reward for transitioning from a state.\n", + " R_pi = analytic.calculate_R_pi(augmented_reward, pi_numpy) # |S|\n", + "\n", + " # Expected discounted return from a given state.\n", + " V_pi = analytic.calculate_V_pi_from_successor_representation(\n", + " Phi, R_pi) # |S|, \n", + "\n", + " # The state-action values.\n", + " Q_pi = (\n", + " augmented_reward + mdp.gamma * np.einsum(\n", + " 'sat,t->sa', mdp.P, V_pi)) # |S| x |A|\n", + " \n", + " # Sanity check:\n", + " assert np.allclose(np.einsum('sa,sa->s', pi_numpy, Q_pi), V_pi), \\\n", + " 'Q averaged over all actions is equal to V.'\n", + " # Discounted state occupancy from the initial state.\n", + " d_pi = Phi[mdp.p0.argmax()]\n", + " \n", + " # Do some bookkeeping.\n", + " mean_ent = H.mean()\n", + " opt_obj_val = (mdp.p0 * V_pi).sum()\n", + " if i % print_interval == 0:\n", + " print('updates: {}, true: {:.3f} opt: {:.3f} mean_ent: {:.3f}'.format(\n", + " update_counts, true_obj_val, opt_obj_val, mean_ent))\n", + " history.update(update_counts, true_obj_val, opt_obj_val, mean_ent)\n", + "\n", + " # Float casting to make sure we do not differentiate through these.\n", + " d_pi_torch = torch.FloatTensor(d_pi)\n", + " pi_detached = torch.FloatTensor(pi_numpy)\n", + "\n", + " # Now calculating the loss function suitable for autodiff.\n", + " autodiff_surrogate_per_state_action = (\n", + " pi.log() * torch.FloatTensor(Q_pi) + (w_ent * H).view(-1, 1))\n", + " autodiff_surrogate_per_state = torch.einsum(\n", + " 'sa,sa->s', (pi_detached, autodiff_surrogate_per_state_action))\n", + " autodiff_surrogate = torch.einsum(\n", + " 's,s->', (d_pi_torch, autodiff_surrogate_per_state))\n", + " # print('surrogate:{}'.format(autodiff_surrogate))\n", + " gradients = autograd.grad(\n", + " autodiff_surrogate, policy.parameters(), retain_graph=True)\n", + "\n", + " # Apply gradient updates:\n", + " for g, p in zip(gradients, policy.parameters()):\n", + " p.data.add_(step_size * g)\n", + " update_counts += 1\n", + "\n", + " # Decay the entropy.\n", + " if w_ent_decay < 1:\n", + " w_ent = w_ent * w_ent_decay\n", + " return history\n", + "\n", + "\n", + "\n" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/dist-packages/IPython/core/magics/pylab.py:161: UserWarning: pylab import has clobbered these variables: ['copy']\n", + "`%matplotlib` prevents importing * from pylab and numpy\n", + " \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n" + ], + "name": "stderr" + } + ] + }, + { + "metadata": { + "id": "1Wf5eNYCsVhH", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# Experiment: Exploring the impact of entropy regularization in the exact gradient setting.\n", + "\n", + "We are interested in knowing a few things:\n", + "\n", + "1. Is high variance the main issue with policy learning?\n", + "2. Does entropy regularization help find better policies?\n", + "3. Why does it help?" + ] + }, + { + "metadata": { + "id": "u6FWUF9KwrG8", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "28917136-f978-4c6d-d935-a361fd8eef8a" + }, + "cell_type": "code", + "source": [ + "# Make the required grid world as explained in the manuscript.\n", + "eps = 0.9\n", + "best_reward = 5.0\n", + "grid_size = 5\n", + "mdp, reward_spec = examples.tricky_gridworlds.make_symmetric_epsilon_reward_env(\n", + " eps, best_reward=best_reward, size=grid_size)\n", + "\n", + "# Print out values for crosscheck.\n", + "# These values are what our optimization algorithm should find.\n", + "print('best possible return is {}'.format(\n", + " np.max(mdp.R) * mdp.gamma ** (mdp.size-1)))\n", + "print('suboptimal return is {}'.format(\n", + " np.min(mdp.R[np.nonzero(mdp.R)]) * mdp.gamma ** (mdp.size-1)))" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "best possible return is 4.8029800499999995\n", + "suboptimal return is 4.322682045\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "KER4la93w6jU", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "## Training without entropy regularization.\n", + "\n", + "Use this to get a count of the number of suboptimal policies found. Also keep track of the seeds which produce suboptimal policies so that we can try those under entropy regularization." + ] + }, + { + "metadata": { + "id": "ZXU_tTFfw6OR", + "colab_type": "code", + "colab": {}, + "cellView": "both" + }, + "cell_type": "code", + "source": [ + "w_ent = 0.0 # Entropy coefficient.\n", + "w_r = 1.0 # Reward weight.\n", + "histories = []\n", + "step_size = 0.1\n", + "learn_updates = 1500\n", + "final_returns = []\n", + "for i in range(5,6):\n", + " print('Run {}'.format(i))\n", + " torch.manual_seed(i) # Set the seed for reproducible runs.\n", + " policy = Policy(mdp.state_space, mdp.action_space)\n", + " histories.append(\n", + " train(mdp, policy, learn_updates=learn_updates, w_ent=w_ent, w_reward=w_r,\n", + " step_size=step_size, print_interval=learn_updates-1))\n", + " final_returns.append(histories[-1].history['true_objective'][-1])" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "xPo27lPZxh5q", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "plt.hist(final_returns)\n", + "plt.title('Distribution of policy returns.')\n", + "plt.xlabel('Return')\n", + "plt.ylabel('Count')" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "KKEPpr8Rwq0G", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "## Training with entropy regularization." + ] + }, + { + "metadata": { + "id": "EYAU46j3xovf", + "colab_type": "code", + "colab": {}, + "cellView": "code" + }, + "cell_type": "code", + "source": [ + "#@title Use sliders to easily change parameters.\n", + "w_ent = 0 #@param {type:\"slider\", min:0, max:5, step:0.1}\n", + "w_r = 1.0 # Reward weight.\n", + "histories_regularized = []\n", + "step_size = 0.1 #@param {type:\"slider\", min:0, max:1, step:0.05}\n", + "w_ent_decay = 1.0 #@param {type:\"slider\", min:0, max:1, step:0.01}\n", + "final_returns_regularized = []\n", + "\n", + "for i in range(20):\n", + " print('Run {}'.format(i))\n", + " torch.manual_seed(i) # Set the seed for reproducible runs.\n", + " policy = Policy(mdp.state_space, mdp.action_space)\n", + " histories.append(\n", + " train(\n", + " mdp, policy, learn_updates=learn_updates,\n", + " w_ent=w_ent, w_reward=w_r, w_ent_decay=w_ent_decay,\n", + " step_size=step_size, print_interval=learn_updates-1))\n", + " final_returns_regularized.append(\n", + " histories_regularized[-1].history['true_objective'][-1])" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "wSflCgXl0vhw", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "## Linear Interpolations\n" + ] + }, + { + "metadata": { + "id": "a2beWx1LX77M", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "### Interpolating Deterministic policies" + ] + }, + { + "metadata": { + "id": "qy2GK7_u0u4s", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "policy = Policy(mdp.state_space, mdp.action_space)\n", + "\n", + "# Get the policy that goes all right by setting the logits:\n", + "params_deterministic_right = torch.ones(mdp.action_space, mdp.state_space) * -20\n", + "params_deterministic_right[actions.RIGHT] = 0\n", + "bias = torch.zeros(mdp.action_space)\n", + "\n", + "right_policy = copy.deepcopy(policy)\n", + "for to_set, p in zip(\n", + " [params_deterministic_right, bias], right_policy.parameters()):\n", + " p.data.set_(to_set)\n", + "\n", + "# Get the policy that goes all right by setting the logits:\n", + "params_deterministic_down = torch.ones(mdp.action_space, mdp.state_space) * -20\n", + "params_deterministic_down[actions.DOWN] = 0\n", + "bias = torch.zeros(mdp.action_space)\n", + "down_policy = copy.deepcopy(policy)\n", + "for to_set, p in zip(\n", + " [params_deterministic_down, bias], down_policy.parameters()):\n", + " p.data.set_(to_set)\n", + "\n", + "# Detach and numpy to get copies.\n", + "down_parameters = nn.utils.parameters_to_vector(\n", + " down_policy.parameters()).detach().numpy()\n", + "right_parameters = nn.utils.parameters_to_vector(\n", + " right_policy.parameters()).detach().numpy()" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "PkCswZEPW2gf", + "colab_type": "code", + "colab": {}, + "cellView": "form" + }, + "cell_type": "code", + "source": [ + "mix_coefficient = 0.43 #@param {type:\"slider\", min:0, max:1, step:0.01}\n", + "policy = Policy(mdp.state_space, mdp.action_space, mix_coefficient=1.0)\n", + "\n", + "alphas, Vpi, Vpi_reg, V_pi_ent = interpolate_between_policy_parameters(\n", + " down_parameters,\n", + " right_parameters,\n", + " mdp,\n", + " policy,\n", + " alpha_start=-0.0,\n", + " alpha_end=1.0,\n", + " n_alphas=100,\n", + " w_ent=0.05\n", + ")\n", + "plt.plot(alphas, Vpi, label=r'$\\tau=0.0$')\n", + "plt.plot(alphas, Vpi_reg, label=r'$\\tau=0.05$')\n", + "\n", + "alphas, _, Vpi_reg, _ = interpolate_between_policy_parameters(\n", + " down_parameters,\n", + " right_parameters,\n", + " mdp,\n", + " policy,\n", + " alpha_start=-0.0,\n", + " alpha_end=1.0,\n", + " n_alphas=100,\n", + " w_ent=0.01\n", + ")\n", + "plt.plot(alphas, Vpi_reg, label=r'$\\tau=0.01$')\n", + "\n", + "\n", + "alphas, Vpi, Vpi_reg, V_pi_ent = interpolate_between_policy_parameters(\n", + " down_parameters,\n", + " right_parameters,\n", + " mdp,\n", + " policy,\n", + " alpha_start=-0.0,\n", + " alpha_end=1.0,\n", + " n_alphas=100,\n", + " w_ent=0.001\n", + ")\n", + "plt.plot(alphas, Vpi_reg, label=r'$\\tau=0.001$')\n", + "\n", + "\n", + "alphas, Vpi, Vpi_reg, V_pi_ent = interpolate_between_policy_parameters(\n", + " down_parameters,\n", + " right_parameters,\n", + " mdp,\n", + " policy,\n", + " alpha_start=-0.0,\n", + " alpha_end=1.0,\n", + " n_alphas=100,\n", + " w_ent=0.1\n", + ")\n", + "plt.plot(alphas, Vpi_reg, label=r'$\\tau=0.1$')\n", + "\n", + "\n", + "alphas, Vpi, Vpi_reg, V_pi_ent = interpolate_between_policy_parameters(\n", + " down_parameters,\n", + " right_parameters,\n", + " mdp,\n", + " policy,\n", + " alpha_start=-0.0,\n", + " alpha_end=1.0,\n", + " n_alphas=100,\n", + " w_ent=0.5\n", + ")\n", + "plt.plot(alphas, Vpi_reg, label=r'$\\tau=0.5$')\n", + "\n", + "plt.legend()\n", + "plt.xlabel(r'$\\alpha$')\n", + "plt.ylabel('Discounted Return')\n", + "# plt.semilogy()\n", + "plt.title('{}x{}, eps={}'.format(mdp.size, mdp.size, eps))\n", + "plt.ylim(0, 7.)\n", + "# plt.semilogy()" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "f8Cj4E4kX9Ha", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "### Interpolating parameters found during optimization" + ] + }, + { + "metadata": { + "id": "em8NS0izaEoH", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Here we supplied pre-trained parameters. Alternatively, you can train parameters from above and use `nn.utils.parameters_to_vector` to get the parameters." + ] + }, + { + "metadata": { + "id": "TXc0xuJEaXS8", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "#### Preloaded:" + ] + }, + { + "metadata": { + "id": "FhlK7WSYZStq", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Paste the string here:\n", + "trained_parameters = json.loads('{\"starting_parameters\": [0.12953545153141022, -0.14665135741233826, 0.1598227471113205, 0.12548570334911346, 0.16477812826633453, -0.15036411583423615, -0.13163647055625916, 0.09331966936588287, -0.1830686628818512, 0.19383521378040314, 0.04174472391605377, 0.025326937437057495, -0.1677137315273285, 0.06249786913394928, 0.0843321830034256, 0.031114831566810608, 0.18863506615161896, 0.05889706313610077, -0.1739024966955185, 0.1647813767194748, 0.06658722460269928, -0.0935579389333725, -0.18014630675315857, 0.11180023849010468, 0.18637360632419586, -0.16068020462989807, 0.010717883706092834, 0.07036106288433075, -0.09261362254619598, -0.042911678552627563, -0.1309525966644287, -0.09271744638681412, -0.17879265546798706, -0.0045451819896698, 0.11628229916095734, 0.0953855961561203, 0.1842331439256668, -0.1722395271062851, -0.024130523204803467, 0.19094456732273102, 0.03211390972137451, -0.05530427396297455, -0.1766241043806076, 0.09126152098178864, 0.14888595044612885, 0.15726040303707123, 0.16418035328388214, 0.03839506208896637, 0.13977943360805511, -0.04936531186103821, 0.15926964581012726, -0.016779333353042603, -0.04044272005558014, -0.09748703986406326, 0.1044183224439621, 0.07934962213039398, 0.12474586069583893, -0.12533161044120789, -0.10427488386631012, 0.18558941781520844, -0.10885253548622131, -0.11184853315353394, -0.05247294902801514, -0.06338660418987274, -0.13337284326553345, 0.15848825871944427, 0.021860331296920776, 0.08941210806369781, 0.14546768367290497, -0.1270827203989029, 0.1497122198343277, -0.09824514389038086, -0.03122343122959137, 0.14841528236865997, 0.18081407248973846, 0.17216111719608307, 0.11279164254665375, 0.18228311836719513, -0.07066170871257782, -0.012482553720474243, -0.06707793474197388, -0.014414221048355103, -0.02384650707244873, 0.10477997362613678, 0.1347990185022354, -0.14122581481933594, -0.10829522460699081, -0.06031635403633118, 0.026216447353363037, -0.07612873613834381, -0.12197497487068176, -0.035819441080093384, -0.09570575505495071, 0.005399346351623535, -0.14517679810523987, -0.04902566969394684, -0.07236139476299286, -0.027090266346931458, 0.15409357845783234, 0.12859784066677094, -0.06328770518302917, -0.1798037439584732, -0.14027941226959229, -0.15045714378356934, -0.01860789954662323, -0.08709283918142319, -0.13705551624298096, 0.04348272085189819], \"entropy_solution_parameters\": [-2.4071104526519775, -0.6339222192764282, -0.38130468130111694, -0.32543861865997314, 0.6272847652435303, -0.15418219566345215, -0.23199541866779327, 0.010044868104159832, -0.04692986607551575, 0.33429327607154846, 0.08532655984163284, -0.062207769602537155, -0.10459178686141968, 0.26150500774383545, 0.40296870470046997, 0.04159887507557869, 0.009114423766732216, -0.0071264393627643585, 0.019146669656038284, 0.66889888048172, 0.07024828344583511, -0.4967128038406372, -0.3671402633190155, 0.0446770116686821, 0.9111409783363342, 0.944366991519928, 2.206111431121826, 1.311779499053955, 1.3837469816207886, 1.431166410446167, -0.6516578197479248, 0.5903519988059998, -0.00859560165554285, -0.07923262566328049, -0.559516429901123, -0.809537410736084, 0.974463164806366, -0.04554970562458038, -0.21918955445289612, -0.2548304498195648, -0.6276916861534119, 0.6341692805290222, 0.03605223447084427, 0.040241971611976624, -0.16510434448719025, -0.33172059059143066, 0.175985649228096, 0.555844247341156, 0.35639089345932007, -0.02566400170326233, -0.8447445631027222, -1.7143621444702148, 0.18187521398067474, -1.007821798324585, -0.9656375050544739, -0.9135385155677795, -0.4777333438396454, 0.05547738075256348, -0.2949208915233612, -0.036135513335466385, 0.1955120861530304, 0.18222320079803467, 0.24898937344551086, -0.02696746215224266, -0.0875537246465683, 0.1780528575181961, 0.03929438069462776, 0.41334596276283264, 0.30491745471954346, 0.058033548295497894, 0.25648725032806396, 0.28641533851623535, 0.004485628101974726, 0.45748424530029297, 0.46358150243759155, 0.4961199462413788, 2.1170248985290527, -0.7526751756668091, 0.04826126992702484, 0.14369264245033264, 0.06775309145450592, -0.044664036482572556, 0.6368253231048584, -0.7552773356437683, 0.25561070442199707, 0.23846885561943054, 0.12699873745441437, 0.4100925028324127, -1.1090471744537354, -0.15170696377754211, -0.035854119807481766, 0.19138823449611664, 0.22801657021045685, -1.0184937715530396, -0.33778461813926697, -0.11709599941968918, -0.05820212885737419, -0.42688021063804626, 0.10291921347379684, -0.2947700321674347, -0.37566569447517395, -0.4603385329246521, -1.8653017282485962, 1.376688838005066, -1.3078018426895142, 2.709700584411621, 0.4778481721878052, -2.079341173171997], \"mix_solution_parameters\": [-0.04222581163048744, -0.41152551770210266, -0.20728088915348053, -0.21584230661392212, 0.16477812826633453, -0.18398310244083405, -0.20753252506256104, -0.023050449788570404, -0.2872695326805115, 0.054251134395599365, 0.025002365931868553, 0.018070627003908157, -0.1908341944217682, 0.018300063908100128, 0.025450337678194046, 0.021818391978740692, 0.2416318655014038, 0.08348216861486435, -0.17670966684818268, 0.14838582277297974, 0.06658722460269928, -0.011677736416459084, -0.13624095916748047, 0.12912030518054962, 0.1844017654657364, -0.16068020462989807, 0.9793394207954407, 1.1108957529067993, 1.1334197521209717, 1.1552826166152954, -0.1309526413679123, -0.058913856744766235, -0.06656398624181747, 0.08598251640796661, 0.14358647167682648, -0.5179622769355774, 0.13171762228012085, -0.18680301308631897, -0.017113810405135155, 0.16063877940177917, -0.16963273286819458, -0.1329602152109146, -0.23137490451335907, 0.05856401100754738, 0.10711031407117844, 0.07297203689813614, 0.16418035328388214, -0.019177136942744255, 0.09869349002838135, -0.080692820250988, 0.12002801895141602, -0.016779333353042603, -0.5417804718017578, -0.5392649173736572, -0.4044460356235504, -0.3894496560096741, 0.12474608421325684, -0.13486377894878387, -0.04711902514100075, 0.3319149613380432, 0.14060840010643005, 0.882210910320282, -0.09444563835859299, -0.05440719425678253, -0.06630910187959671, 0.3192800283432007, 0.4274093806743622, 0.015373803675174713, 0.11534786969423294, -0.10811450332403183, 0.23038552701473236, 0.06555300205945969, -0.03122342936694622, 0.12367444485425949, 0.18078698217868805, 0.19433780014514923, 0.16399265825748444, 0.18228311836719513, -0.36618274450302124, -0.3463658094406128, -0.41714417934417725, -0.4024795889854431, -0.023846546187996864, 0.1141275018453598, 0.04131065309047699, -0.26170894503593445, -0.2808597981929779, -0.30144429206848145, 0.1374484747648239, -0.06328817456960678, -0.17293329536914825, -0.12210756540298462, -0.24062594771385193, 0.1663905382156372, -0.11330067366361618, -0.0598813034594059, -0.10844947397708893, -0.0902029424905777, 0.15409357845783234, 0.1290307193994522, -0.06608003377914429, -0.1879730522632599, -0.15026453137397766, -0.15045714378356934, -1.5933376550674438, 3.244297981262207, 0.18794181942939758, -2.0381717681884766], \"no_entropy_solution_parameters\": [-0.3400079309940338, -0.14594313502311707, 0.12263433635234833, 0.07396479696035385, 0.16477812826633453, -0.4692530035972595, -0.08665252476930618, 0.09445369988679886, -0.20551902055740356, 0.1648290753364563, -0.31277790665626526, 0.16572043299674988, -0.13172750174999237, 0.06548124551773071, 0.07619635760784149, -0.31205999851226807, 0.48802250623703003, 0.15267165005207062, -0.14690528810024261, 0.17019957304000854, 0.06658726185560226, 0.7077499032020569, 0.0400044284760952, 0.18074291944503784, 0.20334313809871674, -0.16068020462989807, -0.3674681484699249, 0.0735325962305069, -0.016623426228761673, 0.0573720782995224, -0.1309525966644287, -0.4315754771232605, -0.22173243761062622, 0.011211346834897995, 0.14753097295761108, 0.09189484268426895, -0.27022770047187805, -0.2746601402759552, -0.0474553145468235, 0.18727444112300873, 0.027764450758695602, -0.47254082560539246, -0.29977452754974365, 0.03748564049601555, 0.12643708288669586, 0.1513422578573227, 0.16418035328388214, -0.17657917737960815, 0.04535023868083954, -0.08214152604341507, 0.15244750678539276, -0.016779333353042603, -0.196068674325943, -0.11714369803667068, 0.09461629390716553, 0.07534769922494888, 0.12474585324525833, -0.4059675931930542, -0.14968906342983246, 0.18734602630138397, -0.07570943236351013, -0.035294193774461746, -0.35024622082710266, -0.13468337059020996, -0.1373731791973114, 0.18498362600803375, 0.06330785155296326, -0.2551601827144623, 0.06012118607759476, -0.1407390534877777, 0.15895570814609528, -0.0822402685880661, -0.031223401427268982, 0.08127143979072571, 0.159535214304924, 0.1623416692018509, 0.11310655623674393, 0.18228311836719513, 0.9326921105384827, 0.0032943233381956816, -0.09607665240764618, -0.05917547643184662, -0.02384650893509388, 1.0431625843048096, 0.1781689077615738, -0.15987105667591095, -0.15023568272590637, -0.10437393188476562, 1.132974624633789, -0.04280523955821991, -0.13063457608222961, -0.061626724898815155, -0.12466806918382645, 1.110382080078125, -0.2360665649175644, -0.07536618411540985, -0.0861491709947586, -0.042595624923706055, 0.1540926992893219, -0.39059120416641235, -0.16773048043251038, -0.20615121722221375, -0.150738924741745, -0.15045714378356934, 0.10610250383615494, -2.183878183364868, -1.3621299266815186, 3.240630626678467]}')\n", + "make_torch_ready = lambda float_list: torch.FloatTensor(float_list)\n", + "trained_parameters = {k: make_torch_ready(v) for k, v in trained_parameters.items()}" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "Vy2E9igiaY8f", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "#### Fresh Training" + ] + }, + { + "metadata": { + "id": "XKsxIO4maZxE", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Get starting parameters.\n", + "torch.manual_seed(5)\n", + "policy = get_simple_policy(mdp)\n", + "starting_parameters = nn.utils.parameters_to_vector(policy.parameters()).clone()\n", + "\n", + "\n", + "# Get parameters after optimizing for with no entropy. NOTE THIS SHOULD BE A SUBOPTIMAL POLICY.\n", + "policy = get_simple_policy(mdp)\n", + "nn.utils.vector_to_parameters(starting_parameters.clone(), policy.parameters())\n", + "train(\n", + " mdp, policy, learn_updates=2000, w_ent=0.0, print_freq=500)\n", + "no_ent_parameters = nn.utils.parameters_to_vector(policy.parameters()).clone()\n", + "\n", + "\n", + "# Reset the original parameters.\n", + "policy = get_simple_policy(mdp)\n", + "nn.utils.vector_to_parameters(starting_parameters.clone(), policy.parameters())\n", + "# Now optimize with entropy + decay\n", + "train(\n", + " mdp, policy, learn_updates=2000, w_ent=1.0, w_ent_decay=0.99, print_interval=500)\n", + "ent_parameters = nn.utils.parameters_to_vector(policy.parameters()).clone()\n", + "\n", + "# Saving parameters for later:\n", + "\n", + "make_json_ready = lambda pyt_vec: [\n", + " np.asscalar(x) for x in pyt_vec.detach().numpy()] \n", + "\n", + "trained_parameters = {\n", + " 'starting_parameters': make_json_ready(starting_parameters),\n", + " 'entropy_solution_parameters': make_json_ready(ent_parameters),\n", + " 'no_entropy_solution_parameters': make_json_ready(no_ent_parameters)\n", + "}\n", + "json.dumps(trained_parameters) # Copy this string." + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "h_uMKdueat6C", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "#### Visualizations" + ] + }, + { + "metadata": { + "id": "_lc2BEm8atmD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "outputId": "93a01875-0980-461d-b727-c36aafadbd55" + }, + "cell_type": "code", + "source": [ + "starting_parameters = trained_parameters['starting_parameters']\n", + "ent_parameters = trained_parameters['entropy_solution_parameters']\n", + "no_ent_parameters = trained_parameters['no_entropy_solution_parameters']\n", + "\n", + "sns.set_context('paper', font_scale=1.5)\n", + "sns.set_palette('colorblind',desat=True)\n", + "\n", + "ent_normalization = np.linalg.norm(\n", + " starting_parameters.detach().numpy() - ent_parameters.detach().numpy())\n", + "no_ent_normalization = np.linalg.norm(\n", + " starting_parameters.detach().numpy() - no_ent_parameters.detach().numpy())\n", + "\n", + "# Normalization for the x-axis.\n", + "print(ent_normalization, no_ent_normalization)" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "text": [ + "7.917192 4.821064\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "UaAW2ggIa4D3", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "##### Interpolation From the Start to The solution" + ] + }, + { + "metadata": { + "id": "8ZraAhr3a3XG", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 288 + }, + "outputId": "d76a7a1a-91a7-4fa6-8f8f-155bb9420b70" + }, + "cell_type": "code", + "source": [ + "plt.figure(figsize=(5,4))\n", + "policy = Policy(mdp.state_space, mdp.action_space)\n", + "alpha, Vpi, Vpi_ent, _ = interpolate_between_policy_parameters(\n", + " starting_parameters.detach(),\n", + " no_ent_parameters.detach(),\n", + " mdp,\n", + " policy,\n", + " w_ent=0.001,\n", + " alpha_start=0.0,\n", + " alpha_end=1.0)\n", + "plt.plot(\n", + " alpha * no_ent_normalization, Vpi, label='Path to No Entropy Solution',\n", + " linestyle='--', color='k')\n", + "plt.plot(\n", + " alpha * no_ent_normalization , Vpi_ent, label=r'$\\tau=0.001$',\n", + " linestyle='--', color='g')\n", + "\n", + "policy = Policy(mdp.state_space, mdp.action_space, mix_coeff=0.2)\n", + "\n", + "alpha, Vpi,V_pi_ent, _ = interpolate_between_policy_parameters(\n", + " starting_parameters.detach(),\n", + " ent_parameters.detach(),\n", + " mdp,\n", + " policy,\n", + " w_ent=0.001,\n", + " alpha_start=0.0,\n", + " alpha_end=1.0)\n", + "\n", + "plt.plot(\n", + " alpha * ent_normalization, Vpi, label='Path to Entropy Solution', color='k')\n", + "plt.plot(\n", + " alpha * ent_normalization, V_pi_ent, label=r'$\\tau=0.001$', color='g')\n", + "\n", + "\n", + "# plt.plot(alpha, Vpi_ent, label='Entropy 0.1')\n", + "plt.xlabel(r'Scaled Interpolation Coefficient, $\\alpha ||\\theta_0 - \\theta^*||$')\n", + "plt.ylabel(r'Return, $V^\\pi$')\n", + "plt.legend()\n", + "plt.title('Interpolation from Start --> Solution')\n", + "\n", + "plt.tight_layout()\n" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nOUdplr5y8gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "o1zUbjmXbZLU", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "##### Interpolation between solutions" + ] + }, + { + "metadata": { + "id": "Ce9V_42ibav1", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 288 + }, + "outputId": "c29c4c5e-aaff-44de-dc08-535d7d513b14" + }, + "cell_type": "code", + "source": [ + "plt.figure(figsize=(5,4))\n", + "\n", + "w_ent = 0.01\n", + "mix_coeff = 0.8\n", + "\n", + "policy = Policy(mdp.state_space, mdp.action_space)\n", + "\n", + "alpha, Vpi, Vpi_ent, _ = interpolate_between_policy_parameters(\n", + " no_ent_parameters.detach(), ent_parameters.detach(), mdp, policy, \n", + " w_ent=w_ent, alpha_start=0.0, alpha_end=1.0)\n", + "\n", + "\n", + "plt.plot(alpha, Vpi, label=r'$\\tau=0.0,$ Mix=0.0', color='k')\n", + "plt.plot(alpha, Vpi_ent, label=r'$\\tau={},$ Mix=0.0'.format(w_ent))\n", + "\n", + "policy = Policy(mdp.state_space, mdp.action_space, mix_coeff=mix_coeff)\n", + "\n", + "alpha, V_pi_mix_only, Vpi_ent, _ = interpolate_between_policy_parameters(\n", + " no_ent_parameters.detach(), ent_parameters.detach(), mdp, policy, \n", + " w_ent=w_ent, alpha_start=0.0, alpha_end=1.0)\n", + "\n", + "plt.plot(alpha, Vpi_ent, label=r'$\\tau={},$ Mix={}'.format(w_ent, mix_coeff))\n", + "plt.plot(alpha, V_pi_mix_only, label=r'$\\tau=0.0,$ Mix={}'.format(mix_coeff))\n", + "\n", + "\n", + "plt.xlabel(r'Interpolation coefficient, $\\alpha$')\n", + "plt.ylabel(r'Return, $V^\\pi$')\n", + "plt.title('Interpolation from \\nNo Entropy Solution --> Entropy Solution')\n", + "# plt.ylim(3.0, 5.0)\n", + "plt.legend(loc='upper left', fontsize='x-small')\n", + "plt.tight_layout()\n", + "# plt.savefig('no_ent_ent_combos_small_ent1.pdf')" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nL+fOnSMmJoYdO3bw3nvv8d5775WYJiEhocw0DYm3j0aRlqviq3H+4siABoTY51qNGEuJIDQ0FG9v\nb51ky/Dhwzl27JhOGgfgxo0bZaYJDAwkPj6+wnXo0KEDp06dQqPRYGJiwv79++nVqxdKpZJdu3Zx\n48YNFi9ezPr16w1SKdBqtYwePRooCqaTlZVFTk6OXkSs06dP061btzLTNBTCExR8cvI2bw72oblT\n2VJGIvUL0blWI/VJiaA0DFEoAMNVCpYvX46Dg4NuuyQFgtTUVL0oZg1VpUAQBF7cFUYzR0sWPSkq\nGzc0Hhvneis1l8z8Qt32nVQleXGZZZxRNvYWMlo4G9bSqC9KBKVRnkIBVF6lwJCgbA0gcFuJbLsQ\nz8nb6Rye0w1zmUltmyNiZGrUucbHxxMUFKSnSOrv78/q1av10vn6+uoFsnZ1deW7776rdLkpOQX4\nfPg72mK/0Yo/Jj9AKoHElYNxMUBLvb4oEZSGIQoFYJhKgVar1dPOKkmBoFGjRnqBzRuiSkFmfiEL\n90YwroMbg32NHwVfpPap8Zarq6srhw4dKjedIWkMxcVaTtSS/vot1+g7NGtaBSUCC5lBjhXqhhJB\naRhDoQAMVym4ePFiuQoEvXr14sMPP+SVV15psCoFyw5GkqvS8PEov/ITi9RLHptugUcf4S1zzGnj\naV8jZde2EgHAa6+9xrlz58jIyKBPnz689NJLjB071igKBWC4SoEhCgWdOnWiRYsWDVal4EJcJp+f\nimbNiLZ42FvUtjki1USNKhHEx8czZswYunTpwu3bt3F3d2fp0qXFJFh8fX0ZOXIkERERODg4sGDB\nAjp16lRqvqISQeXqU5cVChra9YGiOrVu3Zrun/5FrkrDpdf6VKv6aHXT0K6RsZUIatS5ZmRkEBIS\nQnBwME2aNGHz5s3s2LGD/fv3Y2r6byN6+fLlPPvss7Ru3ZoDBw7w1ltvcfToUWxtbUvM98KFCyW+\nZCkLpVKJubl5lepTlxDrU/dRKpX8k6Jh7uEENg5pQk+P+h07oKFdo8rUJy8vr/SGnVCLaLVaoVOn\nTsKNGzfKTDdixAjhjz/+KPX4+fPnK1x2REREhc+py4j1qftEREQI/T8/JXT6+ISg1Wpr25wq09Cu\nUWXqU5bvqdFnkqysLOLi4vT2abVavVZrbm4ut2/f1kuj0Wj00oiI1Eeupir5/WYqi55sgUQiqrY2\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "0adY1AbFcjed", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + } + ] +} \ No newline at end of file