| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# HW8 Exploration Methods — Structured Workflow\n", | |
| "\n", | |
| "This notebook implements the required exploration baselines for HW8 and follows the mandated structure: overview → setup/config → data → model/policies → training → evaluation → visualization → run metadata logging. Run cells top-down after creating a virtual environment and installing `requirements.txt` in this folder.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Using device: cpu\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "\"\"\"Setup and configuration: imports, seeds, hyperparameters.\"\"\"\n", | |
| "\n", | |
| "from __future__ import annotations\n", | |
| "\n", | |
| "import json\n", | |
| "import os\n", | |
| "import platform\n", | |
| "import random\n", | |
| "import subprocess\n", | |
| "from dataclasses import asdict, dataclass\n", | |
| "from typing import Dict, List, Tuple\n", | |
| "\n", | |
| "import numpy as np\n", | |
| "import torch\n", | |
| "\n", | |
| "\n", | |
| "def set_seed(seed: int) -> None:\n", | |
| " \"\"\"Seed random number generators for reproducibility.\"\"\"\n", | |
| " random.seed(seed)\n", | |
| " np.random.seed(seed)\n", | |
| " torch.manual_seed(seed)\n", | |
| " if torch.cuda.is_available():\n", | |
| " torch.cuda.manual_seed_all(seed)\n", | |
| " torch.backends.cudnn.deterministic = True\n", | |
| " torch.backends.cudnn.benchmark = False\n", | |
| "\n", | |
| "\n", | |
| "@dataclass\n", | |
| "class BanditConfig:\n", | |
| " num_arms: int = 10\n", | |
| " horizon: int = 5000\n", | |
| " epsilon: float = 0.1\n", | |
| " ucb_c: float = 2.0\n", | |
| " alpha0: float = 1.0\n", | |
| " beta0: float = 1.0\n", | |
| " seed: int = 7\n", | |
| " device: str = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", | |
| "\n", | |
| "\n", | |
| "config = BanditConfig()\n", | |
| "set_seed(config.seed)\n", | |
| "DEVICE = torch.device(config.device)\n", | |
| "print(f\"Using device: {DEVICE}\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "\"\"\"Bandit environment definition (Bernoulli arms) and helpers.\"\"\"\n", | |
| "\n", | |
| "@dataclass\n", | |
| "class BernoulliBandit:\n", | |
| " means: np.ndarray\n", | |
| "\n", | |
| " @classmethod\n", | |
| " def random(\n", | |
| " cls, num_arms: int, seed: int, low: float = 0.05, high: float = 0.95\n", | |
| " ) -> \"BernoulliBandit\":\n", | |
| " rng = np.random.default_rng(seed)\n", | |
| " means = rng.uniform(low=low, high=high, size=num_arms)\n", | |
| " return cls(means=means)\n", | |
| "\n", | |
| " def pull(self, arm: int, rng: np.random.Generator) -> float:\n", | |
| " assert 0 <= arm < self.means.shape[0], \"arm index out of range\"\n", | |
| " return float(rng.random() < self.means[arm])\n", | |
| "\n", | |
| " @property\n", | |
| " def best_mean(self) -> float:\n", | |
| " return float(self.means.max())\n", | |
| "\n", | |
| "\n", | |
| "def regret_curve(rewards: np.ndarray, optimal_mean: float) -> np.ndarray:\n", | |
| " \"\"\"Compute cumulative regret given rewards and optimal arm mean.\"\"\"\n", | |
| " timesteps = rewards.shape[0]\n", | |
| " optimal_returns = np.full(shape=timesteps, fill_value=optimal_mean)\n", | |
| " inst_regret = optimal_returns - rewards\n", | |
| " return np.cumsum(inst_regret)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "\"\"\"Exploration policies: epsilon-greedy, UCB1, Thompson sampling (Beta-Bernoulli).\"\"\"\n", | |
| "\n", | |
| "\n", | |
| "class BasePolicy:\n", | |
| " def select(self, t: int) -> int: # pragma: no cover - interface\n", | |
| " raise NotImplementedError\n", | |
| "\n", | |
| " def update(self, arm: int, reward: float) -> None: # pragma: no cover - interface\n", | |
| " raise NotImplementedError\n", | |
| "\n", | |
| "\n", | |
| "class EpsilonGreedy(BasePolicy):\n", | |
| " def __init__(self, num_arms: int, epsilon: float, seed: int) -> None:\n", | |
| " self.num_arms = num_arms\n", | |
| " self.epsilon = epsilon\n", | |
| " self.rng = np.random.default_rng(seed)\n", | |
| " self.counts = np.zeros(num_arms, dtype=np.int64)\n", | |
| " self.values = np.zeros(num_arms, dtype=np.float64)\n", | |
| "\n", | |
| " def select(self, t: int) -> int:\n", | |
| " explore = self.rng.random() < self.epsilon\n", | |
| " if explore:\n", | |
| " return int(self.rng.integers(low=0, high=self.num_arms))\n", | |
| " return int(np.argmax(self.values))\n", | |
| "\n", | |
| " def update(self, arm: int, reward: float) -> None:\n", | |
| " self.counts[arm] += 1\n", | |
| " n = self.counts[arm]\n", | |
| " self.values[arm] += (reward - self.values[arm]) / n\n", | |
| "\n", | |
| "\n", | |
| "class UCB1(BasePolicy):\n", | |
| " def __init__(self, num_arms: int, c: float, seed: int) -> None:\n", | |
| " self.num_arms = num_arms\n", | |
| " self.c = c\n", | |
| " self.rng = np.random.default_rng(seed)\n", | |
| " self.counts = np.zeros(num_arms, dtype=np.int64)\n", | |
| " self.values = np.zeros(num_arms, dtype=np.float64)\n", | |
| "\n", | |
| " def select(self, t: int) -> int:\n", | |
| " # pull each arm at least once\n", | |
| " for arm in range(self.num_arms):\n", | |
| " if self.counts[arm] == 0:\n", | |
| " return arm\n", | |
| " confidence = self.c * np.sqrt(np.log(max(t, 1)) / self.counts)\n", | |
| " return int(np.argmax(self.values + confidence))\n", | |
| "\n", | |
| " def update(self, arm: int, reward: float) -> None:\n", | |
| " self.counts[arm] += 1\n", | |
| " n = self.counts[arm]\n", | |
| " self.values[arm] += (reward - self.values[arm]) / n\n", | |
| "\n", | |
| "\n", | |
| "class ThompsonBeta(BasePolicy):\n", | |
| " def __init__(self, num_arms: int, alpha0: float, beta0: float, seed: int) -> None:\n", | |
| " self.num_arms = num_arms\n", | |
| " self.rng = np.random.default_rng(seed)\n", | |
| " self.alpha = np.full(num_arms, fill_value=alpha0, dtype=np.float64)\n", | |
| " self.beta = np.full(num_arms, fill_value=beta0, dtype=np.float64)\n", | |
| "\n", | |
| " def select(self, t: int) -> int:\n", | |
| " samples = self.rng.beta(self.alpha, self.beta)\n", | |
| " return int(np.argmax(samples))\n", | |
| "\n", | |
| " def update(self, arm: int, reward: float) -> None:\n", | |
| " self.alpha[arm] += reward\n", | |
| " self.beta[arm] += 1.0 - reward" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "\"\"\"Training/evaluation loops for each exploration strategy.\"\"\"\n", | |
| "\n", | |
| "PolicyResult = Tuple[np.ndarray, np.ndarray]\n", | |
| "\n", | |
| "\n", | |
| "def run_policy(\n", | |
| " env: BernoulliBandit,\n", | |
| " policy: BasePolicy,\n", | |
| " horizon: int,\n", | |
| " seed: int,\n", | |
| ") -> PolicyResult:\n", | |
| " rewards = np.zeros(horizon, dtype=np.float64)\n", | |
| " rng = np.random.default_rng(seed)\n", | |
| " for t in range(horizon):\n", | |
| " arm = policy.select(t + 1)\n", | |
| " reward = env.pull(arm, rng)\n", | |
| " policy.update(arm, reward)\n", | |
| " rewards[t] = reward\n", | |
| " regrets = regret_curve(rewards=rewards, optimal_mean=env.best_mean)\n", | |
| " return rewards, regrets\n", | |
| "\n", | |
| "\n", | |
| "def evaluate_policies(\n", | |
| " env: BernoulliBandit, cfg: BanditConfig\n", | |
| ") -> Dict[str, PolicyResult]:\n", | |
| " policies: Dict[str, BasePolicy] = {\n", | |
| " \"epsilon_greedy\": EpsilonGreedy(\n", | |
| " num_arms=cfg.num_arms, epsilon=cfg.epsilon, seed=cfg.seed + 1\n", | |
| " ),\n", | |
| " \"ucb1\": UCB1(num_arms=cfg.num_arms, c=cfg.ucb_c, seed=cfg.seed + 2),\n", | |
| " \"thompson_beta\": ThompsonBeta(\n", | |
| " num_arms=cfg.num_arms, alpha0=cfg.alpha0, beta0=cfg.beta0, seed=cfg.seed + 3\n", | |
| " ),\n", | |
| " }\n", | |
| " outputs: Dict[str, PolicyResult] = {}\n", | |
| " for name, policy in policies.items():\n", | |
| " outputs[name] = run_policy(\n", | |
| " env=env, policy=policy, horizon=cfg.horizon, seed=cfg.seed\n", | |
| " )\n", | |
| " return outputs" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Training and evaluation\n", | |
| "\n", | |
| "Execute the cell below to instantiate a Bernoulli bandit, run each exploration policy for the configured horizon, and collect rewards/regret curves. Keep horizons modest for smoke testing before any long runs.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'epsilon_greedy': {'mean_reward': 0.8248, 'final_regret': 163.46210436310696},\n", | |
| " 'ucb1': {'mean_reward': 0.7734, 'final_regret': 420.4621043631441},\n", | |
| " 'thompson_beta': {'mean_reward': 0.8434, 'final_regret': 70.4621043630868}}" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "\"\"\"Run all policies for the configured horizon and aggregate results.\"\"\"\n", | |
| "\n", | |
| "env = BernoulliBandit.random(num_arms=config.num_arms, seed=config.seed)\n", | |
| "results = evaluate_policies(env=env, cfg=config)\n", | |
| "\n", | |
| "summary = {\n", | |
| " name: {\n", | |
| " \"mean_reward\": float(vals[0].mean()),\n", | |
| " \"final_regret\": float(vals[1][-1]),\n", | |
| " }\n", | |
| " for name, vals in results.items()\n", | |
| "}\n", | |
| "summary" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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7H3ZAkFERERERMXGAIKIiIiIiIqNAQQRERERERUbAwgiIiIiIio2BhBERERERFRsHIXpNuTk5Kgxc8tSRkaG7qelJeM7c1TYNSAjhFlZWZmwZEREREQMIEpFxsgNDw9HfHx8mV9DGo0G1tbWCA0NZQBhpoq6Btzd3eHv768meiEiIiIyBbZAlII2ePD19VXj9JZlZU5aNeTOs52dHe82mylj14AErTI+dGRkpHoeEBBg4lISERGRuWIAUYrKnTZ48PLyKpf3F/b29gwgzFRh14CDg4P6KUGEXH9MZyIiIiJTYJJ9CWn7PHCWaDIF7XVX1n1viIiIiIqLAUQpMQedTIHXHREREZkaAwgiIiIiIio2BhBULvbu3YtGjRohJCREPe/bty++/PJLsz3a+Y8HERERUVXFTtRULtq0aYP//vsPnp6ePMJERERE1QgDCCoXtra28PHx4dElIiIiqmaYwmTGkpKS8Pbbb6Nz585o164dxowZg+PHj6ttkm40YsQIfP311+jUqRPat2+PKVOmIDk5Wff6bdu24f7770erVq3QpUsXvP7660hISChWys7hw4fV58nnyvvLe8fFxem2S8rTokWL8MILL6jWDNnngw8+QHZ2drG/X1paGqZOnape27ZtW7z55pt49dVXVTnF77//jv79+6v3lXI8++yzav3Fixcxbtw49bndu3dXr4mKitK9r8zJsGDBAtxxxx3quw8ZMgRr1qwx+OwDBw7gwQcfRMuWLTF48GCcOXNGt23jxo1o3Lgxbty4YfCahx56CJ988kmxvx8RERFVbSnn9iNux3JosjNRlTCAKCNSqUzPyL79R6Y8cvJ+luB18vklLa9Ukq9fv4558+Zh+fLlaN26tQoaTp06pfaRYELSkL777jsVSOzfvx8vv/yy2hYbG4vnn38ew4YNw7p16/DVV1+p7Z9++uktP/vYsWMYPXo0GjRooD73iy++wNGjR/Hkk0/q5kAQsr5Dhw6qcj558mQsXboUf/75Z7G/42uvvYadO3di1qxZ+OWXX1TA9Ndffxnsc+3aNTWvwqpVq/DKK68gIiICI0eORK1atbBy5Up8++23KmiSyr1M5Cbk/ZYtW6aCr7Vr16pAaNq0afjpp5/UdjmmTzzxBJo0aYI//vgDzz33HObOnav7zN69e6vUrtWrV+vWXb58GUeOHFHHk4iIiKq/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Kqi4NOAcDRSnTp1q3XXXXWbudv3y16DPjc+//wYQivz3fadPnzYLguo1QCv2urikBhO+VAYC9J+SaesAAAAAUNbRWRYAAACAbQQQAAAAAGwjgAAAAABgGwEEAAAAANsIIAAAAADYRgABAAAAwDYCCAAAAAC2EUAAAMo0ljMCgJIVXMLvBwAopSZMmCAffvjhTz6nZs2acvz4cfn888/ljjvuKLFzK8qbb74pISEhkpCQ4PSpAIDfYCVqAIDx448/yrlz57wq57t27ZKFCxd69mVlZZkKe+PGjc2t0xo2bCi//vWvZdSoUU6fCgD4DVogAABGrVq1zOZWuXJlEyS0bNmSvxAAwIMxEAAA29atW2d+9T927Jin29Ozzz4ra9askR49ekjz5s3liSeekEOHDsmmTZukd+/e0qJFC+nfv78kJSV5pbV9+3YZNGiQOR4XFycvvPCCVwtIXl6ezJ07V7p37y5NmzY1t7Nnz5bs7GxzXM9DaQuJ+77au3evjBgxQlq3bm22kSNHytGjRz3Ht27dap7/j3/8QwYOHGjOOT4+XlavXk1JAAAbCCAAADfkX//6l6xatcoEE6+++qocOHBAhg8fbu5rRX7OnDly4sQJGTdunOc1iYmJMmTIEAkLC5N58+bJiy++KNu2bZPBgwdLRkaGec7bb78t7733ngkAli9fLgMGDJBly5bJokWLzHENWlS/fv089zVw0QDm7Nmz8vrrr8uMGTNM8KCv1X0F/fa3vzVdsf7whz9Ix44dZdq0aQQRAGADXZgAADckLS3NBAF169Y1jzUQeP/992XFihXSoUMHs+/IkSOmQp+amiqRkZGmJSE6OlreeustCQoKMs/RlogHH3xQ1q5da1oGNB1teejbt685rq0U4eHhUqFCBfPY3bWqevXqnvvaGqHP0fcuX7682afnoK0jS5cuNa0cbvfee6+89NJL5n7nzp0lOTnZjPvQYCMgIIBSAQBFoAUCAHBDKlas6Ake1K233uoJCNwqVapkbjWASE9Pl507d0qXLl3MFKw5OTlmi4qKMul888035rnt2rUz95988klT+d+/f7/p8vTwww8XeS5btmwxgYa2bLjT1UCibdu2snnzZq/nPvroo16PtRvT6dOnTSsGAKBotEAAAG6I+5f+q0VERBS6X4MIHd+gXZR0u1poaKi51alZy5UrZ1okZs2aJTNnzpT69evLpEmTpH379oWmfeHCBdmwYYPZrqaDwguqVq2a1+MqVaqY25SUlCL/rwAAAggAQAnToEC7COkYCO2ydDXtgqQCAwNNVybddPzCl19+KYsXLzZTtmrLRGHTyGr3Jh3PMHTo0GuOBQd7/2Z2/vx5r1mn3GMk3IEEAKBwtEAAAEq8xUIHLx88eFCaNWvm2a+Dp0ePHm26NtWrV88MhtYxENrioJX6Pn36yMWLF+WVV16RS5cumRYFDTIK0u5L2tWpUaNGnoBBu0npAO7atWub/W4bN2706mb1ySefmIXyCgYVAIBrEUAAAErcmDFjzExNY8eOlYceekhyc3PNTEs6NuK5554zz4mNjTX7dExFq1at5NSpU/LHP/7RBAnu7kg6IHvHjh1mVicd56Cv1cBDZ3/SwdDaHUpnaNJgYf78+V7noGnpcR2A/dlnn5lpZ3VwNwDgpxFAAABKXKdOncyUrDprkrY6uFwuadKkianUu2dU+s1vfmO6KekYCJ1qVbsn6VoQGnS4/epXvzIzJw0bNsyMe4iJiZF3333XrB8xfvx40/rQoEED8/p77rnH6xx06tgPP/zQzAR15513mgDjvvvuK/G/BQCUNQGWXl0BAPATupCcrjexcuVKM9MTAOD6MI0rAAAAANsIIAAAAADYRhcmAAAAALbRAgEAAADANgIIAAAAALYRQAAAAACwjQACAAAAgG0EEAAAAABsI4AAAAAAYBsBBAAAAADbCCAAAAAA2EYAAQAAAEDs+n9DZW0pyOiRjwAAAABJRU5ErkJggg==", | |
| "text/plain": [ | |
| "<Figure size 800x500 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "\"\"\"Visualization helpers for regret curves.\"\"\"\n", | |
| "\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import seaborn as sns\n", | |
| "\n", | |
| "sns.set(style=\"whitegrid\")\n", | |
| "\n", | |
| "\n", | |
| "def plot_regret(results: Dict[str, PolicyResult]) -> None:\n", | |
| " output_dir = os.path.abspath(os.path.join(os.getcwd(), \"../pictures\"))\n", | |
| " os.makedirs(output_dir, exist_ok=True)\n", | |
| " plt.figure(figsize=(8, 5))\n", | |
| " for name, (_, regret) in results.items():\n", | |
| " plt.plot(regret, label=name)\n", | |
| " plt.xlabel(\"Timestep\")\n", | |
| " plt.ylabel(\"Cumulative regret\")\n", | |
| " plt.title(\"Exploration strategies on Bernoulli bandit\")\n", | |
| " plt.legend()\n", | |
| " plt.tight_layout()\n", | |
| " plt.savefig(os.path.join(output_dir, \"hw8_regret.png\"), dpi=300)\n", | |
| "\n", | |
| "\n", | |
| "plot_regret(results)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Saved run metadata to /Users/tahamajs/Documents/uni/DRL/homeworks/HW8_Exploration_Methods/code/run_info.json\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'commit': 'ecf9dd458561a60eb72b93133f5f4a6a2e60d0b7',\n", | |
| " 'platform': 'macOS-26.1-arm64-arm-64bit-Mach-O',\n", | |
| " 'cuda_available': False,\n", | |
| " 'device': 'cpu',\n", | |
| " 'hyperparameters': {'num_arms': 10,\n", | |
| " 'horizon': 5000,\n", | |
| " 'epsilon': 0.1,\n", | |
| " 'ucb_c': 2.0,\n", | |
| " 'alpha0': 1.0,\n", | |
| " 'beta0': 1.0,\n", | |
| " 'seed': 7,\n", | |
| " 'device': 'cpu'},\n", | |
| " 'dataset': 'Bernoulli multi-armed bandit (synthetic)'}" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "\"\"\"Persist run metadata for reproducibility (commit hash, hardware, hyperparameters).\"\"\"\n", | |
| "\n", | |
| "\n", | |
| "def git_commit_hash() -> str:\n", | |
| " try:\n", | |
| " return subprocess.check_output([\"git\", \"rev-parse\", \"HEAD\"], text=True).strip()\n", | |
| " except Exception as exc: # noqa: BLE001\n", | |
| " print(f\"Could not read git commit: {exc}\")\n", | |
| " return \"unknown\"\n", | |
| "\n", | |
| "\n", | |
| "def gather_run_info(cfg: BanditConfig) -> Dict[str, object]:\n", | |
| " return {\n", | |
| " \"commit\": git_commit_hash(),\n", | |
| " \"platform\": platform.platform(),\n", | |
| " \"cuda_available\": torch.cuda.is_available(),\n", | |
| " \"device\": cfg.device,\n", | |
| " \"hyperparameters\": asdict(cfg),\n", | |
| " \"dataset\": \"Bernoulli multi-armed bandit (synthetic)\",\n", | |
| " }\n", | |
| "\n", | |
| "\n", | |
| "def save_run_info(info: Dict[str, object], path: str = \"run_info.json\") -> None:\n", | |
| " with open(path, \"w\", encoding=\"utf-8\") as f:\n", | |
| " json.dump(info, f, indent=2)\n", | |
| " print(f\"Saved run metadata to {os.path.abspath(path)}\")\n", | |
| "\n", | |
| "\n", | |
| "run_info = gather_run_info(config)\n", | |
| "save_run_info(run_info)\n", | |
| "run_info" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Running: /Users/tahamajs/Documents/uni/DRL/.venv/bin/python /Users/tahamajs/Documents/uni/DRL/homeworks/HW8_Exploration_Methods/bandits/compare_algorithms.py --num_arms 10 --steps 5000 --runs 20 --out_dir /Users/tahamajs/Documents/uni/DRL/homeworks/HW8_Exploration_Methods/results\n", | |
| "Saved results to /Users/tahamajs/Documents/uni/DRL/homeworks/HW8_Exploration_Methods/results/bandit_results.npz\n", | |
| "Calling visualization helper...\n", | |
| "Saved plots to /Users/tahamajs/Documents/uni/DRL/homeworks/HW8_Exploration_Methods/results\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "\"\"\"Run full experiment using the comparison wrapper (external script).\"\"\"\n", | |
| "\n", | |
| "import os\n", | |
| "import sys\n", | |
| "import subprocess\n", | |
| "\n", | |
| "# Output directory for aggregated results and plots\n", | |
| "out_dir = os.path.abspath(os.path.join(os.getcwd(), \"..\", \"results\"))\n", | |
| "os.makedirs(out_dir, exist_ok=True)\n", | |
| "\n", | |
| "script = os.path.abspath(\n", | |
| " os.path.join(os.getcwd(), \"..\", \"bandits\", \"compare_algorithms.py\")\n", | |
| ")\n", | |
| "cmd = [\n", | |
| " sys.executable,\n", | |
| " script,\n", | |
| " \"--num_arms\",\n", | |
| " str(config.num_arms),\n", | |
| " \"--steps\",\n", | |
| " str(config.horizon),\n", | |
| " \"--runs\",\n", | |
| " \"20\",\n", | |
| " \"--out_dir\",\n", | |
| " out_dir,\n", | |
| "]\n", | |
| "\n", | |
| "print(\"Running:\", \" \".join(cmd))\n", | |
| "try:\n", | |
| " subprocess.check_call(cmd)\n", | |
| "except subprocess.CalledProcessError as e:\n", | |
| " print(\"Experiment failed:\", e)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": ".venv", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.13.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } | |
Xet Storage Details
- Size:
- 78.8 kB
- Xet hash:
- 4a7a87c75e9e49f427c490a42f0bce9b36bf6c1d88637f50fd640bca524fa8c0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.