From 1e60b688fcb8586eff75c07324182571feb935bb Mon Sep 17 00:00:00 2001 From: johnjim0816 Date: Mon, 20 Sep 2021 15:33:12 +0800 Subject: [PATCH] update Q-learning --- codes/QLearning/agent.py | 2 +- .../20210920-003309/models/Qleaning_model.pkl | Bin 0 -> 5423 bytes .../20210920-003309/results/eval_ma_rewards.npy | Bin 0 -> 368 bytes .../20210920-003309/results/eval_rewards.npy | Bin 0 -> 368 bytes .../results/eval_rewards_curve_cn.png | Bin 0 -> 31614 bytes .../results/train_ma_rewards.npy | Bin 0 -> 3328 bytes .../20210920-003309/results/train_rewards.npy | Bin 0 -> 3328 bytes .../results/train_rewards_curve_cn.png | Bin 0 -> 43429 bytes codes/QLearning/task0_train.py | 14 +++++++------- codes/common/plot.py | 5 +++-- 10 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/models/Qleaning_model.pkl create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_ma_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/eval_rewards_curve_cn.png create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_ma_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards.npy create mode 100644 codes/QLearning/outputs/CliffWalking-v0/20210920-003309/results/train_rewards_curve_cn.png diff --git a/codes/QLearning/agent.py b/codes/QLearning/agent.py index a66128f..4587c86 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-15 13:18:37 +LastEditTime: 2021-09-19 23:05:45 Discription: use defaultdict to define Q table Environment: ''' 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 new file mode 100644 index 0000000000000000000000000000000000000000..4d6ba9501783dbd0515da0ca1253b004cfd07234 GIT binary patch literal 5423 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 B>)ZeU literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..7184c7befa75c34d855fd661fc54ca14144b18c4 GIT binary patch literal 3328 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 DtD{Mu literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..f037a253f2614fe79de117f769f3d2d947179cfe GIT binary patch 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 literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..9c0943aa957ad77d06b01f711a8afa2f26e886da GIT binary patch literal 43429 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 literal 0 HcmV?d00001 diff --git a/codes/QLearning/task0_train.py b/codes/QLearning/task0_train.py index a9bc36d..7eba2de 100644 --- a/codes/QLearning/task0_train.py +++ b/codes/QLearning/task0_train.py @@ -5,7 +5,7 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-09-11 23:03:00 LastEditor: John -LastEditTime: 2021-09-15 14:44:25 +LastEditTime: 2021-09-20 00:32:59 Discription: Environment: ''' @@ -31,13 +31,13 @@ class QlearningConfig: 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 = 200 # 训练的回合数 + self.train_eps = 400 # 训练的回合数 self.eval_eps = 30 # 测试的回合数 self.gamma = 0.9 # reward的衰减率 - self.epsilon_start = 0.90 # e-greedy策略中初始epsilon + self.epsilon_start = 0.99 # e-greedy策略中初始epsilon self.epsilon_end = 0.01 # e-greedy策略中的终止epsilon - self.epsilon_decay = 200 # e-greedy策略中epsilon的衰减率 - self.lr = 0.05 # 学习率 + self.epsilon_decay = 300 # e-greedy策略中epsilon的衰减率 + self.lr = 0.1 # 学习率 self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测GPU @@ -111,8 +111,8 @@ if __name__ == "__main__": 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) # 加载模型 + 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/common/plot.py b/codes/common/plot.py index df78d9e..4f0f0b9 100644 --- a/codes/common/plot.py +++ b/codes/common/plot.py @@ -5,7 +5,7 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-10-07 20:57:11 LastEditor: John -LastEditTime: 2021-09-15 14:56:15 +LastEditTime: 2021-09-19 23:00:36 Discription: Environment: ''' @@ -29,6 +29,7 @@ def plot_rewards_cn(rewards,ma_rewards,tag="train",env='CartPole-v0',algo = "DQN ''' 中文画图 ''' sns.set() + plt.figure() plt.title(u"{}环境下{}算法的学习曲线".format(env,algo),fontproperties=chinese_font()) plt.xlabel(u'回合数',fontproperties=chinese_font()) plt.plot(rewards) @@ -36,7 +37,7 @@ def plot_rewards_cn(rewards,ma_rewards,tag="train",env='CartPole-v0',algo = "DQN plt.legend((u'奖励',u'滑动平均奖励',),loc="best",prop=chinese_font()) if save: plt.savefig(path+f"{tag}_rewards_curve_cn") - plt.show() + # plt.show() def plot_losses(losses,algo = "DQN",save=True,path='./'): sns.set()