diff --git "a/rx_rover_PPO.ipynb" "b/rx_rover_PPO.ipynb" new file mode 100644--- /dev/null +++ "b/rx_rover_PPO.ipynb" @@ -0,0 +1,1263 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Proximal Policy Optimization" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import gym\n", + "from gym import spaces\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.patches import Rectangle\n", + "\n", + "import os\n", + "import random\n", + "import imageio\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.distributions import Categorical" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "class RoverGridEnv(gym.Env):\n", + " metadata={'render.modes': ['human']} \n", + " def __init__(self,max_ts=20): \n", + " super(RoverGridEnv,self).__init__()\n", + " self.max_ts=max_ts # Note: The Max_Timestamps is set to 20 by default.\n", + " self.grid_size=(15,15) \n", + " self.action_space=spaces.Discrete(5) \n", + " self.observation_space=spaces.MultiDiscrete([15,15,15,15,15,15])\n", + " self.rover_positions=np.array([[6,4],[10,4]])\n", + " self.operation_desks=np.array([[6,3],[10,3]])\n", + " self.rooms=np.array([[4,7],[4,10],[4,13],[8,7],[8,10],[8,13],[12,7],[12,10],[12,13]])\n", + " self.human_position=np.array([8,9])\n", + " self.targets=np.array([[5,10],[9,13]])\n", + " self.actions=[(0,-1),(0,1),(-1,0),(1,0),(0,0)] # Down,Up,Left,Right,Wait\n", + " self.rover_done=[False,False] \n", + " self.reset()\n", + " \n", + " def seed(self,seed=None):\n", + " np.random.seed(seed)\n", + " random.seed(seed)\n", + " \n", + " def reset(self):\n", + " self.current_step=0\n", + " self.rover_positions=np.array([[6,4],[10,4]])\n", + " self.rover_done=[False,False]\n", + " self.human_position=np.array([7,8])\n", + " self.current_step=0\n", + " return self._get_obs()\n", + " \n", + " def _get_obs(self):\n", + " return np.concatenate((self.rover_positions.flatten(),self.human_position))\n", + " \n", + " def step(self,actions):\n", + " rewards=np.zeros(2)\n", + " done=[False,False]\n", + " info={'message': ''} \n", + " for i,action in enumerate(actions):\n", + " if self.rover_done[i]:\n", + " done[i]=True \n", + " continue\n", + " prev_distance=np.linalg.norm(self.targets[i]-self.rover_positions[i])\n", + " if self._is_human_adjacent(self.rover_positions[i]):\n", + " rewards[i] -= 5\n", + " else:\n", + " delta=np.array(self.actions[action])\n", + " new_position=self.rover_positions[i]+delta\n", + " if self._out_of_bounds(new_position):\n", + " rewards[i] -= 15\n", + " continue\n", + " if self._collision(new_position,i):\n", + " rewards[i] -= 15\n", + " continue\n", + " self.rover_positions[i]=new_position\n", + " new_distance=np.linalg.norm(self.targets[i]-new_position)\n", + " if new_distance < prev_distance:\n", + " rewards[i]+=30 \n", + " else:\n", + " rewards[i] -= 20 \n", + " if np.array_equal(new_position,self.targets[i]):\n", + " rewards[i]+=100\n", + " self.rover_done[i]=True \n", + " done[i]=True\n", + "\n", + " # move human randomly\n", + " self._move_human()\n", + " self.current_step+=1\n", + " all_done=all(done) or self.current_step >= self.max_ts\n", + " if all_done and not all(done): # if the maximum number of steps is reached but not all targets were reached\n", + " info['message']='Maximum number of timestamps reached'\n", + " return self._get_obs(),rewards,all_done,info\n", + "\n", + " def _is_human_adjacent(self,position):\n", + " for delta in [(1,1),(1,-1),(-1,1),(-1,-1)]:\n", + " adjacent_position=position+np.array(delta)\n", + " if np.array_equal(adjacent_position,self.human_position):\n", + " return True\n", + " return False\n", + "\n", + " def _out_of_bounds(self,position):\n", + " return not (0 <= position[0] < self.grid_size[0] and 0 <= position[1] < self.grid_size[1])\n", + " \n", + " def _collision(self,new_position,rover_index):\n", + " if any(np.array_equal(new_position,pos) for pos in np.delete(self.rover_positions,rover_index,axis=0)):\n", + " return True # Collision with the other rover\n", + " if any(np.array_equal(new_position,pos) for pos in self.rooms):\n", + " return True # Collision with a room\n", + " if any(np.array_equal(new_position,pos) for pos in self.operation_desks):\n", + " return True # Collision with an operation desk\n", + " if np.array_equal(new_position,self.human_position):\n", + " return True # Collision with the human\n", + " return False\n", + " \n", + " def _move_human(self):\n", + " valid_moves=[move for move in self.actions if not self._out_of_bounds(self.human_position+np.array(move))]\n", + " self.human_position+=np.array(valid_moves[np.random.choice(len(valid_moves))])\n", + " \n", + " def render(self,mode='human',save_path=None):\n", + " fig,ax=plt.subplots(figsize=(7,7))\n", + " ax.set_xlim(0,self.grid_size[0])\n", + " ax.set_ylim(0,self.grid_size[1])\n", + " ax.set_xticks(np.arange(0,15,1))\n", + " ax.set_yticks(np.arange(0,15,1))\n", + " ax.grid(which='both')\n", + "\n", + " # draw elements\n", + " for pos in self.rover_positions:\n", + " ax.add_patch(Rectangle((pos[0]-0.5,pos[1]-0.5),1,1,color='blue'))\n", + " for pos in self.operation_desks:\n", + " ax.add_patch(Rectangle((pos[0]-0.5,pos[1]-0.5),1,1,color='darkgreen'))\n", + " for pos in self.rooms:\n", + " ax.add_patch(Rectangle((pos[0]-0.5,pos[1]-0.5),1,1,color='black'))\n", + " ax.add_patch(Rectangle((self.human_position[0]-0.5,self.human_position[1]-0.5),1,1,color='purple'))\n", + " for pos in self.targets:\n", + " ax.add_patch(Rectangle((pos[0]-0.5,pos[1]-0.5),1,1,color='yellow',alpha=0.5))\n", + "\n", + " if save_path is not None:\n", + " plt.savefig(save_path)\n", + " plt.close()\n", + " \n", + " def close(self):\n", + " plt.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial Setup\n" + ] + }, + { + "data": { + "image/png": "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6ekAAAASIi4vz5WWlqqkpESTJk3STTfdpDVr1qipqUkLFiyIx3QAAABxF5fSdNddd+kvf/mLHn74Yb333nu67rrr9Otf/7rLm8O74/P5tHz58m5fsksWt2UiT3Tkic5teST3ZSJPdOSJzm15JPdlclseUx67p39fBwAAAL57DgAAwASlCQAAwAClCQAAwAClCQAAwAClCQAAwIDrStPatWs1atQoZWRk6Oabb9bu3buTlqWqqkpz5sxRXl6ePB6PtmzZkrQsK1eu1I033qhBgwZp2LBhmjt3rmpqapKWR5LWrVuna6+9tuMTXSdPnqyXXnopqZnaPfbYY/J4PFq8eHHSMpSVlcnj8XT6M378+KTlkaS6ujp97nOfU05Ojvx+v6655hrt3bs3KVlGjRrV5fHxeDxatGhRUvK0tbVp2bJlGj16tPx+v6644go98sgjPX6BZzydPn1aixcv1siRI+X3+3XLLbdoz549CZu/p3Ogbdt6+OGHlZubK7/frxkzZujw4cNJy/PCCy9o5syZysnJkcfjUXV1ddyy9JTHsiw99NBDuuaaazRgwADl5eXpvvvu0/Hjx5OSRzp3Tho/frwGDBigwYMHa8aMGdq1a1fc8phkOt+Xv/xleTwerVmzJq6ZYuGq0vT888+rtLRUy5cv1/79+1VQUKBZs2bp5MmTScnT1NSkgoICrV27Ninzn2/79u1atGiRdu7cqcrKSlmWpZkzZ6qpqSlpmS677DI99thj2rdvn/bu3atPfvKTuuOOO/SHP/whaZkkac+ePfrhD3+oa6+9Nqk5JGnChAmqr6/v+LNjx46kZfnggw80ZcoUeb1evfTSS/rf//1f/cd//IcGDx6clDx79uzp9NhUVlZKku68886k5Fm1apXWrVunJ598Um+99ZZWrVqlxx9/XD/4wQ+SkkeSvvjFL6qyslI//vGPdfDgQc2cOVMzZsxQXV1dQubv6Rz4+OOP6/vf/77Wr1+vXbt2acCAAZo1a5ZaW1uTkqepqUm33nqrVq1aFZf5e5OnublZ+/fv17Jly7R//3698MILqqmp0e23356UPJI0duxYPfnkkzp48KB27NihUaNGaebMmfrLX/6StEztNm/erJ07d/b43W9JZ7vITTfdZC9atKhju62tzc7Ly7NXrlyZxFTnSLI3b96c7BgdTp48aUuyt2/fnuwonQwe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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "env=RoverGridEnv()\n", + "print(\"Initial Setup\")\n", + "observation=env.reset()\n", + "env.render()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PPO" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "class ActorCritic(nn.Module):\n", + " def __init__(self,\n", + " input_dim,\n", + " n_actions):\n", + " super(ActorCritic,self).__init__()\n", + " self.fc1=nn.Linear(input_dim,128)\n", + " self.fc2=nn.Linear(128,64)\n", + " self.actor=nn.Linear(64,n_actions)\n", + " self.critic=nn.Linear(64,1)\n", + "\n", + " def forward(self,x):\n", + " x=torch.relu(self.fc1(x))\n", + " x=torch.relu(self.fc2(x))\n", + " policy_logits=self.actor(x)\n", + " value=self.critic(x)\n", + " return policy_logits,value\n", + "\n", + "def compute_advantages(rewards,\n", + " values,\n", + " next_values,\n", + " gamma=0.99,\n", + " lambda_=0.95):\n", + " deltas=rewards+gamma*next_values-values\n", + " advantages=[]\n", + " advantage=0\n", + " for delta in reversed(deltas):\n", + " advantage=delta+gamma*lambda_*advantage\n", + " advantages.insert(0,advantage)\n", + " return torch.tensor(advantages,dtype=torch.float32)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def train_ppo(env,\n", + " actor_critic,\n", + " optimizer,\n", + " total_timesteps=10000,\n", + " gamma=0.99,\n", + " lambda_=0.95,\n", + " epsilon=0.2,\n", + " epochs=3,\n", + " batch_size=64):\n", + " \n", + " episode_rwds_ppo=[]\n", + " for _ in range(total_timesteps // batch_size):\n", + " obs=env.reset()\n", + " obs_list,action_list,reward_list,value_list,logprob_list=[],[],[],[],[]\n", + " total_episode_reward=0\n", + " for _ in range(batch_size):\n", + " obs_tensor=torch.tensor(obs,\n", + " dtype=torch.float32).unsqueeze(0)\n", + " policy_logits,value=actor_critic(obs_tensor)\n", + " dist=Categorical(logits=policy_logits)\n", + " action=dist.sample()\n", + " obs_list.append(obs)\n", + " action_list.append(action.item())\n", + " reward_list.append(0)\n", + " value_list.append(value.item())\n", + " logprob_list.append(dist.log_prob(action).item())\n", + " obs,rewards,done,_=env.step([action.item(),\n", + " action.item()])\n", + " reward_list[-1]=rewards.sum()\n", + " total_episode_reward+=rewards.sum()\n", + " if done:\n", + " episode_rwds_ppo.append(total_episode_reward)\n", + " print(f\"Episode {len(episode_rwds_ppo)} ended with reward: {total_episode_reward}\")\n", + " obs=env.reset()\n", + " total_episode_reward=0\n", + " break\n", + " obs_tensor=torch.tensor(np.array(obs_list),\n", + " dtype=torch.float32)\n", + " action_tensor=torch.tensor(action_list)\n", + "\n", + " reward_tensor=torch.tensor(reward_list,\n", + " dtype=torch.float32)\n", + " value_tensor=torch.tensor(value_list,\n", + " dtype=torch.float32)\n", + " logprob_tensor=torch.tensor(logprob_list,\n", + " dtype=torch.float32)\n", + " advantages=compute_advantages(reward_tensor,\n", + " value_tensor,\n", + " torch.cat((value_tensor[1:],\n", + " torch.tensor([0])),\n", + " axis=0),\n", + " gamma,\n", + " lambda_)\n", + "\n", + " for _ in range(epochs):\n", + " new_policy_logits,new_values=actor_critic(obs_tensor)\n", + " new_dist=Categorical(logits=new_policy_logits)\n", + " new_logprobs=new_dist.log_prob(action_tensor)\n", + " ratio=torch.exp(new_logprobs-logprob_tensor)\n", + " surr1=ratio*advantages\n", + " surr2=torch.clamp(ratio,\n", + " 1-epsilon,\n", + " 1+epsilon)*advantages\n", + " policy_loss=-torch.min(surr1,surr2).mean()\n", + " value_loss=nn.MSELoss()(new_values.squeeze(),\n", + " reward_tensor)\n", + " loss=policy_loss+0.5*value_loss\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + " return episode_rwds_ppo" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Episode 1 ended with reward: -370.0\n", + "Episode 2 ended with reward: -30.0\n", + "Episode 3 ended with reward: -90.0\n", + "Episode 4 ended with reward: -285.0\n", + "Episode 5 ended with reward: 35.0\n", + "Episode 6 ended with reward: 355.0\n", + "Episode 7 ended with reward: 190.0\n", + "Episode 8 ended with reward: 425.0\n", + "Episode 9 ended with reward: 710.0\n", + "Episode 10 ended with reward: 455.0\n", + "Episode 11 ended with reward: 110.0\n", + "Episode 12 ended with reward: 150.0\n", + "Episode 13 ended with reward: 140.0\n", + "Episode 14 ended with reward: 50.0\n", + "Episode 15 ended with reward: 150.0\n", + "Episode 16 ended with reward: 60.0\n", + "Episode 17 ended with reward: 60.0\n", + "Episode 18 ended with reward: 220.0\n", + "Episode 19 ended with reward: 160.0\n", + "Episode 20 ended with reward: 120.0\n", + "Episode 21 ended with reward: 345.0\n", + "Episode 22 ended with reward: 50.0\n", + "Episode 23 ended with reward: 170.0\n", + "Episode 24 ended with reward: 130.0\n", + "Episode 25 ended with reward: 115.0\n", + "Episode 26 ended with reward: 375.0\n", + "Episode 27 ended with reward: 150.0\n", + "Episode 28 ended with reward: 110.0\n", + "Episode 29 ended with reward: 120.0\n", + "Episode 30 ended with reward: 90.0\n", + "Episode 31 ended with reward: 120.0\n", + "Episode 32 ended with reward: 405.0\n", + "Episode 33 ended with reward: 710.0\n", + "Episode 34 ended with reward: 85.0\n", + "Episode 35 ended with reward: 380.0\n", + "Episode 36 ended with reward: 170.0\n", + "Episode 37 ended with reward: 105.0\n", + "Episode 38 ended with reward: 80.0\n", + "Episode 39 ended with reward: -115.0\n", + "Episode 40 ended with reward: 380.0\n", + "Episode 41 ended with reward: 675.0\n", + "Episode 42 ended with reward: 475.0\n", + "Episode 43 ended with reward: 220.0\n", + "Episode 44 ended with reward: 70.0\n", + "Episode 45 ended with reward: 580.0\n", + "Episode 46 ended with reward: 400.0\n", + "Episode 47 ended with reward: 355.0\n", + "Episode 48 ended with reward: 460.0\n", + "Episode 49 ended with reward: 420.0\n", + "Episode 50 ended with reward: 535.0\n", + "Episode 51 ended with reward: 470.0\n", + "Episode 52 ended with reward: 745.0\n", + "Episode 53 ended with reward: 460.0\n", + "Episode 54 ended with reward: 600.0\n", + "Episode 55 ended with reward: 750.0\n", + "Episode 56 ended with reward: 290.0\n", + "Episode 57 ended with reward: 745.0\n", + "Episode 58 ended with reward: 500.0\n", + "Episode 59 ended with reward: 550.0\n", + "Episode 60 ended with reward: 610.0\n", + "Episode 61 ended with reward: 465.0\n", + "Episode 62 ended with reward: 610.0\n", + "Episode 63 ended with reward: 785.0\n", + "Episode 64 ended with reward: 710.0\n", + "Episode 65 ended with reward: 275.0\n", + "Episode 66 ended with reward: 145.0\n", + "Episode 67 ended with reward: 300.0\n", + "Episode 68 ended with reward: 685.0\n", + "Episode 69 ended with reward: 660.0\n", + "Episode 70 ended with reward: 665.0\n", + "Episode 71 ended with reward: 585.0\n", + "Episode 72 ended with reward: 625.0\n", + "Episode 73 ended with reward: 615.0\n", + "Episode 74 ended with reward: 565.0\n", + "Episode 75 ended with reward: 690.0\n", + "Episode 76 ended with reward: 700.0\n", + "Episode 77 ended with reward: 465.0\n", + "Episode 78 ended with reward: 380.0\n", + "Episode 79 ended with reward: 395.0\n", + "Episode 80 ended with reward: 560.0\n", + "Episode 81 ended with reward: 480.0\n", + "Episode 82 ended with reward: 515.0\n", + "Episode 83 ended with reward: 470.0\n", + "Episode 84 ended with reward: 495.0\n", + "Episode 85 ended with reward: 510.0\n", + "Episode 86 ended with reward: 365.0\n", + "Episode 87 ended with reward: 460.0\n", + "Episode 88 ended with reward: 480.0\n", + "Episode 89 ended with reward: 515.0\n", + "Episode 90 ended with reward: 785.0\n", + "Episode 91 ended with reward: 715.0\n", + "Episode 92 ended with reward: 635.0\n", + "Episode 93 ended with reward: 540.0\n", + "Episode 94 ended with reward: 745.0\n", + "Episode 95 ended with reward: 690.0\n", + "Episode 96 ended with reward: 750.0\n", + "Episode 97 ended with reward: 530.0\n", + "Episode 98 ended with reward: 555.0\n", + "Episode 99 ended with reward: 665.0\n", + "Episode 100 ended with reward: 445.0\n", + "Episode 101 ended with reward: 370.0\n", + "Episode 102 ended with reward: 410.0\n", + "Episode 103 ended with reward: 120.0\n", + "Episode 104 ended with reward: -95.0\n", + "Episode 105 ended with reward: -250.0\n", + "Episode 106 ended with reward: -170.0\n", + "Episode 107 ended with reward: 380.0\n", + "Episode 108 ended with reward: 75.0\n", + "Episode 109 ended with reward: 265.0\n", + "Episode 110 ended with reward: 260.0\n", + "Episode 111 ended with reward: 265.0\n", + "Episode 112 ended with reward: 325.0\n", + "Episode 113 ended with reward: 335.0\n", + "Episode 114 ended with reward: 250.0\n", + "Episode 115 ended with reward: 400.0\n", + "Episode 116 ended with reward: 375.0\n", + "Episode 117 ended with reward: 320.0\n", + "Episode 118 ended with reward: 370.0\n", + "Episode 119 ended with reward: 405.0\n", + "Episode 120 ended with reward: 410.0\n", + "Episode 121 ended with reward: 510.0\n", + "Episode 122 ended with reward: 465.0\n", + "Episode 123 ended with reward: 530.0\n", + "Episode 124 ended with reward: 465.0\n", + "Episode 125 ended with reward: 520.0\n", + "Episode 126 ended with reward: 500.0\n", + "Episode 127 ended with reward: 490.0\n", + "Episode 128 ended with reward: 465.0\n", + "Episode 129 ended with reward: 380.0\n", + "Episode 130 ended with reward: 515.0\n", + "Episode 131 ended with reward: 500.0\n", + "Episode 132 ended with reward: 500.0\n", + "Episode 133 ended with reward: 430.0\n", + "Episode 134 ended with reward: 480.0\n", + "Episode 135 ended with reward: 295.0\n", + "Episode 136 ended with reward: 465.0\n", + "Episode 137 ended with reward: 350.0\n", + "Episode 138 ended with reward: 420.0\n", + "Episode 139 ended with reward: 420.0\n", + "Episode 140 ended with reward: 465.0\n", + "Episode 141 ended with reward: 430.0\n", + "Episode 142 ended with reward: 385.0\n", + "Episode 143 ended with reward: 420.0\n", + "Episode 144 ended with reward: 310.0\n", + "Episode 145 ended with reward: 445.0\n", + "Episode 146 ended with reward: 360.0\n", + "Episode 147 ended with reward: 400.0\n", + "Episode 148 ended with reward: 470.0\n", + "Episode 149 ended with reward: 420.0\n", + "Episode 150 ended with reward: 445.0\n", + "Episode 151 ended with reward: 455.0\n", + "Episode 152 ended with reward: 405.0\n", + "Episode 153 ended with reward: 395.0\n", + "Episode 154 ended with reward: 445.0\n", + "Episode 155 ended with reward: 445.0\n", + "Episode 156 ended with reward: 515.0\n", + "Episode 157 ended with reward: 435.0\n", + "Episode 158 ended with reward: 485.0\n", + "Episode 159 ended with reward: 500.0\n", + "Episode 160 ended with reward: 420.0\n", + "Episode 161 ended with reward: 500.0\n", + "Episode 162 ended with reward: 440.0\n", + "Episode 163 ended with reward: 405.0\n", + "Episode 164 ended with reward: 500.0\n", + "Episode 165 ended with reward: 420.0\n", + "Episode 166 ended with reward: 450.0\n", + "Episode 167 ended with reward: 485.0\n", + "Episode 168 ended with reward: 455.0\n", + "Episode 169 ended with reward: 465.0\n", + "Episode 170 ended with reward: 490.0\n", + "Episode 171 ended with reward: 655.0\n", + "Episode 172 ended with reward: 565.0\n", + "Episode 173 ended with reward: 575.0\n", + "Episode 174 ended with reward: 510.0\n", + "Episode 175 ended with reward: 680.0\n", + "Episode 176 ended with reward: 300.0\n", + "Episode 177 ended with reward: 730.0\n", + "Episode 178 ended with reward: 375.0\n", + "Episode 179 ended with reward: 540.0\n", + "Episode 180 ended with reward: 695.0\n", + "Episode 181 ended with reward: 350.0\n", + "Episode 182 ended with reward: 590.0\n", + "Episode 183 ended with reward: 705.0\n", + "Episode 184 ended with reward: 210.0\n", + "Episode 185 ended with reward: 785.0\n", + "Episode 186 ended with reward: 730.0\n", + "Episode 187 ended with reward: 610.0\n", + "Episode 188 ended with reward: 510.0\n", + "Episode 189 ended with reward: 140.0\n", + "Episode 190 ended with reward: 565.0\n", + "Episode 191 ended with reward: 775.0\n", + "Episode 192 ended with reward: 625.0\n", + "Episode 193 ended with reward: 620.0\n", + "Episode 194 ended with reward: 450.0\n", + "Episode 195 ended with reward: 555.0\n", + "Episode 196 ended with reward: 570.0\n", + "Episode 197 ended with reward: 510.0\n", + "Episode 198 ended with reward: 450.0\n", + "Episode 199 ended with reward: 450.0\n", + "Episode 200 ended with reward: 505.0\n", + "Episode 201 ended with reward: 645.0\n", + "Episode 202 ended with reward: 740.0\n", + "Episode 203 ended with reward: 515.0\n", + "Episode 204 ended with reward: 710.0\n", + "Episode 205 ended with reward: 290.0\n", + "Episode 206 ended with reward: 560.0\n", + "Episode 207 ended with reward: 380.0\n", + "Episode 208 ended with reward: 200.0\n", + "Episode 209 ended with reward: 500.0\n", + "Episode 210 ended with reward: 110.0\n", + "Episode 211 ended with reward: 320.0\n", + "Episode 212 ended with reward: -175.0\n", + "Episode 213 ended with reward: 160.0\n", + "Episode 214 ended with reward: 490.0\n", + "Episode 215 ended with reward: 445.0\n", + "Episode 216 ended with reward: 685.0\n", + "Episode 217 ended with reward: 470.0\n", + "Episode 218 ended with reward: 475.0\n", + "Episode 219 ended with reward: 745.0\n", + "Episode 220 ended with reward: 800.0\n", + "Episode 221 ended with reward: 560.0\n", + "Episode 222 ended with reward: 500.0\n", + "Episode 223 ended with reward: 570.0\n", + "Episode 224 ended with reward: 260.0\n", + "Episode 225 ended with reward: 645.0\n", + "Episode 226 ended with reward: 110.0\n", + "Episode 227 ended with reward: 665.0\n", + "Episode 228 ended with reward: 500.0\n", + "Episode 229 ended with reward: 515.0\n", + "Episode 230 ended with reward: 470.0\n", + "Episode 231 ended with reward: 420.0\n", + "Episode 232 ended with reward: 470.0\n", + "Episode 233 ended with reward: 420.0\n", + "Episode 234 ended with reward: 505.0\n", + "Episode 235 ended with reward: 415.0\n", + "Episode 236 ended with reward: 455.0\n", + "Episode 237 ended with reward: 755.0\n", + "Episode 238 ended with reward: 525.0\n", + "Episode 239 ended with reward: 465.0\n", + "Episode 240 ended with reward: 485.0\n", + "Episode 241 ended with reward: 610.0\n", + "Episode 242 ended with reward: 480.0\n", + "Episode 243 ended with reward: 675.0\n", + "Episode 244 ended with reward: 335.0\n", + "Episode 245 ended with reward: 195.0\n", + "Episode 246 ended with reward: 440.0\n", + "Episode 247 ended with reward: 370.0\n", + "Episode 248 ended with reward: 355.0\n", + "Episode 249 ended with reward: 405.0\n", + "Episode 250 ended with reward: 365.0\n", + "Episode 251 ended with reward: 750.0\n", + "Episode 252 ended with reward: 390.0\n", + "Episode 253 ended with reward: 585.0\n", + "Episode 254 ended with reward: 660.0\n", + "Episode 255 ended with reward: 445.0\n", + "Episode 256 ended with reward: 685.0\n", + "Episode 257 ended with reward: 395.0\n", + "Episode 258 ended with reward: 550.0\n", + "Episode 259 ended with reward: 725.0\n", + "Episode 260 ended with reward: 455.0\n", + "Episode 261 ended with reward: 520.0\n", + "Episode 262 ended with reward: 535.0\n", + "Episode 263 ended with reward: 530.0\n", + "Episode 264 ended with reward: 550.0\n", + "Episode 265 ended with reward: 620.0\n", + "Episode 266 ended with reward: 515.0\n", + "Episode 267 ended with reward: 465.0\n", + "Episode 268 ended with reward: 425.0\n", + "Episode 269 ended with reward: 535.0\n", + "Episode 270 ended with reward: 565.0\n", + "Episode 271 ended with reward: 725.0\n", + "Episode 272 ended with reward: 505.0\n", + "Episode 273 ended with reward: 560.0\n", + "Episode 274 ended with reward: 270.0\n", + "Episode 275 ended with reward: 175.0\n", + "Episode 276 ended with reward: 490.0\n", + "Episode 277 ended with reward: 355.0\n", + "Episode 278 ended with reward: 505.0\n", + "Episode 279 ended with reward: 480.0\n", + "Episode 280 ended with reward: 500.0\n", + "Episode 281 ended with reward: 520.0\n", + "Episode 282 ended with reward: 465.0\n", + "Episode 283 ended with reward: 465.0\n", + "Episode 284 ended with reward: 485.0\n", + "Episode 285 ended with reward: 530.0\n", + "Episode 286 ended with reward: 465.0\n", + "Episode 287 ended with reward: 275.0\n", + "Episode 288 ended with reward: 410.0\n", + "Episode 289 ended with reward: 355.0\n", + "Episode 290 ended with reward: 455.0\n", + "Episode 291 ended with reward: 345.0\n", + "Episode 292 ended with reward: 265.0\n", + "Episode 293 ended with reward: 500.0\n", + "Episode 294 ended with reward: 530.0\n", + "Episode 295 ended with reward: 500.0\n", + "Episode 296 ended with reward: 515.0\n", + "Episode 297 ended with reward: 500.0\n", + "Episode 298 ended with reward: 500.0\n", + "Episode 299 ended with reward: 480.0\n", + "Episode 300 ended with reward: 500.0\n", + "Episode 301 ended with reward: 460.0\n", + "Episode 302 ended with reward: 390.0\n", + "Episode 303 ended with reward: 485.0\n", + "Episode 304 ended with reward: 440.0\n", + "Episode 305 ended with reward: 330.0\n", + "Episode 306 ended with reward: 365.0\n", + "Episode 307 ended with reward: 440.0\n", + "Episode 308 ended with reward: 360.0\n", + "Episode 309 ended with reward: 500.0\n", + "Episode 310 ended with reward: 450.0\n", + "Episode 311 ended with reward: 315.0\n", + "Episode 312 ended with reward: 420.0\n", + "Episode 313 ended with reward: 500.0\n", + "Episode 314 ended with reward: 340.0\n", + "Episode 315 ended with reward: 565.0\n", + "Episode 316 ended with reward: 560.0\n", + "Episode 317 ended with reward: 515.0\n", + "Episode 318 ended with reward: 520.0\n", + "Episode 319 ended with reward: 500.0\n", + "Episode 320 ended with reward: 595.0\n", + "Episode 321 ended with reward: 780.0\n", + "Episode 322 ended with reward: 500.0\n", + "Episode 323 ended with reward: 530.0\n", + "Episode 324 ended with reward: 470.0\n", + "Episode 325 ended with reward: 320.0\n", + "Episode 326 ended with reward: 460.0\n", + "Episode 327 ended with reward: 475.0\n", + "Episode 328 ended with reward: 555.0\n", + "Episode 329 ended with reward: 695.0\n", + "Episode 330 ended with reward: 515.0\n", + "Episode 331 ended with reward: 615.0\n", + "Episode 332 ended with reward: 500.0\n", + "Episode 333 ended with reward: 510.0\n", + "Episode 334 ended with reward: 575.0\n", + "Episode 335 ended with reward: 300.0\n", + "Episode 336 ended with reward: 445.0\n", + "Episode 337 ended with reward: 535.0\n", + "Episode 338 ended with reward: 400.0\n", + "Episode 339 ended with reward: 455.0\n", + "Episode 340 ended with reward: 565.0\n", + "Episode 341 ended with reward: 570.0\n", + "Episode 342 ended with reward: 260.0\n", + "Episode 343 ended with reward: 260.0\n", + "Episode 344 ended with reward: 570.0\n", + "Episode 345 ended with reward: 510.0\n", + "Episode 346 ended with reward: 555.0\n", + "Episode 347 ended with reward: 515.0\n", + "Episode 348 ended with reward: 230.0\n", + "Episode 349 ended with reward: 525.0\n", + "Episode 350 ended with reward: 360.0\n", + "Episode 351 ended with reward: 130.0\n", + "Episode 352 ended with reward: 505.0\n", + "Episode 353 ended with reward: 520.0\n", + "Episode 354 ended with reward: 290.0\n", + "Episode 355 ended with reward: 760.0\n", + "Episode 356 ended with reward: 470.0\n", + "Episode 357 ended with reward: 615.0\n", + "Episode 358 ended with reward: 150.0\n", + "Episode 359 ended with reward: 505.0\n", + "Episode 360 ended with reward: 140.0\n", + "Episode 361 ended with reward: 770.0\n", + "Episode 362 ended with reward: 760.0\n", + "Episode 363 ended with reward: 570.0\n", + "Episode 364 ended with reward: 270.0\n", + "Episode 365 ended with reward: 575.0\n", + "Episode 366 ended with reward: 365.0\n", + "Episode 367 ended with reward: 500.0\n", + "Episode 368 ended with reward: 555.0\n", + "Episode 369 ended with reward: 140.0\n", + "Episode 370 ended with reward: 725.0\n", + "Episode 371 ended with reward: 585.0\n", + "Episode 372 ended with reward: 310.0\n", + "Episode 373 ended with reward: 500.0\n", + "Episode 374 ended with reward: 515.0\n", + "Episode 375 ended with reward: 535.0\n", + "Episode 376 ended with reward: 415.0\n", + "Episode 377 ended with reward: 150.0\n", + "Episode 378 ended with reward: 735.0\n", + "Episode 379 ended with reward: 480.0\n", + "Episode 380 ended with reward: 505.0\n", + "Episode 381 ended with reward: 595.0\n", + "Episode 382 ended with reward: 495.0\n", + "Episode 383 ended with reward: 150.0\n", + "Episode 384 ended with reward: 475.0\n", + "Episode 385 ended with reward: 200.0\n", + "Episode 386 ended with reward: 295.0\n", + "Episode 387 ended with reward: 305.0\n", + "Episode 388 ended with reward: 695.0\n", + "Episode 389 ended with reward: 610.0\n", + "Episode 390 ended with reward: 220.0\n", + "Episode 391 ended with reward: 595.0\n", + "Episode 392 ended with reward: 565.0\n", + "Episode 393 ended with reward: 110.0\n", + "Episode 394 ended with reward: 730.0\n", + "Episode 395 ended with reward: 355.0\n", + "Episode 396 ended with reward: 760.0\n", + "Episode 397 ended with reward: 790.0\n", + "Episode 398 ended with reward: 680.0\n", + "Episode 399 ended with reward: 575.0\n", + "Episode 400 ended with reward: 760.0\n", + "Episode 401 ended with reward: 450.0\n", + "Episode 402 ended with reward: 625.0\n", + "Episode 403 ended with reward: 345.0\n", + "Episode 404 ended with reward: 485.0\n", + "Episode 405 ended with reward: 525.0\n", + "Episode 406 ended with reward: 670.0\n", + "Episode 407 ended with reward: 565.0\n", + "Episode 408 ended with reward: 405.0\n", + "Episode 409 ended with reward: 50.0\n", + "Episode 410 ended with reward: 410.0\n", + "Episode 411 ended with reward: 300.0\n", + "Episode 412 ended with reward: 415.0\n", + "Episode 413 ended with reward: 485.0\n", + "Episode 414 ended with reward: 735.0\n", + "Episode 415 ended with reward: 630.0\n", + "Episode 416 ended with reward: 530.0\n", + "Episode 417 ended with reward: 500.0\n", + "Episode 418 ended with reward: 595.0\n", + "Episode 419 ended with reward: 500.0\n", + "Episode 420 ended with reward: 315.0\n", + "Episode 421 ended with reward: 515.0\n", + "Episode 422 ended with reward: 445.0\n", + "Episode 423 ended with reward: 395.0\n", + "Episode 424 ended with reward: 500.0\n", + "Episode 425 ended with reward: 430.0\n", + "Episode 426 ended with reward: 365.0\n", + "Episode 427 ended with reward: 560.0\n", + "Episode 428 ended with reward: 435.0\n", + "Episode 429 ended with reward: 465.0\n", + "Episode 430 ended with reward: 500.0\n", + "Episode 431 ended with reward: 485.0\n", + "Episode 432 ended with reward: 500.0\n", + "Episode 433 ended with reward: 520.0\n", + "Episode 434 ended with reward: 485.0\n", + "Episode 435 ended with reward: 455.0\n", + "Episode 436 ended with reward: 460.0\n", + "Episode 437 ended with reward: 330.0\n", + "Episode 438 ended with reward: 360.0\n", + "Episode 439 ended with reward: 455.0\n", + "Episode 440 ended with reward: 485.0\n", + "Episode 441 ended with reward: 340.0\n", + "Episode 442 ended with reward: 460.0\n", + "Episode 443 ended with reward: 500.0\n", + "Episode 444 ended with reward: 320.0\n", + "Episode 445 ended with reward: 490.0\n", + "Episode 446 ended with reward: 455.0\n", + "Episode 447 ended with reward: 480.0\n", + "Episode 448 ended with reward: 455.0\n", + "Episode 449 ended with reward: 500.0\n", + "Episode 450 ended with reward: 415.0\n", + "Episode 451 ended with reward: 515.0\n", + "Episode 452 ended with reward: 550.0\n", + "Episode 453 ended with reward: 720.0\n", + "Episode 454 ended with reward: 570.0\n", + "Episode 455 ended with reward: 500.0\n", + "Episode 456 ended with reward: 535.0\n", + "Episode 457 ended with reward: 725.0\n", + "Episode 458 ended with reward: 530.0\n", + "Episode 459 ended with reward: 760.0\n", + "Episode 460 ended with reward: 130.0\n", + "Episode 461 ended with reward: 595.0\n", + "Episode 462 ended with reward: 735.0\n", + "Episode 463 ended with reward: 730.0\n", + "Episode 464 ended with reward: 615.0\n", + "Episode 465 ended with reward: 500.0\n", + "Episode 466 ended with reward: 725.0\n", + "Episode 467 ended with reward: 720.0\n", + "Episode 468 ended with reward: 465.0\n", + "Episode 469 ended with reward: 465.0\n", + "Episode 470 ended with reward: 760.0\n", + "Episode 471 ended with reward: 255.0\n", + "Episode 472 ended with reward: 125.0\n", + "Episode 473 ended with reward: 500.0\n", + "Episode 474 ended with reward: 705.0\n", + "Episode 475 ended with reward: 500.0\n", + "Episode 476 ended with reward: 485.0\n", + "Episode 477 ended with reward: 500.0\n", + "Episode 478 ended with reward: 500.0\n", + "Episode 479 ended with reward: 470.0\n", + "Episode 480 ended with reward: 635.0\n", + "Episode 481 ended with reward: 440.0\n", + "Episode 482 ended with reward: 275.0\n", + "Episode 483 ended with reward: 305.0\n", + "Episode 484 ended with reward: 600.0\n", + "Episode 485 ended with reward: 465.0\n", + "Episode 486 ended with reward: 370.0\n", + "Episode 487 ended with reward: 775.0\n", + "Episode 488 ended with reward: 300.0\n", + "Episode 489 ended with reward: 415.0\n", + "Episode 490 ended with reward: 460.0\n", + "Episode 491 ended with reward: 620.0\n", + "Episode 492 ended with reward: 355.0\n", + "Episode 493 ended with reward: 455.0\n", + "Episode 494 ended with reward: 365.0\n", + "Episode 495 ended with reward: 720.0\n", + "Episode 496 ended with reward: 500.0\n", + "Episode 497 ended with reward: 120.0\n", + "Episode 498 ended with reward: 500.0\n", + "Episode 499 ended with reward: 355.0\n", + "Episode 500 ended with reward: 605.0\n", + "Episode 501 ended with reward: 475.0\n", + "Episode 502 ended with reward: 415.0\n", + "Episode 503 ended with reward: 700.0\n", + "Episode 504 ended with reward: 715.0\n", + "Episode 505 ended with reward: 720.0\n", + "Episode 506 ended with reward: 335.0\n", + "Episode 507 ended with reward: 240.0\n", + "Episode 508 ended with reward: 425.0\n", + "Episode 509 ended with reward: 705.0\n", + "Episode 510 ended with reward: 435.0\n", + "Episode 511 ended with reward: 205.0\n", + "Episode 512 ended with reward: 485.0\n", + "Episode 513 ended with reward: 730.0\n", + "Episode 514 ended with reward: 380.0\n", + "Episode 515 ended with reward: 470.0\n", + "Episode 516 ended with reward: 490.0\n", + "Episode 517 ended with reward: 480.0\n", + "Episode 518 ended with reward: 440.0\n", + "Episode 519 ended with reward: 570.0\n", + "Episode 520 ended with reward: 405.0\n", + "Episode 521 ended with reward: 430.0\n", + "Episode 522 ended with reward: 370.0\n", + "Episode 523 ended with reward: 710.0\n", + "Episode 524 ended with reward: 420.0\n", + "Episode 525 ended with reward: 465.0\n", + "Episode 526 ended with reward: 510.0\n", + "Episode 527 ended with reward: 685.0\n", + "Episode 528 ended with reward: 360.0\n", + "Episode 529 ended with reward: 490.0\n", + "Episode 530 ended with reward: 465.0\n", + "Episode 531 ended with reward: 365.0\n", + "Episode 532 ended with reward: 640.0\n", + "Episode 533 ended with reward: 575.0\n", + "Episode 534 ended with reward: 520.0\n", + "Episode 535 ended with reward: 340.0\n", + "Episode 536 ended with reward: 440.0\n", + "Episode 537 ended with reward: 230.0\n", + "Episode 538 ended with reward: 455.0\n", + "Episode 539 ended with reward: 530.0\n", + "Episode 540 ended with reward: 475.0\n", + "Episode 541 ended with reward: 435.0\n", + "Episode 542 ended with reward: 385.0\n", + "Episode 543 ended with reward: 405.0\n", + "Episode 544 ended with reward: 745.0\n", + "Episode 545 ended with reward: 500.0\n", + "Episode 546 ended with reward: 395.0\n", + "Episode 547 ended with reward: 230.0\n", + "Episode 548 ended with reward: 400.0\n", + "Episode 549 ended with reward: 490.0\n", + "Episode 550 ended with reward: 465.0\n", + "Episode 551 ended with reward: 725.0\n", + "Episode 552 ended with reward: 630.0\n", + "Episode 553 ended with reward: 150.0\n", + "Episode 554 ended with reward: 470.0\n", + "Episode 555 ended with reward: 535.0\n", + "Episode 556 ended with reward: 640.0\n", + "Episode 557 ended with reward: 280.0\n", + "Episode 558 ended with reward: 405.0\n", + "Episode 559 ended with reward: 215.0\n", + "Episode 560 ended with reward: 140.0\n", + "Episode 561 ended with reward: 410.0\n", + "Episode 562 ended with reward: 550.0\n", + "Episode 563 ended with reward: 780.0\n", + "Episode 564 ended with reward: 465.0\n", + "Episode 565 ended with reward: 500.0\n", + "Episode 566 ended with reward: 315.0\n", + "Episode 567 ended with reward: 650.0\n", + "Episode 568 ended with reward: 735.0\n", + "Episode 569 ended with reward: 470.0\n", + "Episode 570 ended with reward: 500.0\n", + "Episode 571 ended with reward: 500.0\n", + "Episode 572 ended with reward: 745.0\n", + "Episode 573 ended with reward: 605.0\n", + "Episode 574 ended with reward: 515.0\n", + "Episode 575 ended with reward: 220.0\n", + "Episode 576 ended with reward: 710.0\n", + "Episode 577 ended with reward: 780.0\n", + "Episode 578 ended with reward: 320.0\n", + "Episode 579 ended with reward: 500.0\n", + "Episode 580 ended with reward: 380.0\n", + "Episode 581 ended with reward: 330.0\n", + "Episode 582 ended with reward: 675.0\n", + "Episode 583 ended with reward: 465.0\n", + "Episode 584 ended with reward: 275.0\n", + "Episode 585 ended with reward: 630.0\n", + "Episode 586 ended with reward: 515.0\n", + "Episode 587 ended with reward: 285.0\n", + "Episode 588 ended with reward: 575.0\n", + "Episode 589 ended with reward: 690.0\n", + "Episode 590 ended with reward: 685.0\n", + "Episode 591 ended with reward: 575.0\n", + "Episode 592 ended with reward: 720.0\n", + "Episode 593 ended with reward: 610.0\n", + "Episode 594 ended with reward: 285.0\n", + "Episode 595 ended with reward: 405.0\n", + "Episode 596 ended with reward: 680.0\n", + "Episode 597 ended with reward: 310.0\n", + "Episode 598 ended with reward: 340.0\n", + "Episode 599 ended with reward: 195.0\n", + "Episode 600 ended with reward: -145.0\n", + "Episode 601 ended with reward: 285.0\n", + "Episode 602 ended with reward: 695.0\n", + "Episode 603 ended with reward: 775.0\n", + "Episode 604 ended with reward: 430.0\n", + "Episode 605 ended with reward: 560.0\n", + "Episode 606 ended with reward: 555.0\n", + "Episode 607 ended with reward: 655.0\n", + "Episode 608 ended with reward: 775.0\n", + "Episode 609 ended with reward: 725.0\n", + "Episode 610 ended with reward: 500.0\n", + "Episode 611 ended with reward: 235.0\n", + "Episode 612 ended with reward: 735.0\n", + "Episode 613 ended with reward: 440.0\n", + "Episode 614 ended with reward: 650.0\n", + "Episode 615 ended with reward: 310.0\n", + "Episode 616 ended with reward: 330.0\n", + "Episode 617 ended with reward: 430.0\n", + "Episode 618 ended with reward: 540.0\n", + "Episode 619 ended with reward: 460.0\n", + "Episode 620 ended with reward: 405.0\n", + "Episode 621 ended with reward: 500.0\n", + "Episode 622 ended with reward: 500.0\n", + "Episode 623 ended with reward: 580.0\n", + "Episode 624 ended with reward: 725.0\n", + "Episode 625 ended with reward: 525.0\n", + "Episode 626 ended with reward: 140.0\n", + "Episode 627 ended with reward: 605.0\n", + "Episode 628 ended with reward: 480.0\n", + "Episode 629 ended with reward: 450.0\n", + "Episode 630 ended with reward: 715.0\n", + "Episode 631 ended with reward: 500.0\n", + "Episode 632 ended with reward: 500.0\n", + "Episode 633 ended with reward: 550.0\n", + "Episode 634 ended with reward: 325.0\n", + "Episode 635 ended with reward: 465.0\n", + "Episode 636 ended with reward: 310.0\n", + "Episode 637 ended with reward: 720.0\n", + "Episode 638 ended with reward: 675.0\n", + "Episode 639 ended with reward: 435.0\n", + "Episode 640 ended with reward: 575.0\n", + "Episode 641 ended with reward: 340.0\n", + "Episode 642 ended with reward: 620.0\n", + "Episode 643 ended with reward: 685.0\n", + "Episode 644 ended with reward: 485.0\n", + "Episode 645 ended with reward: 285.0\n", + "Episode 646 ended with reward: 100.0\n", + "Episode 647 ended with reward: 565.0\n", + "Episode 648 ended with reward: 220.0\n", + "Episode 649 ended with reward: 535.0\n", + "Episode 650 ended with reward: 555.0\n", + "Episode 651 ended with reward: 500.0\n", + "Episode 652 ended with reward: 525.0\n", + "Episode 653 ended with reward: 435.0\n", + "Episode 654 ended with reward: 500.0\n", + "Episode 655 ended with reward: 355.0\n", + "Episode 656 ended with reward: 545.0\n", + "Episode 657 ended with reward: 750.0\n", + "Episode 658 ended with reward: 745.0\n", + "Episode 659 ended with reward: 220.0\n", + "Episode 660 ended with reward: 500.0\n", + "Episode 661 ended with reward: 480.0\n", + "Episode 662 ended with reward: 470.0\n", + "Episode 663 ended with reward: 100.0\n", + "Episode 664 ended with reward: 370.0\n", + "Episode 665 ended with reward: 390.0\n", + "Episode 666 ended with reward: 500.0\n", + "Episode 667 ended with reward: 365.0\n", + "Episode 668 ended with reward: 465.0\n", + "Episode 669 ended with reward: 495.0\n", + "Episode 670 ended with reward: 745.0\n", + "Episode 671 ended with reward: 515.0\n", + "Episode 672 ended with reward: 745.0\n", + "Episode 673 ended with reward: 510.0\n", + "Episode 674 ended with reward: 745.0\n", + "Episode 675 ended with reward: 760.0\n", + "Episode 676 ended with reward: 705.0\n", + "Episode 677 ended with reward: 605.0\n", + "Episode 678 ended with reward: 715.0\n", + "Episode 679 ended with reward: 735.0\n", + "Episode 680 ended with reward: 700.0\n", + "Episode 681 ended with reward: 390.0\n", + "Episode 682 ended with reward: 630.0\n", + "Episode 683 ended with reward: 690.0\n", + "Episode 684 ended with reward: 735.0\n", + "Episode 685 ended with reward: 255.0\n", + "Episode 686 ended with reward: 425.0\n", + "Episode 687 ended with reward: 185.0\n", + "Episode 688 ended with reward: 500.0\n", + "Episode 689 ended with reward: 370.0\n", + "Episode 690 ended with reward: 465.0\n", + "Episode 691 ended with reward: 515.0\n", + "Episode 692 ended with reward: 750.0\n", + "Episode 693 ended with reward: 500.0\n", + "Episode 694 ended with reward: 425.0\n", + "Episode 695 ended with reward: 500.0\n", + "Episode 696 ended with reward: 470.0\n", + "Episode 697 ended with reward: 465.0\n", + "Episode 698 ended with reward: 610.0\n", + "Episode 699 ended with reward: 470.0\n", + "Episode 700 ended with reward: 650.0\n", + "Episode 701 ended with reward: 440.0\n", + "Episode 702 ended with reward: 465.0\n", + "Episode 703 ended with reward: 520.0\n", + "Episode 704 ended with reward: 675.0\n", + "Episode 705 ended with reward: 690.0\n", + "Episode 706 ended with reward: 450.0\n", + "Episode 707 ended with reward: 550.0\n", + "Episode 708 ended with reward: 410.0\n", + "Episode 709 ended with reward: 640.0\n", + "Episode 710 ended with reward: 780.0\n", + "Episode 711 ended with reward: 630.0\n", + "Episode 712 ended with reward: 140.0\n", + "Episode 713 ended with reward: 640.0\n", + "Episode 714 ended with reward: 730.0\n", + "Episode 715 ended with reward: 430.0\n", + "Episode 716 ended with reward: 425.0\n", + "Episode 717 ended with reward: 500.0\n", + "Episode 718 ended with reward: 710.0\n", + "Episode 719 ended with reward: 370.0\n", + "Episode 720 ended with reward: 470.0\n", + "Episode 721 ended with reward: 395.0\n", + "Episode 722 ended with reward: 480.0\n", + "Episode 723 ended with reward: 445.0\n", + "Episode 724 ended with reward: 640.0\n", + "Episode 725 ended with reward: 515.0\n", + "Episode 726 ended with reward: 280.0\n", + "Episode 727 ended with reward: 560.0\n", + "Episode 728 ended with reward: 515.0\n", + "Episode 729 ended with reward: 730.0\n", + "Episode 730 ended with reward: 685.0\n", + "Episode 731 ended with reward: 480.0\n", + "Episode 732 ended with reward: 505.0\n", + "Episode 733 ended with reward: 185.0\n", + "Episode 734 ended with reward: 675.0\n", + "Episode 735 ended with reward: 330.0\n", + "Episode 736 ended with reward: 400.0\n", + "Episode 737 ended with reward: 405.0\n", + "Episode 738 ended with reward: 490.0\n", + "Episode 739 ended with reward: 60.0\n", + "Episode 740 ended with reward: 465.0\n", + "Episode 741 ended with reward: 670.0\n", + "Episode 742 ended with reward: 550.0\n", + "Episode 743 ended with reward: 710.0\n", + "Episode 744 ended with reward: 220.0\n", + "Episode 745 ended with reward: 560.0\n", + "Episode 746 ended with reward: 520.0\n", + "Episode 747 ended with reward: 320.0\n", + "Episode 748 ended with reward: 540.0\n", + "Episode 749 ended with reward: 485.0\n", + "Episode 750 ended with reward: 230.0\n", + "Episode 751 ended with reward: 585.0\n", + "Episode 752 ended with reward: 655.0\n", + "Episode 753 ended with reward: 740.0\n", + "Episode 754 ended with reward: 395.0\n", + "Episode 755 ended with reward: 440.0\n", + "Episode 756 ended with reward: 730.0\n", + "Episode 757 ended with reward: 790.0\n", + "Episode 758 ended with reward: 715.0\n", + "Episode 759 ended with reward: 390.0\n", + "Episode 760 ended with reward: 735.0\n", + "Episode 761 ended with reward: 485.0\n", + "Episode 762 ended with reward: 290.0\n", + "Episode 763 ended with reward: 445.0\n", + "Episode 764 ended with reward: 555.0\n", + "Episode 765 ended with reward: 445.0\n", + "Episode 766 ended with reward: 345.0\n", + "Episode 767 ended with reward: 440.0\n", + "Episode 768 ended with reward: 515.0\n", + "Episode 769 ended with reward: 500.0\n", + "Episode 770 ended with reward: 515.0\n", + "Episode 771 ended with reward: 500.0\n", + "Episode 772 ended with reward: 595.0\n", + "Episode 773 ended with reward: 485.0\n", + "Episode 774 ended with reward: 680.0\n", + "Episode 775 ended with reward: 455.0\n", + "Episode 776 ended with reward: 505.0\n", + "Episode 777 ended with reward: 490.0\n", + "Episode 778 ended with reward: 500.0\n", + "Episode 779 ended with reward: 475.0\n", + "Episode 780 ended with reward: 470.0\n", + "Episode 781 ended with reward: 470.0\n" + ] + } + ], + "source": [ + "env=RoverGridEnv()\n", + "input_dim=env.observation_space.shape[0]\n", + "n_actions=env.action_space.n\n", + "actor_critic=ActorCritic(input_dim,\n", + " n_actions)\n", + "optimizer=optim.Adam(actor_critic.parameters(),\n", + " lr=1e-3)\n", + "episode_rwds_ppo=train_ppo(env,\n", + " actor_critic,\n", + " optimizer,\n", + " total_timesteps=50000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAHHCAYAAACr0swBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8WgzjOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC/F0lEQVR4nOydd3gU1frHv7Mlm0ISQgmh996LYOhICQT1YsEfigJexCuiUqxYwcZVEbGj1yuWa+8NgdAUJFTpvfeETkJCks3u/P7Y7O6ZmTNts5vdJO/neXjIzpw5c86ZM+e8877veY8giqIIgiAIgiAIQoIl3AUgCIIgCIKIREhIIgiCIAiC4EBCEkEQBEEQBAcSkgiCIAiCIDiQkEQQBEEQBMGBhCSCIAiCIAgOJCQRBEEQBEFwICGJIAiCIAiCAwlJBEEQBEEQHEhIIohKxIoVKyAIAlasWBHuokQEgiBgxowZ4S5GRDJu3Dg0atSoTO9J/ZOINEhIIogQIwiCoX9GJoYXX3wRP/74Y8jL/NFHH0nKZrPZULduXYwbNw4nTpwI+f3LG/L2io6ORosWLXDfffchOzs75PefMWOGZt/KysoKeRkIoiJiC3cBCKKi8+mnn0p+f/LJJ8jIyFAcb926tW5eL774Im6++WaMGDEimEVU5dlnn0Xjxo1RUFCANWvW4KOPPsKqVauwfft2REdHl0kZyhNse61atQrvvvsuFixYgO3btyM2Njbk93/33XdRpUoVxfGqVauazus///kP3G53EEpFEOUXEpIIIsTcfvvtkt9r1qxBRkaG4ngkMmzYMHTr1g0AcNddd6FGjRp46aWX8PPPP+OWW24Jc+n0ycvLQ1xcXJndT95e1atXx5w5c/DTTz/h1ltvLVXe+fn5uoLWzTffjBo1apTqPl7sdntQ8iGI8gyZ2wgiAsjLy8ODDz6I+vXrw+FwoGXLlpg9ezZEUfSlEQQBeXl5+Pjjj31mlHHjxgEAjhw5gnvvvRctW7ZETEwMqlevjpEjR+Lw4cNBLWefPn0AAAcOHJAc3717N26++WZUq1YN0dHR6NatG37++Wff+YsXL8JqteKNN97wHTt79iwsFguqV68uqefEiRORkpLi+71y5UqMHDkSDRo0gMPhQP369TF16lRcuXJFUoZx48ahSpUqOHDgANLT0xEfH4/Ro0cDAAoLCzF16lTUrFkT8fHxuP7663H8+HFF/XJzczFlyhQ0atQIDocDycnJGDx4MP7++++A2uuaa64BABw6dMh37H//+x+6du2KmJgYVKtWDaNGjcKxY8ck1/Xv3x/t2rXDxo0b0bdvX8TGxuLxxx8PqAwsXp+fr776Co8//jhSUlIQFxeH66+/XlEGnk/Sl19+ia5duyI+Ph4JCQlo3749Xn/9dUmagwcPYuTIkahWrRpiY2Nx9dVX47ffflOU5fjx4xgxYgTi4uKQnJyMqVOnorCwkFvutWvXYujQoUhMTERsbCz69euHv/76q3SNQRAGIE0SQYQZURRx/fXXY/ny5Rg/fjw6deqERYsW4eGHH8aJEyfw2muvAfCY7e666y50794dd999NwCgadOmAID169dj9erVGDVqFOrVq4fDhw/j3XffRf/+/bFz586gmXq8QldSUpLv2I4dO9CrVy/UrVsXjz32GOLi4vD1119jxIgR+O6773DDDTegatWqaNeuHf7880888MADAIBVq1ZBEAScP38eO3fuRNu2bQF4hCKvMAYA33zzDfLz8zFx4kRUr14d69atw5tvvonjx4/jm2++kZSvuLgYaWlp6N27N2bPnu2r91133YX//e9/uO2229CzZ08sW7YMw4cPV9Tvnnvuwbfffov77rsPbdq0wblz57Bq1Srs2rULXbp0Md1eXmGyevXqAIAXXngBTz31FG655RbcddddOHPmDN5880307dsXmzZtkpjFzp07h2HDhmHUqFG4/fbbUatWLd37nT9/XnHMZrMpzG0vvPACBEHAo48+itOnT2Pu3LkYNGgQNm/ejJiYGG7eGRkZuPXWWzFw4EC89NJLAIBdu3bhr7/+wuTJkwEA2dnZ6NmzJ/Lz8/HAAw+gevXq+Pjjj3H99dfj22+/xQ033AAAuHLlCgYOHIijR4/igQceQJ06dfDpp59i2bJlivsuW7YMw4YNQ9euXfHMM8/AYrFg/vz5uOaaa7By5Up0795dt10IImBEgiDKlEmTJonsq/fjjz+KAMTnn39eku7mm28WBUEQ9+/f7zsWFxcnjh07VpFnfn6+4lhmZqYIQPzkk098x5YvXy4CEJcvX65Zxvnz54sAxCVLlohnzpwRjx07Jn777bdizZo1RYfDIR47dsyXduDAgWL79u3FgoIC3zG32y327NlTbN68uaTetWrV8v2eNm2a2LdvXzE5OVl89913RVEUxXPnzomCIIivv/66Zt1mzZolCoIgHjlyxHds7NixIgDxsccek6TdvHmzCEC89957Jcdvu+02EYD4zDPP+I4lJiaKkyZN0mwbHrz2+vLLL8Xq1auLMTEx4vHjx8XDhw+LVqtVfOGFFyTXbtu2TbTZbJLj/fr1EwGI8+bNM3T/Z555RgTA/deyZUtfOu/zr1u3rpiTk+M7/vXXX4sAJO0+duxYsWHDhr7fkydPFhMSEsTi4mLVckyZMkUEIK5cudJ3LDc3V2zcuLHYqFEj0eVyiaIoinPnzhUBiF9//bUvXV5entisWTNJ/3S73WLz5s3FtLQ00e12+9Lm5+eLjRs3FgcPHmyofQgiUMjcRhBhZsGCBbBarT4Ni5cHH3wQoiji999/182D/fp3Op04d+4cmjVrhqpVqwZsKgKAQYMGoWbNmqhfvz5uvvlmxMXF4eeff0a9evUAeDQXy5Ytwy233ILc3FycPXsWZ8+exblz55CWloZ9+/b5VsP16dMH2dnZ2LNnDwCPxqhv377o06cPVq5cCcCjXRJFUaJJYuuWl5eHs2fPomfPnhBFEZs2bVKUeeLEiZLfCxYsAABF+06ZMkVxbdWqVbF27VqcPHnSbFMBkLbXqFGjUKVKFfzwww+oW7cuvv/+e7jdbtxyyy2+djp79ixSUlLQvHlzLF++XJKXw+HAnXfeaer+3333HTIyMiT/5s+fr0g3ZswYxMfH+37ffPPNqF27tq+teFStWhV5eXnIyMhQTbNgwQJ0794dvXv39h2rUqUK7r77bhw+fBg7d+70patduzZuvvlmX7rY2FifhtTL5s2bsW/fPtx22204d+6cr83y8vIwcOBA/Pnnn+RcToQUMrcRRJg5cuQI6tSpI5m0AP9qtyNHjujmceXKFcyaNQvz58/HiRMnJD4+ly5dCrhsb7/9Nlq0aIFLly7hww8/xJ9//gmHw+E7v3//foiiiKeeegpPPfUUN4/Tp0+jbt26PsFn5cqVqFevHjZt2oTnn38eNWvWxOzZs33nEhIS0LFjR9/1R48exdNPP42ff/4ZFy5ckOQtr5vNZvMJcF6OHDkCi8XiM016admypaKsL7/8MsaOHYv69euja9euSE9Px5gxY9CkSRO9pgLgby+bzYZatWqhZcuWsFg836L79u2DKIpo3rw591q5o3TdunURFRVl6L5e+vbta8hxW14GQRDQrFkzTR+2e++9F19//TWGDRuGunXrYsiQIbjlllswdOhQX5ojR46gR48eimvZvtyuXTscOXIEzZo1gyAIknTyZ7Jv3z4AwNixY1XLdenSJYn5lyCCCQlJBFEBuP/++zF//nxMmTIFqampSExMhCAIGDVqVKm+tLt37+5brTVixAj07t0bt912G/bs2YMqVar48n7ooYeQlpbGzaNZs2YAgDp16qBx48b4888/0ahRI4iiiNTUVNSsWROTJ0/GkSNHsHLlSvTs2dMnWLhcLgwePBjnz5/Ho48+ilatWiEuLg4nTpzAuHHjFHVzOBy+awPhlltuQZ8+ffDDDz9g8eLFeOWVV/DSSy/h+++/x7Bhw0y1lxy32w1BEPD777/DarUqzsuX7qv5BoWL5ORkbN68GYsWLcLvv/+O33//HfPnz8eYMWPw8ccfh+Se3uf7yiuvoFOnTtw0vJAHBBEsSEgiiDDTsGFDLFmyBLm5uRJt0u7du33nvci/vL18++23GDt2LF599VXfsYKCAly8eDFo5bRarZg1axYGDBiAt956C4899phPw2K32zFo0CDdPPr06YM///wTjRs3RqdOnRAfH4+OHTsiMTERCxcuxN9//42ZM2f60m/btg179+7Fxx9/jDFjxviOa5l85DRs2BButxsHDhyQaCq8Zj85tWvXxr333ot7770Xp0+fRpcuXfDCCy8YEpK0aNq0KURRROPGjdGiRYtS5VVavBoaL6IoYv/+/ejQoYPmdVFRUbjuuutw3XXXwe12495778V7772Hp556Cs2aNUPDhg257Srvyw0bNsT27dshiqKkT8uv9Wr/EhISDPUvggg25JNEEGEmPT0dLpcLb731luT4a6+9BkEQJJNzXFwcV/CxWq0SExsAvPnmm3C5XEEta//+/dG9e3fMnTsXBQUFSE5ORv/+/fHee+/h1KlTivRnzpyR/O7Tpw8OHz6Mr776ymd+s1gs6NmzJ+bMmQOn0ynxR/JqXNi6iaKoWHauhbf92PADADB37lzJb5fLpTDfJScno06dOqpL081w4403wmq1YubMmYpnJYoizp07V+p7GOWTTz5Bbm6u7/e3336LU6dOaQqC8vJZLBafUOVtn/T0dKxbtw6ZmZm+dHl5eXj//ffRqFEjtGnTxpfu5MmT+Pbbb33p8vPz8f7770vu0bVrVzRt2hSzZ8/G5cuXFWWS9y+CCDakSSKIMHPddddhwIABeOKJJ3D48GF07NgRixcvxk8//YQpU6ZIfGm6du2KJUuWYM6cOT7zVY8ePXDttdfi008/RWJiItq0aYPMzEwsWbLEt/Q8mDz88MMYOXIkPvroI9xzzz14++230bt3b7Rv3x4TJkxAkyZNkJ2djczMTBw/fhxbtmzxXesVgPbs2YMXX3zRd7xv3774/fff4XA4cNVVV/mOt2rVCk2bNsVDDz2EEydOICEhAd99953CN0mLTp064dZbb8U777yDS5cuoWfPnli6dCn2798vSZebm4t69erh5ptvRseOHVGlShUsWbIE69evl2joAqVp06Z4/vnnMX36dBw+fBgjRoxAfHw8Dh06hB9++AF33303HnrooVLd49tvv+WanwYPHiwJIVCtWjX07t0bd955J7KzszF37lw0a9YMEyZMUM37rrvuwvnz53HNNdegXr16OHLkCN5880106tTJ53P02GOP4YsvvsCwYcPwwAMPoFq1avj4449x6NAhfPfddz5T6IQJE/DWW29hzJgx2LhxI2rXro1PP/1UEarCYrHggw8+wLBhw9C2bVvceeedqFu3Lk6cOIHly5cjISEBv/zyS6najCA0CcOKOoKo1MhDAIiiZ5n01KlTxTp16oh2u11s3ry5+Morr0iWPYuiKO7evVvs27evGBMTIwLwhQO4cOGCeOedd4o1atQQq1SpIqalpYm7d+8WGzZsKAkZYDYEwPr16xXnXC6X2LRpU7Fp06a+5eAHDhwQx4wZI6akpIh2u12sW7eueO2114rffvut4vrk5GQRgJidne07tmrVKhGA2KdPH0X6nTt3ioMGDRKrVKki1qhRQ5wwYYK4ZcsWEYA4f/58X7qxY8eKcXFx3PpcuXJFfOCBB8Tq1auLcXFx4nXXXSceO3ZMEgKgsLBQfPjhh8WOHTuK8fHxYlxcnNixY0fxnXfe0WwrvfaS891334m9e/cW4+LixLi4OLFVq1bipEmTxD179vjS9OvXT2zbtq1uXl60QgCwz9v7/L/44gtx+vTpYnJyshgTEyMOHz5cEk5BFJUhAL799ltxyJAhYnJyshgVFSU2aNBA/Ne//iWeOnVKct2BAwfEm2++WaxataoYHR0tdu/eXfz1118VZT5y5Ih4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165dYTQacf36dXTu3NluCwwMrK/IRNSA+EoSEb00qqurUVJSYtfm7OysnHC9detWREVFoX///ti0aROysrKwdu1a1X0tWrQIkZGR6NatG6qrq7Fr1y6loIqPj8fixYthtVqxZMkS3L59Gx9++CHGjh0LX19fAEBSUhJWrFiBkJAQhIWFYeXKlSgrK1P237p1a3z88ceYPn06bDYb+vfvj/Lychw7dgxubm6wWq0N8AwRUX1ikUREL419+/bB39/fri00NBQXLlwAACxduhSpqamYMmUK/P39sXnzZnTt2lV1XwaDAfPmzcPVq1dhMpnw2muvITU1FQDg6uqK/fv3IykpCb1794arqyvi4uKwcuVK5f4zZ85EcXExrFYr9Ho9EhISMGLECJSXlytjli1bBm9vbyQnJ+PKlSswm83o1asX5s+fX99PDRE1AJ3IUx/sQUT0EtLpdEhLS+PXghBRveE5SUREREQqWCQRERERqeA5SUSkCTxzgIjqG19JIiIiIlLBIomIiIhIBYskIiIiIhUskoiIiIhUsEgiIiIiUsEiiYiIiEgFiyQiIiIiFSySiIiIiFSwSCIiIiJS8T8IBxsauELk9QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(episode_rwds_ppo)\n", + "plt.xlabel(\"Episode\")\n", + "plt.ylabel(\"Total Reward\")\n", + "plt.title(\"Total Rewards Per Episode\")\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\91740\\AppData\\Local\\Temp\\ipykernel_8108\\1561640575.py:31: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly.\n", + " frames = [imageio.imread(path) for path in frames_paths]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Episode 1 evaluated, GIF saved to eval_gifs\\episode_1.gif.\n", + "Episode 2 evaluated, GIF saved to eval_gifs\\episode_2.gif.\n", + "Episode 3 evaluated, GIF saved to eval_gifs\\episode_3.gif.\n", + "Episode 4 evaluated, GIF saved to eval_gifs\\episode_4.gif.\n", + "Episode 5 evaluated, GIF saved to eval_gifs\\episode_5.gif.\n", + "Episode 6 evaluated, GIF saved to eval_gifs\\episode_6.gif.\n", + "Episode 7 evaluated, GIF saved to eval_gifs\\episode_7.gif.\n", + "Episode 8 evaluated, GIF saved to eval_gifs\\episode_8.gif.\n", + "Episode 9 evaluated, GIF saved to eval_gifs\\episode_9.gif.\n", + "Episode 10 evaluated, GIF saved to eval_gifs\\episode_10.gif.\n" + ] + }, + { + "data": { + "image/png": "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IC4ujsTERM6ePcsTTzzB+vXrOXz4ML/99hu33nortWrVomfPngDUr1+fXr16cd9997Fx40bWrFnDuHHjGDJkiDrHy3Xp1TCMicOaExrgdcn1oQFeTBzWXGNpROS66XVGXImOdxGRa2fo9vhNmzbRpUuXi19fOM98+PDhTJw4ke3btzN9+nTS09MJDw+nR48evPLKK5dsbf/6668ZN24cN9xwA2azmf79+/PBBx+U+s8izqdXwzC6R4Wy7kAqi1dtoEeH1tq6JyLF6sLrzMaENFKzcgn286JVZKBeZ8Qp6XgXEbk2hhbtnTt3xmb76y6hv/766z8+RmBgIN98801xxhK5yGI20ToykNO7bbTWGwsRKQEWs4mYmkFGxxApFTreRUSuXpk6p11ERERERETElahoFxEREREREXFQKtpFREREREREHJSKdhEREREREREHpaJdRERERERExEGpaBcRERERERFxUCraRURERERERByUinYRERERERERB6WiXURERERERMRBqWgXERERERERcVAq2kVEREREREQclIp2EREREREREQelol1ERERERETEQbkZHcAR2Gw2ADIzMw1OIo6ooKCAnJwcMjMzcXd3NzqOSInS8S6uRMe7uBId7+IqytKxfqH+vFCP/hUV7UBWVhYAVapUMTiJiIiIiIiIuJKsrCwCAgL+8naT7Z/KehdgtVo5fvw4fn5+mEwmo+OIg8nMzKRKlSocPXoUf39/o+OIlCgd7+JKdLyLK9HxLq6iLB3rNpuNrKwswsPDMZv/+sx1rbQDZrOZypUrGx1DHJy/v7/D/+KLFBcd7+JKdLyLK9HxLq6irBzrf7fCfoEa0YmIiIiIiIg4KBXtIiIiIiIiIg5KRbvIP/D09OTFF1/E09PT6CgiJU7Hu7gSHe/iSnS8i6twxmNdjehEREREREREHJRW2kVEREREREQclIp2EREREREREQelol1ERERERETEQaloFxEREREREXFQKtpFLmPChAm0bNkSPz8/goOD6du3L3v37jU6lkipeOONNzCZTDz88MNGRxEpEUlJSQwbNoygoCC8vb1p1KgRmzZtMjqWSLErKiri+eefJzIyEm9vb2rWrMkrr7yC+lCLM1i5ciU333wz4eHhmEwmfvjhh0tut9lsvPDCC4SFheHt7U23bt3Yv3+/MWGvk4p2kctYsWIFY8eOZf369SxZsoSCggJ69OhBdna20dFESlRsbCyffvopjRs3NjqKSIk4c+YM7dq1w93dnV9++YX4+HjeffddKlSoYHQ0kWL35ptvMnHiRD766CN2797Nm2++yVtvvcWHH35odDSR65adnU2TJk34+OOPL3v7W2+9xQcffMCkSZPYsGEDvr6+9OzZk9zc3FJOev008k3kCpw8eZLg4GBWrFhBx44djY4jUiLOnj1L8+bN+eSTT3j11Vdp2rQp77//vtGxRIrV008/zZo1a1i1apXRUURK3E033URISAhTpky5eF3//v3x9vZmxowZBiYTKV4mk4l58+bRt29fwL7KHh4ezmOPPcbjjz8OQEZGBiEhIUybNo0hQ4YYmPbqaaVd5ApkZGQAEBgYaHASkZIzduxY+vTpQ7du3YyOIlJifvrpJ6Kjoxk4cCDBwcE0a9aMzz77zOhYIiWibdu2/Pbbb+zbtw+Abdu2sXr1anr37m1wMpGSlZCQQEpKyiXvaQICAmjdujXr1q0zMNm1cTM6gIijs1qtPPzww7Rr146GDRsaHUekRHz77bds2bKF2NhYo6OIlKhDhw4xceJEHn30UZ599lliY2P517/+hYeHB8OHDzc6nkixevrpp8nMzKRevXpYLBaKiop47bXXGDp0qNHRREpUSkoKACEhIZdcHxIScvG2skRFu8g/GDt2LDt37mT16tVGRxEpEUePHuWhhx5iyZIleHl5GR1HpERZrVaio6N5/fXXAWjWrBk7d+5k0qRJKtrF6cyePZuvv/6ab775hgYNGhAXF8fDDz9MeHi4jneRMkTb40X+xrhx41iwYAG///47lStXNjqOSInYvHkzqampNG/eHDc3N9zc3FixYgUffPABbm5uFBUVGR1RpNiEhYURFRV1yXX169cnMTHRoEQiJeeJJ57g6aefZsiQITRq1Ig777yTRx55hAkTJhgdTaREhYaGAnDixIlLrj9x4sTF28oSFe0il2Gz2Rg3bhzz5s1j2bJlREZGGh1JpMTccMMN7Nixg7i4uIuX6Ohohg4dSlxcHBaLxeiIIsWmXbt2fxrhuW/fPqpVq2ZQIpGSk5OTg9l86dt9i8WC1Wo1KJFI6YiMjCQ0NJTffvvt4nWZmZls2LCBmJgYA5NdG22PF7mMsWPH8s033/Djjz/i5+d38dyXgIAAvL29DU4nUrz8/Pz+1K/B19eXoKAg9XEQp/PII4/Qtm1bXn/9dQYNGsTGjRuZPHkykydPNjqaSLG7+eabee2116hatSoNGjRg69atvPfee4wcOdLoaCLX7ezZsxw4cODi1wkJCcTFxREYGEjVqlV5+OGHefXVV6lduzaRkZE8//zzhIeHX+wwX5Zo5JvIZZhMpsteP3XqVEaMGFG6YUQM0LlzZ418E6e1YMECnnnmGfbv309kZCSPPvoo9913n9GxRIpdVlYWzz//PPPmzSM1NZXw8HBuv/12XnjhBTw8PIyOJ3Jdli9fTpcuXf50/fDhw5k2bRo2m40XX3yRyZMnk56eTvv27fnkk0+oU6eOAWmvj4p2EREREREREQelc9pFREREREREHJSKdhEREREREREHpaJdRERERERExEGpaBcRERERERFxUCraRURERERERByUinYRERERERERB6WiXURERERERMRBqWgXERERERERcVAq2kVEROSyDh8+jMlkIi4ursSeY8SIEfTt27fEHl9ERKSsU9EuIiLipEaMGIHJZPrTpVevXlf0/VWqVCE5OZmGDRuWcFIRERH5K25GBxAREZGS06tXL6ZOnXrJdZ6enlf0vRaLhdDQ0JKIJSIiIldIK+0iIiJOzNPTk9DQ0EsuFSpUAMBkMjFx4kR69+6Nt7c3NWrUYO7cuRe/94/b48+cOcPQoUOpVKkS3t7e1K5d+5IPBHbs2EHXrl3x9vYmKCiIUaNGcfbs2Yu3FxUV8eijj1K+fHmCgoJ48sknsdlsl+S1Wq1MmDCByMhIvL29adKkySWZREREXI2KdhERERf2/PPP079/f7Zt28bQoUMZMmQIu3fv/sv7xsfH88svv7B7924mTpxIxYoVAcjOzqZnz55UqFCB2NhY5syZw9KlSxk3btzF73/33XeZNm0aX3zxBatXryYtLY158+Zd8hwTJkzgyy+/ZNKkSezatYtHHnmEYcOGsWLFipL7jyAiIuLATLY/fsQtIiIiTmHEiBHMmDEDLy+vS65/9tlnefbZZzGZTIwePZqJEydevK1NmzY0b96cTz75hMOHDxMZGcnWrVtp2rQpt9xyCxUrVuSLL77403N99tlnPPXUUxw9ehRfX18AFi5cyM0338zx48cJCQkhPDycRx55hCeeeAKAwsJCIiMjadGiBT/88AN5eXkEBgaydOlSYmJiLj72vffeS05ODt98801J/GcSERFxaDqnXURExIl16dLlkqIcIDAw8OK////i+MLXf9UtfsyYMfTv358tW7bQo0cP+vbtS9u2bQHYvXs3TZo0uViwA7Rr1w6r1crevXvx8vIiOTmZ1q1bX7zdzc2N6Ojoi1vkDxw4QE5ODt27d7/kefPz82nWrNnV//AiIiJOQEW7iIiIE/P19aVWrVrF8li9e/fmyJEjLFy4kCVLlnDDDTcwduxY3nnnnWJ5/Avnv//8889ERERcctuVNs8TERFxNjqnXURExIWtX7/+T1/Xr1//L+9fqVIlhg8fzowZM3j//feZPHkyAPXr12fbtm1kZ2dfvO+aNWswm83UrVuXgIAAwsLC2LBhw8XbCwsL2bx588Wvo6Ki8PT0JDExkVq1al1yqVKlSnH9yCIiImWKVtpFREScWF5eHikpKZdc5+bmdrGB3Jw5c4iOjqZ9+/Z8/fXXbNy4kSlTplz2sV544QVatGhBgwYNyMvLY8GCBRcL/KFDh/Liiy8yfPhwXnrpJU6ePMmDDz7InXfeSUhICAAPPfQQb7zxBrVr16ZevXq89957pKenX3x8Pz8/Hn/8cR555BGsVivt27cnIyODNWvW4O/vz/Dhw0vgv5CIiIhjU9EuIiLixBYtWkRYWNgl19WtW5c9e/YAMH78eL799lseeOABwsLCmDlzJlFRUZd9LA8PD5555hkOHz6Mt7c3HTp04NtvvwXAx8eHX3/9lYceeoiWLVvi4+ND//79ee+99y5+/2OPPUZycjLDhw/HbDYzcuRIbrvtNjIyMi7e55VXXqFSpUpMmDCBQ4cOUb58eZo3b86zzz5b3P9pREREygR1jxcREXFRJpOJefPm0bdvX6OjiIiIyF/QOe0iIiIiIiIiDkpFu4iIiIiIiIiD0jntIiIiLkpnyImIiDg+rbSLiIiIiIiIOCgV7SIiIiIiIiIOSkW7iIiIiIiIiINS0S4iIiIiIiLioFS0i4iIiIiIiDgoFe0iIiIiIiIiDkpFu4iIiIiIiIiDUtEuIiIiIiIi4qD+DxJejuvm+1wFAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def evaluate_ppo_agent(env,\n", + " actor_critic,\n", + " num_episodes=10,\n", + " output_dir='eval_gifs'):\n", + " if not os.path.exists(output_dir):\n", + " os.makedirs(output_dir)\n", + " \n", + " eval_episode_rwds=[] \n", + " for episode in range(num_episodes):\n", + " obs=env.reset()\n", + " episode_rwds_ppo=np.zeros((2,))\n", + " frames_paths=[]\n", + " done=False\n", + " timestep=0\n", + " while not done:\n", + " with torch.no_grad():\n", + " obs_tensor=torch.tensor(obs,\n", + " dtype=torch.float32).unsqueeze(0)\n", + " policy_logits,_=actor_critic(obs_tensor)\n", + " action1=Categorical(logits=policy_logits).sample().item()\n", + " action2=Categorical(logits=policy_logits).sample().item()\n", + " next_obs,rewards,done,_=env.step([action1,\n", + " action2])\n", + " episode_rwds_ppo+=rewards \n", + " obs=next_obs\n", + " frame_path=os.path.join(output_dir,\n", + " f\"episode_{episode+1}_frame_{timestep}.png\")\n", + " env.render(save_path=frame_path) \n", + " frames_paths.append(frame_path) \n", + " timestep+=1\n", + " eval_episode_rwds.append(episode_rwds_ppo) \n", + " \n", + " frames=[imageio.imread(path) for path in frames_paths]\n", + " gif_path=os.path.join(output_dir,f\"episode_{episode+1}.gif\")\n", + " imageio.mimsave(gif_path,frames,fps=10) \n", + " for path in frames_paths:\n", + " os.remove(path)\n", + " print(f\"Episode {episode+1} evaluated, GIF saved to {gif_path}.\")\n", + "\n", + " eval_episode_rwds=np.array(eval_episode_rwds) \n", + " plt.figure(figsize=(12,6))\n", + " for agent_index in range(2):\n", + " plt.plot(range(1,num_episodes+1),eval_episode_rwds[:,agent_index],marker='o',label=f'Agent {agent_index+1}')\n", + " plt.title('Total Rewards per Episode for Each Agent')\n", + " plt.xlabel('Episode')\n", + " plt.ylabel('Total Reward')\n", + " plt.legend()\n", + " plt.grid(True)\n", + " plt.savefig(os.path.join(output_dir,'rewards_plot.png'))\n", + " plt.show()\n", + "\n", + "evaluate_ppo_agent(env,actor_critic,num_episodes=10)" + ] + } + ], + "metadata": { + "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.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}