commit dac6a95df8de38079ff93afc0f63d6f7513c5ca1
parent 0f49f63f85a8cea1dd80c83ca69d9ab1f329302d
Author: William Lindholm <85635561+LindholmLabs@users.noreply.github.com>
Date: Wed, 11 Dec 2024 23:08:52 +0000
Skapades med Colab
Diffstat:
1 file changed, 913 insertions(+), 0 deletions(-)
diff --git a/CS4287_Prj2_24273759_24293059_24284335.ipynb b/CS4287_Prj2_24273759_24293059_24284335.ipynb
@@ -0,0 +1,912 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "<a href=\"https://colab.research.google.com/github/LindholmLabs/Neural-Computing/blob/main/CS4287_Prj2_24273759_24293059_24284335.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Lars Jacobs (24293059)\n",
+ "William Lindholm (24273759)\n",
+ "Patrick Vorreiter (24284335)\n"
+ ],
+ "metadata": {
+ "id": "pC8VUn49vX5I"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "The code executes until the end without error."
+ ],
+ "metadata": {
+ "id": "B85XazoOvX5M"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "References:\n",
+ "\n",
+ " Inspiration taken from: Lecture P: RL – DQN and the Cartpole\n",
+ "\n",
+ " understaning of Cartpole problem: https://www.gymlibrary.dev/environments/classic_control/cart_pole/"
+ ],
+ "metadata": {
+ "id": "zHY7sojS4vsX"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Assignment 3: Deep Reinforcement Learning"
+ ],
+ "metadata": {
+ "id": "laWM2ZbBvX5N"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 1. Why Reinforcement Learning is the machine learning paradigm of choice for this task\n",
+ "\n",
+ "Reinforcement Learning (RL) is useful for sequential decision-making problems where an agent learns to achieve a goal by interacting with an environment. Unlike supervised learning, RL doesn’t rely on labeled data but uses feedback in the form of rewards. In the context of the Mountain Car problem that we are looking at in this assignment, RL is particularly suitable because::\n",
+ "-\tThe agent learns the optimal policy to move the car to the goal (the top of the mountain) by trial and error.\n",
+ "-\tRL is effective in handling the continuous state space of the car’s position and velocity."
+ ],
+ "metadata": {
+ "id": "wQPm2Et4vX5O"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 2. The Gym Environment\n",
+ "\n",
+ "The Mountain Car environment is part of OpenAI Gym’s classic control suite with the following characteristics:\n",
+ "- Goal: Drive the car up the hill on the right.\n",
+ "- State Space: 2-dimensional vector (position, velocity).\n",
+ "- Action Space: 3 discrete actions: accelerate to the left, don’t accelerate or accelerate to the right.\n",
+ "- Reward: -1 per step until the goal is reached.\n"
+ ],
+ "metadata": {
+ "id": "K_FW4DITvX5O"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "50677207-bcbc-4721-b60b-0478eb1c9f1f",
+ "id": "yxVXR0LOvX5O"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/util.py:55: DeprecationWarning: jax.xla_computation is deprecated. Please use the AOT APIs; see https://jax.readthedocs.io/en/latest/aot.html. For example, replace xla_computation(f)(*xs) with jit(f).lower(*xs).compiler_ir('hlo'). See CHANGELOG.md for 0.4.30 for more examples.\n",
+ " from jax import xla_computation as _xla_computation\n",
+ "/usr/local/lib/python3.10/dist-packages/gym/core.py:317: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n",
+ " deprecation(\n",
+ "/usr/local/lib/python3.10/dist-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n",
+ " deprecation(\n"
+ ]
+ }
+ ],
+ "source": [
+ "import gym\n",
+ "import numpy as np\n",
+ "import tensorflow as tf\n",
+ "from collections import deque\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "# Initialize the environment\n",
+ "env = gym.make('MountainCar-v0')\n",
+ "state_dim = env.observation_space.shape[0]\n",
+ "action_dim = env.action_space.n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 3. Implementation\n",
+ "### a. Capture and sampling of the data"
+ ],
+ "metadata": {
+ "id": "BUDPRxQ6vX5O"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Replay buffer for up to 50 000 experiences\n",
+ "replay_buffer = deque(maxlen=50000)"
+ ],
+ "metadata": {
+ "id": "WMbshJ-96vE7"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def sample_experiences(batch_size):\n",
+ " # Randomly select a batch of experiences from the replay buffer\n",
+ " indices = np.random.choice(len(replay_buffer), batch_size)\n",
+ " batch = [replay_buffer[index] for index in indices]\n",
+ "\n",
+ " # Unzip the batch into separate components\n",
+ " states, actions, rewards, next_states, dones = zip(*batch)\n",
+ " return (\n",
+ " np.array(states),\n",
+ " np.array(actions),\n",
+ " np.array(rewards),\n",
+ " np.array(next_states),\n",
+ " np.array(dones),\n",
+ " )"
+ ],
+ "metadata": {
+ "id": "B5iJCGZFvX5O"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### b. Network Structure\n",
+ "\n",
+ "For the DQN we use a simple feed-forward neural network to approximate Q-values for each action."
+ ],
+ "metadata": {
+ "id": "lxZB1apSvX5P"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Define the DQN model\n",
+ "model = tf.keras.Sequential([\n",
+ " tf.keras.layers.Dense(128, activation=\"relu\", input_shape=(state_dim,)),\n",
+ " tf.keras.layers.Dense(128, activation=\"relu\"),\n",
+ " tf.keras.layers.Dense(action_dim)\n",
+ "])"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "0efe95a7-4ef4-409b-a284-892f3f485c67",
+ "id": "Zul0NK8svX5P"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.10/dist-packages/keras/src/layers/core/dense.py:87: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
+ " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)\n",
+ "loss_fn = tf.keras.losses.MeanSquaredError()"
+ ],
+ "metadata": {
+ "id": "Isf4udiz5Vzw"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### c. Q-Learning Update"
+ ],
+ "metadata": {
+ "id": "OFcaK5T5vX5P"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "In Q-learning, the goal is to update the Q-values, which represent the expected cumulative rewards for taking an action in a given state. The Q-values are updated using the Bellman equation:\n",
+ "\n",
+ "$$\n",
+ "Q_{target} = r + \\gamma \\max_a Q(s', a)\n",
+ "$$\n",
+ "\n",
+ "Source: Lecture P: RL – DQN and the Cartpole slide 9\n",
+ "\n",
+ "Where $r$ is the immediate reward, $\\gamma$ is the discount factor, and $\\max_a Q(s', a)$ is the maximum Q-value for the next state.\n",
+ "\n",
+ "First, the model predicts the Q-values for the current state. The target Q-values are computed using the Bellman equation, where we add the immediate reward and the discounted maximum future Q-value from the next state. The loss is the difference between the predicted Q-values and the target Q-values, that we are calculating using the Mean Squared Error. This measures how far off the predictions are from the targets. The models weights are updated by minimizing this loss using gradient descent, which allows the agent to adjust its policy and improve over time."
+ ],
+ "metadata": {
+ "id": "SwVr5QOkF5he"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "discount_factor = 0.95"
+ ],
+ "metadata": {
+ "id": "9F1u69bw5hpS"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def training_step(batch_size):\n",
+ " # Sample a batch of experiences from the replay buffer\n",
+ " states, actions, rewards, next_states, dones = sample_experiences(batch_size)\n",
+ "\n",
+ " # Get Q-values for the next states and compute the maximum Q-values\n",
+ " next_Q_values = model.predict(next_states, verbose=0)\n",
+ " max_next_Q_values = np.max(next_Q_values, axis=1)\n",
+ "\n",
+ " # Calculate the target Q-values using the Bellman equation (explained in 3.C)\n",
+ " target_Q_values = rewards + (1 - dones) * discount_factor * max_next_Q_values\n",
+ " target_Q_values = target_Q_values.reshape(-1, 1)\n",
+ "\n",
+ " # Create a mask for the selected actions\n",
+ " mask = tf.one_hot(actions, action_dim)\n",
+ "\n",
+ " # Compute gradients and apply updates to the model\n",
+ " with tf.GradientTape() as tape:\n",
+ " all_Q_values = model(states)\n",
+ " Q_values = tf.reduce_sum(all_Q_values * mask, axis=1, keepdims=True)\n",
+ " loss = loss_fn(target_Q_values, Q_values)\n",
+ "\n",
+ " grads = tape.gradient(loss, model.trainable_variables)\n",
+ " optimizer.apply_gradients(zip(grads, model.trainable_variables))"
+ ],
+ "metadata": {
+ "id": "UDg8rxyWvX5P"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Epsilon-greedy policy\n",
+ "def epsilon_greedy_policy(state, epsilon):\n",
+ " # Explore: take a random action with probability epsilon\n",
+ " if np.random.rand() < epsilon:\n",
+ " return np.random.randint(action_dim)\n",
+ " # Exploit: choose the best action based on the model’s Q-values\n",
+ " else:\n",
+ " Q_values = model.predict(state[np.newaxis], verbose=0)\n",
+ " return np.argmax(Q_values[0])"
+ ],
+ "metadata": {
+ "id": "vsfpJoWSvX5P"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### d. Advanced concepts\n"
+ ],
+ "metadata": {
+ "id": "QApYeIjbvX5P"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Random Seed Initialization**\n",
+ "\n",
+ "Random seed initialization ensures that the results of a model can be reproduced. By setting a fixed seed for NumPy and TensorFlow, we can ensure that random processes will always produce the same results.\n",
+ "\n",
+ "**Catastrophic Forgetting**\n",
+ "\n",
+ "One of the main hurdles we had to overcome was that our RL agent suffered from catastrophic forgetting during training, it would get a good result for a number of episodes, revert back to a poor policy, and keep doing that for hundreds of episodes, see graph below. Sometimes it would take it almost 100 episodes to regain the lost performance. See the sudden drop just after episode 50 in the graph below. We managed to mitigate this problem by decreasing the learning rate significantly, after noticing it was too high, which led to wild \"mood swings\" in the agent. We also tried implementing a dropout, since we hypothesised that it could help the neural network rely less on specific neurons thus improving performance, but we did not find any positive impact from this.\n",
+ "\n",
+ "**Discount factor**\n",
+ "\n",
+ "We chose a relatively high discount factor of 0.95, since we wanted our RL agent to not be short sighted.\n",
+ "\n",
+ "**learning rate schedule**\n",
+ "\n",
+ "We chose to implement a learning rate schedule as it is something which we noticed improved performance in our previous project, and we think having a \"wild\" exploratory phase would be beneficial for adjusting quickly in the beginning, when all the weights are random and untrained.\n",
+ "\n",
+ "**epsilon decay**\n",
+ "In the beginning we wanted the agent to explore as much as possible, so that it could stumle upon moves which would land it a better reward. But after finding such a scenario, we also wanted it to remember it, so that it does not forget its training, which we had quite a lot of issues with in the beginning. Therefore we decided on a relatively high epsilon value of 0.1, which allows the agent to explore. Then we gradually lower it over the next 225 episodes down to 0.010. Allowing it to instead exploit.\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "eX842iCZNuo9"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ ""
+ ],
+ "metadata": {
+ "id": "WCqtY2Fqzcec"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "np.random.seed(42)\n",
+ "tf.random.set_seed(42)"
+ ],
+ "metadata": {
+ "id": "VmZDH5s95kmk"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 4. Results"
+ ],
+ "metadata": {
+ "id": "gi6NrA4xvX5P"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "episodes = 300\n",
+ "max_steps = 200\n",
+ "epsilon = 0.1\n",
+ "epsilon_decay = 0.990\n",
+ "epsilon_min = 0.01\n",
+ "rewards_history = []\n",
+ "best_score = 0\n",
+ "best_weights = None"
+ ],
+ "metadata": {
+ "id": "3RTBTfRY5nzC"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Training Loop\n",
+ "for episode in range(episodes):\n",
+ " # Reset environment at the start of each episode\n",
+ " state = env.reset()\n",
+ " # Initialize total reward for the episode\n",
+ " total_reward = 0\n",
+ "\n",
+ " for step in range(max_steps):\n",
+ " # Choose action using epsilon-greedy policy\n",
+ " action = epsilon_greedy_policy(state, epsilon)\n",
+ " next_state, reward, done, _ = env.step(action)\n",
+ "\n",
+ " # Store the experience in the replay buffer\n",
+ " replay_buffer.append((state, action, reward, next_state, done))\n",
+ " state = next_state\n",
+ " total_reward += reward\n",
+ "\n",
+ " # Exit loop if the episode is finished\n",
+ " if done:\n",
+ " break\n",
+ "\n",
+ " # Perform one training step\n",
+ " training_step(batch_size=32)\n",
+ "\n",
+ " # Check if this episode's reward is better than the previous best\n",
+ " if total_reward > best_score:\n",
+ " best_weights = model.get_weights()\n",
+ " best_score = total_reward\n",
+ "\n",
+ " # Adjust learning rate based on progress\n",
+ " if episode == 100: # lower learning rate after 100 episodes\n",
+ " optimizer = tf.keras.optimizers.Adam(learning_rate=0.005)\n",
+ " elif episode == 200: # lower it again after 200 episodes\n",
+ " optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)\n",
+ "\n",
+ " print(f\"Episode {episode + 1}/{episodes}, Steps: {step + 1}, Reward: {total_reward}, Epsilon: {epsilon:.3f}\")\n",
+ "\n",
+ " # Decay epsilon to reduce exploration over time\n",
+ " epsilon = max(epsilon * epsilon_decay, epsilon_min)\n",
+ "\n",
+ " # Store total reward for the episode\n",
+ " rewards_history.append(total_reward)\n",
+ "\n",
+ "# After all episodes, set the model to the best weights\n",
+ "if best_weights is not None:\n",
+ " model.set_weights(best_weights)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c943f300-c270-4518-bd66-ecfa2a728334",
+ "id": "Sr4hL-Q4vX5P"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.10/dist-packages/gym/utils/passive_env_checker.py:241: DeprecationWarning: `np.bool8` is a deprecated alias for `np.bool_`. (Deprecated NumPy 1.24)\n",
+ " if not isinstance(terminated, (bool, np.bool8)):\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Episode 1/300, Steps: 200, Reward: -200.0, Epsilon: 0.100\n",
+ "Episode 2/300, Steps: 200, Reward: -200.0, Epsilon: 0.099\n",
+ "Episode 3/300, Steps: 200, Reward: -200.0, Epsilon: 0.098\n",
+ "Episode 4/300, Steps: 200, Reward: -200.0, Epsilon: 0.097\n",
+ "Episode 5/300, Steps: 200, Reward: -200.0, Epsilon: 0.096\n",
+ "Episode 6/300, Steps: 200, Reward: -200.0, Epsilon: 0.095\n",
+ "Episode 7/300, Steps: 200, Reward: -200.0, Epsilon: 0.094\n",
+ "Episode 8/300, Steps: 200, Reward: -200.0, Epsilon: 0.093\n",
+ "Episode 9/300, Steps: 200, Reward: -200.0, Epsilon: 0.092\n",
+ "Episode 10/300, Steps: 200, Reward: -200.0, Epsilon: 0.091\n",
+ "Episode 11/300, Steps: 200, Reward: -200.0, Epsilon: 0.090\n",
+ "Episode 12/300, Steps: 200, Reward: -200.0, Epsilon: 0.090\n",
+ "Episode 13/300, Steps: 200, Reward: -200.0, Epsilon: 0.089\n",
+ "Episode 14/300, Steps: 200, Reward: -200.0, Epsilon: 0.088\n",
+ "Episode 15/300, Steps: 200, Reward: -200.0, Epsilon: 0.087\n",
+ "Episode 16/300, Steps: 200, Reward: -200.0, Epsilon: 0.086\n",
+ "Episode 17/300, Steps: 200, Reward: -200.0, Epsilon: 0.085\n",
+ "Episode 18/300, Steps: 200, Reward: -200.0, Epsilon: 0.084\n",
+ "Episode 19/300, Steps: 200, Reward: -200.0, Epsilon: 0.083\n",
+ "Episode 20/300, Steps: 200, Reward: -200.0, Epsilon: 0.083\n",
+ "Episode 21/300, Steps: 200, Reward: -200.0, Epsilon: 0.082\n",
+ "Episode 22/300, Steps: 200, Reward: -200.0, Epsilon: 0.081\n",
+ "Episode 23/300, Steps: 200, Reward: -200.0, Epsilon: 0.080\n",
+ "Episode 24/300, Steps: 200, Reward: -200.0, Epsilon: 0.079\n",
+ "Episode 25/300, Steps: 200, Reward: -200.0, Epsilon: 0.079\n",
+ "Episode 26/300, Steps: 200, Reward: -200.0, Epsilon: 0.078\n",
+ "Episode 27/300, Steps: 200, Reward: -200.0, Epsilon: 0.077\n",
+ "Episode 28/300, Steps: 200, Reward: -200.0, Epsilon: 0.076\n",
+ "Episode 29/300, Steps: 200, Reward: -200.0, Epsilon: 0.075\n",
+ "Episode 30/300, Steps: 200, Reward: -200.0, Epsilon: 0.075\n",
+ "Episode 31/300, Steps: 200, Reward: -200.0, Epsilon: 0.074\n",
+ "Episode 32/300, Steps: 200, Reward: -200.0, Epsilon: 0.073\n",
+ "Episode 33/300, Steps: 200, Reward: -200.0, Epsilon: 0.072\n",
+ "Episode 34/300, Steps: 200, Reward: -200.0, Epsilon: 0.072\n",
+ "Episode 35/300, Steps: 200, Reward: -200.0, Epsilon: 0.071\n",
+ "Episode 36/300, Steps: 200, Reward: -200.0, Epsilon: 0.070\n",
+ "Episode 37/300, Steps: 200, Reward: -200.0, Epsilon: 0.070\n",
+ "Episode 38/300, Steps: 200, Reward: -200.0, Epsilon: 0.069\n",
+ "Episode 39/300, Steps: 200, Reward: -200.0, Epsilon: 0.068\n",
+ "Episode 40/300, Steps: 200, Reward: -200.0, Epsilon: 0.068\n",
+ "Episode 41/300, Steps: 200, Reward: -200.0, Epsilon: 0.067\n",
+ "Episode 42/300, Steps: 200, Reward: -200.0, Epsilon: 0.066\n",
+ "Episode 43/300, Steps: 200, Reward: -200.0, Epsilon: 0.066\n",
+ "Episode 44/300, Steps: 200, Reward: -200.0, Epsilon: 0.065\n",
+ "Episode 45/300, Steps: 200, Reward: -200.0, Epsilon: 0.064\n",
+ "Episode 46/300, Steps: 200, Reward: -200.0, Epsilon: 0.064\n",
+ "Episode 47/300, Steps: 200, Reward: -200.0, Epsilon: 0.063\n",
+ "Episode 48/300, Steps: 200, Reward: -200.0, Epsilon: 0.062\n",
+ "Episode 49/300, Steps: 200, Reward: -200.0, Epsilon: 0.062\n",
+ "Episode 50/300, Steps: 200, Reward: -200.0, Epsilon: 0.061\n",
+ "Episode 51/300, Steps: 200, Reward: -200.0, Epsilon: 0.061\n",
+ "Episode 52/300, Steps: 200, Reward: -200.0, Epsilon: 0.060\n",
+ "Episode 53/300, Steps: 200, Reward: -200.0, Epsilon: 0.059\n",
+ "Episode 54/300, Steps: 200, Reward: -200.0, Epsilon: 0.059\n",
+ "Episode 55/300, Steps: 200, Reward: -200.0, Epsilon: 0.058\n",
+ "Episode 56/300, Steps: 200, Reward: -200.0, Epsilon: 0.058\n",
+ "Episode 57/300, Steps: 200, Reward: -200.0, Epsilon: 0.057\n",
+ "Episode 58/300, Steps: 200, Reward: -200.0, Epsilon: 0.056\n",
+ "Episode 59/300, Steps: 200, Reward: -200.0, Epsilon: 0.056\n",
+ "Episode 60/300, Steps: 200, Reward: -200.0, Epsilon: 0.055\n",
+ "Episode 61/300, Steps: 200, Reward: -200.0, Epsilon: 0.055\n",
+ "Episode 62/300, Steps: 200, Reward: -200.0, Epsilon: 0.054\n",
+ "Episode 63/300, Steps: 200, Reward: -200.0, Epsilon: 0.054\n",
+ "Episode 64/300, Steps: 200, Reward: -200.0, Epsilon: 0.053\n",
+ "Episode 65/300, Steps: 200, Reward: -200.0, Epsilon: 0.053\n",
+ "Episode 66/300, Steps: 200, Reward: -200.0, Epsilon: 0.052\n",
+ "Episode 67/300, Steps: 200, Reward: -200.0, Epsilon: 0.052\n",
+ "Episode 68/300, Steps: 200, Reward: -200.0, Epsilon: 0.051\n",
+ "Episode 69/300, Steps: 200, Reward: -200.0, Epsilon: 0.050\n",
+ "Episode 70/300, Steps: 200, Reward: -200.0, Epsilon: 0.050\n",
+ "Episode 71/300, Steps: 200, Reward: -200.0, Epsilon: 0.049\n",
+ "Episode 72/300, Steps: 200, Reward: -200.0, Epsilon: 0.049\n",
+ "Episode 73/300, Steps: 200, Reward: -200.0, Epsilon: 0.048\n",
+ "Episode 74/300, Steps: 200, Reward: -200.0, Epsilon: 0.048\n",
+ "Episode 75/300, Steps: 200, Reward: -200.0, Epsilon: 0.048\n",
+ "Episode 76/300, Steps: 200, Reward: -200.0, Epsilon: 0.047\n",
+ "Episode 77/300, Steps: 200, Reward: -200.0, Epsilon: 0.047\n",
+ "Episode 78/300, Steps: 200, Reward: -200.0, Epsilon: 0.046\n",
+ "Episode 79/300, Steps: 200, Reward: -200.0, Epsilon: 0.046\n",
+ "Episode 80/300, Steps: 200, Reward: -200.0, Epsilon: 0.045\n",
+ "Episode 81/300, Steps: 200, Reward: -200.0, Epsilon: 0.045\n",
+ "Episode 82/300, Steps: 200, Reward: -200.0, Epsilon: 0.044\n",
+ "Episode 83/300, Steps: 200, Reward: -200.0, Epsilon: 0.044\n",
+ "Episode 84/300, Steps: 200, Reward: -200.0, Epsilon: 0.043\n",
+ "Episode 85/300, Steps: 200, Reward: -200.0, Epsilon: 0.043\n",
+ "Episode 86/300, Steps: 200, Reward: -200.0, Epsilon: 0.043\n",
+ "Episode 87/300, Steps: 200, Reward: -200.0, Epsilon: 0.042\n",
+ "Episode 88/300, Steps: 200, Reward: -200.0, Epsilon: 0.042\n",
+ "Episode 89/300, Steps: 200, Reward: -200.0, Epsilon: 0.041\n",
+ "Episode 90/300, Steps: 200, Reward: -200.0, Epsilon: 0.041\n",
+ "Episode 91/300, Steps: 200, Reward: -200.0, Epsilon: 0.040\n",
+ "Episode 92/300, Steps: 200, Reward: -200.0, Epsilon: 0.040\n",
+ "Episode 93/300, Steps: 200, Reward: -200.0, Epsilon: 0.040\n",
+ "Episode 94/300, Steps: 200, Reward: -200.0, Epsilon: 0.039\n",
+ "Episode 95/300, Steps: 200, Reward: -200.0, Epsilon: 0.039\n",
+ "Episode 96/300, Steps: 200, Reward: -200.0, Epsilon: 0.038\n",
+ "Episode 97/300, Steps: 200, Reward: -200.0, Epsilon: 0.038\n",
+ "Episode 98/300, Steps: 200, Reward: -200.0, Epsilon: 0.038\n",
+ "Episode 99/300, Steps: 200, Reward: -200.0, Epsilon: 0.037\n",
+ "Episode 100/300, Steps: 200, Reward: -200.0, Epsilon: 0.037\n",
+ "Episode 101/300, Steps: 200, Reward: -200.0, Epsilon: 0.037\n",
+ "Episode 102/300, Steps: 200, Reward: -200.0, Epsilon: 0.036\n",
+ "Episode 103/300, Steps: 200, Reward: -200.0, Epsilon: 0.036\n",
+ "Episode 104/300, Steps: 200, Reward: -200.0, Epsilon: 0.036\n",
+ "Episode 105/300, Steps: 200, Reward: -200.0, Epsilon: 0.035\n",
+ "Episode 106/300, Steps: 200, Reward: -200.0, Epsilon: 0.035\n",
+ "Episode 107/300, Steps: 200, Reward: -200.0, Epsilon: 0.034\n",
+ "Episode 108/300, Steps: 200, Reward: -200.0, Epsilon: 0.034\n",
+ "Episode 109/300, Steps: 151, Reward: -151.0, Epsilon: 0.034\n",
+ "Episode 110/300, Steps: 200, Reward: -200.0, Epsilon: 0.033\n",
+ "Episode 111/300, Steps: 200, Reward: -200.0, Epsilon: 0.033\n",
+ "Episode 112/300, Steps: 200, Reward: -200.0, Epsilon: 0.033\n",
+ "Episode 113/300, Steps: 200, Reward: -200.0, Epsilon: 0.032\n",
+ "Episode 114/300, Steps: 200, Reward: -200.0, Epsilon: 0.032\n",
+ "Episode 115/300, Steps: 200, Reward: -200.0, Epsilon: 0.032\n",
+ "Episode 116/300, Steps: 200, Reward: -200.0, Epsilon: 0.031\n",
+ "Episode 117/300, Steps: 200, Reward: -200.0, Epsilon: 0.031\n",
+ "Episode 118/300, Steps: 200, Reward: -200.0, Epsilon: 0.031\n",
+ "Episode 119/300, Steps: 200, Reward: -200.0, Epsilon: 0.031\n",
+ "Episode 120/300, Steps: 200, Reward: -200.0, Epsilon: 0.030\n",
+ "Episode 121/300, Steps: 200, Reward: -200.0, Epsilon: 0.030\n",
+ "Episode 122/300, Steps: 200, Reward: -200.0, Epsilon: 0.030\n",
+ "Episode 123/300, Steps: 186, Reward: -186.0, Epsilon: 0.029\n",
+ "Episode 124/300, Steps: 200, Reward: -200.0, Epsilon: 0.029\n",
+ "Episode 125/300, Steps: 200, Reward: -200.0, Epsilon: 0.029\n",
+ "Episode 126/300, Steps: 147, Reward: -147.0, Epsilon: 0.028\n",
+ "Episode 127/300, Steps: 143, Reward: -143.0, Epsilon: 0.028\n",
+ "Episode 128/300, Steps: 200, Reward: -200.0, Epsilon: 0.028\n",
+ "Episode 129/300, Steps: 200, Reward: -200.0, Epsilon: 0.028\n",
+ "Episode 130/300, Steps: 200, Reward: -200.0, Epsilon: 0.027\n",
+ "Episode 131/300, Steps: 200, Reward: -200.0, Epsilon: 0.027\n",
+ "Episode 132/300, Steps: 200, Reward: -200.0, Epsilon: 0.027\n",
+ "Episode 133/300, Steps: 200, Reward: -200.0, Epsilon: 0.027\n",
+ "Episode 134/300, Steps: 200, Reward: -200.0, Epsilon: 0.026\n",
+ "Episode 135/300, Steps: 200, Reward: -200.0, Epsilon: 0.026\n",
+ "Episode 136/300, Steps: 200, Reward: -200.0, Epsilon: 0.026\n",
+ "Episode 137/300, Steps: 200, Reward: -200.0, Epsilon: 0.025\n",
+ "Episode 138/300, Steps: 200, Reward: -200.0, Epsilon: 0.025\n",
+ "Episode 139/300, Steps: 200, Reward: -200.0, Epsilon: 0.025\n",
+ "Episode 140/300, Steps: 128, Reward: -128.0, Epsilon: 0.025\n",
+ "Episode 141/300, Steps: 200, Reward: -200.0, Epsilon: 0.024\n",
+ "Episode 142/300, Steps: 200, Reward: -200.0, Epsilon: 0.024\n",
+ "Episode 143/300, Steps: 200, Reward: -200.0, Epsilon: 0.024\n",
+ "Episode 144/300, Steps: 200, Reward: -200.0, Epsilon: 0.024\n",
+ "Episode 145/300, Steps: 200, Reward: -200.0, Epsilon: 0.024\n",
+ "Episode 146/300, Steps: 200, Reward: -200.0, Epsilon: 0.023\n",
+ "Episode 147/300, Steps: 200, Reward: -200.0, Epsilon: 0.023\n",
+ "Episode 148/300, Steps: 200, Reward: -200.0, Epsilon: 0.023\n",
+ "Episode 149/300, Steps: 200, Reward: -200.0, Epsilon: 0.023\n",
+ "Episode 150/300, Steps: 200, Reward: -200.0, Epsilon: 0.022\n",
+ "Episode 151/300, Steps: 200, Reward: -200.0, Epsilon: 0.022\n",
+ "Episode 152/300, Steps: 200, Reward: -200.0, Epsilon: 0.022\n",
+ "Episode 153/300, Steps: 192, Reward: -192.0, Epsilon: 0.022\n",
+ "Episode 154/300, Steps: 200, Reward: -200.0, Epsilon: 0.021\n",
+ "Episode 155/300, Steps: 175, Reward: -175.0, Epsilon: 0.021\n",
+ "Episode 156/300, Steps: 187, Reward: -187.0, Epsilon: 0.021\n",
+ "Episode 157/300, Steps: 200, Reward: -200.0, Epsilon: 0.021\n",
+ "Episode 158/300, Steps: 200, Reward: -200.0, Epsilon: 0.021\n",
+ "Episode 159/300, Steps: 118, Reward: -118.0, Epsilon: 0.020\n",
+ "Episode 160/300, Steps: 200, Reward: -200.0, Epsilon: 0.020\n",
+ "Episode 161/300, Steps: 200, Reward: -200.0, Epsilon: 0.020\n",
+ "Episode 162/300, Steps: 106, Reward: -106.0, Epsilon: 0.020\n",
+ "Episode 163/300, Steps: 200, Reward: -200.0, Epsilon: 0.020\n",
+ "Episode 164/300, Steps: 200, Reward: -200.0, Epsilon: 0.019\n",
+ "Episode 165/300, Steps: 125, Reward: -125.0, Epsilon: 0.019\n",
+ "Episode 166/300, Steps: 200, Reward: -200.0, Epsilon: 0.019\n",
+ "Episode 167/300, Steps: 200, Reward: -200.0, Epsilon: 0.019\n",
+ "Episode 168/300, Steps: 200, Reward: -200.0, Epsilon: 0.019\n",
+ "Episode 169/300, Steps: 157, Reward: -157.0, Epsilon: 0.018\n",
+ "Episode 170/300, Steps: 200, Reward: -200.0, Epsilon: 0.018\n",
+ "Episode 171/300, Steps: 116, Reward: -116.0, Epsilon: 0.018\n",
+ "Episode 172/300, Steps: 175, Reward: -175.0, Epsilon: 0.018\n",
+ "Episode 173/300, Steps: 200, Reward: -200.0, Epsilon: 0.018\n",
+ "Episode 174/300, Steps: 178, Reward: -178.0, Epsilon: 0.018\n",
+ "Episode 175/300, Steps: 200, Reward: -200.0, Epsilon: 0.017\n",
+ "Episode 176/300, Steps: 154, Reward: -154.0, Epsilon: 0.017\n",
+ "Episode 177/300, Steps: 185, Reward: -185.0, Epsilon: 0.017\n",
+ "Episode 178/300, Steps: 129, Reward: -129.0, Epsilon: 0.017\n",
+ "Episode 179/300, Steps: 200, Reward: -200.0, Epsilon: 0.017\n",
+ "Episode 180/300, Steps: 200, Reward: -200.0, Epsilon: 0.017\n",
+ "Episode 181/300, Steps: 164, Reward: -164.0, Epsilon: 0.016\n",
+ "Episode 182/300, Steps: 200, Reward: -200.0, Epsilon: 0.016\n",
+ "Episode 183/300, Steps: 200, Reward: -200.0, Epsilon: 0.016\n",
+ "Episode 184/300, Steps: 149, Reward: -149.0, Epsilon: 0.016\n",
+ "Episode 185/300, Steps: 178, Reward: -178.0, Epsilon: 0.016\n",
+ "Episode 186/300, Steps: 190, Reward: -190.0, Epsilon: 0.016\n",
+ "Episode 187/300, Steps: 200, Reward: -200.0, Epsilon: 0.015\n",
+ "Episode 188/300, Steps: 149, Reward: -149.0, Epsilon: 0.015\n",
+ "Episode 189/300, Steps: 169, Reward: -169.0, Epsilon: 0.015\n",
+ "Episode 190/300, Steps: 142, Reward: -142.0, Epsilon: 0.015\n",
+ "Episode 191/300, Steps: 200, Reward: -200.0, Epsilon: 0.015\n",
+ "Episode 192/300, Steps: 200, Reward: -200.0, Epsilon: 0.015\n",
+ "Episode 193/300, Steps: 200, Reward: -200.0, Epsilon: 0.015\n",
+ "Episode 194/300, Steps: 104, Reward: -104.0, Epsilon: 0.014\n",
+ "Episode 195/300, Steps: 200, Reward: -200.0, Epsilon: 0.014\n",
+ "Episode 196/300, Steps: 95, Reward: -95.0, Epsilon: 0.014\n",
+ "Episode 197/300, Steps: 200, Reward: -200.0, Epsilon: 0.014\n",
+ "Episode 198/300, Steps: 148, Reward: -148.0, Epsilon: 0.014\n",
+ "Episode 199/300, Steps: 143, Reward: -143.0, Epsilon: 0.014\n",
+ "Episode 200/300, Steps: 200, Reward: -200.0, Epsilon: 0.014\n",
+ "Episode 201/300, Steps: 200, Reward: -200.0, Epsilon: 0.013\n",
+ "Episode 202/300, Steps: 107, Reward: -107.0, Epsilon: 0.013\n",
+ "Episode 203/300, Steps: 197, Reward: -197.0, Epsilon: 0.013\n",
+ "Episode 204/300, Steps: 200, Reward: -200.0, Epsilon: 0.013\n",
+ "Episode 205/300, Steps: 200, Reward: -200.0, Epsilon: 0.013\n",
+ "Episode 206/300, Steps: 200, Reward: -200.0, Epsilon: 0.013\n",
+ "Episode 207/300, Steps: 138, Reward: -138.0, Epsilon: 0.013\n",
+ "Episode 208/300, Steps: 200, Reward: -200.0, Epsilon: 0.012\n",
+ "Episode 209/300, Steps: 200, Reward: -200.0, Epsilon: 0.012\n",
+ "Episode 210/300, Steps: 200, Reward: -200.0, Epsilon: 0.012\n",
+ "Episode 211/300, Steps: 161, Reward: -161.0, Epsilon: 0.012\n",
+ "Episode 212/300, Steps: 137, Reward: -137.0, Epsilon: 0.012\n",
+ "Episode 213/300, Steps: 194, Reward: -194.0, Epsilon: 0.012\n",
+ "Episode 214/300, Steps: 200, Reward: -200.0, Epsilon: 0.012\n",
+ "Episode 215/300, Steps: 200, Reward: -200.0, Epsilon: 0.012\n",
+ "Episode 216/300, Steps: 200, Reward: -200.0, Epsilon: 0.012\n",
+ "Episode 217/300, Steps: 200, Reward: -200.0, Epsilon: 0.011\n",
+ "Episode 218/300, Steps: 182, Reward: -182.0, Epsilon: 0.011\n",
+ "Episode 219/300, Steps: 200, Reward: -200.0, Epsilon: 0.011\n",
+ "Episode 220/300, Steps: 168, Reward: -168.0, Epsilon: 0.011\n",
+ "Episode 221/300, Steps: 200, Reward: -200.0, Epsilon: 0.011\n",
+ "Episode 222/300, Steps: 142, Reward: -142.0, Epsilon: 0.011\n",
+ "Episode 223/300, Steps: 200, Reward: -200.0, Epsilon: 0.011\n",
+ "Episode 224/300, Steps: 200, Reward: -200.0, Epsilon: 0.011\n",
+ "Episode 225/300, Steps: 200, Reward: -200.0, Epsilon: 0.011\n",
+ "Episode 226/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 227/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 228/300, Steps: 173, Reward: -173.0, Epsilon: 0.010\n",
+ "Episode 229/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 230/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 231/300, Steps: 131, Reward: -131.0, Epsilon: 0.010\n",
+ "Episode 232/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 233/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 234/300, Steps: 181, Reward: -181.0, Epsilon: 0.010\n",
+ "Episode 235/300, Steps: 120, Reward: -120.0, Epsilon: 0.010\n",
+ "Episode 236/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 237/300, Steps: 151, Reward: -151.0, Epsilon: 0.010\n",
+ "Episode 238/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 239/300, Steps: 172, Reward: -172.0, Epsilon: 0.010\n",
+ "Episode 240/300, Steps: 156, Reward: -156.0, Epsilon: 0.010\n",
+ "Episode 241/300, Steps: 112, Reward: -112.0, Epsilon: 0.010\n",
+ "Episode 242/300, Steps: 180, Reward: -180.0, Epsilon: 0.010\n",
+ "Episode 243/300, Steps: 175, Reward: -175.0, Epsilon: 0.010\n",
+ "Episode 244/300, Steps: 195, Reward: -195.0, Epsilon: 0.010\n",
+ "Episode 245/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 246/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 247/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 248/300, Steps: 117, Reward: -117.0, Epsilon: 0.010\n",
+ "Episode 249/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 250/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 251/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 252/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 253/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 254/300, Steps: 163, Reward: -163.0, Epsilon: 0.010\n",
+ "Episode 255/300, Steps: 145, Reward: -145.0, Epsilon: 0.010\n",
+ "Episode 256/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 257/300, Steps: 141, Reward: -141.0, Epsilon: 0.010\n",
+ "Episode 258/300, Steps: 160, Reward: -160.0, Epsilon: 0.010\n",
+ "Episode 259/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 260/300, Steps: 107, Reward: -107.0, Epsilon: 0.010\n",
+ "Episode 261/300, Steps: 175, Reward: -175.0, Epsilon: 0.010\n",
+ "Episode 262/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 263/300, Steps: 171, Reward: -171.0, Epsilon: 0.010\n",
+ "Episode 264/300, Steps: 180, Reward: -180.0, Epsilon: 0.010\n",
+ "Episode 265/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 266/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 267/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 268/300, Steps: 121, Reward: -121.0, Epsilon: 0.010\n",
+ "Episode 269/300, Steps: 191, Reward: -191.0, Epsilon: 0.010\n",
+ "Episode 270/300, Steps: 153, Reward: -153.0, Epsilon: 0.010\n",
+ "Episode 271/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 272/300, Steps: 190, Reward: -190.0, Epsilon: 0.010\n",
+ "Episode 273/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 274/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 275/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 276/300, Steps: 174, Reward: -174.0, Epsilon: 0.010\n",
+ "Episode 277/300, Steps: 120, Reward: -120.0, Epsilon: 0.010\n",
+ "Episode 278/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 279/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 280/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 281/300, Steps: 180, Reward: -180.0, Epsilon: 0.010\n",
+ "Episode 282/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 283/300, Steps: 160, Reward: -160.0, Epsilon: 0.010\n",
+ "Episode 284/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 285/300, Steps: 187, Reward: -187.0, Epsilon: 0.010\n",
+ "Episode 286/300, Steps: 153, Reward: -153.0, Epsilon: 0.010\n",
+ "Episode 287/300, Steps: 150, Reward: -150.0, Epsilon: 0.010\n",
+ "Episode 288/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 289/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 290/300, Steps: 166, Reward: -166.0, Epsilon: 0.010\n",
+ "Episode 291/300, Steps: 125, Reward: -125.0, Epsilon: 0.010\n",
+ "Episode 292/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 293/300, Steps: 197, Reward: -197.0, Epsilon: 0.010\n",
+ "Episode 294/300, Steps: 140, Reward: -140.0, Epsilon: 0.010\n",
+ "Episode 295/300, Steps: 179, Reward: -179.0, Epsilon: 0.010\n",
+ "Episode 296/300, Steps: 116, Reward: -116.0, Epsilon: 0.010\n",
+ "Episode 297/300, Steps: 159, Reward: -159.0, Epsilon: 0.010\n",
+ "Episode 298/300, Steps: 200, Reward: -200.0, Epsilon: 0.010\n",
+ "Episode 299/300, Steps: 172, Reward: -172.0, Epsilon: 0.010\n",
+ "Episode 300/300, Steps: 193, Reward: -193.0, Epsilon: 0.010\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Plot rewards\n",
+ "plt.plot(rewards_history)\n",
+ "plt.xlabel(\"Episodes\")\n",
+ "plt.ylabel(\"Total Reward\")\n",
+ "plt.title(\"Training Performance\")\n",
+ "plt.grid(True)\n",
+ "plt.show()"
+ ],
+ "metadata": {
+ "id": "Yvzo3iueyISN",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 472
+ },
+ "outputId": "c9564650-c4a6-4ccd-bd4c-10eb035421a6"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "<Figure size 640x480 with 1 Axes>"
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAHHCAYAAAC1G/yyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADWHUlEQVR4nOy9eZwU1bn//6nq7plh2MVhMaCCKy64J8FEQSNgxpvEe/P13mz3J5HEq1/9xjW5Gg0uiTFq1JhNzc2CMcao0ZhrRAWjqCiugAuLiggo+z4Ds/RWvz+qT9VZa+mu7ukZnvfrBd1dyzmnTtX0efpZLcdxHBAEQRAEQRAAALunB0AQBEEQBFFPkHBEEARBEATBQcIRQRAEQRAEBwlHBEEQBEEQHCQcEQRBEARBcJBwRBAEQRAEwUHCEUEQBEEQBAcJRwRBEARBEBwkHBEEQRAEQXCQcEQQhJbp06dj//33L+vca6+9FpZlJTugOmTXrl341re+hZEjR8KyLFx88cU9PSSCIBKAhCOC6GVYlhXp37x583p6qD3C9OnThXkYNGgQjjrqKNx6663o7u5OtK8f//jHmDVrFs4//3zce++9+M///M9E2ycIomewqLYaQfQu/vSnPwmf//jHP2Lu3Lm49957he1TpkzBiBEjyu4nl8uhWCyisbEx9rn5fB75fB5NTU1l918u06dPx1/+8hf89re/BQDs2LEDDz/8MObNm4f/+I//wF/+8pfE+vr0pz+NdDqN+fPnJ9YmQRA9DwlHBNHLufDCC/GrX/0KYX/KHR0daG5urtGoeo7p06fjr3/9K3bt2uVtKxaL+NSnPoXXX38da9euxT777FN2+8ViEdlsFk1NTRg3bhwOO+ww/OMf/0hi6Mjn8ygWi2hoaEikPYIgyoPMagTRB5k8eTKOOOIIvPHGGzj55JPR3NyM73//+wCAv//97zjjjDOwzz77oLGxEQcccAB++MMfolAoCG3IPkerVq2CZVn46U9/it/85jc44IAD0NjYiBNOOAGvvfaacK7O58iyLFx44YV49NFHccQRR6CxsRGHH344nnzySWX88+bNw/HHH4+mpiYccMABuPvuuyvyY7JtG5MnT/auAwC6u7txzTXX4MADD0RjYyPGjBmD733ve4rpjY37vvvuw+GHH47GxkY8+eSTsCwLH374IR5//HHPhMfa3rRpE2bMmIERI0agqakJRx11FO655x6hXX4+f/azn3nzuXTpUu9a33vvPXzjG9/A4MGD0dLSgh/84AdwHAcfffQRvvSlL2HQoEEYOXIkbr31VqHtbDaLmTNn4rjjjsPgwYPRv39/nHTSSXj22WeNYwi7pwCwfPly/Pu//ztaWlrQr18/HHLIIbjqqquEY9auXYtzzjkHI0aM8O7x73//+7i3jCB6lHRPD4AgiOqwdetWfP7zn8dXvvIVfOMb3/BMbLNmzcKAAQNw6aWXYsCAAXjmmWcwc+ZMtLW14ZZbbglt989//jPa29vxX//1X7AsCzfffDP+7d/+DStXrkQmkwk8d/78+XjkkUfwf//v/8XAgQPx85//HF/+8pexZs0aDBs2DACwaNEinH766Rg1ahSuu+46FAoFXH/99WhpaaloPj744AMAwLBhw1AsFvHFL34R8+fPx7nnnovx48fj7bffxu2334733nsPjz76qHDuM888gwcffBAXXngh9t57b4waNQr33nsvLrnkEowePRqXXXYZAKClpQWdnZ2YPHkyVqxYgQsvvBBjx47FQw89hOnTp2PHjh246KKLhLb/8Ic/oKurC+eeey4aGxux1157efv+4z/+A+PHj8dPfvITPP744/jRj36EvfbaC3fffTdOPfVU3HTTTbjvvvtw+eWX44QTTsDJJ58MAGhra8Nvf/tbfPWrX8W3v/1ttLe343e/+x2mTZuGV199FUcffbQwhij39K233sJJJ52ETCaDc889F/vvvz8++OADPPbYY7jhhhsAABs3bsSnP/1pT6BsaWnBE088gRkzZqCtrY0c1oneg0MQRK/mggsucOQ/5UmTJjkAnLvuuks5vqOjQ9n2X//1X05zc7PT1dXlbTv77LOd/fbbz/v84YcfOgCcYcOGOdu2bfO2//3vf3cAOI899pi37ZprrlHGBMBpaGhwVqxY4W178803HQDOL37xC2/bF77wBae5udlZu3att+3999930um00qaOs88+2+nfv7+zefNmZ/Pmzc6KFSucH//4x45lWc6ECRMcx3Gce++917Ft23nhhReEc++66y4HgPPiiy8K47Zt21myZInS13777eecccYZwraf/exnDgDnT3/6k7ctm806EydOdAYMGOC0tbU5juPP56BBg5xNmzYJbbD5O/fcc71t+XzeGT16tGNZlvOTn/zE2759+3anX79+ztlnny0c293dLbS5fft2Z8SIEc4555zjbYtzT08++WRn4MCBzurVq4V2i8Wi937GjBnOqFGjnC1btgjHfOUrX3EGDx6sffYIoh4hsxpB9FEaGxvxzW9+U9ner18/7317ezu2bNmCk046CR0dHVi+fHlou//xH/+BoUOHep9POukkAMDKlStDzz3ttNNwwAEHeJ8nTJiAQYMGeecWCgU8/fTTOPPMMwW/oAMPPBCf//znQ9tn7N69Gy0tLWhpacGBBx6I73//+5g4cSL+9re/AQAeeughjB8/Hoceeii2bNni/Tv11FMBQDE/TZo0CYcddlikvmfPno2RI0fiq1/9qrctk8ngO9/5Dnbt2oXnnntOOP7LX/6yUSv2rW99y3ufSqVw/PHHw3EczJgxw9s+ZMgQHHLIIcL8p1Ipz2+pWCxi27ZtyOfzOP7447Fw4UKln7B7unnzZjz//PM455xzsO+++wrnMlOn4zh4+OGH8YUvfAGO4wjzOm3aNOzcuVPbN0HUI2RWI4g+yic+8QmtY++SJUtw9dVX45lnnkFbW5uwb+fOnaHtyosjW1S3b98e+1x2Pjt306ZN6OzsxIEHHqgcp9tmoqmpCY899hgAV0gcO3YsRo8e7e1///33sWzZMqNQsmnTJuHz2LFjI/e9evVqHHTQQbBt8bfn+PHjvf1R25bna/DgwWhqasLee++tbN+6dauw7Z577sGtt96K5cuXI5fLBfYXdk+ZkHTEEUcYx7p582bs2LEDv/nNb/Cb3/xGe4w8rwRRr5BwRBB9FF5DxNixYwcmTZqEQYMG4frrr8cBBxyApqYmLFy4EP/93/+NYrEY2m4qldJudyIEvlZybhxSqRROO+004/5isYgjjzwSt912m3b/mDFjhM+6uUyKoLZ18xVlDv/0pz9h+vTpOPPMM/Hd734Xw4cPRyqVwo033uj5XsVtMwz27HzjG9/A2WefrT1mwoQJkdsjiJ6EhCOC2IOYN28etm7dikceecRz3gWADz/8sAdH5TN8+HA0NTVhxYoVyj7dtnI54IAD8Oabb+Jzn/tc4pm899tvP7z11lsoFouC9oiZLPfbb79E+9Px17/+FePGjcMjjzwiXN8111xTVnvjxo0DALzzzjvGY1paWjBw4EAUCoVAwZQgegPkc0QQexBMQ8BrBLLZLH7961/31JAEmMbn0Ucfxbp167ztK1aswBNPPJFYP//+7/+OtWvX4n/+53+UfZ2dndi9e3fZbbe2tmLDhg144IEHvG35fB6/+MUvMGDAAEyaNKnstqOiu8+vvPIKFixYUFZ7LS0tOPnkk/H73/8ea9asEfaxPlKpFL785S/j4Ycf1gpRmzdvLqtvgugJSHNEEHsQJ554IoYOHYqzzz4b3/nOd2BZFu69997EzVqVcO2112LOnDn4zGc+g/PPPx+FQgG//OUvccQRR2Dx4sWJ9PGf//mfePDBB3Heeefh2WefxWc+8xkUCgUsX74cDz74IJ566ikcf/zxZbV97rnn4u6778b06dPxxhtvYP/998df//pXvPjii/jZz36GgQMHJnINQfzLv/wLHnnkEfzrv/4rzjjjDHz44Ye46667cNhhhwnJMePw85//HJ/97Gdx7LHH4txzz8XYsWOxatUqPP744959+clPfoJnn30Wn/rUp/Dtb38bhx12GLZt24aFCxfi6aefxrZt2xK8SoKoHiQcEcQexLBhw/CPf/wDl112Ga6++moMHToU3/jGN/C5z30O06ZN6+nhAQCOO+44PPHEE7j88svxgx/8AGPGjMH111+PZcuWRYqmi4Jt23j00Udx++23449//CP+9re/obm5GePGjcNFF12Egw8+uOy2+/Xrh3nz5uGKK67APffcg7a2NhxyyCH4wx/+gOnTpycy/jCmT5+ODRs24O6778ZTTz2Fww47DH/605/w0EMPlV1z76ijjsLLL7+MH/zgB7jzzjvR1dWF/fbbD//+7//uHTNixAi8+uqruP766/HII4/g17/+NYYNG4bDDz8cN910U0JXRxDVh8qHEATRKzjzzDOxZMkSvP/++z09FIIg+jjkc0QQRN3R2dkpfH7//fcxe/ZsrwQIQRBENSHNEUEQdceoUaMwffp0jBs3DqtXr8add96J7u5uLFq0CAcddFBPD48giD4O+RwRBFF3nH766bj//vuxYcMGNDY2YuLEifjxj39MghFBEDWBNEcEQRAEQRAc5HNEEARBEATBQcIRQRAEQRAEB/kcxaRYLGLdunUYOHBg4mUHCIIgCIKoDo7joL29Hfvss49SGFqGhKOYrFu3TilKSRAEQRBE7+Cjjz7C6NGjA48h4SgmLPX/Rx99hEGDBiXadi6Xw5w5czB16lRkMplE2+5r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\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Results**\n",
+ "\n",
+ "The training performance indicates that the agent starts with poor rewards around -200, showing no success in the early episodes as it explores the environment. Around episode 100, the agent begins to show improvement, with rewards fluctuating and occasionally exceeding -150. Around episode 200, some progress is made, and the agent achieves higher rewards (closer to -100) in some episodes, but overall it is still quite inconsistent. This means that the agent is learning and improving but has not fully converged on an optimal policy. Additional training, fine-tuning of hyperparameters, or adjustments to the exploration strategy could help stabilize and improve its performance further.\n",
+ "\n",
+ "**Reflections**\n",
+ "\n",
+ "In short, we are quite disappointed with our results. We underestimated the time required for training, not leaving us enough time to fine tune our model, or accurately display results. We did however see indications of learning, and managed to improve it from our starting point.\n"
+ ],
+ "metadata": {
+ "id": "R9XZ5zqr1sW1"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 5. Evaluation"
+ ],
+ "metadata": {
+ "id": "Q2A8uo0ovX5Q"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Reset the environment and render it to see the initial state\n",
+ "state = env.reset()\n",
+ "env.render()\n",
+ "total_reward = 0\n",
+ "\n",
+ "for step in range(max_steps):\n",
+ " # Choose action using the greedy policy (no exploration, only exploitation)\n",
+ " action = epsilon_greedy_policy(state, epsilon=0)\n",
+ "\n",
+ " # Take the action in the environment and observe the result\n",
+ " state, reward, done, _ = env.step(action)\n",
+ "\n",
+ " # Render the environment to visualize the agent's actions\n",
+ " env.render()\n",
+ " total_reward += reward\n",
+ "\n",
+ " # End the evaluation if the episode is done\n",
+ " if done:\n",
+ " break\n",
+ "\n",
+ "print(f\"Total Reward During Evaluation: {total_reward}\")\n",
+ "env.close()"
+ ],
+ "metadata": {
+ "id": "MP0_RNylvX5Q",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "ee516172-f099-416a-88a8-1d94f01db426"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.10/dist-packages/gym/core.py:49: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n",
+ "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n",
+ "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n",
+ " deprecation(\n",
+ "/usr/local/lib/python3.10/dist-packages/pygame/pkgdata.py:25: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html\n",
+ " from pkg_resources import resource_stream, resource_exists\n",
+ "/usr/local/lib/python3.10/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('google')`.\n",
+ "Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages\n",
+ " declare_namespace(pkg)\n",
+ "/usr/local/lib/python3.10/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('google.cloud')`.\n",
+ "Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages\n",
+ " declare_namespace(pkg)\n",
+ "/usr/local/lib/python3.10/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('sphinxcontrib')`.\n",
+ "Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages\n",
+ " declare_namespace(pkg)\n",
+ "/usr/local/lib/python3.10/dist-packages/gym/core.py:49: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n",
+ "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n",
+ "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n",
+ " deprecation(\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Total Reward During Evaluation: -135.0\n"
+ ]
+ }
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "gpuType": "T4",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
+\ No newline at end of file