{ "metadata": { "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.10" }, "orig_nbformat": 2, "kernelspec": { "name": "python3710jvsc74a57bd0366e1054dee9d4501b0eb8f87335afd3c67fc62db6ee611bbc7f8f5a1fefe232", "display_name": "Python 3.7.10 64-bit ('py37': conda)" }, "metadata": { "interpreter": { "hash": "366e1054dee9d4501b0eb8f87335afd3c67fc62db6ee611bbc7f8f5a1fefe232" } } }, "nbformat": 4, "nbformat_minor": 2, "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "from pathlib import Path\n", "curr_path = str(Path().absolute())\n", "parent_path = str(Path().absolute().parent)\n", "sys.path.append(parent_path) # add current terminal path to sys.path" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import gym\n", "import torch\n", "import datetime\n", "\n", "from common.utils import save_results, make_dir\n", "from common.plot import plot_rewards\n", "from DQN.agent import DQN\n", "\n", "curr_time = datetime.datetime.now().strftime(\n", " \"%Y%m%d-%H%M%S\") # obtain current time" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "class DQNConfig:\n", " def __init__(self):\n", " self.algo = \"DQN\" # name of algo\n", " self.env = 'CartPole-v0'\n", " self.result_path = curr_path+\"/outputs/\" + self.env + \\\n", " '/'+curr_time+'/results/' # path to save results\n", " self.model_path = curr_path+\"/outputs/\" + self.env + \\\n", " '/'+curr_time+'/models/' # path to save results\n", " self.train_eps = 300 # max trainng episodes\n", " self.eval_eps = 50 # number of episodes for evaluating\n", " self.gamma = 0.95\n", " self.epsilon_start = 0.90 # start epsilon of e-greedy policy\n", " self.epsilon_end = 0.01\n", " self.epsilon_decay = 500\n", " self.lr = 0.0001 # learning rate\n", " self.memory_capacity = 100000 # capacity of Replay Memory\n", " self.batch_size = 64\n", " self.target_update = 2 # update frequency of target net\n", " self.device = torch.device(\n", " \"cuda\" if torch.cuda.is_available() else \"cpu\") # check gpu\n", " self.hidden_dim = 256 # hidden size of net" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def env_agent_config(cfg,seed=1):\n", " env = gym.make(cfg.env) \n", " env.seed(seed)\n", " state_dim = env.observation_space.shape[0]\n", " action_dim = env.action_space.n\n", " agent = DQN(state_dim,action_dim,cfg)\n", " return env,agent" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def train(cfg, env, agent):\n", " print('Start to train !')\n", " print(f'Env:{cfg.env}, Algorithm:{cfg.algo}, Device:{cfg.device}')\n", " rewards = []\n", " ma_rewards = [] # moveing average reward\n", " for i_ep in range(cfg.train_eps):\n", " state = env.reset()\n", " done = False\n", " ep_reward = 0\n", " while True:\n", " action = agent.choose_action(state)\n", " next_state, reward, done, _ = env.step(action)\n", " ep_reward += reward\n", " agent.memory.push(state, action, reward, next_state, done)\n", " state = next_state\n", " agent.update()\n", " if done:\n", " break\n", " if i_ep % cfg.target_update == 0:\n", " agent.target_net.load_state_dict(agent.policy_net.state_dict())\n", " if (i_ep+1)%10 == 0:\n", " print('Episode:{}/{}, Reward:{}'.format(i_ep+1, cfg.train_eps, ep_reward))\n", " rewards.append(ep_reward)\n", " # save ma rewards\n", " if ma_rewards:\n", " ma_rewards.append(0.9*ma_rewards[-1]+0.1*ep_reward)\n", " else:\n", " ma_rewards.append(ep_reward)\n", " print('Complete training!')\n", " return rewards, ma_rewards" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def eval(cfg,env,agent):\n", " rewards = [] \n", " ma_rewards = [] # moving average rewards\n", " for i_ep in range(cfg.eval_eps):\n", " ep_reward = 0 # reward per episode\n", " state = env.reset() \n", " while True:\n", " action = agent.predict(state) \n", " next_state, reward, done, _ = env.step(action) \n", " state = next_state \n", " ep_reward += reward\n", " if done:\n", " break\n", " rewards.append(ep_reward)\n", " if ma_rewards:\n", " ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1)\n", " else:\n", " ma_rewards.append(ep_reward)\n", " if (i_ep+1)%10==0:\n", " print(f\"Episode:{i_ep+1}/{cfg.eval_eps}, reward:{ep_reward:.1f}\")\n", " return rewards,ma_rewards" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [] }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Start to train !\n", "Env:CartPole-v0, Algorithm:DQN, Device:cuda\n", "Episode:10/300, Reward:13.0\n", "Episode:20/300, Reward:14.0\n", "Episode:30/300, Reward:14.0\n", "Episode:40/300, Reward:12.0\n", "Episode:50/300, Reward:125.0\n", "Episode:60/300, Reward:98.0\n", "Episode:70/300, Reward:200.0\n", "Episode:80/300, Reward:160.0\n", "Episode:90/300, Reward:200.0\n", "Episode:100/300, Reward:200.0\n", "Episode:110/300, Reward:200.0\n", "Episode:120/300, Reward:198.0\n", "Episode:130/300, Reward:200.0\n", "Episode:140/300, Reward:200.0\n", "Episode:150/300, Reward:200.0\n", "Episode:160/300, Reward:200.0\n", "Episode:170/300, Reward:200.0\n", "Episode:180/300, Reward:200.0\n", "Episode:190/300, Reward:200.0\n", "Episode:200/300, Reward:200.0\n", "Episode:210/300, Reward:200.0\n", "Episode:220/300, Reward:200.0\n", "Episode:230/300, Reward:188.0\n", "Episode:240/300, Reward:200.0\n", "Episode:250/300, Reward:200.0\n", "Episode:260/300, Reward:193.0\n", "Episode:270/300, Reward:200.0\n", "Episode:280/300, Reward:200.0\n", "Episode:290/300, Reward:200.0\n", "Episode:300/300, Reward:200.0\n", "Complete training!\n", "results saved!\n" ] }, { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\n\n\n \n \n \n \n 2021-05-04T19:04:03.044086\n image/svg+xml\n \n \n Matplotlib v3.4.1, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", "image/png": "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/vijSE1NFSdPnqx3fz///LP44osvhM1mEwUFBWLOnDniqaee8s6v65rx/T0JIcSpU6e814WmaWLXrl1i2LBh4quvvhJvvvmmuOiii8TJkydFWVmZuOeee8T8+fNrrSdE866nhnTgySefFIsWLfJb/vLLLxcfffRRvcfhXCM9+ypmzJhBYmIiqqpy2WWX0atXL77//nsArrjiCt5//33vshs3buSKK64A4I033uD6669n+PDh6HQ6rrnmGgwGA3v27PEuP3fuXJKTkzGbzY3u68MPP+TGG28kKSmJyMhI7rjjDu928vPz2bZtG4899hgWi4XY2FhuuukmP9vqY8OGDUyaNInJkyejqioTJkxg6NChbNu2DYApU6bQs2dPFEVhzJgxTJgwgV27dnnXV1WV++67D6PR6G3HqFGjmDx5MjqdjquuusrviaYm9S27d+9enE4nN954IwaDgUsuuYTzzz+/3u383//9H7fddhvDhg1DURR69epFSkpKo+2vqw1XXHEFn376KZWVlYD7vF5++eVNOl6+7N27l4qKCu644w6MRiPjx49n6tSpTTovDZGQkEBxcTEARUVFxMfH11pGr9cTHR1NYWGh3/T77ruP1157rdb0xmhKW6ZNm8aoUaNQVRWTyeS3/tmzZ72210evXr2YMGECRqORmJgYbr75Znbu3Om3TM1rpj7GjRvHmDFjWLhwIQ8//DDjx49n48aN3HTTTfTo0YPQ0FAeeughPvjgg1ohoeZeTw3pQEVFBeHh4X7Lh4WF+T1xdTT1BxG7GOvXr+eVV17xdqpUVFRQVFQEwNixY7Farezdu5fY2FgOHTrkfeTNzMxk/fr1vPbaa95tORwOv8615OTkJu8rNzfXb/mkpCTv58zMTJxOJxdeeKF3mqZptbZfF5mZmXz00Ue1whaeTtRt27axevVqfv75ZzRNw2q1kpqa6l02Ojq61oUdFxfn/Ww2m7HZbDidzjpj0/Utm5ubS2JiIoqieOc31J6srCx69uzZaHvromYbevXqRb9+/diyZQtTp07l008/Zf369UDjx8uX3NxckpKSUNVq36lbt27k5OS0yE4POTk5REZGem3Py8urtYzT6aSoqIjo6Gi/6ampqUyZMoU1a9bQr1+/Ju+zKW1p6PxERUV5t9OjR486l8nPz2fp0qXs2rWL8vJyhBBERET4LdOU3zTA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\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "Episode:10/50, reward:188.0\n", "Episode:20/50, reward:200.0\n", "Episode:30/50, reward:200.0\n", "Episode:40/50, reward:200.0\n", "Episode:50/50, reward:171.0\n", "results saved!\n" ] }, { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\n\n\n \n \n \n \n 2021-05-04T19:04:05.465993\n image/svg+xml\n \n \n Matplotlib v3.4.1, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", "image/png": "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\n" }, "metadata": {} } ], "source": [ "if __name__ == \"__main__\":\n", " cfg = DQNConfig()\n", "\n", " # train\n", " env,agent = env_agent_config(cfg,seed=1)\n", " rewards, ma_rewards = train(cfg, env, agent)\n", " make_dir(cfg.result_path, cfg.model_path)\n", " agent.save(path=cfg.model_path)\n", " save_results(rewards, ma_rewards, tag='train', path=cfg.result_path)\n", " plot_rewards(rewards, ma_rewards, tag=\"train\",\n", " algo=cfg.algo, path=cfg.result_path)\n", " # eval\n", " env,agent = env_agent_config(cfg,seed=10)\n", " agent.load(path=cfg.model_path)\n", " rewards,ma_rewards = eval(cfg,env,agent)\n", " save_results(rewards,ma_rewards,tag='eval',path=cfg.result_path)\n", " plot_rewards(rewards,ma_rewards,tag=\"eval\",env=cfg.env,algo = cfg.algo,path=cfg.result_path)" ] } ] }