{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "XjpkF4ri9SmE"
   },
   "source": [
    "# Delivering letters in a city\n",
    "\n",
    "The postman of a given city should get the letters at a given station and deliver them to the recipients.\n",
    "\n",
    "In order to ensure maximum efficiency and productivity, the postman will need to learn the shortest path between the item packaging area and all other locations within the city where they are allowed to travel. In order to accomplish this task, we will use what you have learned in the Q-learning sessions!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "p9WLF1M4_bsy"
   },
   "source": [
    "## The Environment\n",
    "\n",
    "The first step of our Q-learning is to define the environment through which the postman will navigate.\n",
    "\n",
    "As seen in the lecture, the environment consists of **states**, **actions**, and **rewards**. States and actions are inputs for the Q-learning AI agent, while the possible actions are the AI agent's outputs.\n",
    "\n",
    "#### States\n",
    "The states in our environment are all of the possible locations within the city. Some of these locations are the city boundaries (**black squares**), while other locations are aisles that the postman can use to travel throughout the city (**white squares**). The **green square** indicates the item packaging and shipping area. The black and green squares are terminal states.\n",
    "\n",
    "The AI agent's goal is to learn the shortest path between the item packaging area and all of the other locations in the city where the postman is allowed to travel.\n",
    "\n",
    "![image.png](data:image/png;base64,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)\n",
    "\n",
    "\n",
    "As shown in the image above, there are 121 possible states (locations) within the city. These states are arranged in a grid containing 11 rows and 11 columns. Each location can hence be identified by its row and column index."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "SIFtTESGA40U"
   },
   "source": [
    "First, let us define the environment boundaries and define a 3D numpy array to hold the current Q-values for each state and action pair: Q(s,a)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "id": "17WH9yxiAT5s"
   },
   "outputs": [],
   "source": [
    "environment_rows = 11\n",
    "environment_columns = 11\n",
    "\n",
    "q_values = np.zeros((environment_rows, environment_columns, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "FAdw3G88BRr2"
   },
   "source": [
    "#### Actions\n",
    "\n",
    "The actions that are available to the AI agent are to move the postman in one of four directions:\n",
    "\n",
    "* Up\n",
    "* Right\n",
    "* Down\n",
    "* Left\n",
    "\n",
    "Obviously, the AI agent must learn to avoid driving into the city boundaries!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "id": "ePAt9TnmBP0p"
   },
   "outputs": [],
   "source": [
    "actions = ['up', 'right', 'down', 'left']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5i239Tt7DxXv"
   },
   "source": [
    "#### Rewards\n",
    "\n",
    "To help the AI agent learn, each state (location) in the city is assigned a reward value.\n",
    "\n",
    "The agent may begin at any white square, but its goal is always the same: ***to maximize its total rewards***.\n",
    "\n",
    "Negative rewards (i.e., **punishments**) are used for all states except the goal, which encourages the AI to identify the *shortest path* to the goal by *minimizing its punishments*.\n",
    "\n",
    "![08-warehouse-map-rewards.png](data:image/png;base64,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)\n",
    "\n",
    "To maximize its cumulative rewards (by minimizing its cumulative punishments), the AI agent will need to find the shortest paths between the item packaging area (green square) and all of the other locations in the city where the postman is allowed to travel (white squares). The agent will also need to learn to avoid crashing into any of the city boundaries (black squares)!\n",
    "\n",
    "Let us create the map of the city in respect to rewards and punishment points."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "id": "seBrm-HHBe5o"
   },
   "outputs": [],
   "source": [
    "# Reward points\n",
    "rewards = np.full((environment_rows, environment_columns), -100.)\n",
    "rewards[0, 5] = 100. \n",
    "\n",
    "# White spaces\n",
    "aisles = {}\n",
    "aisles[1] = [i for i in range(1, 10)]\n",
    "aisles[2] = [1, 7, 9]\n",
    "aisles[3] = [i for i in range(1, 8)]\n",
    "aisles[3].append(9)\n",
    "aisles[4] = [3, 7]\n",
    "aisles[5] = [i for i in range(11)]\n",
    "aisles[6] = [5]\n",
    "aisles[7] = [i for i in range(1, 10)]\n",
    "aisles[8] = [3, 7]\n",
    "aisles[9] = [i for i in range(11)]\n",
    "\n",
    "for row_index in range(1, 10):\n",
    "    for column_index in aisles[row_index]:\n",
    "        rewards[row_index, column_index] = -1."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Zr9POjSpePoO"
   },
   "source": [
    "This is what the map looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Sb8FPlB5eO0h",
    "outputId": "732af1bc-5794-423e-af49-1dcaf80598d3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-100. -100. -100. -100. -100.  100. -100. -100. -100. -100. -100.]\n",
      "[-100.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1. -100.]\n",
      "[-100.   -1. -100. -100. -100. -100. -100.   -1. -100.   -1. -100.]\n",
      "[-100.   -1.   -1.   -1.   -1.   -1.   -1.   -1. -100.   -1. -100.]\n",
      "[-100. -100. -100.   -1. -100. -100. -100.   -1. -100. -100. -100.]\n",
      "[-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.]\n",
      "[-100. -100. -100. -100. -100.   -1. -100. -100. -100. -100. -100.]\n",
      "[-100.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1. -100.]\n",
      "[-100. -100. -100.   -1. -100. -100. -100.   -1. -100. -100. -100.]\n",
      "[-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.]\n",
      "[-100. -100. -100. -100. -100. -100. -100. -100. -100. -100. -100.]\n"
     ]
    }
   ],
   "source": [
    "for row in rewards:\n",
    "    print(row)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "OMUHveCHE3ZP"
   },
   "source": [
    "## Train the Model\n",
    "\n",
    "The learning process will follow these steps:\n",
    "\n",
    "1. Choose a random, non-terminal state (white square) for the agent to begin this new episode.\n",
    "2. Choose an action (move *up*, *right*, *down*, or *left*) for the current state. Actions will be chosen using an *epsilon greedy algorithm*. This algorithm will usually choose the most promising action for the AI agent, but it will occasionally choose a less promising option in order to encourage the agent to explore the environment.\n",
    "3. Perform the chosen action, and transition to the next state (i.e., move to the next location).\n",
    "4. Receive the reward for moving to the new state, and calculate the temporal difference.\n",
    "5. Update the Q-value for the previous state and action pair.\n",
    "6. If the new (current) state is a terminal state, go to #1. Else, go to #2.\n",
    "\n",
    "This entire process will be repeated across 1000 episodes. This will provide the AI agent sufficient opportunity to learn the shortest paths between the item packaging area and all other locations in the city where the postman is allowed to travel, while simultaneously avoiding crashing into the city boundaries."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Gb24bI1LjWVv"
   },
   "source": [
    "#### Define Helper Functions\n",
    "\n",
    "We will define a few helper functions to train our model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "id": "TanSDWb8E0aw"
   },
   "outputs": [],
   "source": [
    "def is_terminal_state(current_row_index, current_column_index):\n",
    "    \"\"\"\n",
    "    Function to determine if the specified location is a terminal state\n",
    "    \"\"\"\n",
    "\n",
    "    if rewards[current_row_index, current_column_index] == -1.:\n",
    "        return False\n",
    "    else:\n",
    "        return True\n",
    "\n",
    "def get_starting_location():\n",
    "    \"\"\"\n",
    "    Function to choose a random non-terminal starting location.\n",
    "    \"\"\"\n",
    "\n",
    "    current_row_index = np.random.randint(environment_rows)\n",
    "\n",
    "    current_column_index = np.random.randint(environment_columns)\n",
    "\n",
    "    while is_terminal_state(current_row_index, current_column_index):\n",
    "        current_row_index = np.random.randint(environment_rows)\n",
    "        current_column_index = np.random.randint(environment_columns)\n",
    "\n",
    "    return current_row_index, current_column_index\n",
    "\n",
    "def get_next_action(current_row_index, current_column_index, epsilon):\n",
    "    \"\"\"\n",
    "    Function to choose the next action, according to the epsilon value.\n",
    "    \"\"\"\n",
    "\n",
    "    if np.random.random() < epsilon:\n",
    "        return np.argmax(q_values[current_row_index, current_column_index])\n",
    "    else:\n",
    "        return np.random.randint(4)\n",
    "\n",
    "def get_next_location(current_row_index, current_column_index, action_index):\n",
    "    \"\"\"\n",
    "    Function to get the next location based on the chosen action.\n",
    "    \"\"\"\n",
    "\n",
    "    new_row_index = current_row_index\n",
    "    new_column_index = current_column_index\n",
    "    \n",
    "    if actions[action_index] == 'up' and current_row_index > 0:\n",
    "        new_row_index -= 1\n",
    "    elif actions[action_index] == 'right' and current_column_index < environment_columns - 1:\n",
    "        new_column_index += 1\n",
    "    elif actions[action_index] == 'down' and current_row_index < environment_rows - 1:\n",
    "        new_row_index += 1\n",
    "    elif actions[action_index] == 'left' and current_column_index > 0:\n",
    "        new_column_index -= 1\n",
    "    return new_row_index, new_column_index\n",
    "\n",
    "def get_shortest_path(start_row_index, start_column_index):\n",
    "    \"\"\"\n",
    "    Function that will get the shortest path between any location within the city \n",
    "    that the postman is allowed to travel and the item packaging location.\n",
    "    \"\"\"\n",
    "\n",
    "    if is_terminal_state(start_row_index, start_column_index):\n",
    "        return []\n",
    "    else: \n",
    "        current_row_index, current_column_index = start_row_index, start_column_index\n",
    "        shortest_path = []\n",
    "        shortest_path.append([current_row_index, current_column_index])\n",
    "\n",
    "        while not is_terminal_state(current_row_index, current_column_index):\n",
    "            action_index = get_next_action(current_row_index, current_column_index, 1.)\n",
    "            current_row_index, current_column_index = get_next_location(current_row_index, current_column_index, action_index)\n",
    "            shortest_path.append([current_row_index, current_column_index])\n",
    "            \n",
    "    return shortest_path"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Iu0CWpDUGEfP"
   },
   "source": [
    "#### Train the AI Agent using Q-Learning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "23NrIPBRGCOf",
    "outputId": "aa3efb7d-5cbc-43e7-d4fc-decc1cb8600f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training complete!\n"
     ]
    }
   ],
   "source": [
    "epsilon = 0.9 # the percentage of time when we should take the best action (instead of a random action)\n",
    "discount_factor = 0.9 # discount factor for future rewards\n",
    "learning_rate = 0.9 # the rate at which the AI agent should learn\n",
    "n_training_episodes = 1000\n",
    "\n",
    "for episode in range(n_training_episodes):\n",
    "\n",
    "    row_index, column_index = get_starting_location()\n",
    "\n",
    "    while not is_terminal_state(row_index, column_index):\n",
    "\n",
    "        action_index = get_next_action(row_index, column_index, epsilon)\n",
    "\n",
    "        old_row_index, old_column_index = row_index, column_index\n",
    "        row_index, column_index = get_next_location(row_index, column_index, action_index)\n",
    "\n",
    "        reward = rewards[row_index, column_index]\n",
    "        old_q_value = q_values[old_row_index, old_column_index, action_index]\n",
    "        temporal_difference = reward + (discount_factor * np.max(q_values[row_index, column_index])) - old_q_value\n",
    "\n",
    "        new_q_value = old_q_value + (learning_rate * temporal_difference)\n",
    "        q_values[old_row_index, old_column_index, action_index] = new_q_value\n",
    "\n",
    "print('Training complete!')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "6qn1kcU1zL3P"
   },
   "source": [
    "Next, find a few samples of shortest paths."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "7fofysHOGGm-",
    "outputId": "e52d90f8-4e39-4504-b6e4-4fa1178f8cd8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[3, 9], [2, 9], [1, 9], [1, 8], [1, 7], [1, 6], [1, 5], [0, 5]]\n",
      "[[5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [4, 7], [3, 7], [2, 7], [1, 7], [1, 6], [1, 5], [0, 5]]\n",
      "[[9, 5], [9, 6], [9, 7], [8, 7], [7, 7], [7, 6], [7, 5], [6, 5], [5, 5], [5, 6], [5, 7], [4, 7], [3, 7], [2, 7], [1, 7], [1, 6], [1, 5], [0, 5]]\n"
     ]
    }
   ],
   "source": [
    "print(get_shortest_path(3, 9)) #starting at row 3, column 9\n",
    "print(get_shortest_path(5, 0)) #starting at row 5, column 0\n",
    "print(get_shortest_path(9, 5)) #starting at row 9, column 5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "DZGnvyBhGgLz"
   },
   "source": [
    "#### Finally...\n",
    "It's great that our postman can automatically take the shortest path from any 'legal' location in the city to the item packaging area. **But what about the opposite scenario?**\n",
    "\n",
    "Put differently, our postman can currently deliver an item from anywhere in the city ***to*** the packaging area, but after it delivers the item, it will need to travel ***from*** the packaging area to another location in the city to pick up the next item!\n",
    "\n",
    "Don't worry -- this problem is easily solved simply by ***reversing the order of the shortest path***.\n",
    "\n",
    "Run the code cell below to see an example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "lIW2eKF7GLoX",
    "outputId": "c97a5a0f-3995-4623-98ac-03600f4e88a5"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0, 5], [1, 5], [1, 6], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [5, 6], [5, 5], [5, 4], [5, 3], [5, 2]]\n"
     ]
    }
   ],
   "source": [
    "path = get_shortest_path(5, 2) #go to row 5, column 2\n",
    "path.reverse()\n",
    "print(path)"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "Untitled0.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
