diff --git a/tutorials/contextual_bandits/cb_experiments_tutorial.png b/tutorials/contextual_bandits/cb_experiments_tutorial.png deleted file mode 100644 index 46536604..00000000 Binary files a/tutorials/contextual_bandits/cb_experiments_tutorial.png and /dev/null differ diff --git a/tutorials/contextual_bandits/contextual_bandits_tutorial.ipynb b/tutorials/contextual_bandits/contextual_bandits_tutorial.ipynb index 14775139..df8623bc 100644 --- a/tutorials/contextual_bandits/contextual_bandits_tutorial.ipynb +++ b/tutorials/contextual_bandits/contextual_bandits_tutorial.ipynb @@ -1,75 +1,162 @@ { "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Contextual Bandits\n", - "\n", - "Here is a [better rendering](https://nbviewer.org/github/facebookresearch/Pearl/blob/main/tutorials/contextual_bandits/contextual_bandits_tutorial.ipynb) of this notebook on [nbviewer](https://nbviewer.org/)." - ] - }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 1, "metadata": { - "id": "8NNfwWXGvn_o", - "output": { - "id": 1088414048974898, - "loadingStatus": "loaded" - }, - "vscode": { - "languageId": "python" - } + "id": "8NNfwWXGvn_o" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "I0226 000749.255 magics.py:84] %autoreload was called with parameter_s='2'\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The parsh.autoreload.magics extension is already loaded. To reload it, use:\n", - " %reload_ext parsh.autoreload.magics\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": { "id": "YY0f_c_WLNGP" }, "source": [ "## Installation\n", - "If you haven't installed Pearl, please make sure you do so with the following cell. Otherwise, you can skip it." + "If you haven't installed Pearl, please make sure you install Pearl with the following cell. Otherwise, you can skip the cell below." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { + "id": "1uLHbYlegKX-", "colab": { "base_uri": "https://localhost:8080/" }, - "id": "1uLHbYlegKX-", - "outputId": "7b7ce54c-0dde-49bc-cc77-23519fd19027", - "vscode": { - "languageId": "python" - } + "outputId": "54a2922c-bdec-47d4-ca3b-a959d9ad6001" }, - "outputs": [], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[33mWARNING: Skipping Pearl as it is not installed.\u001b[0m\u001b[33m\n", + "\u001b[0mCloning into 'Pearl'...\n", + "remote: Enumerating objects: 5987, done.\u001b[K\n", + "remote: Counting objects: 100% (2196/2196), done.\u001b[K\n", + "remote: Compressing objects: 100% (675/675), done.\u001b[K\n", + "remote: Total 5987 (delta 1674), reused 1941 (delta 1503), pack-reused 3791\u001b[K\n", + "Receiving objects: 100% (5987/5987), 54.36 MiB | 14.03 MiB/s, done.\n", + "Resolving deltas: 100% (4001/4001), done.\n", + "/content/Pearl\n", + "Processing /content/Pearl\n", + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: gym in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (0.25.2)\n", + "Collecting gymnasium[accept-rom-license,atari,mujoco] (from Pearl==0.1.0)\n", + " Downloading gymnasium-0.29.1-py3-none-any.whl (953 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m953.9/953.9 kB\u001b[0m \u001b[31m15.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (1.25.2)\n", + "Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (3.7.1)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (2.0.3)\n", + "Collecting parameterized (from Pearl==0.1.0)\n", + " Downloading parameterized-0.9.0-py2.py3-none-any.whl (20 kB)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (2.31.0)\n", + "Collecting mujoco (from Pearl==0.1.0)\n", + " Downloading mujoco-3.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.5/5.5 MB\u001b[0m \u001b[31m71.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (2.2.1+cu121)\n", + "Requirement already satisfied: torchvision in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (0.17.1+cu121)\n", + "Requirement already satisfied: torchaudio in /usr/local/lib/python3.10/dist-packages (from Pearl==0.1.0) (2.2.1+cu121)\n", + "Requirement already satisfied: cloudpickle>=1.2.0 in /usr/local/lib/python3.10/dist-packages (from gym->Pearl==0.1.0) (2.2.1)\n", + "Requirement already satisfied: gym-notices>=0.0.4 in /usr/local/lib/python3.10/dist-packages (from gym->Pearl==0.1.0) (0.0.8)\n", + "Requirement already satisfied: typing-extensions>=4.3.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0) (4.11.0)\n", + "Collecting farama-notifications>=0.0.1 (from gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0)\n", + " Downloading Farama_Notifications-0.0.4-py3-none-any.whl (2.5 kB)\n", + "Collecting autorom[accept-rom-license]~=0.4.2 (from gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0)\n", + " Downloading AutoROM-0.4.2-py3-none-any.whl (16 kB)\n", + "Collecting shimmy[atari]<1.0,>=0.1.0 (from gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0)\n", + " Downloading Shimmy-0.2.1-py3-none-any.whl (25 kB)\n", + "Requirement already satisfied: imageio>=2.14.1 in /usr/local/lib/python3.10/dist-packages (from gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0) (2.31.6)\n", + "Requirement already satisfied: absl-py in /usr/local/lib/python3.10/dist-packages (from mujoco->Pearl==0.1.0) (1.4.0)\n", + "Requirement already satisfied: etils[epath] in /usr/local/lib/python3.10/dist-packages (from mujoco->Pearl==0.1.0) (1.7.0)\n", + "Collecting glfw (from mujoco->Pearl==0.1.0)\n", + " Downloading glfw-2.7.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38-none-manylinux2014_x86_64.whl (211 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.8/211.8 kB\u001b[0m \u001b[31m33.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pyopengl in /usr/local/lib/python3.10/dist-packages (from mujoco->Pearl==0.1.0) (3.1.7)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (4.51.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (24.0)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (9.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (3.1.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->Pearl==0.1.0) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->Pearl==0.1.0) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas->Pearl==0.1.0) (2024.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->Pearl==0.1.0) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->Pearl==0.1.0) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->Pearl==0.1.0) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->Pearl==0.1.0) (2024.2.2)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch->Pearl==0.1.0) (3.14.0)\n", + "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch->Pearl==0.1.0) (1.12)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->Pearl==0.1.0) (3.3)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch->Pearl==0.1.0) (3.1.4)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch->Pearl==0.1.0) (2023.6.0)\n", + "Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", + "Collecting nvidia-cublas-cu12==12.1.3.1 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "Collecting nvidia-cufft-cu12==11.0.2.54 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "Collecting nvidia-curand-cu12==10.3.2.106 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "Collecting nvidia-nccl-cu12==2.19.3 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", + "Collecting nvidia-nvtx-cu12==12.1.105 (from torch->Pearl==0.1.0)\n", + " Using cached nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch->Pearl==0.1.0) (2.2.0)\n", + "Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch->Pearl==0.1.0)\n", + " Using cached nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from autorom[accept-rom-license]~=0.4.2->gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0) (8.1.7)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from autorom[accept-rom-license]~=0.4.2->gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0) (4.66.4)\n", + "Collecting AutoROM.accept-rom-license (from autorom[accept-rom-license]~=0.4.2->gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0)\n", + " Downloading AutoROM.accept-rom-license-0.6.1.tar.gz (434 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m434.7/434.7 kB\u001b[0m \u001b[31m47.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->Pearl==0.1.0) (1.16.0)\n", + "Collecting ale-py~=0.8.1 (from shimmy[atari]<1.0,>=0.1.0->gymnasium[accept-rom-license,atari,mujoco]->Pearl==0.1.0)\n", + " Downloading ale_py-0.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m36.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: importlib_resources in /usr/local/lib/python3.10/dist-packages (from etils[epath]->mujoco->Pearl==0.1.0) (6.4.0)\n", + "Requirement already satisfied: zipp in /usr/local/lib/python3.10/dist-packages (from etils[epath]->mujoco->Pearl==0.1.0) (3.18.1)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch->Pearl==0.1.0) (2.1.5)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch->Pearl==0.1.0) (1.3.0)\n", + "Building wheels for collected packages: Pearl, AutoROM.accept-rom-license\n", + " Building wheel for Pearl (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for Pearl: filename=Pearl-0.1.0-py3-none-any.whl size=215044 sha256=c2d11dd3e65c5bb6720538a7d224f13e2f26f857c237ad6f718fa55a99983926\n", + " Stored in directory: /tmp/pip-ephem-wheel-cache-mi9lzaly/wheels/83/80/1d/d9211ba70ee392341daf21a07252739e0cb2af9f95439a28cd\n", + " Building wheel for AutoROM.accept-rom-license (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for AutoROM.accept-rom-license: filename=AutoROM.accept_rom_license-0.6.1-py3-none-any.whl size=446659 sha256=50b64bf3c726e54dfa462a4cd8af9e666df0c9401e6bb1aedd4a0644e4abc2da\n", + " Stored in directory: /root/.cache/pip/wheels/6b/1b/ef/a43ff1a2f1736d5711faa1ba4c1f61be1131b8899e6a057811\n", + "Successfully built Pearl AutoROM.accept-rom-license\n", + "Installing collected packages: glfw, farama-notifications, parameterized, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, gymnasium, ale-py, shimmy, nvidia-cusparse-cu12, nvidia-cudnn-cu12, AutoROM.accept-rom-license, autorom, nvidia-cusolver-cu12, mujoco, Pearl\n", + "Successfully installed AutoROM.accept-rom-license-0.6.1 Pearl-0.1.0 ale-py-0.8.1 autorom-0.4.2 farama-notifications-0.0.4 glfw-2.7.0 gymnasium-0.29.1 mujoco-3.1.5 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 parameterized-0.9.0 shimmy-0.2.1\n", + "/content\n" + ] + } + ], "source": [ "%pip uninstall Pearl -y\n", "%rm -rf Pearl\n", @@ -90,16 +177,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "metadata": { - "id": "vcb70ZC_h3OA", - "output": { - "id": 197396700124830, - "loadingStatus": "loaded" - }, - "vscode": { - "languageId": "python" - } + "id": "vcb70ZC_h3OA" }, "outputs": [], "source": [ @@ -116,6 +196,9 @@ "from pearl.policy_learners.exploration_modules.contextual_bandits.ucb_exploration import (\n", " UCBExploration,\n", ")\n", + "from pearl.policy_learners.exploration_modules.contextual_bandits.thompson_sampling_exploration import (\n", + " ThompsonSamplingExplorationLinear,\n", + ")\n", "from pearl.policy_learners.contextual_bandits.neural_bandit import NeuralBandit\n", "from pearl.policy_learners.contextual_bandits.neural_linear_bandit import (\n", " NeuralLinearBandit,\n", @@ -129,335 +212,343 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": { "id": "A2756RO8LNGR" }, "source": [ "## Load Environment\n", - "The experiment below tests contextual bandits by using an environment accessing UCI datasets (https://archive.ics.uci.edu/datasets).\n", + "The environment which underlies the experiments to follow is a contextual bandits environment we added to Pearl that allows to use UCI datasets (https://archive.ics.uci.edu/datasets) to built environmens to test contextual bandits algorithms.\n", "\n", - "The UCI datasets span a wide variety of prediction tasks. We use these tasks to construct a contexual bandit environment in which an agent receives an expected reward of 1 if it correctly labels a data point and 0 otherwise. Pearl currently supports the following datasets: pendigits, letter, satimage, yeast. Additional ones can be readily added.\n", + "The UCI datasets span a wide variety of prediction tasks. We use these tasks to construct a contexual bandit environment in which an agent recives an expected reward of 1 if it correctly label a data point and 0 otherwise. Pearl library currently support the following datasets: pendigits, letter, satimage, yeast. Additional ones can be readily added.\n", "\n", - "In the following experiment we test different types of contextual bandits algorithms on the pendigits UCI dataset." + "In the following experiment will test different types of contextual bandits algorithms on the pendigits UCI dataset." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 4, "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "g1VHtmldi3A2", - "outputId": "838f8462-7083-4ce4-ebdf-ed6fc24f436b", - "vscode": { - "languageId": "python" - } + "id": "g1VHtmldi3A2" }, "outputs": [], "source": [ - "# Download UCI dataset if it doesn't exist\n", + "# load environment\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "# Download UCI dataset if doesn't exist\n", "uci_data_path = \"./utils/instantiations/environments/uci_datasets\"\n", "if not os.path.exists(uci_data_path):\n", " os.makedirs(uci_data_path)\n", " download_uci_data(data_path=uci_data_path)\n", "\n", - "# Build CB environment using the pendigits UCI dataset\n", - "env = SLCBEnvironment(path_filename=os.path.join(uci_data_path, \"pendigits/pendigits.tra\"),\n", - " action_embeddings=\"discrete\",\n", - " delim_whitespace=False,\n", - " ind_to_drop=[],\n", - " target_column=16,\n", - ")\n", + "# Built CB environment using the pendigits UCI dataset\n", + "pendigits_uci_dict = {\n", + " \"path_filename\": os.path.join(uci_data_path, \"pendigits/pendigits.tra\"),\n", + " \"action_embeddings\": \"discrete\",\n", + " \"delim_whitespace\": False,\n", + " \"ind_to_drop\": [],\n", + " \"target_column\": 16,\n", + "}\n", + "env = SLCBEnvironment(**pendigits_uci_dict)\n", "\n", "# experiment code\n", - "number_of_steps = 10_000 # number of steps used for learning\n", - "record_period = 400 # number of steps in between recordings of returns (rewards) in the `info` dict returned by `online_learning`" + "number_of_steps = 10000\n", + "record_period = 400" ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": { "id": "UYIoDAGSLNGR" }, "source": [ + "\n", + "\n", + "```\n", + "# This is formatted as code\n", + "```\n", + "\n", "## Contextual Bandits learners\n", - "The following sections describe the neural versions of SquareCB and LinUCB implemented in Pearl.\n", + "The following code sections show how to implement the neural versions of SquareCB, LinUCB and LinTS with the Pearl library.\n", "\n", "## Contextual Bandits learners: SquareCB\n", "\n", - "The SquareCB algorithm requires only a regression model with which it learns the reward function $\\widehat{r}$. It then executes the following policy:\n", + "The SquareCB algorithm requires only a regression model with which it learns the reward function. Given the reward model, SquareCB executes the following policy.\n", "$$\n", "\\widehat{a}_*\\in \\arg\\max_a\\widehat{r}(x,a)\\\\\n", "\\widehat{r}_*\\in \\max_a\\widehat{r}(x,a)\\\\\n", "\\text{If $a\\neq \\widehat{a}_*$}: \\pi(a,x)= \\frac{1}{A + \\gamma (\\widehat{r}_* - \\widehat{r}(x,a))}\\\\\n", "\\text{If $a= \\widehat{a}_*$}: \\pi(a,x) = 1-\\sum_{a'\\neq \\widehat{a}_*}\\pi(a',x).\n", "$$\n", - "This policy balances exploration and exploitation in an intelligent way.\n", + "This exploratiative policy, that balances exploration and exploitation in an intelligent way.\n", "\n", - "To use the SquareCB algorithm in Pearl we use the `NeuralBandit` policy learner, which estimates the reward function with a neural architecture. Given an estimated reward model, we then instantiate the exploration module with `SquareCBExploration` module.\n", + "To use the SquareCB algrorithm in Pearl we set the policy learner as NeuralBandit. NeuralBandit is a base class and supports the estimation of the reward function with a neural architecture. With access to an estimated reward model, we then instantiate the exploration module with SquareCBExploration module.\n", "\n", - "To further highlight the versatility of the modular design of Pearl, we use the `OneHotActionTensorRepresentationModule` as the _action representation module_, which transforms categorical actions in a set of integers $\\{1,2,\\dots,N\\}$ to the corresponding one-hot vector.\n" + "To further highlight the versatility of the modular design of Pearl, we use the OneHotActionTensorRepresentationModule as the action representation module. Namley, when the action set is a finite number of elementes\n", + "$\n", + "\\{1,2,.,,N\\}\n", + "$\n", + "as a one-hot vector.\n" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "kulkpFAvnOQx", - "output": { - "id": 199093223282612, - "loadingStatus": "loaded" - }, - "outputId": "7c93f477-d8ec-4a5a-91d9-1c7fd51f6557", - "vscode": { - "languageId": "python" - } + "outputId": "8c78fd2a-cc1a-4e2f-9688-09e5dc51c8b0" }, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.10/dist-packages/ipykernel/ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n", + " and should_run_async(code)\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", "text": [ "episode 100, step 100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9383167028427124\n", + "return: -0.02050408534705639\n", "episode 200, step 200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.02807554602622986\n", + "return: -0.039917074143886566\n", "episode 300, step 300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8958601355552673\n", + "return: 1.0325154066085815\n", "episode 400, step 400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0610344409942627\n", + "return: 1.0192910432815552\n", "episode 500, step 500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9887306094169617\n", + "return: 0.020320570096373558\n", "episode 600, step 600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0786700248718262\n", + "return: 1.0140972137451172\n", "episode 700, step 700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9041118025779724\n", + "return: 1.1774886846542358\n", "episode 800, step 800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.043103814125061\n", + "return: 1.0041024684906006\n", "episode 900, step 900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.09173823893070221\n", + "return: 0.9082531929016113\n", "episode 1000, step 1000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8946926593780518\n", + "return: 1.0025124549865723\n", "episode 1100, step 1100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0060310363769531\n", + "return: 0.9679498076438904\n", "episode 1200, step 1200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.0518234558403492\n", + "return: 0.9570890069007874\n", "episode 1300, step 1300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1785880327224731\n", + "return: 0.9786309599876404\n", "episode 1400, step 1400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.2267327308654785\n", + "return: 1.0437270402908325\n", "episode 1500, step 1500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0809532403945923\n", + "return: 1.1215401887893677\n", "episode 1600, step 1600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.03393594175577164\n", + "return: 1.0220673084259033\n", "episode 1700, step 1700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0515271425247192\n", + "return: -0.05659715086221695\n", "episode 1800, step 1800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0283582210540771\n", + "return: 1.1713285446166992\n", "episode 1900, step 1900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.047106582671403885\n", + "return: 0.9805613160133362\n", "episode 2000, step 2000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8615770936012268\n", + "return: 1.0700596570968628\n", "episode 2100, step 2100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9246430397033691\n", + "return: 0.9755151867866516\n", "episode 2200, step 2200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0766102075576782\n", + "return: 1.06023371219635\n", "episode 2300, step 2300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9038422703742981\n", + "return: -0.2449081689119339\n", "episode 2400, step 2400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0450562238693237\n", + "return: 0.9615944623947144\n", "episode 2500, step 2500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0435271263122559\n", + "return: 1.1294598579406738\n", "episode 2600, step 2600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1526210308074951\n", + "return: 1.0927162170410156\n", "episode 2700, step 2700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9127950072288513\n", + "return: 1.0192159414291382\n", "episode 2800, step 2800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9871799349784851\n", + "return: -0.14172282814979553\n", "episode 2900, step 2900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.01832619681954384\n", + "return: 1.020617127418518\n", "episode 3000, step 3000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.168209195137024\n", + "return: 1.07183039188385\n", "episode 3100, step 3100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.897968053817749\n", + "return: 1.1373060941696167\n", "episode 3200, step 3200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.05972288176417351\n", + "return: 0.8844553828239441\n", "episode 3300, step 3300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9089733362197876\n", + "return: 1.1407734155654907\n", "episode 3400, step 3400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0552352666854858\n", + "return: 1.0968198776245117\n", "episode 3500, step 3500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.04165832698345184\n", + "return: 1.0457595586776733\n", "episode 3600, step 3600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1413013935089111\n", + "return: 1.0209089517593384\n", "episode 3700, step 3700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0163745880126953\n", + "return: 1.016340732574463\n", "episode 3800, step 3800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0398694276809692\n", + "return: 1.076174259185791\n", "episode 3900, step 3900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.008664608001709\n", + "return: 0.9254880547523499\n", "episode 4000, step 4000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.015700124204158783\n", + "return: 0.9435696601867676\n", "episode 4100, step 4100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0684829950332642\n", + "return: 0.9403758645057678\n", "episode 4200, step 4200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8980206251144409\n", + "return: -0.062246013432741165\n", "episode 4300, step 4300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.12766113877296448\n", + "return: -0.09749681502580643\n", "episode 4400, step 4400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1071901321411133\n", + "return: 0.9377647042274475\n", "episode 4500, step 4500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.04115629196167\n", + "return: 0.9589371681213379\n", "episode 4600, step 4600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0495786666870117\n", + "return: 0.8841699361801147\n", "episode 4700, step 4700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0217126607894897\n", + "return: 1.0646312236785889\n", "episode 4800, step 4800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9035794138908386\n", + "return: 1.1062999963760376\n", "episode 4900, step 4900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.028559405356645584\n", + "return: 1.1038718223571777\n", "episode 5000, step 5000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.05193293094635\n", + "return: 0.7176197171211243\n", "episode 5100, step 5100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9203135371208191\n", + "return: 0.8898045420646667\n", "episode 5200, step 5200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8581279516220093\n", + "return: 0.010150366462767124\n", "episode 5300, step 5300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.070873498916626\n", + "return: 0.9760612845420837\n", "episode 5400, step 5400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8977102637290955\n", + "return: 0.06860487163066864\n", "episode 5500, step 5500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.2177412509918213\n", + "return: 0.03486515209078789\n", "episode 5600, step 5600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.030576098710298538\n", + "return: 1.1883316040039062\n", "episode 5700, step 5700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.0658126100897789\n", + "return: 0.9038528800010681\n", "episode 5800, step 5800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0631651878356934\n", + "return: 0.8557829260826111\n", "episode 5900, step 5900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.09474840760231018\n", + "return: 1.0221916437149048\n", "episode 6000, step 6000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9607197046279907\n", + "return: 0.8543550968170166\n", "episode 6100, step 6100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8860517144203186\n", + "return: 0.9892317056655884\n", "episode 6200, step 6200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9716128706932068\n", + "return: 0.9139447212219238\n", "episode 6300, step 6300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9121010303497314\n", + "return: -0.0652153417468071\n", "episode 6400, step 6400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9102794528007507\n", + "return: 1.0828280448913574\n", "episode 6500, step 6500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8850391507148743\n", + "return: 0.9806367754936218\n", "episode 6600, step 6600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8967600464820862\n", + "return: 1.2393121719360352\n", "episode 6700, step 6700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0181986093521118\n", + "return: 1.0103856325149536\n", "episode 6800, step 6800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.04068313166499138\n", + "return: 0.8305141925811768\n", "episode 6900, step 6900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0694713592529297\n", + "return: 0.9939833879470825\n", "episode 7000, step 7000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0337671041488647\n", + "return: 0.7439374923706055\n", "episode 7100, step 7100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9239311814308167\n", + "return: 0.9110734462738037\n", "episode 7200, step 7200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0144273042678833\n", + "return: 0.805903434753418\n", "episode 7300, step 7300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8364745378494263\n", + "return: 1.0544805526733398\n", "episode 7400, step 7400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0130293369293213\n", + "return: 1.1555981636047363\n", "episode 7500, step 7500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.17895568907260895\n", + "return: 0.9537562727928162\n", "episode 7600, step 7600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8961504697799683\n", + "return: 1.0062040090560913\n", "episode 7700, step 7700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.793696403503418\n", + "return: 0.8801354169845581\n", "episode 7800, step 7800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9645991325378418\n", + "return: 0.7815372943878174\n", "episode 7900, step 7900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0810260772705078\n", + "return: 1.0681519508361816\n", "episode 8000, step 8000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9735615849494934\n", + "return: 0.9116690158843994\n", "episode 8100, step 8100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0695842504501343\n", + "return: 1.01902437210083\n", "episode 8200, step 8200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.73900306224823\n", + "return: 0.9659032225608826\n", "episode 8300, step 8300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0989625453948975\n", + "return: 0.8814241290092468\n", "episode 8400, step 8400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.16722330451011658\n", + "return: 0.9224587082862854\n", "episode 8500, step 8500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0237590074539185\n", + "return: 1.2102456092834473\n", "episode 8600, step 8600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9829747080802917\n", + "return: 0.9070967435836792\n", "episode 8700, step 8700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.2072710990905762\n", + "return: 1.2006794214248657\n", "episode 8800, step 8800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.06279207766056061\n", + "return: 1.0592678785324097\n", "episode 8900, step 8900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9268348813056946\n", + "return: 1.0463409423828125\n", "episode 9000, step 9000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0650581121444702\n", + "return: 0.9944213032722473\n", "episode 9100, step 9100, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1822041273117065\n", + "return: 0.9995201230049133\n", "episode 9200, step 9200, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8816660046577454\n", + "return: 0.9861416220664978\n", "episode 9300, step 9300, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.03679642081260681\n", + "return: 0.9023017287254333\n", "episode 9400, step 9400, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.002679705619812\n", + "return: 0.9761253595352173\n", "episode 9500, step 9500, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9886403679847717\n", + "return: 0.8212168216705322\n", "episode 9600, step 9600, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0444495677947998\n", + "return: 0.9000095129013062\n", "episode 9700, step 9700, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9364856481552124\n", + "return: 0.9509682655334473\n", "episode 9800, step 9800, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0458176136016846\n", + "return: 1.136844277381897\n", "episode 9900, step 9900, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0825984477996826\n", + "return: 1.0328410863876343\n", "episode 10000, step 10000, agent=PearlAgent with NeuralBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9300178289413452\n" + "return: 0.9436702728271484\n" ] }, { + "output_type": "display_data", "data": { - "image/png": "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", "text/plain": [ - "
" - ] + "
" + ], + "image/png": "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bNkyeHp61uuaGTNmoKioSPdIT083WX26hSQZkoiIiKyepDuwenp6QqFQICcnR+94Tk4OfH19bzj/3LlzuHDhAgYNGqQ7ptVqAQA2NjY4ffo0QkJC9K5RKpVQKs0ziJrT/4mIiJoOSVuS7OzsEBUVhYSEBN0xrVaLhIQExMbG3nB+WFgYjh07hsOHD+seDz30EO69914cPnzYpF1p9aHb3JYhiYiIyOpJ2pIEAFOnTsWoUaPQvXt3REdHY9GiRSgtLcXo0aMBACNHjkRAQADmzZsHe3t7dO7cWe96d3d3ALjhuBQyOSaJiIioyZA8JA0bNgx5eXmYNWsWsrOzERERgc2bN+sGc6elpUEut/yhU+qKahRX1gDg7DYiIqKmQCaEEFIXYU5qtRpubm4oKiqCq6ur0V73VLYa/RftRAsnOxx88wGjvS4RERGZ7vv7Viy/icZKFJZVw9Xehq1IRERETYTk3W1NxV3BLXH0rXhU1mikLoWIiIiMgC1JRqa0UUhdAhERERkBQxIRERGRAQxJRERERAYwJBEREREZwJBEREREZABDEhEREZEBDElEREREBjAkERERERnAkERERERkAEMSERERkQEMSUREREQGMCQRERERGcCQRERERGQAQxIRERGRATZSF2BuQggAgFqtlrgSIiIiqq+67+2673FzaHYhqbi4GACgUqkkroSIiIgaqri4GG5ubmZ5L5kwZySzAFqtFpmZmXBxcYFMJjPqa6vVaqhUKqSnp8PV1dWor003x/suDd53afC+S4P3XRrX33cXFxcUFxfD398fcrl5Rgs1u5YkuVyOVq1amfQ9XF1d+YdIArzv0uB9lwbvuzR436VRd9/N1YJUhwO3iYiIiAxgSCIiIiIygCHJiJRKJWbPng2lUil1Kc0K77s0eN+lwfsuDd53aUh935vdwG0iIiKi+mBLEhEREZEBDElEREREBjAkERERERnAkERERERkAEOSkSxZsgRBQUGwt7dHTEwMEhMTpS7JasybNw89evSAi4sLvL29MWTIEJw+fVrvnIqKCkyYMAEtW7aEs7MzHn30UeTk5Oidk5aWhoEDB8LR0RHe3t549dVXUVNTo3fO9u3b0a1bNyiVSrRt2xYrV6409cezGu+//z5kMhmmTJmiO8b7bhoZGRl46qmn0LJlSzg4OKBLly44cOCA7nkhBGbNmgU/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ET7//HOcPXsW69evR5cuXQAA69atQ6tWrTBnzhxdrQBw7tw59O/fH48++iiOHj2KtWvXYteuXZg4caLeay9YsABdu3bFoUOHMH36dEyePBlbt241xm0kIkshiIiM6J577hGTJ0/WO7Zt2zYBQFy5ckUIIcSXX34pAIiUlBTdOc8//7xwdHQUxcXFumPx8fHi+eefF0IIcfHiRaFQKERGRobea99///1ixowZBmv58MMPRWhoqKiqqjL4fOvWrcVHH32kd2zMmDHiueee0zu2c+dOIZfLRXl5ue66/v37650zbNgwMWDAAIPvQ0TWiS1JRCQJR0dHhISE6H728fFBUFAQnJ2d9Y7l5uYCAI4dOwaNRoPQ0FA4OzvrHn/99RfOnTtn8D2GDh2K8vJyBAcHY9y4cfjpp59QU1Nzy7qOHDmClStX6r1HfHw8tFotzp8/rzsvNjZW77rY2FicPHmywfeBiCwXB24TkSRsbW31fpbJZAaPabVaAEBJSQkUCgWSkpKgUCj0zrs+WF1PpVLh9OnT+OOPP7B161a8+OKLWLBgAf76668b3qtOSUkJnn/+ed3YpesFBgbW+/MRkfVjSCIio7Kzs9MbbG0skZGR0Gg0yM3NRZ8+fep9nYODAwYNGoRBgwZhwoQJCAsLw7Fjx9CtWzeDtXbr1g0nTpxA27Ztb/m6+/btu+HnDh061P8DEZHFY0giIqMKCgrC/v37ceHCBTg7O6NFixZGed3Q0FCMGDECI0eOxIcffojIyEjk5eUhISEB4eHhGDhw4A3XrFy5EhqNBjExMXB0dMTq1avh4OCA1q1b62rdsWMHnnjiCSiVSnh6emLatGm46667MHHiRIwdOxZOTk44ceIEtm7dik8//VT32rt378b8+fMxZMgQbN26Fd9//z02btxolM9KRJaBY5KIyKheeeUVKBQKdOzYEV5eXkhLSzPaa3/55ZcYOXIkXn75ZbRv3x5DhgzB33//fdNuMHd3dyxbtgy9evVCeHg4/vjjD2zYsAEtW7YEAMyZMwcXLlxASEgIvLy8AADh4eH466+/cObMGfTp0weRkZGYNWsW/P399V775ZdfxoEDBxAZGYl3330XCxcuRHx8vNE+KxFJTyaEEFIXQURkTYKCgjBlypQbVhYnoqaFLUlEREREBjAkERERERnA7jYiIiIiA9iSRERERGQAQxIRERGRAQxJRERERAYwJBEREREZwJBEREREZABDEhEREZEBDElEREREBjAkERERERnw/3NKis3TodnbAAAAAElFTkSuQmCC\n" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} } ], "source": [ - "# Create a Neural SquareCB pearl agent with one-hot action representation\n", - "\n", + "# Create a Neural SquareCB pearl agent with 1-hot action representation\n", "action_representation_module = OneHotActionTensorRepresentationModule(\n", - " max_number_actions= env._action_space.n,\n", + " max_number_actions= env.unique_labels_num,\n", ")\n", "\n", "agent = PearlAgent(\n", " policy_learner=NeuralBandit(\n", - " feature_dim = env.observation_dim + env._action_space.n,\n", + " feature_dim = env.observation_dim + env.unique_labels_num,\n", " hidden_dims=[64, 16],\n", - " training_rounds=50,\n", + " training_rounds=10,\n", + " learning_rate=0.01,\n", " action_representation_module=action_representation_module,\n", - " exploration_module=SquareCBExploration(gamma = env.observation_dim * env._action_space.n * number_of_steps)\n", + " exploration_module= SquareCBExploration(gamma = env.observation_dim * env.unique_labels_num * number_of_steps)\n", " ),\n", " replay_buffer=FIFOOffPolicyReplayBuffer(100_000),\n", " device_id=-1,\n", ")\n", "\n", + "\n", "info = online_learning(\n", " agent=agent,\n", " env=env,\n", @@ -466,7 +557,6 @@ " record_period=record_period,\n", " learn_after_episode=True,\n", ")\n", - "\n", "torch.save(info[\"return\"], \"SquareCB-return.pt\")\n", "plt.plot(record_period * np.arange(len(info[\"return\"])), info[\"return\"], label=\"SquareCB\")\n", "plt.xlabel(\"time step\")\n", @@ -476,7 +566,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": { "id": "cjLo_VzyLNGR" @@ -484,257 +573,259 @@ "source": [ "## Contextual Bandits learners: LinUCB\n", "\n", - "Next, we describe how to use the neural version of the LinUCB algorithm with Pearl, which uses UCB exploration with neural architectures. LinUCB and its neural version are generalizations of the seminal Upper Confidence Bound (UCB) algorithm. Both execute a policy of the following form:\n", + "Next, we describe how to use the neural version of the LinUCB algorithm with the Pearl library, which uses UCB type of exploration with neural architectures. The LinUCB and its neural version, are generalizations of the seminal Upper Confidence Bound (UCB) algorithm. Both execute a policy of the following form:\n", "$$\n", "\\pi(a,x) \\in \\arg\\max_a \\widehat{r}(x,a) + \\mathrm{score}(x,a),\n", "$$\n", - "namely, both use a function that estimates the expected reward with an additional bonus term. This function quantifies the potential of choosing an action given a certain context. Given features $\\phi(x,a)$ determined from context $x$ and action $a$, we estimate the score function in the linear case in the following way:\n", + "namely, both uses a function that estimates the expected reward with an additional bonus term, that quantifies the potential of choosing an action given a certain context. A common way to estimate the score function, in the linear case, when the features are $\\phi(x,a)$ is via:\n", "$$\n", "\\mathrm{score}(x,a) = \\alpha ||\\phi(x,a) ||_{A^{-1}}\\\\\n", "\\text{where } A= \\lambda I + \\sum_{n\\leq t} \\phi(x_n,a_n)\\phi^T(x_n,a_n).\n", "$$\n", "\n", - "To use the LinUCB algorithm in Pearl, we use the `NeuralLinearBandit` policy learner module with the exploration module set to `UCBExploration`:" + "To implement the LinUCB algorithm in Pearl, use the NeuralLinearBandit policy learner module. This module supports (i) learning a reward model, and, (ii) calculates a score function by estimating the uncertainty using the last layer features. Further, set the exploration module to be UCBExploration and set the alpha hyper-parameters to enable the agent with the UCB-like update rule.\n" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "metadata": { - "colab": { - "background_save": true, - "base_uri": "https://localhost:8080/" - }, "id": "cDauzO74nS4c", - "output": { - "id": 926709578989266, - "loadingStatus": "loaded" + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 }, - "outputId": "90febc78-d0be-4793-e6de-6dc4d4dcd0df", - "vscode": { - "languageId": "python" - } + "outputId": "481e1140-da7a-4194-b6f4-073ac2805528" }, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.10/dist-packages/ipykernel/ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n", + " and should_run_async(code)\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", "text": [ "episode 100, step 100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.13284307718276978\n", + "return: 0.20280151069164276\n", "episode 200, step 200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.0368531309068203\n", + "return: 0.054456718266010284\n", "episode 300, step 300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.08063597232103348\n", + "return: -0.13178661465644836\n", "episode 400, step 400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0398333072662354\n", + "return: 0.9865397214889526\n", "episode 500, step 500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.0563870370388031\n", + "return: 0.14140896499156952\n", "episode 600, step 600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0251115560531616\n", + "return: 1.1187363862991333\n", "episode 700, step 700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.139564037322998\n", + "return: 1.2206898927688599\n", "episode 800, step 800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.07180237025022507\n", + "return: -0.22980380058288574\n", "episode 900, step 900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0409554243087769\n", + "return: 1.0912549495697021\n", "episode 1000, step 1000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0543782711029053\n", + "return: -0.09148281812667847\n", "episode 1100, step 1100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8060013651847839\n", + "return: 0.9348994493484497\n", "episode 1200, step 1200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8930542469024658\n", + "return: 0.0068538920022547245\n", "episode 1300, step 1300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0274744033813477\n", + "return: 0.9425393342971802\n", "episode 1400, step 1400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.041968822479248\n", + "return: 0.016242675483226776\n", "episode 1500, step 1500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0363296270370483\n", + "return: -0.09567844122648239\n", "episode 1600, step 1600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.2376021444797516\n", + "return: 0.9641198515892029\n", "episode 1700, step 1700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.09300044924020767\n", + "return: 1.0396792888641357\n", "episode 1800, step 1800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0560853481292725\n", + "return: 0.9747456908226013\n", "episode 1900, step 1900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9857900142669678\n", + "return: 0.8553079962730408\n", "episode 2000, step 2000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.96579909324646\n", + "return: 0.9961886405944824\n", "episode 2100, step 2100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9380916357040405\n", + "return: 1.0519009828567505\n", "episode 2200, step 2200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8829371333122253\n", + "return: -0.05198976397514343\n", "episode 2300, step 2300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0698895454406738\n", + "return: 0.960572361946106\n", "episode 2400, step 2400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: -0.021227287128567696\n", + "return: 0.9912083745002747\n", "episode 2500, step 2500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9145146012306213\n", + "return: 0.055912960320711136\n", "episode 2600, step 2600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.08243873715400696\n", + "return: 0.9400607943534851\n", "episode 2700, step 2700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0159893035888672\n", + "return: 1.0280994176864624\n", "episode 2800, step 2800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.994200587272644\n", + "return: 0.024195637553930283\n", "episode 2900, step 2900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0534207820892334\n", + "return: 1.1863090991973877\n", "episode 3000, step 3000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9869299530982971\n", + "return: 1.147364616394043\n", "episode 3100, step 3100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1921932697296143\n", + "return: 1.197069525718689\n", "episode 3200, step 3200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0870246887207031\n", + "return: 0.9864020347595215\n", "episode 3300, step 3300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0486077070236206\n", + "return: 0.899193286895752\n", "episode 3400, step 3400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9018763899803162\n", + "return: 1.1261299848556519\n", "episode 3500, step 3500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0034971237182617\n", + "return: 1.1639732122421265\n", "episode 3600, step 3600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9506497979164124\n", + "return: 0.833449125289917\n", "episode 3700, step 3700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1082403659820557\n", + "return: 1.0843310356140137\n", "episode 3800, step 3800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.156396746635437\n", + "return: 0.9897075891494751\n", "episode 3900, step 3900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0014032125473022\n", + "return: 1.2469022274017334\n", "episode 4000, step 4000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1625545024871826\n", + "return: 0.991430401802063\n", "episode 4100, step 4100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.2459352016448975\n", + "return: 0.936269223690033\n", "episode 4200, step 4200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.889884352684021\n", + "return: 1.0206660032272339\n", "episode 4300, step 4300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0633623600006104\n", + "return: 0.9332488775253296\n", "episode 4400, step 4400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.08850495517253876\n", + "return: 0.9900529384613037\n", "episode 4500, step 4500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.7982684373855591\n", + "return: 1.0219541788101196\n", "episode 4600, step 4600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9511789679527283\n", + "return: 0.8899850845336914\n", "episode 4700, step 4700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0553739070892334\n", + "return: 0.9463319778442383\n", "episode 4800, step 4800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.7381132245063782\n", + "return: 1.121014952659607\n", "episode 4900, step 4900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0709494352340698\n", + "return: 1.040822982788086\n", "episode 5000, step 5000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0041077136993408\n", + "return: 0.984503448009491\n", "episode 5100, step 5100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.1710326075553894\n", + "return: 0.9031474590301514\n", "episode 5200, step 5200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0599743127822876\n", + "return: 1.0292550325393677\n", "episode 5300, step 5300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.074434518814087\n", + "return: 0.8698779344558716\n", "episode 5400, step 5400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.936264157295227\n", + "return: 0.999628484249115\n", "episode 5500, step 5500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.065281629562378\n", + "return: 0.9985622763633728\n", "episode 5600, step 5600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9352773427963257\n", + "return: -0.11453455686569214\n", "episode 5700, step 5700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8134567141532898\n", + "return: 1.1535426378250122\n", "episode 5800, step 5800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8990450501441956\n", + "return: 1.0082354545593262\n", "episode 5900, step 5900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0666414499282837\n", + "return: 1.0808966159820557\n", "episode 6000, step 6000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9457287192344666\n", + "return: 0.9922400712966919\n", "episode 6100, step 6100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0635485649108887\n", + "return: 1.0792633295059204\n", "episode 6200, step 6200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9951311945915222\n", + "return: 0.8470718860626221\n", "episode 6300, step 6300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1063202619552612\n", + "return: 0.8804739117622375\n", "episode 6400, step 6400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0361067056655884\n", + "return: 1.0601600408554077\n", "episode 6500, step 6500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9866701364517212\n", + "return: 1.0142043828964233\n", "episode 6600, step 6600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9718022346496582\n", + "return: 0.948247492313385\n", "episode 6700, step 6700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.95516437292099\n", + "return: 0.9545789957046509\n", "episode 6800, step 6800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9956871271133423\n", + "return: 1.010140061378479\n", "episode 6900, step 6900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0611385107040405\n", + "return: 0.8813512921333313\n", "episode 7000, step 7000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9236329197883606\n", + "return: 0.9689813852310181\n", "episode 7100, step 7100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0712831020355225\n", + "return: 1.060390591621399\n", "episode 7200, step 7200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9853823184967041\n", + "return: 0.9932740330696106\n", "episode 7300, step 7300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0430004596710205\n", + "return: 1.0427846908569336\n", "episode 7400, step 7400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0915601253509521\n", + "return: 1.0150879621505737\n", "episode 7500, step 7500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8564046621322632\n", + "return: 1.0593535900115967\n", "episode 7600, step 7600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0255546569824219\n", + "return: -0.04487299919128418\n", "episode 7700, step 7700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8923426866531372\n", + "return: 1.0764495134353638\n", "episode 7800, step 7800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1250450611114502\n", + "return: 0.8947196006774902\n", "episode 7900, step 7900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9440849423408508\n", + "return: 1.0651267766952515\n", "episode 8000, step 8000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8757355213165283\n", + "return: 0.015225519426167011\n", "episode 8100, step 8100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9380690455436707\n", + "return: 0.9122466444969177\n", "episode 8200, step 8200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0585434436798096\n", + "return: 1.0724564790725708\n", "episode 8300, step 8300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0659244060516357\n", + "return: 1.0051934719085693\n", "episode 8400, step 8400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9526666402816772\n", + "return: 1.0062308311462402\n", "episode 8500, step 8500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9757660031318665\n", + "return: 0.9350183606147766\n", "episode 8600, step 8600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0045894384384155\n", + "return: 0.920856773853302\n", "episode 8700, step 8700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8647818565368652\n", + "return: 0.9818281531333923\n", "episode 8800, step 8800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9981588125228882\n", + "return: 0.9964724183082581\n", "episode 8900, step 8900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9995661377906799\n", + "return: 1.0790421962738037\n", "episode 9000, step 9000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9929297566413879\n", + "return: 0.0036260781344026327\n", "episode 9100, step 9100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0528777837753296\n", + "return: 0.9669089913368225\n", "episode 9200, step 9200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.0025759935379028\n", + "return: 0.9350236058235168\n", "episode 9300, step 9300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1606420278549194\n", + "return: 1.08956778049469\n", "episode 9400, step 9400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8390303254127502\n", + "return: 0.76462721824646\n", "episode 9500, step 9500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.988869309425354\n", + "return: 0.9117434620857239\n", "episode 9600, step 9600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.8201045989990234\n", + "return: 0.015561874024569988\n", "episode 9700, step 9700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.171656608581543\n", + "return: 1.0754772424697876\n", "episode 9800, step 9800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.1802815198898315\n", + "return: 0.9884140491485596\n", "episode 9900, step 9900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 0.9342361092567444\n", + "return: 0.9845787286758423\n", "episode 10000, step 10000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", - "return: 1.2010207176208496\n" + "return: 0.9720855951309204\n" ] }, { + "output_type": "display_data", "data": { - "image/png": "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", "text/plain": [ - "
" - ] + "
" + ], + "image/png": "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\n" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} } ], "source": [ - "# Create a Neural LinUCB Pearl agent with one-hot action representation\n", + "\n", + "# Create a Neural LinUCB pearl agent with 1-hot action representation\n", "\n", "action_representation_module = OneHotActionTensorRepresentationModule(\n", " max_number_actions= env._action_space.n,\n", @@ -744,14 +835,17 @@ " policy_learner=NeuralLinearBandit(\n", " feature_dim = env.observation_dim + env._action_space.n,\n", " hidden_dims=[64, 16],\n", - " training_rounds=50,\n", + " state_features_only=False,\n", + " training_rounds=10,\n", + " learning_rate=0.01,\n", " action_representation_module=action_representation_module,\n", - " exploration_module=UCBExploration(alpha=1.0)\n", + " exploration_module= UCBExploration(alpha=1.0)\n", " ),\n", " replay_buffer=FIFOOffPolicyReplayBuffer(100_000),\n", " device_id=-1,\n", ")\n", "\n", + "\n", "info = online_learning(\n", " agent=agent,\n", " env=env,\n", @@ -760,7 +854,6 @@ " record_period=record_period,\n", " learn_after_episode=True,\n", ")\n", - "\n", "torch.save(info[\"return\"], \"LinUCB-return.pt\")\n", "plt.plot(record_period * np.arange(len(info[\"return\"])), info[\"return\"], label=\"LinUCB\")\n", "plt.xlabel(\"time step\")\n", @@ -770,7 +863,285 @@ ] }, { - "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "QNUmNO77LNGR" + }, + "source": [ + "## Contextual Bandits learners: LinTS\n", + "\n", + "Lastly, we describe how to use the neural version of the LinTS algorithm with the Pearl library, namely, the algorithm which uses Thompson sampling exploration with neural architectures. The LinTS sampling is closely related to the LinUCB algorithm, with a key modification that often improves its convergence in practice: sample the score function from a probability, instead of fixing it determinstically. Practically, this often reduces over-exploring arms, since the score may be smaller than in the LinUCB algorithm.\n", + "\n", + "To implement the LinTS algorithm in Pearl, use the NeuralLinearBandit policy learner module. Further, set the exploration module to be ThompsonSamplingExplorationLinear. This enables the agent to sample the score based on its estimated uncertainty, rather to fix it as in LinUCB algorithm.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "_7Cpzoi3nVAw", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "2b350618-af1c-4649-bede-13ba64ad41b2" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "episode 100, step 100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.09024851769208908\n", + "episode 200, step 200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.002633035881444812\n", + "episode 300, step 300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: -0.07467412203550339\n", + "episode 400, step 400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0156103372573853\n", + "episode 500, step 500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.04409921169281\n", + "episode 600, step 600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9837733507156372\n", + "episode 700, step 700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9862121939659119\n", + "episode 800, step 800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: -0.11129053682088852\n", + "episode 900, step 900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9800935983657837\n", + "episode 1000, step 1000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9999375939369202\n", + "episode 1100, step 1100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0631517171859741\n", + "episode 1200, step 1200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9909786581993103\n", + "episode 1300, step 1300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1609396934509277\n", + "episode 1400, step 1400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9601272940635681\n", + "episode 1500, step 1500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.1314946413040161\n", + "episode 1600, step 1600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0190272331237793\n", + "episode 1700, step 1700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.900674045085907\n", + "episode 1800, step 1800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0322463512420654\n", + "episode 1900, step 1900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.0550333634018898\n", + "episode 2000, step 2000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.131584644317627\n", + "episode 2100, step 2100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9966853857040405\n", + "episode 2200, step 2200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8430404663085938\n", + "episode 2300, step 2300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1651915311813354\n", + "episode 2400, step 2400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9456443786621094\n", + "episode 2500, step 2500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9995026588439941\n", + "episode 2600, step 2600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1561548709869385\n", + "episode 2700, step 2700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1483546495437622\n", + "episode 2800, step 2800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0468939542770386\n", + "episode 2900, step 2900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0259349346160889\n", + "episode 3000, step 3000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.853131115436554\n", + "episode 3100, step 3100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9850102663040161\n", + "episode 3200, step 3200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8096411228179932\n", + "episode 3300, step 3300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0070034265518188\n", + "episode 3400, step 3400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.771452784538269\n", + "episode 3500, step 3500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9490416646003723\n", + "episode 3600, step 3600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8729531764984131\n", + "episode 3700, step 3700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: -0.12757402658462524\n", + "episode 3800, step 3800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0074385404586792\n", + "episode 3900, step 3900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.033884882926941\n", + "episode 4000, step 4000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.046915888786316\n", + "episode 4100, step 4100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0219038724899292\n", + "episode 4200, step 4200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: -0.15234242379665375\n", + "episode 4300, step 4300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9609275460243225\n", + "episode 4400, step 4400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.034550666809082\n", + "episode 4500, step 4500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.2472548484802246\n", + "episode 4600, step 4600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9214726686477661\n", + "episode 4700, step 4700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: -0.021003952249884605\n", + "episode 4800, step 4800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0047966241836548\n", + "episode 4900, step 4900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.034260630607605\n", + "episode 5000, step 5000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.7625596523284912\n", + "episode 5100, step 5100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9447240233421326\n", + "episode 5200, step 5200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.7146114706993103\n", + "episode 5300, step 5300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.044114351272583\n", + "episode 5400, step 5400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9947097897529602\n", + "episode 5500, step 5500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0141396522521973\n", + "episode 5600, step 5600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1748143434524536\n", + "episode 5700, step 5700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0289136171340942\n", + "episode 5800, step 5800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0836181640625\n", + "episode 5900, step 5900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.92894047498703\n", + "episode 6000, step 6000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9187952876091003\n", + "episode 6100, step 6100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8998274207115173\n", + "episode 6200, step 6200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: -0.02114623598754406\n", + "episode 6300, step 6300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0222702026367188\n", + "episode 6400, step 6400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0138862133026123\n", + "episode 6500, step 6500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0265398025512695\n", + "episode 6600, step 6600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8881807923316956\n", + "episode 6700, step 6700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9364562630653381\n", + "episode 6800, step 6800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0452048778533936\n", + "episode 6900, step 6900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8812369704246521\n", + "episode 7000, step 7000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0886296033859253\n", + "episode 7100, step 7100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8804692029953003\n", + "episode 7200, step 7200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.066596269607544\n", + "episode 7300, step 7300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0423859357833862\n", + "episode 7400, step 7400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0080853700637817\n", + "episode 7500, step 7500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.999132513999939\n", + "episode 7600, step 7600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9367015361785889\n", + "episode 7700, step 7700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.008610486984253\n", + "episode 7800, step 7800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9758915305137634\n", + "episode 7900, step 7900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1150867938995361\n", + "episode 8000, step 8000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9644365906715393\n", + "episode 8100, step 8100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0202032327651978\n", + "episode 8200, step 8200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0238661766052246\n", + "episode 8300, step 8300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.941068708896637\n", + "episode 8400, step 8400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.052219033241272\n", + "episode 8500, step 8500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9174469113349915\n", + "episode 8600, step 8600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9747493267059326\n", + "episode 8700, step 8700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0260030031204224\n", + "episode 8800, step 8800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9549689292907715\n", + "episode 8900, step 8900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9588802456855774\n", + "episode 9000, step 9000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0665802955627441\n", + "episode 9100, step 9100, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0095921754837036\n", + "episode 9200, step 9200, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9650076627731323\n", + "episode 9300, step 9300, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.7871606945991516\n", + "episode 9400, step 9400, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0182504653930664\n", + "episode 9500, step 9500, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9524450302124023\n", + "episode 9600, step 9600, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.0539082288742065\n", + "episode 9700, step 9700, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 1.1573524475097656\n", + "episode 9800, step 9800, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.9590475559234619\n", + "episode 9900, step 9900, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.943342387676239\n", + "episode 10000, step 10000, agent=PearlAgent with NeuralLinearBandit, FIFOOffPolicyReplayBuffer, env=Contextual bandits with CB datasets\n", + "return: 0.8112016916275024\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ], + "source": [ + "# Create a Neural LinTS pearl agent with 1-hot action representation\n", + "\n", + "action_representation_module = OneHotActionTensorRepresentationModule(\n", + " max_number_actions= env._action_space.n,\n", + ")\n", + "\n", + "agent = PearlAgent(\n", + " policy_learner=NeuralLinearBandit(\n", + " feature_dim = env.observation_dim + env._action_space.n,\n", + " hidden_dims=[64, 16],\n", + " state_features_only=False,\n", + " training_rounds=10,\n", + " learning_rate=0.01,\n", + " action_representation_module=action_representation_module,\n", + " exploration_module= ThompsonSamplingExplorationLinear()\n", + " ),\n", + " replay_buffer=FIFOOffPolicyReplayBuffer(100_000),\n", + " device_id=-1,\n", + ")\n", + "\n", + "info = online_learning(\n", + " agent=agent,\n", + " env=env,\n", + " number_of_steps=number_of_steps,\n", + " print_every_x_steps=100,\n", + " record_period=record_period,\n", + " learn_after_episode=True,\n", + ")\n", + "torch.save(info[\"return\"], \"LinTS-return.pt\")\n", + "plt.plot(record_period * np.arange(len(info[\"return\"])), info[\"return\"], label=\"LinTS\")\n", + "plt.xlabel(\"time step\")\n", + "plt.ylabel(\"return\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { "cell_type": "markdown", "metadata": { "id": "pm18iQ_2LNGS" @@ -779,73 +1150,52 @@ "## Summary\n", "In this example, we showed how to use popular contextual bandits algorithms in Pearl." ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ANo74OTbLNGS" + }, + "source": [] } ], "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, "custom": { "cells": [], "metadata": { "custom": { "cells": [], "metadata": { - "custom": { - "cells": [], - "metadata": { - "custom": { - "cells": [], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "T4", - "include_colab_link": true, - "provenance": [] - }, - "fileHeader": "", - "fileUid": "4316417e-7688-45f2-a94f-24148bfc425e", - "isAdHoc": false, - "kernelspec": { - "display_name": "pearl (local)", - "language": "python", - "name": "pearl_local" - }, - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 2 - }, - "fileHeader": "", - "fileUid": "1158a851-91bb-437e-a391-aba92448f600", - "indentAmount": 2, - "isAdHoc": false, - "language_info": { - "name": "plaintext" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "include_colab_link": true, + "provenance": [] }, "fileHeader": "", - "fileUid": "06710d6d-2a6b-4a80-a1f7-31b8d3b7c146", - "indentAmount": 2, + "fileUid": "4316417e-7688-45f2-a94f-24148bfc425e", "isAdHoc": false, + "kernelspec": { + "display_name": "pearl (local)", + "language": "python", + "name": "pearl_local" + }, "language_info": { - "name": "plaintext" + "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }, "fileHeader": "", - "fileUid": "e7c10986-b495-4f0d-ad5e-f1a8296807f4", + "fileUid": "1158a851-91bb-437e-a391-aba92448f600", "indentAmount": 2, "isAdHoc": false, - "kernelspec": { - "display_name": "pearl", - "language": "python", - "name": "bento_kernel_pearl" - }, "language_info": { "name": "plaintext" } @@ -853,8 +1203,15 @@ "nbformat": 4, "nbformat_minor": 2 }, - "indentAmount": 2 + "indentAmount": 2, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } }, "nbformat": 4, - "nbformat_minor": 2 -} + "nbformat_minor": 0 +} \ No newline at end of file