From 75df9992581014999ce83091b14cea29d10ce568 Mon Sep 17 00:00:00 2001 From: johnjim0816 Date: Wed, 22 Dec 2021 11:19:13 +0800 Subject: [PATCH] update --- codes/DDPG/task0.py | 2 +- codes/DDPG/train.py | 4 +- codes/DQN/task0.py | 2 +- codes/DQN/task1.py | 2 +- codes/DQN/train.ipynb | 6 +- codes/DQN/train.py | 12 +- codes/PPO/task0.py | 2 +- codes/PPO/task1.py | 2 +- codes/PPO/train.ipynb | 4 +- codes/PPO/train.py | 6 +- codes/PolicyGradient/model.py | 9 +- codes/PolicyGradient/task0_train.py | 4 +- codes/QLearning/agent.py | 14 +- .../20210919-211343/models/Qleaning_model.pkl | Bin 5423 -> 0 bytes .../results/train_ma_rewards.npy | Bin 1728 -> 0 bytes .../20210919-211343/results/train_rewards.npy | Bin 1728 -> 0 bytes .../results/train_rewards_curve_cn.png | Bin 49900 -> 0 bytes .../20210919-211442/models/Qleaning_model.pkl | Bin 5423 -> 0 bytes .../results/train_ma_rewards.npy | Bin 1728 -> 0 bytes .../20210919-211442/results/train_rewards.npy | Bin 1728 -> 0 bytes .../results/train_rewards_curve_cn.png | Bin 48748 -> 0 bytes .../20210919-211456/models/Qleaning_model.pkl | Bin 5039 -> 0 bytes .../results/train_ma_rewards.npy | Bin 136 -> 0 bytes .../20210919-211456/results/train_rewards.npy | Bin 136 -> 0 bytes .../results/train_rewards_curve_cn.png | Bin 33638 -> 0 bytes .../20210920-003309/models/Qleaning_model.pkl | Bin 5423 -> 0 bytes .../results/eval_rewards_curve_cn.png | Bin 31614 -> 0 bytes .../results/train_ma_rewards.npy | Bin 3328 -> 0 bytes .../20210920-003309/results/train_rewards.npy | Bin 3328 -> 0 bytes .../results/train_rewards_curve_cn.png | Bin 43429 -> 0 bytes .../20211222-110223/models/Qleaning_model.pkl | Bin 0 -> 5359 bytes .../results/test_ma_rewards.npy} | Bin .../results/test_rewards.npy} | Bin .../results/test_rewards_curve.png | Bin 0 -> 24953 bytes .../results/train_ma_rewards.npy | Bin 0 -> 3328 bytes .../20211222-110223/results/train_rewards.npy | Bin 0 -> 3328 bytes .../results/train_rewards_curve.png | Bin 0 -> 39322 bytes .../20211222-111747/models/Qleaning_model.pkl | Bin 0 -> 5359 bytes .../results/test_ma_rewards.npy | Bin 0 -> 288 bytes .../20211222-111747/results/test_rewards.npy | Bin 0 -> 288 bytes .../results/test_rewards_curve.png | Bin 0 -> 13331 bytes .../results/train_ma_rewards.npy | Bin 0 -> 3328 bytes .../20211222-111747/results/train_rewards.npy | Bin 0 -> 3328 bytes .../results/train_rewards_curve.png | Bin 0 -> 18121 bytes codes/QLearning/task0.ipynb | 386 ++++++++++++++++++ codes/QLearning/task0.py | 93 +++++ codes/QLearning/task0_train.ipynb | 216 ---------- codes/QLearning/task0_train.py | 126 ------ codes/QLearning/train.py | 51 +++ codes/README.md | 1 + codes/SAC/task0_train.ipynb | 4 +- codes/SAC/task0_train.py | 4 +- codes/Sarsa/task0_train.py | 6 +- codes/TD3/README.md | 1 + codes/TD3/agent.py | 51 ++- 55 files changed, 605 insertions(+), 403 deletions(-) delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211343/models/Qleaning_model.pkl delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211343/results/train_ma_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211343/results/train_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211343/results/train_rewards_curve_cn.png delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211442/models/Qleaning_model.pkl delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_ma_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_rewards_curve_cn.png delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211456/models/Qleaning_model.pkl delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_ma_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_rewards_curve_cn.png delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/models/Qleaning_model.pkl delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_rewards_curve_cn.png delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_ma_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards.npy delete mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards_curve_cn.png create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-110223/models/Qleaning_model.pkl rename codes/QLearning/outputs/CliffWalking-v0/{20210920-003309/results/eval_ma_rewards.npy => 20211222-110223/results/test_ma_rewards.npy} (100%) rename codes/QLearning/outputs/CliffWalking-v0/{20210920-003309/results/eval_rewards.npy => 20211222-110223/results/test_rewards.npy} (100%) create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_rewards_curve.png create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_ma_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_rewards_curve.png create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/models/Qleaning_model.pkl create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_ma_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_rewards_curve.png create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_ma_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_rewards_curve.png create mode 100644 codes/QLearning/task0.ipynb create mode 100644 codes/QLearning/task0.py delete mode 100644 codes/QLearning/task0_train.ipynb delete mode 100644 codes/QLearning/task0_train.py create mode 100644 codes/QLearning/train.py create mode 100644 codes/TD3/README.md diff --git a/codes/DDPG/task0.py b/codes/DDPG/task0.py index 33872f4..550da78 100644 --- a/codes/DDPG/task0.py +++ b/codes/DDPG/task0.py @@ -34,7 +34,7 @@ class DDPGConfig: self.env_name = env_name # 环境名称 self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 300 # 训练的回合数 - self.eval_eps = 50 # 测试的回合数 + self.test_eps = 50 # 测试的回合数 self.gamma = 0.99 # 折扣因子 self.critic_lr = 1e-3 # 评论家网络的学习率 self.actor_lr = 1e-4 # 演员网络的学习率 diff --git a/codes/DDPG/train.py b/codes/DDPG/train.py index 8554cd0..4cdfa9d 100644 --- a/codes/DDPG/train.py +++ b/codes/DDPG/train.py @@ -42,7 +42,7 @@ def test(cfg, env, agent): print(f'环境:{cfg.env_name}, 算法:{cfg.algo}, 设备:{cfg.device}') rewards = [] # 记录所有回合的奖励 ma_rewards = [] # 记录所有回合的滑动平均奖励 - for i_ep in range(cfg.eval_eps): + for i_ep in range(cfg.test_eps): state = env.reset() done = False ep_reward = 0 @@ -59,6 +59,6 @@ def test(cfg, env, agent): ma_rewards.append(0.9*ma_rewards[-1]+0.1*ep_reward) else: ma_rewards.append(ep_reward) - print(f"回合:{i_ep+1}/{cfg.eval_eps},奖励:{ep_reward:.1f}") + print(f"回合:{i_ep+1}/{cfg.test_eps},奖励:{ep_reward:.1f}") print('完成测试!') return rewards, ma_rewards \ No newline at end of file diff --git a/codes/DQN/task0.py b/codes/DQN/task0.py index e4c326e..7c20144 100644 --- a/codes/DQN/task0.py +++ b/codes/DQN/task0.py @@ -23,7 +23,7 @@ class DQNConfig: self.device = torch.device( "cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 200 # 训练的回合数 - self.eval_eps = 30 # 测试的回合数 + self.test_eps = 30 # 测试的回合数 # 超参数 self.gamma = 0.95 # 强化学习中的折扣因子 self.epsilon_start = 0.90 # e-greedy策略中初始epsilon diff --git a/codes/DQN/task1.py b/codes/DQN/task1.py index d85a2ef..cf93829 100644 --- a/codes/DQN/task1.py +++ b/codes/DQN/task1.py @@ -26,7 +26,7 @@ class DQNConfig: self.device = torch.device( "cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 200 # 训练的回合数 - self.eval_eps = 30 # 测试的回合数 + self.test_eps = 30 # 测试的回合数 # 超参数 self.gamma = 0.95 # 强化学习中的折扣因子 self.epsilon_start = 0.90 # e-greedy策略中初始epsilon diff --git a/codes/DQN/train.ipynb b/codes/DQN/train.ipynb index ba4308e..2529826 100644 --- a/codes/DQN/train.ipynb +++ b/codes/DQN/train.ipynb @@ -180,7 +180,7 @@ " self.algo = \"DQN\" # 算法名称\n", " self.env = 'CartPole-v0' # 环境名称\n", " self.train_eps = 200 # 训练的回合数\n", - " self.eval_eps = 20 # 测试的回合数\n", + " self.test_eps = 20 # 测试的回合数\n", " self.gamma = 0.95 # 强化学习中的折扣因子\n", " self.epsilon_start = 0.90 # e-greedy策略中初始epsilon\n", " self.epsilon_end = 0.01 # e-greedy策略中的终止epsilon\n", @@ -365,7 +365,7 @@ " cfg.epsilon_end = 0.0 # e-greedy策略中的终止epsilon\n", " rewards = [] # 记录所有回合的奖励\n", " ma_rewards = [] # 记录所有回合的滑动平均奖励\n", - " for i_ep in range(cfg.eval_eps):\n", + " for i_ep in range(cfg.test_eps):\n", " ep_reward = 0 # 记录一回合内的奖励\n", " state = env.reset() # 重置环境,返回初始状态\n", " while True:\n", @@ -381,7 +381,7 @@ " else:\n", " ma_rewards.append(ep_reward)\n", " if (i_ep+1)%3 == 0: \n", - " print(f\"回合:{i_ep+1}/{cfg.eval_eps}, 奖励:{ep_reward:.1f}\")\n", + " print(f\"回合:{i_ep+1}/{cfg.test_eps}, 奖励:{ep_reward:.1f}\")\n", " print('完成测试!')\n", " return rewards,ma_rewards\n", "\n", diff --git a/codes/DQN/train.py b/codes/DQN/train.py index 4f8510e..54fe1d8 100644 --- a/codes/DQN/train.py +++ b/codes/DQN/train.py @@ -5,7 +5,7 @@ @Email: johnjim0816@gmail.com @Date: 2020-06-12 00:48:57 @LastEditor: John -LastEditTime: 2021-09-15 15:34:13 +LastEditTime: 2021-12-22 11:08:04 @Discription: @Environment: python 3.7.7 ''' @@ -30,13 +30,13 @@ def train(cfg, env, agent): break if (i_ep+1) % cfg.target_update == 0: # 智能体目标网络更新 agent.target_net.load_state_dict(agent.policy_net.state_dict()) - if (i_ep+1)%10 == 0: - print('回合:{}/{}, 奖励:{}'.format(i_ep+1, cfg.train_eps, ep_reward)) rewards.append(ep_reward) if ma_rewards: ma_rewards.append(0.9*ma_rewards[-1]+0.1*ep_reward) else: ma_rewards.append(ep_reward) + if (i_ep+1)%10 == 0: + print('回合:{}/{}, 奖励:{}'.format(i_ep+1, cfg.train_eps, ep_reward)) print('完成训练!') return rewards, ma_rewards @@ -48,7 +48,7 @@ def test(cfg,env,agent): cfg.epsilon_end = 0.0 # e-greedy策略中的终止epsilon rewards = [] # 记录所有回合的奖励 ma_rewards = [] # 记录所有回合的滑动平均奖励 - for i_ep in range(cfg.eval_eps): + for i_ep in range(cfg.test_eps): ep_reward = 0 # 记录一回合内的奖励 state = env.reset() # 重置环境,返回初始状态 while True: @@ -63,7 +63,7 @@ def test(cfg,env,agent): ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1) else: ma_rewards.append(ep_reward) - print(f"回合:{i_ep+1}/{cfg.eval_eps},奖励:{ep_reward:.1f}") + print(f"回合:{i_ep+1}/{cfg.test_eps},奖励:{ep_reward:.1f}") print('完成测试!') return rewards,ma_rewards @@ -89,7 +89,7 @@ if __name__ == "__main__": self.env_name = 'CartPole-v0' # 环境名称 self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 200 # 训练的回合数 - self.eval_eps = 30 # 测试的回合数 + self.test_eps = 30 # 测试的回合数 # 超参数 self.gamma = 0.95 # 强化学习中的折扣因子 self.epsilon_start = 0.90 # e-greedy策略中初始epsilon diff --git a/codes/PPO/task0.py b/codes/PPO/task0.py index cd55eda..8e0d92a 100644 --- a/codes/PPO/task0.py +++ b/codes/PPO/task0.py @@ -20,7 +20,7 @@ class PPOConfig: self.continuous = False # 环境是否为连续动作 self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 200 # 训练的回合数 - self.eval_eps = 20 # 测试的回合数 + self.test_eps = 20 # 测试的回合数 self.batch_size = 5 self.gamma=0.99 self.n_epochs = 4 diff --git a/codes/PPO/task1.py b/codes/PPO/task1.py index 178efba..38d9152 100644 --- a/codes/PPO/task1.py +++ b/codes/PPO/task1.py @@ -20,7 +20,7 @@ class PPOConfig: self.continuous = True # 环境是否为连续动作 self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 200 # 训练的回合数 - self.eval_eps = 20 # 测试的回合数 + self.test_eps = 20 # 测试的回合数 self.batch_size = 5 self.gamma=0.99 self.n_epochs = 4 diff --git a/codes/PPO/train.ipynb b/codes/PPO/train.ipynb index 9c74585..b2dc91a 100644 --- a/codes/PPO/train.ipynb +++ b/codes/PPO/train.ipynb @@ -68,7 +68,7 @@ " self.result_path = curr_path+\"/results/\" +self.env+'/'+curr_time+'/results/' # path to save results\n", " self.model_path = curr_path+\"/results/\" +self.env+'/'+curr_time+'/models/' # path to save models\n", " self.train_eps = 200 # max training episodes\n", - " self.eval_eps = 50\n", + " self.test_eps = 50\n", " self.batch_size = 5\n", " self.gamma=0.99\n", " self.n_epochs = 4\n", @@ -144,7 +144,7 @@ " print(f'Env:{cfg.env}, Algorithm:{cfg.algo}, Device:{cfg.device}')\n", " rewards= []\n", " ma_rewards = [] # moving average rewards\n", - " for i_ep in range(cfg.eval_eps):\n", + " for i_ep in range(cfg.test_eps):\n", " state = env.reset()\n", " done = False\n", " ep_reward = 0\n", diff --git a/codes/PPO/train.py b/codes/PPO/train.py index aff54bf..e642df0 100644 --- a/codes/PPO/train.py +++ b/codes/PPO/train.py @@ -32,7 +32,7 @@ def eval(cfg,env,agent): print(f'环境:{cfg.env_name}, 算法:{cfg.algo}, 设备:{cfg.device}') rewards = [] # 记录所有回合的奖励 ma_rewards = [] # 记录所有回合的滑动平均奖励 - for i_ep in range(cfg.eval_eps): + for i_ep in range(cfg.test_eps): state = env.reset() done = False ep_reward = 0 @@ -47,7 +47,7 @@ def eval(cfg,env,agent): 0.9*ma_rewards[-1]+0.1*ep_reward) else: ma_rewards.append(ep_reward) - print('回合:{}/{}, 奖励:{}'.format(i_ep+1, cfg.eval_eps, ep_reward)) + print('回合:{}/{}, 奖励:{}'.format(i_ep+1, cfg.test_eps, ep_reward)) print('完成训练!') return rewards,ma_rewards @@ -74,7 +74,7 @@ if __name__ == '__main__': self.continuous = False # 环境是否为连续动作 self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU self.train_eps = 200 # 训练的回合数 - self.eval_eps = 20 # 测试的回合数 + self.test_eps = 20 # 测试的回合数 self.batch_size = 5 self.gamma=0.99 self.n_epochs = 4 diff --git a/codes/PolicyGradient/model.py b/codes/PolicyGradient/model.py index 7f5b1a8..6d9bc64 100644 --- a/codes/PolicyGradient/model.py +++ b/codes/PolicyGradient/model.py @@ -5,21 +5,22 @@ Author: John Email: johnjim0816@gmail.com Date: 2021-03-23 16:35:58 LastEditor: John -LastEditTime: 2021-03-23 16:36:20 +LastEditTime: 2021-12-21 23:21:26 Discription: Environment: ''' import torch.nn as nn import torch.nn.functional as F class MLP(nn.Module): + ''' 多层感知机 输入:state维度 输出:概率 ''' - def __init__(self,state_dim,hidden_dim = 36): + def __init__(self,input_dim,hidden_dim = 36): super(MLP, self).__init__() - # 24和36为hidden layer的层数,可根据state_dim, action_dim的情况来改变 - self.fc1 = nn.Linear(state_dim, hidden_dim) + # 24和36为hidden layer的层数,可根据input_dim, action_dim的情况来改变 + self.fc1 = nn.Linear(input_dim, hidden_dim) self.fc2 = nn.Linear(hidden_dim,hidden_dim) self.fc3 = nn.Linear(hidden_dim, 1) # Prob of Left diff --git a/codes/PolicyGradient/task0_train.py b/codes/PolicyGradient/task0_train.py index a7fb0d2..b6866f0 100644 --- a/codes/PolicyGradient/task0_train.py +++ b/codes/PolicyGradient/task0_train.py @@ -34,7 +34,7 @@ class PGConfig: self.model_path = curr_path+"/outputs/" + self.env + \ '/'+curr_time+'/models/' # 保存模型的路径 self.train_eps = 300 # 训练的回合数 - self.eval_eps = 30 # 测试的回合数 + self.test_eps = 30 # 测试的回合数 self.batch_size = 8 self.lr = 0.01 # 学习率 self.gamma = 0.99 @@ -94,7 +94,7 @@ def eval(cfg,env,agent): print(f'Env:{cfg.env}, Algorithm:{cfg.algo}, Device:{cfg.device}') rewards = [] ma_rewards = [] - for i_ep in range(cfg.eval_eps): + for i_ep in range(cfg.test_eps): state = env.reset() ep_reward = 0 for _ in count(): diff --git a/codes/QLearning/agent.py b/codes/QLearning/agent.py index 4587c86..be57831 100644 --- a/codes/QLearning/agent.py +++ b/codes/QLearning/agent.py @@ -5,7 +5,7 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-09-11 23:03:00 LastEditor: John -LastEditTime: 2021-09-19 23:05:45 +LastEditTime: 2021-12-22 10:54:57 Discription: use defaultdict to define Q table Environment: ''' @@ -15,17 +15,17 @@ import torch from collections import defaultdict class QLearning(object): - def __init__(self,state_dim, - action_dim,cfg): - self.action_dim = action_dim # dimension of acgtion - self.lr = cfg.lr # learning rate + def __init__(self,n_states, + n_actions,cfg): + self.n_actions = n_actions + self.lr = cfg.lr # 学习率 self.gamma = cfg.gamma self.epsilon = 0 self.sample_count = 0 self.epsilon_start = cfg.epsilon_start self.epsilon_end = cfg.epsilon_end self.epsilon_decay = cfg.epsilon_decay - self.Q_table = defaultdict(lambda: np.zeros(action_dim)) # A nested dictionary that maps state -> (action -> action-value) + self.Q_table = defaultdict(lambda: np.zeros(n_actions)) # 用嵌套字典存放状态->动作->状态-动作值(Q值)的映射,即Q表 def choose_action(self, state): self.sample_count += 1 self.epsilon = self.epsilon_end + (self.epsilon_start - self.epsilon_end) * \ @@ -34,7 +34,7 @@ class QLearning(object): if np.random.uniform(0, 1) > self.epsilon: action = np.argmax(self.Q_table[str(state)]) # 选择Q(s,a)最大对应的动作 else: - action = np.random.choice(self.action_dim) # 随机选择动作 + action = np.random.choice(self.n_actions) # 随机选择动作 return action def predict(self,state): action = np.argmax(self.Q_table[str(state)]) diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211343/models/Qleaning_model.pkl b/codes/QLearning/outputs/CliffWalking-v0/20210919-211343/models/Qleaning_model.pkl deleted file mode 100644 index 45dce51e48625528fe3e9e518b9c8ef538085da0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5423 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 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211343/results/train_rewards_curve_cn.png b/codes/QLearning/outputs/CliffWalking-v0/20210919-211343/results/train_rewards_curve_cn.png deleted file mode 100644 index 3226b8a24140e6c3e723d0dc3774d363ec891e1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49900 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 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_ma_rewards.npy deleted file mode 100644 index 1d6b88993fe34fd6d08a5464c321a188b04be62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcmbW1`#%&28^sB0wx%s1NlB@t*i0_Xx}-7}GtCU!kC`y@(rrUojEC2mOB)T*!Cc0}b!_-5R%S%qSA}j`n3@sqZeW zFLgKKm4A0DYj(k9Jaet+vIgaA!sAMOGLTN*8#y7~ffuVHlJYs*vFtG+<|88wV^ii@ zO<@Y|7e24`mu~~i_xqZWlX1wQbL5v%6`nP4?AOXvFwfI_9)FYwhYtnSlgvb%xY|e9 z=bL~>Lv4bNoOl!*v$18L+XBA2lWDPT3*^Q(ohzFD16|2zPfdst5qV>}xOycLG92Ib zx5Pk`>n-b=8-rfAlKWYM3Z#55PNtla!+v%B$T(X8JDalXq$6^;zi*coFOuW&O7|0G z)ls;9g-*3R5CxMAqS(SC3L$Iqj9*tpqF~|m%~ED0;)lH|;~6rfXOV2Lt&l;Kk``?z zlVRE)y*uUV2xR705R=zS5zy6@G$PrAoZF?v|c%@}Gzy$hc_z@s1eoJx*1F3qxUbI?=0cvlx2Pg=@_eF*@HgDYYUI zI2|+3%>PY@vxC#mBQyX;S_%KK8}>6xZ1D zQRNzx*hJ!C+N8clt>B|x%jDY;_}K5+S~Sm!j~!8+&DAbE_`d9(d@3_=67PrJWG;@z z?yBPC@v!XB-y`i59=4jE<|<4CAdzjNzcS?L2M=Ek4d>xn$?=G%m$_Kb8?b-W(1)#E zVx8m7LmTIgUe?Wp{A}4&S-Swg)xDkCo@dA#x4izG!iR7v?btZe!29@@i>rCCxM`ZM zEaGA|-}HXv7#EWnr6|tg;&ra%o1Uo&Fj|ShtQ)`0|l{;u5NU16wwOa8b^NhMH`?zK)Hb*JSd|6WFl+{lF@R z9yVm-F>jBpXJdL&g=L>P8~ZP?&Q!`+U|f`T-*7bCliX|kp@RjN#*O7+>d`}E?lrwQZ&Wd%Tio}hx{rx8dyAHmYzB_s-1g_vHYT)pS0CC(V#0W14Y|sN zfumkctV{_5swbhTr>RT~?~L6dFJhp9XnA!Vg8~1IZET-cbi@U3Nb_tBgjIh)TofS? z?H>s5FTJBfF(_cn$q9thW_I#yK_KpjKRT+@1j6~b)q^*e==h1yvD{Km$KiWjy(`9P z80}qn<-vIdwx)Pq`)&^dg|P#>z0v|9=wO9KN6=w=Lu#f@pu^?|^TzqB=&;s(K|C^t zj;ouzla{2?!TDoIVfKaw+1Cv^(>OYEmxv=w&(XlV7_< zce#>vR7|pGod4wuDk$w`+@JLnyeOg<_76~yFC^Y8a;Kupc7{s$jsg>TVy*3108AwF zn$J&BusYjqo7o47;m=hrXmq5abgmKSauWrws%#G)oJoatfz3kl4GQXtBfI4m6o{tJ R7@he#0P{tOf(Irv`~%+eIdlL3 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_rewards.npy deleted file mode 100644 index 6e6ccf09f14300f1dea988ea03f5bd2fd1101b8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcmbW0%S)7D6o+*cxad!aSqPuPETmP0E5Teu+NQuZ!=R%HUTQ|&h(enb1WVhrNJzwL z&=fTU#Y#o(;|q6-h~}-7B<6bI0)av2(<1ZdX4!lpdZ41I1k66bsnRA zhaU7AbPiSM&(OKOL_dSpy@$5HKJ+Nmm%fLOQAngyvsI zPec7Jp&Q``sNX#FC-@Xv-@W@nTpzE{-tT)jC;d5}cjPZa-|;ni8z!NB?4ln)_h$vI zfA4!v+T@V;|PFj`P%yefs@3_3Ya`=V>3FvmfW>J?{A-&ygH~ diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_rewards_curve_cn.png b/codes/QLearning/outputs/CliffWalking-v0/20210919-211442/results/train_rewards_curve_cn.png deleted file mode 100644 index e1cd04e28088b0b30cb44fea7c52f82a9a442144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48748 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
wMAZ(^!aEpPSS@Qt@EMxL?C8G?+ZzmhYi57M&6 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 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/models/Qleaning_model.pkl b/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/models/Qleaning_model.pkl deleted file mode 100644 index 6986805c261b91d541c8b54e8bf990f2b4a4796b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5039 zcmb`L34Bz=9mh8b1YGV*1i2J}MPYMnPKd}65m^$$AhIH`-RwTH3!B~iClhLYZR zrAUGzf|SZ(Iclla0s>;%nclbdu=jo6_g(G(KW`rL9-*~h*dg1)RzLl0p$sKN{y&OjyyiEg9X`4>^I}>f_mj<%irr*rz{v;SsJ@4VH+; zgy4S2bKOrhHf6bpHf9qoY3$!8(hmm|C1>$w=-USQ4Eja#@t&2To6x@4Rui#Hdn%O*4HQjG=GR`Yt1Z7SgDnW9Bxc`BA}E?Bz6it$V;(@+p=ureap)Cwaa z6#1%jtg${3n*$@m<6NUkXJd(|Xl=p~jndfqR$(>6wQVq(!FAIajEVTMe@sUd&{IAHT#4YMwueE#e{?^(RNxx-e#H;ug*mObGXBgNY0#wZRRW;Ko`3lNsF9 z22&VJ4d@_*%3xYDFWDzD4%wNO#-`R_Jj<j;b>`)JdNsNCHgW~NFVo(wY=a9Bi z(<@;Irc7&ETLI;r9owOTL1iGEryW$mtlHYz#joO}P1q-3c6}$h525>I@`T*&ueo0x zmOXO6+!2x&rKv_($PTKRC?69EwN>t-0#uQpTN%s|a9h3R7MH->0(V>?$!AN^6+GNPCeg`N{dvF+96LTSJS9r1;HW=?iH}o z#IY3ab7-rGwwl2jLyOw93Z$tsfmJvcTh(d#oSwFQ()pZ_J!Nxoj9nPxJ(JaD_we3A z#2ABm0dW(}5F{L;MZ~oX8VoUc8Sw>6omEF;@{l|)d#2>eEppESxr2h~5z~%AJ}-}` z3n6&{$Cx7GItJ?nqz$nI8XaPWh*<_rh6pxs))iw^Ps?MfJzOq3<+&@6`!9`tAFk#e z;KXcZAOy4+W+`lNm~SQK{R~1lPrVJG1pVz5g*BZjxf=2hz9UDc^)<#+-N zj}me(gU1ByvysIWu-`#GPRIic-ffTvZKPg0F6rKhQpe?%YI&$;z)0NXyv+9y^9crr z1ROTZaya5Jj}r4q2Jbb@V>VN703J_X&zDm%D*A%sL_5LYq=5GsS|vQ?(B4n9Qw%;} zXivX3iC*vCvO{oBHatVT4>EXGz=!NLQv|0S+!?~1W$>KAowIR8=*zW<%&^9&!;#Un zT}}*Es#Ee2`4BCbVYrc=nzUi6e(cW^=>mi21zfaA#qfed>LJpH8GOW$q)pO0n``P^ ztJA$&)KPV|OkKnm#xB|sKoRhx3_d2{<7R!9!zUc#CyDqe2A?*>&s>e@fw=eCopNtx zxZH-z<|Gn7OT^DH_`HBG*h4IZFFL>%3HTC&FB#yM-w05-HeL7%0l&)NWdUC^L#%+W zJH&4g@tX|3Wr*LliF0uJysP7XmEA#r?-2L948AAe`!+XJ2tRPRKP2vt82s39e`0eB zd*M2((n-BK;HO0T8H1k-_=O$PGWewf`W1nG&EPi%^jjNrew*c;G9tNT;7-a1PWyt&wvlRcJZEUZ%_)5ofhHDPK&TQ9@XIU4mBd8ni}25wE2NM#5c`M+tS9 zGQJe8k-(@zOQ6TcxxC?b?mH=8M%@s8xAwOjt>E{dwc(*szJeMUIQ@$w_`R4iz7nm0 z-$xZ1{(3f&tBK;P$PJ2Ft^Kb-D|i%beM_(|+^>Id%FC~e9`5tex9+OPOhbG#E*&#% zz#|kqMp`&O;5lV-9XYuQAwQvBJlL?Dj%Vmw7tW#N(wWxfGKNxx>++s(d3#^(d5EiL z0}jjSZG_i_^YdqzMicU8UTUuOV97~0nwpo;1zp&Wj;nk%Bgp#b<%jqB(s32`$@Nit HyX}7fVYh>! diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_ma_rewards.npy deleted file mode 100644 index e6793dfa4a0213567fcf3c54d8682963e12ebf49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= aXCxM+0{I$-I+{8PwF(pfuE1aa!2keGgd(H> diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_rewards.npy deleted file mode 100644 index e6793dfa4a0213567fcf3c54d8682963e12ebf49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= aXCxM+0{I$-I+{8PwF(pfuE1aa!2keGgd(H> diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_rewards_curve_cn.png b/codes/QLearning/outputs/CliffWalking-v0/20210919-211456/results/train_rewards_curve_cn.png deleted file mode 100644 index 9c98cc97b370f0e7697bab3fa36a3dd28cb372fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33638 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 M4mXcAo4D-10GA=ejQ{`u diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/models/Qleaning_model.pkl b/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/models/Qleaning_model.pkl deleted file mode 100644 index 4d6ba9501783dbd0515da0ca1253b004cfd07234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5423 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 B>)ZeU diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_ma_rewards.npy deleted file mode 100644 index 7184c7befa75c34d855fd661fc54ca14144b18c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3328 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 DtD{Mu diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards.npy deleted file mode 100644 index f037a253f2614fe79de117f769f3d2d947179cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3328 zcmcK5yKl{L7{~Ei{T0V_NIEoP5HZ^{mJTMG_J}5EomLmRm)L}`m?Q=Z5|rS$1R;Wu zihJGfcL|9>m405!H#s@gM3;A-`{#Ln-?lqCyOyt5Ij3#7ZF9A^HrP|IE~!+P_ARcq zSE_6J>qGVK4XgU=y|q97W!>urYg7KgwcP`?DSQ5+j*j*P?Uj+rtbgXt`#JgdXZZUx z_xzgXc=#i{JMEtA47#NT|=**yf7g zh<|5zJUkp;2p@*KLV8cez8YQ%8{yv2oyKAx3ipTiLi1~}_k~YG`Wvy;J&#S#wb<&8 z#&$3H=i_$=I#0)cKXeE8SARM2GvUopANBH{B|Z^82v3FTAH_Zw-U;nn>b;ft=g^+~ zTjHl%f4Xib{yw}OzA9{SI(&C~x!aS}y$R{M5_>$P<8|zfp?x36c1QQ(H~(Am=<;4a z#Bbh<*ytWF<7d-zvBy7l9yi{Bi7Pv}E?%SZEl2evr9`jqm%5wXqwHVS wiO+OD`K_qmXztM}|6k+&AE?{TK2THy&GA&j0`b diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards_curve_cn.png b/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards_curve_cn.png deleted file mode 100644 index 9c0943aa957ad77d06b01f711a8afa2f26e886da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43429 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 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/models/Qleaning_model.pkl b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/models/Qleaning_model.pkl new file mode 100644 index 0000000000000000000000000000000000000000..dc89386275ce481c61d40970188642d7f297a1a2 GIT binary patch literal 5359 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 literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_ma_rewards.npy similarity index 100% rename from codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_ma_rewards.npy rename to codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_ma_rewards.npy diff --git a/codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_rewards.npy similarity index 100% rename from codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_rewards.npy rename to codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_rewards.npy diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_rewards_curve.png b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/test_rewards_curve.png new file mode 100644 index 0000000000000000000000000000000000000000..d745634722f8694cbb3ff07629f1228ce9db9f0f GIT binary patch literal 24953 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 I=akR{0Gje~UjP6A literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_ma_rewards.npy new file mode 100644 index 0000000000000000000000000000000000000000..23e7c95a455300822a449be4f071a1dddec10412 GIT binary patch literal 3328 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 M-unH<`*U^hUnNIRA^-pY literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_rewards.npy new file mode 100644 index 0000000000000000000000000000000000000000..0ceb153e68cd4446cf9eacbb985f0a4cdecd645a GIT binary patch literal 3328 zcmcK3w`t z(J_AbHpU5K_&yT59lI~Q8;&NvKlWfaB|H@F3DsE_`(U^r+#2o*uY{Y!wc*}yN4P0G z9-a)(g{#8D;gRrBxINq!9tbaoPr}{d&hSoX&ZDufho{30;r;M-cq}{>J`B}4AA444 zALe@zzdHKvi~mh{BUGQ>OYuJs&3hvD>+no?ExZ@fb0PNJ&^w{i{?w;~O^1F%sq-Lw z8+vEO4)p^K_hzUw^z9e{ZP1ec7+P#mS@Bd$%w7?4jhNy7bfcA$j;E z_RUZp`(^yM$~kd5?B!MR+>>`DZzyrL{mK87xV`x=9>;I*bknEq`{b!>e*Hct{w`FP z{Vaa@YS^@@pOS+*8fh-yHg( z^K`RoAN^6@#`5m?Ykl`r{oaFf?y>sCQ62YPb;+x&bJlpZ&Bt%g?8>^g8n1RI-QGi| sef()(d+XG<>ipmK`n;q6txNrSul}1lr}tI;ooszN<^8L;|Et#f0pS!{SpWb4 literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_rewards_curve.png b/codes/QLearning/outputs/CliffWalking-v0/20211222-110223/results/train_rewards_curve.png new file mode 100644 index 0000000000000000000000000000000000000000..a15bd2a9f5908bf8b0ffdc3d0ac6f1051a862a81 GIT binary patch literal 39322 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%0A(fJ_O53d{<8?iv;B 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θ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 literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_ma_rewards.npy new file mode 100644 index 0000000000000000000000000000000000000000..9bee5e4d6873b1ef653f02a96d352439f7a3eca8 GIT binary patch literal 288 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= eXCxM+0{I$720EHL3bhL411<(I&^o|4NNE5DG%d&g literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_rewards.npy new file mode 100644 index 0000000000000000000000000000000000000000..8aeb5ddc0a778163d5a49f6841cf355394cba4a1 GIT binary patch literal 288 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= cXCxM+0{I$720EHL3bhL41Fp~iAz-l508#e2-~a#s literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_rewards_curve.png b/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/test_rewards_curve.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3ffb5e671fbc375edb5aec72f4548771516c15 GIT binary patch literal 13331 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 literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_ma_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_ma_rewards.npy new file mode 100644 index 0000000000000000000000000000000000000000..261a3d5a56047391b4fa1e36b432b1c999b17cfa GIT binary patch literal 3328 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 DSwTo# literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_rewards.npy b/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_rewards.npy new file mode 100644 index 0000000000000000000000000000000000000000..b1a0f23e03ad0ace8f1998a0c42b15fe2085d062 GIT binary patch literal 3328 zcmc)JxoebB6vp8MJ1hSK2Q0=wiWC+i)^>`87GfcT8BqvEXMzZ#*rc!&MFN6g;{qB* zP;hPBf*bC;j{Clgm0*nKeVPwGLPT+z-<)&L@}6_=w`tD&*>e}Px2ey4lBVk9lJ?ss8!Ykp*a3EY5ZVb1Elf%JqLU=CR9QKDt z3+K()SHolBmT*`2Alwsf3y+7V!VTfQaBp}qJQ?l`Z-?}o-@f+e{AQ@%o!AG$gQ2;d zo0pA;5`Q+l6rKrhgxA8|;luDz_%z%RJ`U+P5u5(|1^aYtebm1j|Kad__#teC`@&ji zKKkFpufKh}FZVQ*xYyyW&>ZTv;(s67!`s;Qr;m8^(PadwUi8NoddZ!%vU7(S11=&##{Q^={~~2Y&kBMUQtSo_#szA4B!shkek= zex7(bQGIdxo9kuroa?8)IQ{7~7oDF{haX$<>-#mfIw)VfzVykbi~S|_vKQqiZAB-F2tF~9?VR@XV!S-_sV{zAK|jAb zY_xy+&FdWb%j(c&Zh8Fjy;HVx@n}9a(#uBm+&}+VG!KpyUpz0<(^qm2#r!hcJjMF_ fWqITE|LuC??OzsOoVzTp%>TdV>L26&|FyoKnjl%@ literal 0 HcmV?d00001 diff --git a/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_rewards_curve.png b/codes/QLearning/outputs/CliffWalking-v0/20211222-111747/results/train_rewards_curve.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9d6ad4d506174a2203937c6d43bd6773c0e1f2 GIT binary patch literal 18121 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%0A&8EfaP0jY?@t5>$&+aTS10P2nG(HKy) z)8COYpQ(**YXKUY(WiP8>(5-^&TA8tCAMD zgGl*1!9$@AMDgg6Cxn_IkQs;;%p;|nU?Z_TpQp_;zDmD8EBOkvN95yM@I=fp-H$4LPj{9 zf)!yvptvm{AaJ0dC@Ojbrbq_zCjcFqnvVeTpiNiXnd~CH4Jp5H6{P2aZ3AW7bI`ZO z+Flvc{nxiC{HwJ5zkavEfG2#Uap<+6+l#(2?}XG%&s%}=b`Ih%QsLMU`osq6mtvD3Oht-rK=t%0Q6PSBaPW4S z*?6%xgu?p-1ntnlH7Ru`XEY9UMrQ~!q%1597eY5uyF1~B^8^`eLDHh)0`(2# z?;zcMxi*mMa|mW-qFc+;Pp!u9` z6mtkg7DEu#3`3PMLpe{u4D@9afbPp+Ms%Z0t!=MhG2_CcqQn&x@R34b@NiJ7Th0e^ z?Si49^yjH?L0!|YN%J?%qurFV#N)~x1R(k)(a@UKE>eQ(4fj)(az2X_4Yvb4q>K^1 zC7@lC*>Wk~0UWm(6w%|LkHin~Mk+~ou8ZY4GKc`m8}}GvmtIjBfSDi5ew`$ zG+&zG`wXJMYCsW(7m*0xxA3R>)q+9RYiVhbj3IbY_RmMZB>_%oRzVI$meqMTOOzPC zr=?i|oEtH`5K=XTQctTg0DpFinK)2Yw|hWtS%5Xa`G|_DZAYnQTE^Hodmb$x*_4Mb zIY5GP5Cek<)_!KUrKN>lbwp^0z1^F*rMVgGQiONu*LQd#gi>fYR|uIwiQYjqypnp2 zU``wA8Li3?%eg_}iYx?w`*t5r9}O3W#PA&!h~MxIQorA1T(-OAaYYP*Lr`xWLmLpx z_NIQxgVX_#%~`9Otf?ZUWN_%!15Z<8z(Y<)3qn<#I`ux#@p-{%AMQoY!ZNTk z)o`(40bi%^1vUw|1VAG&ovsc?CbI$!-+(~yPpb%-3>^p^NM$+1Uv17!m z-^Abw4#c<9ic@Ml><`5tEoMUI*q&Mt(LuPz{nYf_)HJt?ejlP)grbI9I7F$Cm>9`O zMm42E%@6Yvs*uj+0r)OJAL4I}Nxl|*bwtpTy8XBwl63)DEd=L@%动作->状态-动作值(Q值)的映射,即Q表\n", + " def choose_action(self, state):\n", + " self.sample_count += 1\n", + " self.epsilon = self.epsilon_end + (self.epsilon_start - self.epsilon_end) * \\\n", + " math.exp(-1. * self.sample_count / self.epsilon_decay) # epsilon是会递减的,这里选择指数递减\n", + " # e-greedy 策略\n", + " if np.random.uniform(0, 1) > self.epsilon:\n", + " action = np.argmax(self.Q_table[str(state)]) # 选择Q(s,a)最大对应的动作\n", + " else:\n", + " action = np.random.choice(self.n_actions) # 随机选择动作\n", + " return action\n", + " def predict(self,state):\n", + " action = np.argmax(self.Q_table[str(state)])\n", + " return action\n", + " def update(self, state, action, reward, next_state, done):\n", + " Q_predict = self.Q_table[str(state)][action] \n", + " if done: # 终止状态\n", + " Q_target = reward \n", + " else:\n", + " Q_target = reward + self.gamma * np.max(self.Q_table[str(next_state)]) \n", + " self.Q_table[str(state)][action] += self.lr * (Q_target - Q_predict)\n", + " def save(self,path):\n", + " import dill\n", + " torch.save(\n", + " obj=self.Q_table,\n", + " f=path+\"Qleaning_model.pkl\",\n", + " pickle_module=dill\n", + " )\n", + " print(\"保存模型成功!\")\n", + " def load(self, path):\n", + " import dill\n", + " self.Q_table =torch.load(f=path+'Qleaning_model.pkl',pickle_module=dill)\n", + " print(\"加载模型成功!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 训练" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "def train(cfg,env,agent):\n", + " print('开始训练!')\n", + " print(f'环境:{cfg.env_name}, 算法:{cfg.algo_name}, 设备:{cfg.device}')\n", + " rewards = [] # 记录奖励\n", + " ma_rewards = [] # 记录滑动平均奖励\n", + " for i_ep in range(cfg.train_eps):\n", + " ep_reward = 0 # 记录每个episode的reward\n", + " state = env.reset() # 重置环境, 重新开一局(即开始新的一个episode)\n", + " while True:\n", + " action = agent.choose_action(state) # 根据算法选择一个动作\n", + " next_state, reward, done, _ = env.step(action) # 与环境进行一次动作交互\n", + " agent.update(state, action, reward, next_state, done) # Q-learning算法更新\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)%20 == 0: \n", + " print('回合:{}/{}, 奖励:{}'.format(i_ep+1, cfg.train_eps, ep_reward))\n", + " print('完成训练!')\n", + " return rewards,ma_rewards" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 测试" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "def test(cfg,env,agent):\n", + " # env = gym.make(\"FrozenLake-v0\", is_slippery=False) # 0 left, 1 down, 2 right, 3 up\n", + " # env = FrozenLakeWapper(env)\n", + " print('开始测试!')\n", + " print(f'环境:{cfg.env_name}, 算法:{cfg.algo_name}, 设备:{cfg.device}')\n", + " # 由于测试不需要使用epsilon-greedy策略,所以相应的值设置为0\n", + " cfg.epsilon_start = 0.0 # e-greedy策略中初始epsilon\n", + " cfg.epsilon_end = 0.0 # e-greedy策略中的终止epsilon\n", + " rewards = [] # 记录所有回合的奖励\n", + " ma_rewards = [] # 记录所有回合的滑动平均奖励\n", + " rewards = [] # 记录所有episode的reward\n", + " ma_rewards = [] # 滑动平均的reward\n", + " for i_ep in range(cfg.test_eps):\n", + " ep_reward = 0 # 记录每个episode的reward\n", + " state = env.reset() # 重置环境, 重新开一局(即开始新的一个episode)\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", + " print(f\"回合:{i_ep+1}/{cfg.test_eps},奖励:{ep_reward:.1f}\")\n", + " print('完成测试!')\n", + " return rewards,ma_rewards" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 设置参数" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "curr_time = datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\") # 获取当前时间\n", + "algo_name = 'Q-learning' # 算法名称\n", + "env_name = 'CliffWalking-v0' # 环境名称\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\") # 检测GPU\n", + "class QlearningConfig:\n", + " '''训练相关参数'''\n", + " def __init__(self):\n", + " self.algo_name = algo_name # 算法名称\n", + " self.env_name = env_name # 环境名称\n", + " self.device = device # 检测GPU\n", + " self.train_eps = 400 # 训练的回合数\n", + " self.test_eps = 20 # 测试的回合数\n", + " self.gamma = 0.9 # reward的衰减率\n", + " self.epsilon_start = 0.95 # e-greedy策略中初始epsilon\n", + " self.epsilon_end = 0.01 # e-greedy策略中的终止epsilon\n", + " self.epsilon_decay = 300 # e-greedy策略中epsilon的衰减率\n", + " self.lr = 0.1 # 学习率 \n", + "class PlotConfig:\n", + " ''' 绘图相关参数设置\n", + " '''\n", + "\n", + " def __init__(self) -> None:\n", + " self.algo_name = algo_name # 算法名称\n", + " self.env_name = env_name # 环境名称\n", + " self.device = device # 检测GPU\n", + " self.result_path = curr_path + \"/outputs/\" + self.env_name + \\\n", + " '/' + curr_time + '/results/' # 保存结果的路径\n", + " self.model_path = curr_path + \"/outputs/\" + self.env_name + \\\n", + " '/' + curr_time + '/models/' # 保存模型的路径\n", + " self.save = True # 是否保存图片" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 创建环境和智能体" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def env_agent_config(cfg,seed=1):\n", + " '''创建环境和智能体\n", + " Args:\n", + " cfg ([type]): [description]\n", + " seed (int, optional): 随机种子. Defaults to 1.\n", + " Returns:\n", + " env [type]: 环境\n", + " agent : 智能体\n", + " ''' \n", + " env = gym.make(cfg.env_name) \n", + " env = CliffWalkingWapper(env)\n", + " env.seed(seed) # 设置随机种子\n", + " n_states = env.observation_space.n # 状态维度\n", + " n_actions = env.action_space.n # 动作维度\n", + " agent = QLearning(n_states,n_actions,cfg)\n", + " return env,agent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 执行训练并输出结果" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "开始训练!\n", + "环境:CliffWalking-v0, 算法:Q-learning, 设备:cuda\n", + "回合:20/400, 奖励:-82\n", + "回合:40/400, 奖励:-51\n", + "回合:60/400, 奖励:-50\n", + "回合:80/400, 奖励:-53\n", + "回合:100/400, 奖励:-21\n", + "回合:120/400, 奖励:-35\n", + "回合:140/400, 奖励:-44\n", + "回合:160/400, 奖励:-28\n", + "回合:180/400, 奖励:-28\n", + "回合:200/400, 奖励:-17\n", + "回合:220/400, 奖励:-18\n", + "回合:240/400, 奖励:-22\n", + "回合:260/400, 奖励:-19\n", + "回合:280/400, 奖励:-15\n", + "回合:300/400, 奖励:-14\n", + "回合:320/400, 奖励:-13\n", + "回合:340/400, 奖励:-13\n", + "回合:360/400, 奖励:-13\n", + "回合:380/400, 奖励:-13\n", + "回合:400/400, 奖励:-13\n", + "完成训练!\n", + "保存模型成功!\n", + "结果保存完毕!\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "加载模型成功!\n", + "开始测试!\n", + "环境:CliffWalking-v0, 算法:Q-learning, 设备:cuda\n", + "回合:1/20,奖励:-13.0\n", + "回合:2/20,奖励:-13.0\n", + "回合:3/20,奖励:-13.0\n", + "回合:4/20,奖励:-13.0\n", + "回合:5/20,奖励:-13.0\n", + "回合:6/20,奖励:-13.0\n", + "回合:7/20,奖励:-13.0\n", + "回合:8/20,奖励:-13.0\n", + "回合:9/20,奖励:-13.0\n", + "回合:10/20,奖励:-13.0\n", + "回合:11/20,奖励:-13.0\n", + "回合:12/20,奖励:-13.0\n", + "回合:13/20,奖励:-13.0\n", + "回合:14/20,奖励:-13.0\n", + "回合:15/20,奖励:-13.0\n", + "回合:16/20,奖励:-13.0\n", + "回合:17/20,奖励:-13.0\n", + "回合:18/20,奖励:-13.0\n", + "回合:19/20,奖励:-13.0\n", + "回合:20/20,奖励:-13.0\n", + "完成测试!\n", + "结果保存完毕!\n" + ] + }, + { + "data": { + "image/png": "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sD5pWJ80z2t9crkMDRpYFD/dlJ2npqYaHqelpSElJQWOjo5F2mVnZ2PMmDF4++23MWTIEFOWREREZST5JHVcXByWLl2K+/fvIyEhAdHR0Vi/fj0cHR0RFRWF1NRUmJmZQaFQYN68eWjRogUAYPny5bC1tcXw4cMRHR2N69evY8eOHdixYwcAYOTIkRg8eLDU8oiIqIJKPQfxd8JDTNWH9UnD+qRhfRVTrYeYiIjo74sBQUREohgQREQkigFBRESiGBBERCSKAUFERKIYEEREJIoBQUREohgQREQkigFBRESiGBBERCSKAUFERKIYEEREJIoBQUREohgQREQkigFBRESiGBBERCSKAUFERKIYEEREJIoBQUREohgQREQkigFBRESiJAdETEwM1Go1nJ2dsWXLFqNpq1evhlqtRkBAAPz9/bF///4Sl1VQUABfX18MGjRIallERCSRmdQFODk5ITIyEtHR0UWmBQUFYdKkSQCAjIwM+Pj4wMPDA1ZWVqLLioyMRPv27XH58mWpZRERkUSS9yBatmwJR0dHyOVFF2VpaWl4nJ+fD5lMBr1eL7qc06dP4/r16/D395daEhERVQLJexCl2bZtGzZt2oT09HQsWrQI1tbWRdrk5+dj0aJFWL16Na5fv17hvho0sJBQKWBjY1l6o2rE+qRhfdKwPmme9/rElBoQgYGB0Gg0otOSkpKgUChKnH/48OEYPnw4rly5gpCQEHTp0qVISCxduhRvvfUW7OzsJAVEVlYu9HqhQvPa2Fji1q2cCvdtaqxPGtYnDeuT5nmtTy6XlfjFutSA2L17d6UU0qpVK9ja2uLkyZPo37+/0bQzZ84gMTERq1atQkFBAe7duwe1Wo3Y2NhK6ZuIiMrPpIeYUlNT4ejoCABIS0tDSkqK4fnTng6CEydOICIiArt27TJlaUREVArJAREXF4elS5fi/v37SEhIQHR0NNavXw9HR0dERUUhNTUVZmZmUCgUmDdvHlq0aAEAWL58OWxtbTF8+HDJK0FERJVPJghCxQ7aP4d4DqL6sD5pWJ80rK9iSjsHwf9JTUREohgQREQkigFBRESiGBBERCSKAUFERKIYEEREJIoBQUREohgQREQkigFBRESiGBBERCSKAUFERKIYEEREJIoBQUREohgQREQkigFBRESiGBBERCSKAUFERKIYEEREJIoBQURE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cfg = QlearningConfig()\n", + "plot_cfg = PlotConfig()\n", + "# 训练\n", + "env, agent = env_agent_config(cfg, seed=1)\n", + "rewards, ma_rewards = train(cfg, env, agent)\n", + "make_dir(plot_cfg.result_path, plot_cfg.model_path) # 创建保存结果和模型路径的文件夹\n", + "agent.save(path=plot_cfg.model_path) # 保存模型\n", + "save_results(rewards, ma_rewards, tag='train',\n", + " path=plot_cfg.result_path) # 保存结果\n", + "plot_rewards(rewards, ma_rewards, plot_cfg, tag=\"train\") # 画出结果\n", + "# 测试\n", + "env, agent = env_agent_config(cfg, seed=10)\n", + "agent.load(path=plot_cfg.model_path) # 导入模型\n", + "rewards, ma_rewards = test(cfg, env, agent)\n", + "save_results(rewards, ma_rewards, tag='test', path=plot_cfg.result_path) # 保存结果\n", + "plot_rewards(rewards, ma_rewards, plot_cfg, tag=\"test\") # 画出结果" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "fbea1422c2cf61ed9c0cfc03f38f71cc9083cc288606edc4170b5309b352ce27" + }, + "kernelspec": { + "display_name": "Python 3.7.11 64-bit ('py37': conda)", + "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.10" + }, + "orig_nbformat": 2 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/codes/QLearning/task0.py b/codes/QLearning/task0.py new file mode 100644 index 0000000..3f93d08 --- /dev/null +++ b/codes/QLearning/task0.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +# coding=utf-8 +''' +Author: John +Email: johnjim0816@gmail.com +Date: 2020-09-11 23:03:00 +LastEditor: John +LastEditTime: 2021-12-22 11:13:23 +Discription: +Environment: +''' +import sys +import os +curr_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件所在绝对路径 +parent_path = os.path.dirname(curr_path) # 父路径 +sys.path.append(parent_path) # 添加路径到系统路径 + +import gym +import torch +import datetime + +from envs.gridworld_env import CliffWalkingWapper +from QLearning.agent import QLearning +from QLearning.train import train,test +from common.utils import plot_rewards,plot_rewards_cn +from common.utils import save_results,make_dir + +curr_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # 获取当前时间 +algo_name = 'Q-learning' # 算法名称 +env_name = 'CliffWalking-v0' # 环境名称 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU +class QlearningConfig: + '''训练相关参数''' + def __init__(self): + self.algo_name = algo_name # 算法名称 + self.env_name = env_name # 环境名称 + self.device = device # 检测GPU + self.train_eps = 400 # 训练的回合数 + self.test_eps = 30 # 测试的回合数 + self.gamma = 0.9 # reward的衰减率 + self.epsilon_start = 0.95 # e-greedy策略中初始epsilon + self.epsilon_end = 0.01 # e-greedy策略中的终止epsilon + self.epsilon_decay = 300 # e-greedy策略中epsilon的衰减率 + self.lr = 0.1 # 学习率 +class PlotConfig: + ''' 绘图相关参数设置 + ''' + + def __init__(self) -> None: + self.algo_name = algo_name # 算法名称 + self.env_name = env_name # 环境名称 + self.device = device # 检测GPU + self.result_path = curr_path + "/outputs/" + self.env_name + \ + '/' + curr_time + '/results/' # 保存结果的路径 + self.model_path = curr_path + "/outputs/" + self.env_name + \ + '/' + curr_time + '/models/' # 保存模型的路径 + self.save = True # 是否保存图片 + +def env_agent_config(cfg,seed=1): + '''创建环境和智能体 + Args: + cfg ([type]): [description] + seed (int, optional): 随机种子. Defaults to 1. + Returns: + env [type]: 环境 + agent : 智能体 + ''' + env = gym.make(cfg.env_name) + env = CliffWalkingWapper(env) + env.seed(seed) # 设置随机种子 + n_states = env.observation_space.n # 状态维度 + n_actions = env.action_space.n # 动作维度 + agent = QLearning(n_states,n_actions,cfg) + return env,agent + +cfg = QlearningConfig() +plot_cfg = PlotConfig() +# 训练 +env, agent = env_agent_config(cfg, seed=1) +rewards, ma_rewards = train(cfg, env, agent) +make_dir(plot_cfg.result_path, plot_cfg.model_path) # 创建保存结果和模型路径的文件夹 +agent.save(path=plot_cfg.model_path) # 保存模型 +save_results(rewards, ma_rewards, tag='train', + path=plot_cfg.result_path) # 保存结果 +plot_rewards(rewards, ma_rewards, plot_cfg, tag="train") # 画出结果 +# 测试 +env, agent = env_agent_config(cfg, seed=10) +agent.load(path=plot_cfg.model_path) # 导入模型 +rewards, ma_rewards = test(cfg, env, agent) +save_results(rewards, ma_rewards, tag='test', path=plot_cfg.result_path) # 保存结果 +plot_rewards(rewards, ma_rewards, plot_cfg, tag="test") # 画出结果 + + diff --git a/codes/QLearning/task0_train.ipynb b/codes/QLearning/task0_train.ipynb deleted file mode 100644 index 5715766..0000000 --- a/codes/QLearning/task0_train.ipynb +++ /dev/null @@ -1,216 +0,0 @@ -{ - "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.11" - }, - "orig_nbformat": 2, - "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.11 64-bit ('py37': conda)" - }, - "interpreter": { - "hash": "fbea1422c2cf61ed9c0cfc03f38f71cc9083cc288606edc4170b5309b352ce27" - } - }, - "nbformat": 4, - "nbformat_minor": 2, - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "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\n", - "\n", - "import gym\n", - "import datetime\n", - "\n", - "from envs.gridworld_env import CliffWalkingWapper\n", - "from QLearning.agent import QLearning\n", - "from common.plot import plot_rewards\n", - "from common.utils import save_results,make_dir\n", - "curr_time = datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\") # obtain current time" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 2, - "source": [ - "class QlearningConfig:\n", - " '''训练相关参数'''\n", - " def __init__(self):\n", - " self.algo = 'Qlearning'\n", - " self.env = 'CliffWalking-v0' # 0 up, 1 right, 2 down, 3 left\n", - " self.result_path = curr_path+\"/outputs/\" +self.env+'/'+curr_time+'/results/' # path to save results\n", - " self.model_path = curr_path+\"/outputs/\" +self.env+'/'+curr_time+'/models/' # path to save models\n", - " self.train_eps = 200 # 训练的episode数目\n", - " self.eval_eps = 30\n", - " self.gamma = 0.9 # reward的衰减率\n", - " self.epsilon_start = 0.95 # e-greedy策略中初始epsilon\n", - " self.epsilon_end = 0.01 # e-greedy策略中的终止epsilon\n", - " self.epsilon_decay = 200 # e-greedy策略中epsilon的衰减率\n", - " self.lr = 0.1 # learning rate" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 3, - "source": [ - "def env_agent_config(cfg,seed=1):\n", - " env = gym.make(cfg.env) \n", - " env = CliffWalkingWapper(env)\n", - " env.seed(seed)\n", - " state_dim = env.observation_space.n\n", - " action_dim = env.action_space.n\n", - " agent = QLearning(state_dim,action_dim,cfg)\n", - " return env,agent" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 4, - "source": [ - "def train(cfg,env,agent):\n", - " rewards = [] \n", - " ma_rewards = [] # moving average reward\n", - " for i_ep in range(cfg.train_eps):\n", - " ep_reward = 0 # 记录每个episode的reward\n", - " state = env.reset() # 重置环境, 重新开一局(即开始新的一个episode)\n", - " while True:\n", - " action = agent.choose_action(state) # 根据算法选择一个动作\n", - " next_state, reward, done, _ = env.step(action) # 与环境进行一次动作交互\n", - " agent.update(state, action, reward, next_state, done) # Q-learning算法更新\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(\"Episode:{}/{}: reward:{:.1f}\".format(i_ep+1, cfg.train_eps,ep_reward))\n", - " return rewards,ma_rewards" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 5, - "source": [ - "def eval(cfg,env,agent):\n", - " # env = gym.make(\"FrozenLake-v0\", is_slippery=False) # 0 left, 1 down, 2 right, 3 up\n", - " # env = FrozenLakeWapper(env)\n", - " rewards = [] # 记录所有episode的reward\n", - " ma_rewards = [] # 滑动平均的reward\n", - " for i_ep in range(cfg.eval_eps):\n", - " ep_reward = 0 # 记录每个episode的reward\n", - " state = env.reset() # 重置环境, 重新开一局(即开始新的一个episode)\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" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 6, - "source": [ - "cfg = QlearningConfig()\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\",env=cfg.env,algo = cfg.algo,path=cfg.result_path)\n", - "\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)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Episode:10/200: reward:-287.0\n", - "Episode:20/200: reward:-142.0\n", - "Episode:30/200: reward:-67.0\n", - "Episode:40/200: reward:-61.0\n", - "Episode:50/200: reward:-74.0\n", - "Episode:60/200: reward:-41.0\n", - "Episode:70/200: reward:-55.0\n", - "Episode:80/200: reward:-66.0\n", - "Episode:90/200: reward:-31.0\n", - "Episode:100/200: reward:-31.0\n", - "Episode:110/200: reward:-58.0\n", - "Episode:120/200: reward:-25.0\n", - "Episode:130/200: reward:-18.0\n", - "Episode:140/200: reward:-27.0\n", - "Episode:150/200: reward:-28.0\n", - "Episode:160/200: reward:-25.0\n", - "Episode:170/200: reward:-35.0\n", - "Episode:180/200: reward:-13.0\n", - "Episode:190/200: reward:-22.0\n", - "Episode:200/200: reward:-26.0\n", - "保存模型成功!\n", - "结果保存完毕!\n" - ] - }, - { - "output_type": "display_data", - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABRX0lEQVR4nO3dZ2AU5drw8f/sbrakF1KoofdOkE6kqAQIHQURQeztIOeVQ8ByFEUFUbGCciyPWACRIkoTFBAivYsghBIIIZvek23zfliyEJIAAUKie/2+wE5mZq+5d3euucvco6iqqiKEEEIAmsoOQAghRNUhSUEIIYSLJAUhhBAukhSEEEK4SFIQQgjhIklBCCGEiySFf6D333+f6dOn35L3evjhhzl+/Pgtea/KNnfuXG6//XamTp1a4m/5+fm89dZb9O/fn+joaKKjo3nnnXfIz893rdOkSRPS0tIqPM4NGzbw6quv3rT9Xem4yyMuLo6nn36a6OhoBg0axH333ceuXbsAOHv2LO3atQPg22+/5ZNPPgFgy5Yt9OrVi+HDh7N371769u3L0KFDad26NevXr3fte8uWLTRp0oSFCxe6lh04cIBu3bpxpVH3vXv35uDBg2zfvp2BAweW+PvBgwf517/+dUPHfa2WLFlCVFQUd955J//973+xWq235H1LUMU/znvvvae+/PLLlR3GP07v3r3VnTt3llhutVrVUaNGqa+88oqan5+vqqqq5uXlqa+88oo6atQo1Wq1qqqqqo0bN1ZTU1Nvacw3Q1nHXR5xcXFqt27d1M2bN7uWxcbGqh06dFD/+usv9cyZM2rbtm1LbBcTE6N++OGHqqqq6vvvv69OmzZNVVVVfe2119RXX33Vtd706dPVRx99VH344Yddyz7++GM1JibminH16tVLPXDggLpt2zZ1wIABN3SMN+Lo0aNqz5491dTUVNVut6uTJk1SP/nkk0qJRVc5qajqczgcvPbaa+zfv5/c3FxUVeXVV1+lcePGREZGsnbtWoKDgwG4++67efLJJ+nSpQuzZ89m586d2O12mjdvzvPPP4+3tze9e/emdevWHD16lH//+9/odDo+/vhjLBYLaWlpDBkyhGeeeQaATz75hCVLluDl5UVERAQbNmzgl19+wWKxlLn/siQlJTF9+nQSExOxWq0MGDCAxx57DIB58+axfv16CgsL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", - "text/plain": [ - "
" - ] - }, - "metadata": {} - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "加载模型成功!\n" - ] - } - ], - "metadata": {} - } - ] -} \ No newline at end of file diff --git a/codes/QLearning/task0_train.py b/codes/QLearning/task0_train.py deleted file mode 100644 index 2a9e0ea..0000000 --- a/codes/QLearning/task0_train.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python -# coding=utf-8 -''' -Author: John -Email: johnjim0816@gmail.com -Date: 2020-09-11 23:03:00 -LastEditor: John -LastEditTime: 2021-09-23 12:22:58 -Discription: -Environment: -''' -import sys,os -curr_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径 -parent_path=os.path.dirname(curr_path) # 父路径,这里就是我们的项目路径 -sys.path.append(parent_path) # 由于需要引用项目路径下的其他模块比如envs,所以需要添加路径到sys.path - -import gym -import torch -import datetime - -from envs.gridworld_env import CliffWalkingWapper -from QLearning.agent import QLearning -from common.plot import plot_rewards,plot_rewards_cn -from common.utils import save_results,make_dir - -curr_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # 获取当前时间 -class QlearningConfig: - '''训练相关参数''' - def __init__(self): - self.algo = 'Q-learning' # 算法名称 - self.env = 'CliffWalking-v0' # 环境名称 - self.result_path = curr_path+"/outputs/" +self.env+'/'+curr_time+'/results/' # 保存结果的路径 - self.model_path = curr_path+"/outputs/" +self.env+'/'+curr_time+'/models/' # 保存模型的路径 - self.train_eps = 400 # 训练的回合数 - self.eval_eps = 30 # 测试的回合数 - self.gamma = 0.9 # reward的衰减率 - self.epsilon_start = 0.95 # e-greedy策略中初始epsilon - self.epsilon_end = 0.01 # e-greedy策略中的终止epsilon - self.epsilon_decay = 300 # e-greedy策略中epsilon的衰减率 - self.lr = 0.1 # 学习率 - self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU - - -def env_agent_config(cfg,seed=1): - env = gym.make(cfg.env) - env = CliffWalkingWapper(env) - env.seed(seed) # 设置随机种子 - state_dim = env.observation_space.n # 状态维度 - action_dim = env.action_space.n # 动作维度 - agent = QLearning(state_dim,action_dim,cfg) - return env,agent - -def train(cfg,env,agent): - print('开始训练!') - print(f'环境:{cfg.env}, 算法:{cfg.algo}, 设备:{cfg.device}') - rewards = [] # 记录奖励 - ma_rewards = [] # 记录滑动平均奖励 - for i_ep in range(cfg.train_eps): - ep_reward = 0 # 记录每个回合的奖励 - state = env.reset() # 重置环境,即开始新的回合 - while True: - action = agent.choose_action(state) # 根据算法选择一个动作 - next_state, reward, done, _ = env.step(action) # 与环境进行一次动作交互 - print(reward) - agent.update(state, action, reward, next_state, done) # Q学习算法更新 - state = next_state # 更新状态 - ep_reward += reward - if done: - break - rewards.append(ep_reward) - if ma_rewards: - ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1) - else: - ma_rewards.append(ep_reward) - print("回合数:{}/{},奖励{:.1f}".format(i_ep+1, cfg.train_eps,ep_reward)) - print('完成训练!') - return rewards,ma_rewards - -def eval(cfg,env,agent): - print('开始测试!') - print(f'环境:{cfg.env}, 算法:{cfg.algo}, 设备:{cfg.device}') - for item in agent.Q_table.items(): - print(item) - rewards = [] # 记录所有回合的奖励 - ma_rewards = [] # 滑动平均的奖励 - for i_ep in range(cfg.eval_eps): - ep_reward = 0 # 记录每个episode的reward - state = env.reset() # 重置环境, 重新开一局(即开始新的一个回合) - while True: - action = agent.predict(state) # 根据算法选择一个动作 - next_state, reward, done, _ = env.step(action) # 与环境进行一个交互 - state = next_state # 更新状态 - ep_reward += reward - if done: - break - rewards.append(ep_reward) - if ma_rewards: - ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1) - else: - ma_rewards.append(ep_reward) - print(f"回合数:{i_ep+1}/{cfg.eval_eps}, 奖励:{ep_reward:.1f}") - print('完成测试!') - return rewards,ma_rewards - -if __name__ == "__main__": - cfg = QlearningConfig() - - # 训练 - env,agent = env_agent_config(cfg,seed=0) - rewards,ma_rewards = train(cfg,env,agent) - make_dir(cfg.result_path,cfg.model_path) # 创建文件夹 - agent.save(path=cfg.model_path) # 保存模型 - for item in agent.Q_table.items(): - print(item) - save_results(rewards,ma_rewards,tag='train',path=cfg.result_path) # 保存结果 - plot_rewards_cn(rewards,ma_rewards,tag="train",env=cfg.env,algo = cfg.algo,path=cfg.result_path) - - # # 测试 - env,agent = env_agent_config(cfg,seed=10) - agent.load(path=cfg.model_path) # 加载模型 - rewards,ma_rewards = eval(cfg,env,agent) - - save_results(rewards,ma_rewards,tag='eval',path=cfg.result_path) - plot_rewards_cn(rewards,ma_rewards,tag="eval",env=cfg.env,algo = cfg.algo,path=cfg.result_path) - - diff --git a/codes/QLearning/train.py b/codes/QLearning/train.py new file mode 100644 index 0000000..40a7746 --- /dev/null +++ b/codes/QLearning/train.py @@ -0,0 +1,51 @@ +def train(cfg,env,agent): + print('开始训练!') + print(f'环境:{cfg.env_name}, 算法:{cfg.algo_name}, 设备:{cfg.device}') + rewards = [] # 记录奖励 + ma_rewards = [] # 记录滑动平均奖励 + for i_ep in range(cfg.train_eps): + ep_reward = 0 # 记录每个回合的奖励 + state = env.reset() # 重置环境,即开始新的回合 + while True: + action = agent.choose_action(state) # 根据算法选择一个动作 + next_state, reward, done, _ = env.step(action) # 与环境进行一次动作交互 + agent.update(state, action, reward, next_state, done) # Q学习算法更新 + state = next_state # 更新状态 + ep_reward += reward + if done: + break + rewards.append(ep_reward) + if ma_rewards: + ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1) + else: + ma_rewards.append(ep_reward) + if () + print("回合数:{}/{},奖励{:.1f}".format(i_ep+1, cfg.train_eps,ep_reward)) + print('完成训练!') + return rewards,ma_rewards + +def test(cfg,env,agent): + print('开始测试!') + print(f'环境:{cfg.env_name}, 算法:{cfg.algo_name}, 设备:{cfg.device}') + for item in agent.Q_table.items(): + print(item) + rewards = [] # 记录所有回合的奖励 + ma_rewards = [] # 滑动平均的奖励 + for i_ep in range(cfg.test_eps): + ep_reward = 0 # 记录每个episode的reward + state = env.reset() # 重置环境, 重新开一局(即开始新的一个回合) + while True: + action = agent.predict(state) # 根据算法选择一个动作 + next_state, reward, done, _ = env.step(action) # 与环境进行一个交互 + state = next_state # 更新状态 + ep_reward += reward + if done: + break + rewards.append(ep_reward) + if ma_rewards: + ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1) + else: + ma_rewards.append(ep_reward) + print(f"回合数:{i_ep+1}/{cfg.test_eps}, 奖励:{ep_reward:.1f}") + print('完成测试!') + return rewards,ma_rewards \ No newline at end of file diff --git a/codes/README.md b/codes/README.md index 49f6ac7..355127c 100644 --- a/codes/README.md +++ b/codes/README.md @@ -13,6 +13,7 @@ 其中```model.py```,```memory.py```,```plot.py``` 由于不同算法都会用到,所以放入```common```文件夹中。 +**注意:新版本中将```model```,```memory```相关内容全部放到了```agent.py```里面,```plot```放到了```common.utils```中。** ## 运行环境 python 3.7、pytorch 1.6.0-1.8.1、gym 0.17.0-0.19.0 diff --git a/codes/SAC/task0_train.ipynb b/codes/SAC/task0_train.ipynb index 8148a4b..14be84e 100644 --- a/codes/SAC/task0_train.ipynb +++ b/codes/SAC/task0_train.ipynb @@ -45,7 +45,7 @@ " self.model_path = curr_path+\"/outputs/\" +self.env+'/'+curr_time+'/models/' # path to save models\n", " self.train_eps = 300\n", " self.train_steps = 500\n", - " self.eval_eps = 50\n", + " self.test_eps = 50\n", " self.eval_steps = 500\n", " self.gamma = 0.99\n", " self.mean_lambda=1e-3\n", @@ -121,7 +121,7 @@ " 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.eval_eps):\n", + " for i_ep in range(cfg.test_eps):\n", " state = env.reset()\n", " ep_reward = 0\n", " for i_step in range(cfg.eval_steps):\n", diff --git a/codes/SAC/task0_train.py b/codes/SAC/task0_train.py index 625f1d7..719b668 100644 --- a/codes/SAC/task0_train.py +++ b/codes/SAC/task0_train.py @@ -33,7 +33,7 @@ class SACConfig: self.model_path = curr_path+"/outputs/" +self.env_name+'/'+curr_time+'/models/' # path to save models self.train_eps = 300 self.train_steps = 500 - self.eval_eps = 50 + self.test_eps = 50 self.eval_steps = 500 self.gamma = 0.99 self.mean_lambda=1e-3 @@ -96,7 +96,7 @@ def eval(cfg,env,agent): print(f'Env: {cfg.env_name}, Algorithm: {cfg.algo}, Device: {cfg.device}') rewards = [] ma_rewards = [] # moveing average reward - for i_ep in range(cfg.eval_eps): + for i_ep in range(cfg.test_eps): state = env.reset() ep_reward = 0 for i_step in range(cfg.eval_steps): diff --git a/codes/Sarsa/task0_train.py b/codes/Sarsa/task0_train.py index d21db17..e477afa 100644 --- a/codes/Sarsa/task0_train.py +++ b/codes/Sarsa/task0_train.py @@ -31,7 +31,7 @@ class SarsaConfig: self.result_path = curr_path+"/outputs/" +self.env+'/'+curr_time+'/results/' # path to save results self.model_path = curr_path+"/outputs/" +self.env+'/'+curr_time+'/models/' # path to save models self.train_eps = 200 - self.eval_eps = 50 + self.test_eps = 50 self.epsilon = 0.15 # epsilon: The probability to select a random action . self.gamma = 0.9 # gamma: Gamma discount factor. self.lr = 0.2 # learning rate: step size parameter @@ -74,7 +74,7 @@ def train(cfg,env,agent): def eval(cfg,env,agent): rewards = [] ma_rewards = [] - for i_episode in range(cfg.eval_eps): + for i_episode in range(cfg.test_eps): # Print out which episode we're on, useful for debugging. # Generate an episode. # An episode is an array of (state, action, reward) tuples @@ -94,7 +94,7 @@ def eval(cfg,env,agent): ma_rewards.append(ep_reward) rewards.append(ep_reward) if (i_episode+1)%10==0: - print("Episode:{}/{}: Reward:{}".format(i_episode+1, cfg.eval_eps,ep_reward)) + print("Episode:{}/{}: Reward:{}".format(i_episode+1, cfg.test_eps,ep_reward)) print('Complete evaling!') return rewards,ma_rewards diff --git a/codes/TD3/README.md b/codes/TD3/README.md new file mode 100644 index 0000000..8001e9c --- /dev/null +++ b/codes/TD3/README.md @@ -0,0 +1 @@ +这是对[Implementation of Twin Delayed Deep Deterministic Policy Gradients (TD3)](https://arxiv.org/abs/1802.09477)的复现 \ No newline at end of file diff --git a/codes/TD3/agent.py b/codes/TD3/agent.py index 3d43700..f77a912 100644 --- a/codes/TD3/agent.py +++ b/codes/TD3/agent.py @@ -1,3 +1,13 @@ +#!/usr/bin/env python +# coding=utf-8 +''' +Author: JiangJi +Email: johnjim0816@gmail.com +Date: 2021-12-22 10:40:05 +LastEditor: JiangJi +LastEditTime: 2021-12-22 10:43:55 +Discription: +''' import copy import numpy as np import torch @@ -5,40 +15,41 @@ import torch.nn as nn import torch.nn.functional as F from TD3.memory import ReplayBuffer - - -# Implementation of Twin Delayed Deep Deterministic Policy Gradients (TD3) -# Paper: https://arxiv.org/abs/1802.09477 - - class Actor(nn.Module): - def __init__(self, state_dim, action_dim, max_action): + + def __init__(self, input_dim, output_dim, max_action): + '''[summary] + + Args: + input_dim (int): 输入维度,这里等于n_states + output_dim (int): 输出维度,这里等于n_actions + max_action (int): action的最大值 + ''' super(Actor, self).__init__() - self.l1 = nn.Linear(state_dim, 256) + self.l1 = nn.Linear(input_dim, 256) self.l2 = nn.Linear(256, 256) - self.l3 = nn.Linear(256, action_dim) - + self.l3 = nn.Linear(256, output_dim) self.max_action = max_action - - + def forward(self, state): + a = F.relu(self.l1(state)) a = F.relu(self.l2(a)) return self.max_action * torch.tanh(self.l3(a)) class Critic(nn.Module): - def __init__(self, state_dim, action_dim): + def __init__(self, input_dim, output_dim): super(Critic, self).__init__() # Q1 architecture - self.l1 = nn.Linear(state_dim + action_dim, 256) + self.l1 = nn.Linear(input_dim + output_dim, 256) self.l2 = nn.Linear(256, 256) self.l3 = nn.Linear(256, 1) # Q2 architecture - self.l4 = nn.Linear(state_dim + action_dim, 256) + self.l4 = nn.Linear(input_dim + output_dim, 256) self.l5 = nn.Linear(256, 256) self.l6 = nn.Linear(256, 1) @@ -68,8 +79,8 @@ class Critic(nn.Module): class TD3(object): def __init__( self, - state_dim, - action_dim, + input_dim, + output_dim, max_action, cfg, ): @@ -83,14 +94,14 @@ class TD3(object): self.device = cfg.device self.total_it = 0 - self.actor = Actor(state_dim, action_dim, max_action).to(self.device) + self.actor = Actor(input_dim, output_dim, max_action).to(self.device) self.actor_target = copy.deepcopy(self.actor) self.actor_optimizer = torch.optim.Adam(self.actor.parameters(), lr=3e-4) - self.critic = Critic(state_dim, action_dim).to(self.device) + self.critic = Critic(input_dim, output_dim).to(self.device) self.critic_target = copy.deepcopy(self.critic) self.critic_optimizer = torch.optim.Adam(self.critic.parameters(), lr=3e-4) - self.memory = ReplayBuffer(state_dim, action_dim) + self.memory = ReplayBuffer(input_dim, output_dim) def choose_action(self, state): state = torch.FloatTensor(state.reshape(1, -1)).to(self.device)