{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bandits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this part, we will investigate the properties of the action selection schemes seen in the lecture and compare their properties:\n", "\n", "1. greedy action selection\n", "2. $\\epsilon$-greedy action selection\n", "3. softmax action selection\n", "\n", "Let's re-use the definitions of the last exercise:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "rng = np.random.default_rng()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "class Bandit:\n", " \"\"\"\n", " n-armed bandit.\n", " \"\"\"\n", " def __init__(self, nb_actions, mean=0.0, std_Q=1.0, std_r=1.0):\n", " \"\"\"\n", " :param nb_actions: number of arms.\n", " :param mean: mean of the normal distribution for $Q^*$.\n", " :param std_Q: standard deviation of the normal distribution for $Q^*$.\n", " :param std_r: standard deviation of the normal distribution for the sampled rewards.\n", " \"\"\"\n", " # Store parameters\n", " self.nb_actions = nb_actions\n", " self.mean = mean\n", " self.std_Q = std_Q\n", " self.std_r = std_r\n", " \n", " # Initialize the true Q-values\n", " self.Q_star = rng.normal(self.mean, self.std_Q, self.nb_actions)\n", " \n", " # Optimal action\n", " self.a_star = self.Q_star.argmax()\n", " \n", " def step(self, action):\n", " \"\"\"\n", " Sampled a single reward from the bandit.\n", " \n", " :param action: the selected action.\n", " :return: a reward.\n", " \"\"\"\n", " return float(rng.normal(self.Q_star[action], self.std_r, 1))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "