From abfe6ea62ba81cba84c21ef747f3f586da8ae5a2 Mon Sep 17 00:00:00 2001 From: JohnJim0816 Date: Fri, 27 Nov 2020 18:34:04 +0800 Subject: [PATCH 1/2] update PolicyGradient --- codes/PolicyGradient/README.md | 42 ++++++++++ codes/PolicyGradient/agent.py | 12 ++- codes/PolicyGradient/env.py | 4 +- ...vents.1606122284.MacBook-Pro.local.78801.0 | Bin 0 -> 40 bytes ...vents.1606122284.MacBook-Pro.local.78801.2 | Bin 0 -> 13713 bytes ...vents.1606122284.MacBook-Pro.local.78801.1 | Bin 0 -> 13713 bytes ...vents.1606389059.MacBook-Pro.local.21663.3 | Bin 0 -> 40 bytes ...vents.1606389059.MacBook-Pro.local.21663.5 | Bin 0 -> 4540 bytes ...vents.1606389059.MacBook-Pro.local.21663.4 | Bin 0 -> 4540 bytes ...vents.1606389139.MacBook-Pro.local.21831.3 | Bin 0 -> 40 bytes ...vents.1606389139.MacBook-Pro.local.21831.5 | Bin 0 -> 4540 bytes ...vents.1606389139.MacBook-Pro.local.21831.4 | Bin 0 -> 4540 bytes ...vents.1606110786.MacBook-Pro.local.75770.0 | Bin 0 -> 40 bytes ...vents.1606110786.MacBook-Pro.local.75770.2 | Bin 0 -> 13713 bytes ...vents.1606110786.MacBook-Pro.local.75770.1 | Bin 0 -> 13713 bytes ...vents.1606389044.MacBook-Pro.local.21663.0 | Bin 0 -> 40 bytes ...vents.1606389044.MacBook-Pro.local.21663.2 | Bin 0 -> 13713 bytes ...vents.1606389044.MacBook-Pro.local.21663.1 | Bin 0 -> 13713 bytes ...vents.1606389110.MacBook-Pro.local.21831.0 | Bin 0 -> 40 bytes ...vents.1606389110.MacBook-Pro.local.21831.2 | Bin 0 -> 13713 bytes ...vents.1606389110.MacBook-Pro.local.21831.1 | Bin 0 -> 13713 bytes codes/PolicyGradient/main.py | 75 +++++++++++++++--- codes/PolicyGradient/model.py | 10 +-- codes/PolicyGradient/params.py | 14 +++- codes/PolicyGradient/plot.py | 46 +++++++++++ .../moving_average_rewards_train.npy | Bin 0 -> 2528 bytes .../result/20201123-135302/rewards_train.npy | Bin 0 -> 2528 bytes .../moving_average_rewards_train.npy | Bin 0 -> 2528 bytes .../result/20201126-191039/rewards_train.npy | Bin 0 -> 2528 bytes .../moving_average_rewards_train.npy | Bin 0 -> 2528 bytes .../result/20201126-191145/rewards_train.npy | Bin 0 -> 2528 bytes .../result/moving_average_rewards_train.png | Bin 0 -> 41085 bytes codes/PolicyGradient/result/rewards_train.png | Bin 0 -> 60368 bytes .../20201123-135302/checkpoint.pth | Bin 0 -> 6507 bytes .../20201126-191039/checkpoint.pth | Bin 0 -> 6507 bytes .../20201126-191145/checkpoint.pth | Bin 0 -> 8491 bytes .../PolicyGradient/saved_model/checkpoint.pth | Bin 0 -> 6507 bytes codes/PolicyGradient/utils.py | 29 +++++++ 38 files changed, 210 insertions(+), 22 deletions(-) create mode 100644 codes/PolicyGradient/README.md create mode 100644 codes/PolicyGradient/logs/eval/20201123-170440/events.out.tfevents.1606122284.MacBook-Pro.local.78801.0 create mode 100644 codes/PolicyGradient/logs/eval/20201123-170440/rewards_moving_average/events.out.tfevents.1606122284.MacBook-Pro.local.78801.2 create mode 100644 codes/PolicyGradient/logs/eval/20201123-170440/rewards_raw/events.out.tfevents.1606122284.MacBook-Pro.local.78801.1 create mode 100644 codes/PolicyGradient/logs/eval/20201126-191039/events.out.tfevents.1606389059.MacBook-Pro.local.21663.3 create mode 100644 codes/PolicyGradient/logs/eval/20201126-191039/rewards_moving_average/events.out.tfevents.1606389059.MacBook-Pro.local.21663.5 create mode 100644 codes/PolicyGradient/logs/eval/20201126-191039/rewards_raw/events.out.tfevents.1606389059.MacBook-Pro.local.21663.4 create mode 100644 codes/PolicyGradient/logs/eval/20201126-191145/events.out.tfevents.1606389139.MacBook-Pro.local.21831.3 create mode 100644 codes/PolicyGradient/logs/eval/20201126-191145/rewards_moving_average/events.out.tfevents.1606389139.MacBook-Pro.local.21831.5 create mode 100644 codes/PolicyGradient/logs/eval/20201126-191145/rewards_raw/events.out.tfevents.1606389139.MacBook-Pro.local.21831.4 create mode 100644 codes/PolicyGradient/logs/train/20201123-135302/events.out.tfevents.1606110786.MacBook-Pro.local.75770.0 create mode 100644 codes/PolicyGradient/logs/train/20201123-135302/rewards_moving_average/events.out.tfevents.1606110786.MacBook-Pro.local.75770.2 create mode 100644 codes/PolicyGradient/logs/train/20201123-135302/rewards_raw/events.out.tfevents.1606110786.MacBook-Pro.local.75770.1 create mode 100644 codes/PolicyGradient/logs/train/20201126-191039/events.out.tfevents.1606389044.MacBook-Pro.local.21663.0 create mode 100644 codes/PolicyGradient/logs/train/20201126-191039/rewards_moving_average/events.out.tfevents.1606389044.MacBook-Pro.local.21663.2 create mode 100644 codes/PolicyGradient/logs/train/20201126-191039/rewards_raw/events.out.tfevents.1606389044.MacBook-Pro.local.21663.1 create mode 100644 codes/PolicyGradient/logs/train/20201126-191145/events.out.tfevents.1606389110.MacBook-Pro.local.21831.0 create mode 100644 codes/PolicyGradient/logs/train/20201126-191145/rewards_moving_average/events.out.tfevents.1606389110.MacBook-Pro.local.21831.2 create mode 100644 codes/PolicyGradient/logs/train/20201126-191145/rewards_raw/events.out.tfevents.1606389110.MacBook-Pro.local.21831.1 create mode 100644 codes/PolicyGradient/plot.py create mode 100644 codes/PolicyGradient/result/20201123-135302/moving_average_rewards_train.npy create mode 100644 codes/PolicyGradient/result/20201123-135302/rewards_train.npy create mode 100644 codes/PolicyGradient/result/20201126-191039/moving_average_rewards_train.npy create mode 100644 codes/PolicyGradient/result/20201126-191039/rewards_train.npy create mode 100644 codes/PolicyGradient/result/20201126-191145/moving_average_rewards_train.npy create mode 100644 codes/PolicyGradient/result/20201126-191145/rewards_train.npy create mode 100644 codes/PolicyGradient/result/moving_average_rewards_train.png create mode 100644 codes/PolicyGradient/result/rewards_train.png create mode 100644 codes/PolicyGradient/saved_model/20201123-135302/checkpoint.pth create mode 100644 codes/PolicyGradient/saved_model/20201126-191039/checkpoint.pth create mode 100644 codes/PolicyGradient/saved_model/20201126-191145/checkpoint.pth create mode 100644 codes/PolicyGradient/saved_model/checkpoint.pth create mode 100644 codes/PolicyGradient/utils.py diff --git a/codes/PolicyGradient/README.md b/codes/PolicyGradient/README.md new file mode 100644 index 0000000..43891bd --- /dev/null +++ b/codes/PolicyGradient/README.md @@ -0,0 +1,42 @@ +# Policy Gradient +实现的是Policy Gradient最基本的REINFORCE方法 +## 原理讲解 + +参考我的博客[Policy Gradient算法实战](https://blog.csdn.net/JohnJim0/article/details/110236851) + +## 环境 + +python 3.7.9 + +pytorch 1.6.0 + +tensorboard 2.3.0 + +torchvision 0.7.0 + +## 程序运行方法 + +train: + +```python +python main.py +``` + +eval: + +```python +python main.py --train 0 +``` +tensorboard: +```python +tensorboard --logdir logs +``` + + +## 参考 + +[REINFORCE和Reparameterization Trick](https://blog.csdn.net/JohnJim0/article/details/110230703) + +[Policy Gradient paper](https://papers.nips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf) + +[REINFORCE](https://towardsdatascience.com/policy-gradient-methods-104c783251e0) \ No newline at end of file diff --git a/codes/PolicyGradient/agent.py b/codes/PolicyGradient/agent.py index e2725c3..6adf217 100644 --- a/codes/PolicyGradient/agent.py +++ b/codes/PolicyGradient/agent.py @@ -5,7 +5,7 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-11-22 23:27:44 LastEditor: John -LastEditTime: 2020-11-23 12:05:03 +LastEditTime: 2020-11-23 17:04:37 Discription: Environment: ''' @@ -18,9 +18,9 @@ from model import FCN class PolicyGradient: - def __init__(self, n_states,device='cpu',gamma = 0.99,lr = 0.01,batch_size=5): + def __init__(self, state_dim,device='cpu',gamma = 0.99,lr = 0.01,batch_size=5): self.gamma = gamma - self.policy_net = FCN(n_states) + self.policy_net = FCN(state_dim) self.optimizer = torch.optim.RMSprop(self.policy_net.parameters(), lr=lr) self.batch_size = batch_size @@ -65,4 +65,8 @@ class PolicyGradient: loss = -m.log_prob(action) * reward # Negtive score function x reward # print(loss) loss.backward() - self.optimizer.step() \ No newline at end of file + self.optimizer.step() + def save_model(self,path): + torch.save(self.policy_net.state_dict(), path) + def load_model(self,path): + self.policy_net.load_state_dict(torch.load(path)) \ No newline at end of file diff --git a/codes/PolicyGradient/env.py b/codes/PolicyGradient/env.py index bf67b81..0bf59eb 100644 --- a/codes/PolicyGradient/env.py +++ b/codes/PolicyGradient/env.py @@ -14,6 +14,6 @@ import gym def env_init(): env = gym.make('CartPole-v0') # 可google为什么unwrapped gym,此处一般不需要 env.seed(1) # 设置env随机种子 - n_states = env.observation_space.shape[0] + state_dim = env.observation_space.shape[0] n_actions = env.action_space.n - return env,n_states,n_actions \ No newline at end of file + return env,state_dim,n_actions \ No newline at end of file diff --git a/codes/PolicyGradient/logs/eval/20201123-170440/events.out.tfevents.1606122284.MacBook-Pro.local.78801.0 b/codes/PolicyGradient/logs/eval/20201123-170440/events.out.tfevents.1606122284.MacBook-Pro.local.78801.0 new file mode 100644 index 0000000000000000000000000000000000000000..2569c0f4be4debf53426b57f6396515f664e7968 GIT binary patch literal 40 rcmb1OfPlsI-b$SMh1RFNT9%quVr8_dw)P4D+e8h5 literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/eval/20201123-170440/rewards_moving_average/events.out.tfevents.1606122284.MacBook-Pro.local.78801.2 b/codes/PolicyGradient/logs/eval/20201123-170440/rewards_moving_average/events.out.tfevents.1606122284.MacBook-Pro.local.78801.2 new file mode 100644 index 0000000000000000000000000000000000000000..909ca5f0154f203b8205b571d598c7b998f5333b GIT binary patch literal 13713 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 literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/eval/20201126-191039/events.out.tfevents.1606389059.MacBook-Pro.local.21663.3 b/codes/PolicyGradient/logs/eval/20201126-191039/events.out.tfevents.1606389059.MacBook-Pro.local.21663.3 new file mode 100644 index 0000000000000000000000000000000000000000..fa9c4e6faca7fb440f216e129a495ffd1725c716 GIT binary patch literal 40 rcmb1OfPlsI-b$RWEk6W2et+FjiZ`h!F*8rkwJbHS#L6f+P|X_v?LQ3j literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/eval/20201126-191039/rewards_moving_average/events.out.tfevents.1606389059.MacBook-Pro.local.21663.5 b/codes/PolicyGradient/logs/eval/20201126-191039/rewards_moving_average/events.out.tfevents.1606389059.MacBook-Pro.local.21663.5 new file mode 100644 index 0000000000000000000000000000000000000000..f11d33e7d42de185edfa5590a4aa2c5a86844edf GIT binary patch literal 4540 zcmZwJc~I1K7zS`aWVu;^Rou8-?n7AJEMi4Y!2*O`M3F=eMTHEJC9p_fJQ|Eq5CwFQ z6jT@>4<;NC(BVi!8if%PF@q2bfs`^yJQ$jK`{$Xr-`}5k=AC!u`~Ds?HTq8H1WR;E zRey$$O!oVV4HDAglTzGPW+bMhdoJy>zjD#yKNsgdWTTUsKu)OcEYvmB6{IC*#;0vo ziPY3q`Kw;H*8)DQ{nx*tLJf|`WYtdqKl^-|@Ene{GU`tP_8WUeSd-(t6OB`Vb+^tC zp3AY9L`w^>>)lzxS{yf67ncKeR%$5z*_u$mvCkvn8^D3RnuN7EcCQ||4_F)_Agsgj zOrIhX@WewM!nz!9ytl*$aDSLSVLgtuzAs0txN1mPpW~>WbbCmCYB!It0ms)g4T=CK z?=vB6$nkyin^M5pBO<~^96uU*f-?(NnGqIp{DYBq0VMaghzZZ*_-Mm{(}2hPEeIQP z+$0h_2RzeiMc9Pn_F5w&z(X<#VN;GLlI3#%C)L^#7IAF0uI@45?D-Ca=W|@ueXkX8 z-WN`U7jV2Ib^m$5<^os3W*m#RpHu@}vCob0LXO*xxn%&Jd@Lm_{vR9`lMHxcqKxoc z90w^a4gz+(yNs|o$DN-X90oic=|R|nj4+t@+54@vHR`lalqPgFTz$Ft2EB2 z09Q766Sn5KuPX*mZf%Gk;YA#~`dZFH^0FrZge4r?fBWSTz;#E12-|RcDZD8T@aURg z!nPbYzMQ=b*y#9b!gd_n7|1jMD?|#y_8hx5hXn#|%ZecE!10e_??-?y4M!4oRR$I)FD^k0$KQvCHD5J%H1sF@#+>4z~Pg1aRH?Si-Ix`?>Vu>g2Kn z!izcHJ*y^!T@HA?Nj_mOjt#cf=>u-AI7oN}$3DHe z__}lb3kiF3Z0g>*8j=%2ju7_Yc+A%a`$n#Q31MH3vy>{tw+Q%u zVSkSGJtqZ#TT99b2XO3m-1G+EuWU~dUdeH)!>KEPr^+h{2XdT$r~}K%5zDiLgE-#y zTPwDLIVIJES8;s(k|ZC-uoTx4exKvrR>qxx7nFTX_ydj`i*zM`FPmK;9L%vqaHaxq zY*{_w5RQKusmJ@Q2x%Z3%CWb9Ahz7D(ni9oIX>;1^$m=1LC``tjN{uShaUpo-*c64 zILCv{JAMIdo!voL!Et!I*cR}Pz1IjUIUaucJP2^1Sr_35j(45w+zz;)s+;f{jt5lJ zHh_P2x=A>a$I30UCV=(s+#wvrabo++Er2!R z`U$V+xPHhy4RHIz0m9K7OH&u)PqQZZ0pSlh4%GX&8Itv$4HDkKah_g!4d4pb5yCMX zKR!D#0NC@hQNkNJ?pR>g26&sz1mReYN0aV20+y#fB^<|bwZ~j6REBMT5RT{gP0myq oB%C!D}>O{O#tuv5kh!kajL@t`sb@Ei44gg0~CH=v&TH}w1bkpKVy literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/eval/20201126-191039/rewards_raw/events.out.tfevents.1606389059.MacBook-Pro.local.21663.4 b/codes/PolicyGradient/logs/eval/20201126-191039/rewards_raw/events.out.tfevents.1606389059.MacBook-Pro.local.21663.4 new file mode 100644 index 0000000000000000000000000000000000000000..1d052eaa9846afb28a80969d5b26e0301076f21c GIT binary patch literal 4540 zcmZwJYfzMR6b5iaWaYXmxQZJWT|l`ku)0~q${oQ1gLBUjg#q%ygaaZuETo~0%7}@WLAVqmDP@pXhNhmroH@OpfAh?lGxI<1V`G5tctN<- zWH9y5DE(+ppu{3MD=96*b7@XWMz+tQ;jtK*-G468tKZQiGZ{`a#Z6>tX)4G{*_M>G zK_fOWSQe~#rK=-&@ASX^4HX%3JglgBOz_iBp94?j*f^)*D8WI)FM*9XE;`aQPO#~w z3E*iQ`$~4Q$ErJ=^PYg7fuaU?InY{g3I)f@L8F6?itsTQYZ@A=p+R1GeEB+5&2m+qRu`JMjk|ZyF90Dxmc>cFv>?62-e;BYM$LFJ(6A2z# z84m2kanp;*3j_-fuK;%D*wI2^M6gP%0-n#YtR*s(;I`ao-~}B2DDfX8`24^sU>A<> zStT7H*j*h9?8>pE!pel;wO8VR-8gplNZUbhmOLKVo#Sx(5A+1rpIHYi<2cB@i>^+o zNCx)cIB(KGM3N^iZ2qnajF0IQ0_U8CpcQV~Zq+=oQI~-TI`JN-mzn1L) z_Tf15s+Qi31E#xxl^pl&mRFPH-{%woFX1>wy?hD5YpjcbeL1$+RBujji?#&VkK=%@ zLi)N3gUf*ZIiBg&v4SKgN9+R*;CMJNfcA|-^9tZVj&s!-if`;W1RTV%_QiKXGKRaj z5;&M+bDvQG!L1clz#$xa9-euX;4hty0Wak^bHTB12p+Gh1`g%8cuzYmC;RMA0*7&& z`dce)1yd_(fR}N6<-D|*jA1XS1Adp|JO`@|f@fEL1^gbzP35Lif-l&d1rFy}DmbAf zcwJ=!a0JIc=^N;MRz)-dFXz}lIFz>B&VxyzLnEN#u9cwQTu?;JNwjz$%WTbP^|mw|sUPSk3Xkld&*@%WOJLp5&d@Ar3a16)ljg!^{o87(*9LsTv?!`ue z4HJ8S*Kpj>Z<|H1?m;hb9LMrZ5Bk%rO}`KPKF6VEAGVNWv!{K)YdJ15%dRC@E7JqV zbNuk+NH4)Yp9}#faNIuIxsBjd#}VLl91o@4b|F}q`2;wT;~MX2v`|^L{Q;cB@#})| qN|IbOJ_el3aqTvF5y7rG&w$r+{Oo>pF2S#-yae9Bad+>O!oL9=Y5dIq literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/eval/20201126-191145/events.out.tfevents.1606389139.MacBook-Pro.local.21831.3 b/codes/PolicyGradient/logs/eval/20201126-191145/events.out.tfevents.1606389139.MacBook-Pro.local.21831.3 new file mode 100644 index 0000000000000000000000000000000000000000..646540e9ef9d2c496c038af4ba2537a44fb66e30 GIT binary patch literal 40 rcmb1OfPlsI-b$Qh4_>A`et+FjiZ`h!F*8rkwJbHS#L8%e!W3Zu^fV28 literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/eval/20201126-191145/rewards_moving_average/events.out.tfevents.1606389139.MacBook-Pro.local.21831.5 b/codes/PolicyGradient/logs/eval/20201126-191145/rewards_moving_average/events.out.tfevents.1606389139.MacBook-Pro.local.21831.5 new file mode 100644 index 0000000000000000000000000000000000000000..b58a9436e4ba2098fcb981bd1becde2bb45ad1fd GIT binary patch literal 4540 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 az*-)Qf;6P}1BBVZX22Od?qe=&Ox-^a9Sa=* literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/train/20201123-135302/events.out.tfevents.1606110786.MacBook-Pro.local.75770.0 b/codes/PolicyGradient/logs/train/20201123-135302/events.out.tfevents.1606110786.MacBook-Pro.local.75770.0 new file mode 100644 index 0000000000000000000000000000000000000000..a7ee08a22a67d3e196c8240dad9f03b4ddf78e9f GIT binary patch literal 40 rcmb1OfPlsI-b$P^TBl98{O-D=6mL>dVrHJ6YguYuiIvgM&{sPF>_85U literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/logs/train/20201123-135302/rewards_moving_average/events.out.tfevents.1606110786.MacBook-Pro.local.75770.2 b/codes/PolicyGradient/logs/train/20201123-135302/rewards_moving_average/events.out.tfevents.1606110786.MacBook-Pro.local.75770.2 new file mode 100644 index 0000000000000000000000000000000000000000..0043ce24f6b0e95cb384e308d689179a94e819d2 GIT binary patch literal 13713 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 Beh8TKk+%GWbjMwd|>3bzM2-*~e1WrL~i% zqs#I^=3a}IuNpPf^UD2p-6ZEQ_(?B~+>7Akjrz-5v}w`YbI}?{Pv@2GWwHboSeKuQ z@Sx|0|BK2Si`bf3#SGYqaJjGH1HsBa8dUBoixJ~(DA!VX6ytRZ4K z>#DQw3Bn;0M?$#;#Zk>(4Mo`hkAz!_SjoEi*8h$06vNR_ZYAOrW_db$2EvX{B-~oW zO19S3Hwxi^kTFnhL$OiTxGM;EXg?OPrikTiv3*rE!c_+)ET_0hLOq_(e~%akWi5)o zj=Z@Tm6!A}0jw?J6|7y*@G680-kJh#E8=SQ?6U%odGUA-xSfa#*tolU15x>fh8f`Y zBCcggJ?dW}JStMc9Yic=chqmiB0O=hIg~q!Siw4;lAl0$h0l1vokX0&rmbFd65-jm zCIId%;tW>xIL{AZ9bXH;T|{ikN^XUhBHVe}M8G;Cc3=tL>kSch?mY=`SBjtbDCZ&k zEla}PM66);nchwaJ2OitcNejoX};EZj&Q*>3F}f^tP!Avu(`!#C@Vy)VAjW*Xd^r} zSHe9+EN45~>0d(lYqu#-?kQp!+mza66~f0iOSl)s#oje|Zse#k?S-Gs31ZwU{icut$hYql7?JIIP$)Pl_Hk2UuWK*MtC!~ zf$|WFr(M0j72%UtBs^5aO6KkL%mZQlnKPkmC}IU$pZIJb!lsWUJWRw&wxZ>)&j|ls zI19?dDgKiwY)*bwN_d2b<*b`?8y8gWVm%wmMijsLZ2S`8gbNZjrZ~^bunysJ6I&>c z6tRLGcI}84bFE7f9wlNWb9>aO5|w`&%z^S~5zE-WPMWh3ev~QUF(Ov5eX^_m2y2X- z3+1sQmb1XQ9mga5>Y{|lQJk(*#1MWwXC9PIC?4K-4&EcheUY%Kh!xDCY?Bu%>x9@r znTc4=nw}box5U3D*#qVxHf7n-?)X8!`djNc>=|IUdOyZ<+arkwh*zL`Q1N-=X0B2 zM<`Dev4VM@93n&I@hzPIPZF`5sjaf}LD(}|JJ(l7(Ik* zJr+ZGnuz7>`1lWaefHH}0(d&bofIHS%0|;lxK-p#*P%9E<*TbYgfRtMXX>cua;UPoWDoHwj!3Z?md!p z5YAFAh4LJVt2|xtZB>&e;kgu7s$9%bxy*bSl;=^rac3?*N*CUfu$_n%Y-I6}MW~!I z(+$e@B9^md>K~gUobyV;^F^#+gB_H^5nk%M9LftQE}G%75aCg3?tmRcEMt!LO)etr zwoSs0B9=4DmtivzemZCcl$}JZU_Col;0;xJrGyuXSjif@Cg2lL)`JBwJx4)^~3 z4h_TgmxLFISk7D?ebz)+GsY9jizzM*?ttfp>#&u8mxx%wWS1PLqw?Jf3I9d0?mx17 z2nQ@(1!Wfz%bD)cpi2m!`7L2rio1{8gm;W?TUJAPDaDhE1Mm$ysIwQ~WfZ6U{Ja?r zBR)&QZX#B&;&oGhA?!3{4V0IQSjKE~{dXbU^O}U+Mf~4Hs@Kdx__pI(D6gQnM5lfh z!lv~S_Mq6lbU`MBMzL@Z}IjRP+r{K&@#%4;ZIxayM;!W}i&171t?2|s%RBP*IKsYl z5?(K21v}g1h8@CjC;gzjLByuaZNU4D2)8lV2-sJ|GPc)ahi-T2m2!E7_D~J)0tx$( zcgp{5pnFXYK>CY~KcqJ{pp!eMei@VNH6LX z2s)5x1&fw-ia~l$fuw_oR>4+ z?%gL8^j4xxnWJChP^9}c-2!@B1KP5GW){+SZcBPQ(MonP=X(Uwdme9v_70*Q*!S7B z(~!Qmc{}JZqRW_BQ?tWJ`^N789Zqx@bKSA4H`3ETg@fKnv>w+D(M?9Wb^0#QyNH(a zvZ4_oNGICv1|30kDvvzb>Il-d$fzM-yGZCSRY6=l3r6IM6XfTeBNC$4x-(DEoNO zdx=h9<@L2?NT+U003A!T8Q<1M=74nZnMBZWL`QI))1QVRy*ue3=y;+N*dDE^SCJmU z4uRfBv^7ghN*{`Ji`Ge?6NnCBP1@A_L^^(*r1ujoXGbhvMI${!l??3zMEkL|dkyX) z9rZ@ii9|cFlFix&k$x;Y4DEwN7qF)?U0WtcRbB=*dCVCk+|Ho}2(%Dg&pi_tr;jMB&rxG2* z!#-IrL;4%b1)WB88B^vS^+I~_gFMjbM7QF5Y+K_`-rw#V=p#h`!!2SA@!b$zavtMWeVXV-s@TbL{M;G-p$>FD(Y1U~|J2K*iOyhJ=G}r&J58hU)c^l6hx{DTQQXe`%NwkFs(~&bdJH$w zFzSc&`%(?i=ZSvKw|kl!Af3Nb6Z8e5-|;c`eVZZee4-ubLZYjAc7b9P(kbp;L0=?# zpelQj$qS^nYWD8&j)>n=nU>!5N?EYU9B_dyF_^2tLmjxyFGmC)z@F&FV5fc}3R@Xk#8yeQO>1FR#761Nt@53A`pZ zu_Mw(Gw*|bLv%bJfBjkl(q~=DLBA#XESFgv!`D0Nbp_~mL?7Vc{}x)K_HTJ5==Vfl z;MHpJ_`D-;`4aR8qM!2{zOH(x{o(x^&>xBZmmf=*UyAgYNAE#b6CKJ&gjQD}ZQuD5 z=ubpPanDxE@E&5={;!}v6McZU8@FHBpQL^R{e@^#?)>bO9F4@tqZag6qPy}p#ZRsv zeaXHabPdtNxIyal3rP3d`3v+nq9b@=a%5|yb<2K({!a8$*5$xo50Gx|*U0LByT@9h zSMYrA5%Ead{!jy5NAy7+5XWkfUb{dYbUo4WJSe~&@4r)0TZ8^V^f&I6=6wvcjV@_{ z{z-H`zp+9!6-K?f6Ez$4XV_*7@t$O!Z%qAR$0 zIBf68_+MB5A{TP^dBqGp$+J>^&^6iz87Q*dP@U( zNML0vqz&FVfZp1GK0YX74$>6{i$QNA`Wts1YIq9i-c>H3w-bGo2Ty#Hi*%XF9rO;O zfAan*F6)qf{BkAeFrv$NVD@Nzq&I9?13H}ObnY>{ur1OaVLqUD68)JEPc3MV^yN*y zpm!0you_$*5j9gO*hbkO^W-pOa(n1$cR z-h6iy^Z}xc`T7gl;>=OIP&*g&A);j} zr)hJ{ke-l!4s;UH9aLj`U4M)81I1;~$wYTm)ufEBL;8>ECg>ERJE+uSobcW7@x^V> zhl#G>Ipy9D&>sicLXMUj%C(5kGFC{5d#R!c~c zOv@mJB3o$DLQRwS{(c?*d@g^#U!T{x@8^EbIoIt`=|+EN{HJM12P-Blt!*ij43=B& z<+^6QzOB#7^_wS-v&zYNq1xqK45~&*EA%3#&|OzSMqZ|m*GgYkFE?+cZrvgzvpl}3 z0{(kT7w&;L>eO*b+t&?)0iVn5!aWholpUAE_9zGk+|<&Ar4WBi377m{Um6Q|UwHDb zYg6cj_)~47WLV*YpMV{|cj4ZMvsaywl;}NL1Gr8+WC1=ysp3-?8= zweqs$w~~=p0Z%c$K*`dGC&^!x)FgW)1J(%c!ZL`*f4L%YJXEq0aC~DImPKqYNs}CO zSuhT;iSHj&MnA-()N>_c1Ft9pE^WF@SPrr5oD9j$rd9*M8*Hx-mPZ^?lP+;Ry<7#b z(f%&{8{*3MlG0 zvCqcyk~g|xSaWes7gj{PR^^hUXhl;gBqzB4MP>Ysc$wcliN)I2Jpo(&yg^tAvBroD ziQS^kbiiMAZxSAeIDXillEklbUjzQOtqUt7W=&Tm7gjDt?3{6nl2s6AsC|^E=+C(i z$(wmL;X#NeZSKKz?l)Hfo@|jrcrfDC<9}yg6?{Jcj*rMCJOr`LiZN`|vXlCNWu@{6 z4@Df(Z#wHJxqk|<_vc51RT2AHPG!ycXCDJrS@M{$8e-`n3A^p#Tn#w$QWqYE_(0wS zw*1MI{ea#3KB45{h+i8TGL2*h2Ke;c62j_;JM{EfqgvrPz^QJfgf$R9Tx`kKEh)$V zT=4W6;Sq>$%yDGXm+dtM+&b_%VNJwY?Q2-kK?4`Sm;Gu9Ya!mc!h@}LjB)~eZB8BG zk%({g^JEWh%V6i%l&dGKjo5mT2YZ^S(F)0%E_GoY#AY$8*t8Mep@8=-`asE}5W72i zF)ukiyc?yiErfLuD>QFs&S9!MAlY^LN5XoD<<0zKf+@WJEZMmEq^&*2b|{ngRnkg_k^9y;%J}@;HZFh!Ul-fFWAHW?zUzf;O$;N z2^%7|H`>c8JMT#VC&cx3{{Ov1VJu=N*FEgCljRn`s`L5~9*4NMIl1iJpy~3XJHqfg!pyn0k*~1UQKJO#18N+Q!XZ^64!#Fh}AiuifWE#~3wlLN^GJDmvIBfeXo&bAhY z?*km!xRmfT#0J;0SmzgMJWag&=}dS!;#V6oS(v878%Vx4cOBswh+ivbvyH`VcL94p z@4_BG`2T) z*%iRg4(%tr0P*>jTg_=D+Jw#Cpk1@MK4bA*>5 zE-U)N_UGMI7FvgguI1)E)5r zo(~BxM?Cm(1N$pos7a#1DtpF!Q_s++@t0{wC~(SoOwBrnXG)FeK~5R1jW? z*f{hVbDVHS5%86Rm4sIzzFhl+eKI$m3^@7tE5h!G_pGX9uToFq3CLsQYr?A$zifNY zw)gxCmy=;ZZG_h#zIgXLJ5u*<8kF%w=NsX*h@0B~V}14KI-?E_NW4v6Xn&v6JC$lSV5L=l0ADI zk|Q#d2yZ}KAnD5&mLI|;@Pd^x;f;tNmGt7>mJTa`WYL!nZDOZu4--hz0@ z(tnw^Q}k=VdNa%j`yhTeuazm!nYtOU(}RhGeG#vn_Jyteru!c7l}YA=w<1>j_KDqj zG<6c-vLE(@w;|5U`@{z9eqauGs{VAs+Y#Hly=O0bY7DC*8ZgT3EIA;m|br5asXX6HGp)mpzmfrX0FXyk3ol|>?XZm(1wQ} zvp1RHk)XY8!bl$w^o1UeSjH?l8_=`NBS?n`I%<3cYc0vt1buz<5z?W8P8wLlPHtrz zKwq{yM*5(jk40^Ta`)VP(Kd8kNbZy>U(#HjDR-Dfi zMtXk$?LYS(=@WuZD=T6JwptdT`) zr(TqiJ|*bqCS|Oj`imjwi3wqGvUVQqsi5&FpGqNtfmZ$_l+e`K1ht%YcfNt+DM>6!2kWLbGs+0^*sP_B<*$1SxNS_t-stF3*{ptKP z&@-a7Nhb@MsVMQVj!(s)i~bo!Iz`Z>O3Hl9Z}XZ#%gr23`kbKq{WpY9HtmJor#8=q z^m#$cx(?^;^M0)4O}icGR6&P?Xz=j6U-3D4(A%E$1wjw2)#8(mO^=1T-*lTn`VT?7 zOdrMXkBz}kr|tGi(ia82(0Mdxed6UI+a_-n=}Us%{b2+zUuEP3+VS7jq%RA)LV5&W zZ8G-_=u)Y*q^}5iK*nHx_E`XKGqvqLq^}D4Wv(LcYOcphmd*+zeN)goS`>Kw%21qACIv~PZwdNC z<^XDz){*k6U$s2yIyhY#RWeP-pOZc8PdA?UMjl=<4Z zw+lfVuFN5wDd^YNhw@YZ%FBXY^5(!FJ zE9ekk9X>Lq^b%;-)Oyl+f_@OE$1|%W_*7k9)JgiDpl5E;=P%#?iTjC5M0eL;Q|i8; zk2dM^C)2KWLM3^cQl#?*{nTSD&m2-$1-j*2Z_)*VesBoXr4%Oz~rt#sRdmfgM zej;dBLp82uQTPya=-|1ep9(t5S%Z74Z2AaVZst7F{|MS9a;+d!lN~$O9h>nqRImve5nWBK6D-FXM(;^tIlK0 zWd8wY0=12(X7lKZlFq-dGxrQeJ z^REXEcZj*|7l(z z{Zi1!?v3Y0CV57npYOd$`jwzfPfpT_tEEb2Gk{%J3&in+HjTj`!^u_O@}_|_kw=1 z&xX&GNm~Kh#c?d@4}wmwvf+Vorr2W-6&aCk5p=GBE&sHw33ttd`%FlG6m)^FEqChijl;YI%|V zCg_E`EV*xeh&|}N>6=OaE9h&Rthl4BY7=OS;)A5W3%aG#f+r92pAGtgc{u6+1pTSg zlCN1k>oe##ha*V;5cC&+6RvSjZXxKje-4vw7j)Q*Fvj3v(%W6Em6X*8GX2ebcmqs=9}<~ zLv`h$5*elLD}K#}P(hznG37(&*M@+e6xx&YK|vQ>Hse8B4Rb-yn5s(pkf4p#Ch-Mr z<{6+<(uR=^6Z8*vb6zQ%g#E;8tOn_DK|hGF;JW5j+aP<Q%r3_@3hwUdFBj}!vw){|P3ZCbKI}%983c4xAmOt@akCg;EB$192 zbgyz-uG7~D&#vcRB$JL8b$>hlU+{bU&&S$T=SiOy^j>DiLvyD3!c{I(ze_qn(ET^q z@#OBk?|`1|d5?6Wphrd8@eXN&Y|zb(`J~SX+A`ga$JCzI16}D>NIFT-H!J?Hk~qCQ z(8V+BNS_t-=YQ>Z!7Fb(jRuC)lTH?N%6D^~GcdXUvZa5%A)O-VT189VW6W+m)wyhG zCVfuO4gIZnMD^_+kp1m&ceh_X_Pn42zgqFq!97=lPHXN-I#tjt&zjGd(s=^<#FpNq fF9>@5P6>ZLdDm#rqd)c~{fD5HH5s4L=QmNaZL1{n}DiMXm-3Q$YNt7g0(jW~oG$=wPR5U1>Oc^tzp2*Xn zj7cMkNCQ!dR74qipSN}YS$m)R_xJPrtaI+!Yp=b>^nhQq*HT%DBLgGX)_i>_l$Nx2 zvD>tDmcIM?t*)9XC1c+1kP$oE*>B_|1bx8?dMXG84jI_rWxa=;i^EQ-9zBAE%beO| z5Psw)#=U4_|sQ0?n7f`p;@K3BEpA`$NqgbL0=kA zCtH(d#3Q`=ml*e>alCNIuVW7ouALPJ$^B`pE7W#Bc^YB$A~7C7V{BXWNgDeL4^$-gLU@~g8sH%`&J;RHzn+P(s=pWyrE!Gt?j-F!2$%jV#sV6f2*V7s zwGn`;Q8W$4pFHS=c z9@Hln@OTj8v!q=@l!8ZRI>MKiS!K4j4Z$unr2Li$?xCnH>D_Z6@Ljbn(fexHp9 z+Zi?kR-~~XnJ@7icO(_9Z-A9(97M)1HZViUsn>r4o=Ia*BERBT0K(TiIsnh2u`7{% z*eeC$aPLmQvuS*V>coB`q6QZJV65;y!OCVW9h8`Oer>i;@fXSpi-`(Y((R7qA=?uK6>md7h_`@PbcjYx4WU_+wRVgyo|JQkQ#_eQRSS;>!x26ODUPc zdaH08umz1pT=G-LdX#*B^JT!RX*{2kPgTb=e}PIIU`rYg=AOtZKS#+)!SR6C(72jd zSnj@#@C)-qz*aQw#n}j))*&ntcpLCq8VkAHjql13mUw#yur-a#iB$h9_yNad-34qz z;~;WxiC{QNRtwDrY)fN560Rztjc}}1}K~;bqX?&3=NHpLn zH}-Tj;0-jE<(B=Ehp#N0roIEbk;Vqx;}z^r}0~&`9m0iuwC^Oz&mK%LSEEM zD@>hGG%h91TMrr_Y;bNm;GHzCB}MM>_{u`LVg_JW8s8u)jW1hJa_QjtfZb@^ zO!nnIJcO{Kkp^IQ8b2ldOfuRLwtAom*n`Fmq++c18HCfc769Hw<2vFrdg4liUv?}3 zyqm_&r0%zO9m0!e83Nuz<9u=^voZ`}p@R|Ny)167`}`VV$wXtoo-{5b7J6&(lq+zx z0=$pLb>xYv`8SkoUbz)gRk1`X)SIQMt!&M|iTWtY* zGk405$xkn#G1B41&Y%x4x`=p%Z}LR?@UN|)eHfifwCc7*BON$(iR8Fq zbqCS`aR)&AGx{+ZGijYY(mVBzfj+|MY$7-AMKjXN76gM1VDt=b(z@6sNZ(L80XmS; z0xqmG9m42Qobd+>bEH28WPm=w=qR#!@8N2s zxiy)fPcqt*EVOJDARXa+6Z9!YN0Fm)IyFewNem>|kj1DFW2V!NB-u|Ef^jStX5tBI~K1hdEyaXM_XnF4Wu)C{}K5J9~I-Joz zNrLnC5Tt7~UV%Qx=ui^w?6er^p(RzI&of%Y83x9mKzh1YBj^i^?j)XPb2y|uCBK5c z$mrhO*WXo*NY{CM1AU3nBCd1M+&xGy7|{Ycf=7Qp_XV%Ztmr|ue}||@9zE=2$ZnL~ z*;5j96r(?qMjzuzNVne^0y>(}{kg_}G6x|2C0hVGhS37o5U0ezX#{|)=k zI_Ds5bZ#2xSVjvu&8T6AkS=~c19TjtXK?kAc}tO&G*$u~&u9@>S{5XMbWN@v=mZ|U ztVj65Q(LSWzLWFf^$}Z5?7#&KsJj@A4mDCQ~3;H^v)wqs#0wL1H z`wxTuhtc80EzW8g(mTH&0eyqfA}&{UQ$5l>?*)R+V6-Hs>6Eev>9xy_fzD*Kh>Q80 zY=N|TVGQV-jF#gJ%Em?@-8McBbQYukt2<16DAKxy@u2@@^nDU@y<#KQt%;y-G5Wvk zg56haI2I+)f1)#GT-IqH# zL4+rcEfUqB?=gBDH~gYpH_A>v{1)_mMvJ&aYYRLhH!9YE&f(G9Qq)yZwq4=}(78N1 zwZAsr8&WO)fX?I5$#Q$OP_}JwPrJXnR6e6sxtw`n1Ch>^?*qDk(IPHlut|HH^1?!O>6simQ38OPfbo`kB zqisfBTGDt0=;w?sCI!+~c;~K+GXq`1=v?w= z&E+>J+oWqH=u$>&aF=}Dm5@$)ya{v}qjk8{;X)^*JI8MU{esaV?#-v0_ylt!Vk_vE zJo=f@vbQMvu+$FFH(YM0t@#*NI^;gh!j5grj7RS}1>?q0apz9ee;+{Df z$_)xZsgH>#!SHd#CG)@&`mu0$5%xMlzp^V74%mgEzIeg zgLKd#bI2w0AH1wtO&ASIVzM`k>b>&<7YT;&!VX4My7d!X3~)j8@@fpUQnh z`nJqH(7ue;=c>4F+`sKM<$(5M^jvOL#x8uv(a@(7^g%|ea>XTm@1aVXJYIu7#Ap$B z;;1!V#ScEb0ezT98{Bik?_{IZd(i$ox?=HKJfCnfouH5KXnUWT)~N1tA>E(@cyyPP zKkg6%rFyRWyEg>#=;SLW@QsL8U~kYtJX&>Jpa4~3v{(l8Q64=mSjPbAxN8$ZALG%| zS9I`R>@r6d^l=^?bag@z%C<<62OZ3#Z*L{G=z>1Mqt`3i zd`H;|H3alY9$lI*rGT`hqdw?UJi4u~0iGdhVr)R4=FyT`d(2R_-B^3jp*%XJy(3dvs1(Z=?xCPpu>5zQqv2((#qQo zfe!otXz1cAVbOew7; 0 and i_episode % 5 == 0: + if i_episode > 0 and i_episode % cfg.batch_size == 0: agent.update(reward_pool,state_pool,action_pool) state_pool = [] # 每个episode的state action_pool = [] reward_pool = [] + rewards.append(ep_reward) + if i_episode == 0: + moving_average_rewards.append(ep_reward) + else: + moving_average_rewards.append( + 0.9*moving_average_rewards[-1]+0.1*ep_reward) + writer.add_scalars('rewards',{'raw':rewards[-1], 'moving_average': moving_average_rewards[-1]}, i_episode+1) + writer.close() + print('Complete training!') + save_model(agent,model_path=SAVED_MODEL_PATH) + '''存储reward等相关结果''' + save_results(rewards,moving_average_rewards,tag='train',result_path=RESULT_PATH) + plot(rewards) + plot(moving_average_rewards,ylabel='moving_average_rewards_train') - +def eval(cfg,saved_model_path = SAVED_MODEL_PATH): + env,state_dim,n_actions = env_init() + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测gpu + agent = PolicyGradient(state_dim,device = device,lr = cfg.policy_lr) + agent.load_model(saved_model_path+'checkpoint.pth') + rewards = [] + moving_average_rewards = [] + log_dir=os.path.split(os.path.abspath(__file__))[0]+"/logs/eval/" + SEQUENCE + writer = SummaryWriter(log_dir) # 使用tensorboard的writer + for i_episode in range(cfg.eval_eps): + state = env.reset() + ep_reward = 0 + for _ in count(): + action = agent.choose_action(state) # 根据当前环境state选择action + next_state, reward, done, _ = env.step(action) + ep_reward += reward + state = next_state + if done: + print('Episode:', i_episode, ' Reward:', ep_reward) + break + rewards.append(ep_reward) + if i_episode == 0: + moving_average_rewards.append(ep_reward) + else: + moving_average_rewards.append( + 0.9*moving_average_rewards[-1]+0.1*ep_reward) + writer.add_scalars('rewards',{'raw':rewards[-1], 'moving_average': moving_average_rewards[-1]}, i_episode+1) + writer.close() + print('Complete evaling!') + if __name__ == "__main__": cfg = get_args() - train(cfg) \ No newline at end of file + if cfg.train: + train(cfg) + eval(cfg) + else: + model_path = os.path.split(os.path.abspath(__file__))[0]+"/saved_model/" + eval(cfg,saved_model_path=model_path) diff --git a/codes/PolicyGradient/model.py b/codes/PolicyGradient/model.py index 9ca6738..ce8b4d2 100644 --- a/codes/PolicyGradient/model.py +++ b/codes/PolicyGradient/model.py @@ -5,7 +5,7 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-11-22 23:18:46 LastEditor: John -LastEditTime: 2020-11-23 01:58:22 +LastEditTime: 2020-11-27 16:55:25 Discription: Environment: ''' @@ -13,11 +13,11 @@ import torch.nn as nn import torch.nn.functional as F class FCN(nn.Module): ''' 全连接网络''' - def __init__(self,n_states): + def __init__(self,state_dim): super(FCN, self).__init__() - # 24和36为hidden layer的层数,可根据n_states, n_actions的情况来改变 - self.fc1 = nn.Linear(n_states, 24) - self.fc2 = nn.Linear(24, 36) + # 24和36为hidden layer的层数,可根据state_dim, n_actions的情况来改变 + self.fc1 = nn.Linear(state_dim, 36) + self.fc2 = nn.Linear(36, 36) self.fc3 = nn.Linear(36, 1) # Prob of Left def forward(self, x): diff --git a/codes/PolicyGradient/params.py b/codes/PolicyGradient/params.py index 2a3390f..3f34b20 100644 --- a/codes/PolicyGradient/params.py +++ b/codes/PolicyGradient/params.py @@ -5,15 +5,25 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-11-22 23:25:37 LastEditor: John -LastEditTime: 2020-11-22 23:32:44 +LastEditTime: 2020-11-26 19:11:21 Discription: 存储参数 Environment: ''' import argparse +import datetime +import os + +SEQUENCE = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") +SAVED_MODEL_PATH = os.path.split(os.path.abspath(__file__))[0]+"/saved_model/"+SEQUENCE+'/' +RESULT_PATH = os.path.split(os.path.abspath(__file__))[0]+"/result/"+SEQUENCE+'/' + def get_args(): '''训练参数''' parser = argparse.ArgumentParser() - parser.add_argument("--train_eps", default=1200, type=int) # 训练的最大episode数目 + parser.add_argument("--train", default=1, type=int) # 1 表示训练,0表示只进行eval + parser.add_argument("--train_eps", default=300, type=int) # 训练的最大episode数目 + parser.add_argument("--eval_eps", default=100, type=int) # 训练的最大episode数目 + parser.add_argument("--batch_size", default=4, type=int) # 用于gradient的episode数目 parser.add_argument("--policy_lr", default=0.01, type=float) # 学习率 config = parser.parse_args() return config \ No newline at end of file diff --git a/codes/PolicyGradient/plot.py b/codes/PolicyGradient/plot.py new file mode 100644 index 0000000..2a9a65e --- /dev/null +++ b/codes/PolicyGradient/plot.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# coding=utf-8 +''' +Author: John +Email: johnjim0816@gmail.com +Date: 2020-11-23 13:48:46 +LastEditor: John +LastEditTime: 2020-11-23 13:48:48 +Discription: +Environment: +''' +import matplotlib.pyplot as plt +import seaborn as sns +import numpy as np +import os + +def plot(item,ylabel='rewards_train', save_fig = True): + '''plot using searborn to plot + ''' + sns.set() + plt.figure() + plt.plot(np.arange(len(item)), item) + plt.title(ylabel+' of DQN') + plt.ylabel(ylabel) + plt.xlabel('episodes') + if save_fig: + plt.savefig(os.path.dirname(__file__)+"/result/"+ylabel+".png") + plt.show() + +if __name__ == "__main__": + + output_path = os.path.split(os.path.abspath(__file__))[0]+"/result/" + tag = 'train' + rewards=np.load(output_path+"rewards_"+tag+".npy", ) + moving_average_rewards=np.load(output_path+"moving_average_rewards_"+tag+".npy",) + steps=np.load(output_path+"steps_"+tag+".npy") + plot(rewards) + plot(moving_average_rewards,ylabel='moving_average_rewards_'+tag) + plot(steps,ylabel='steps_'+tag) + tag = 'eval' + rewards=np.load(output_path+"rewards_"+tag+".npy", ) + moving_average_rewards=np.load(output_path+"moving_average_rewards_"+tag+".npy",) + steps=np.load(output_path+"steps_"+tag+".npy") + plot(rewards,ylabel='rewards_'+tag) + plot(moving_average_rewards,ylabel='moving_average_rewards_'+tag) + plot(steps,ylabel='steps_'+tag) \ No newline at end of file diff --git a/codes/PolicyGradient/result/20201123-135302/moving_average_rewards_train.npy b/codes/PolicyGradient/result/20201123-135302/moving_average_rewards_train.npy new file mode 100644 index 0000000000000000000000000000000000000000..430dd9ee59347d932599406d02dfb6160aa6aceb GIT binary patch literal 2528 zcmbW&`9Ia!9|v#>X;D-rX);9J7*wvk;#IN~Zr83{+vVQR$$F8gG1RDO(?p|XP%{il zrKm9!Uy+P`O(iY%H5rk{a+Ud>`Thyt^UL$`IiJttJkICydA;A~0>{OkyH8T$8;S2& z{(=amhK3&u_YLt54fhxPJ8$J16d|DV5yV#{pw}DOn>TA~YOBVm z{@-Jf#Q%mN7~#Le5K|j@36CQUkUidF&*vIo&^)uVL{}eN8S9#C3pRQl{CGuKq>nlC zr1iFSY|N#mhn#QLhhF(~4d*!<-96rWbt33}r3~@w6gHGL&r~Ivu@T)dlebpd0NZV< zMjMQbAyu|IE~wuSKZtu3ZLSz2`(oaTk0nN62aWEEtT2SGu1Mqf5kr*o>e802H^5z) z`||P6^kH0>dBd)hjlApP+MkxQA$z&|K*4!7Oihm@E^0D{WMd}R)zldJC#$|w<`|=9 zIyt?s(+ES}Zi&jhMsR42<<1EV5&i0*P2Fn)Z1cLx3g|Sz{L?R8Z};e<*~c?h(#{y` zUZk-aZy7;)3ONq6El8QljSgbwH+MCUp)8{@P{&maK z00;C1z3z;&a)7>K=cc~TSvl^4ejW+rtrn-=mAum8C^QzK2Qh@GBE#bmu0p@OP zSeC9PM1OMVD}_KIVi(Qb(!3+Y!G*TpUmFr)uZ#RST@?npdGSh~90u*C_BBpy2I4=a zB?Z0=y3@6XUd1u^IWa!q>$?m_kLTTfbdSNq$pr@DQUm`E2rtiBY(g>aoj`^qDBnbQE8q4f=f&th(lqw=PVEWNQ zs*J!}G9iOoMbN6uRL<5Du#zK);x>7sU^bK|SQeI;x_12P;GQHILFw2pC>aVNYP7P6C_ul9lrY>*r z|2#td^PODZD0NQtIy>$yf$e>p*-LG7KCEo^nZ0$NwImYSj>2Ckn-7JLEq}agvun9g7aC6GYlpAB^xQ3SvB zhc?fgA~>|BE<}8Rz)^2)ZB>U5eOAf`>=hZLEScNoZAJUhV%zc4;S8G8J(t*|FnDHC zlqpxjAUq{2%DjU?!;8ymCbJA$Jbsh1S0oUnPH`(}pR#?^QQb%TRJ-@3*gib*M!YsH5u7GpkJh%gT;I=i+I7#>^q1gkE z;WOSoH0CMB<^BnbFN4g7d1m0BfoX6ZWE{>*z+VDcKk_vv@UdT96m3qeb*S6q;2&aM z0h)E@;orlr2z5#5Lo4RFE511pstut&7siZpgK^~N`=ZT}(63`0zIucP<7?4z1-upN zOQE`he351Vg~vkzkQsR7%dW}mWuNcg;e6z*}}FZ4C;Ez$|( zJQ(O^lUFZ94jgMRp-v<)$+Rz5? auEM*hR^>dhAJmp;_5sQLee?s_?Z+>5@bc{d literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/result/20201126-191039/moving_average_rewards_train.npy b/codes/PolicyGradient/result/20201126-191039/moving_average_rewards_train.npy new file mode 100644 index 0000000000000000000000000000000000000000..661b070ff70bff170a09cd4be09dfa60e3879786 GIT binary patch literal 2528 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 literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/result/20201126-191039/rewards_train.npy b/codes/PolicyGradient/result/20201126-191039/rewards_train.npy new file mode 100644 index 0000000000000000000000000000000000000000..96f97388622524a852d541b9e2017415e795f5cb GIT binary patch literal 2528 zcmbW1TWV8L6o$92j^a?nR0$F<)v8suRqM62Ug}+I+N3Iol|+0IVb8${IFvIKhhpsh zzCag*fO+}(*ZTLm=lt5(THkzmBz;dmI)mYOchtGmbXNA3JKd(Uw?Fze>VMhZ9}R~8 z>}&nco<(?G5&YfXCrWpj?c4 z`6={QLF>2%S7-hU*w2I3*@cVheJ@74{fN;ok7zve&+@C&FBhGUez~YFV${#7f7Uzg z^Xj(_(Rb#Ti`F3*)yFvcMRjuHMZ5lpQ70FT=R57z75!1CUi&OmXFT~ljQUyetvCAP zd-ogd)}h^a+U0&9dO02ZPJ`<7t2dvh-T&of-k+&hZo*e9<}K{^u%k;cpWg}d^F1qf zc>kF9@jGYz3;6BJ`i#4V|8B*y4sIT{=O=LbD%a7y0`KF$Qn7u8o&L%y{5eS8-^0pV z=Wz@FgNo@Le7j=v9y>fgh4Y418@7-d9Oa=pAUz1WvB8&Kj|WzyDIdZA7PiX$HJWQ3;gcIy@9RsV19{rE%UH{ z=RS=`U0I|K_n|&{w>PMRJFxz=QtfF2f6VXx*h6N%)>rI@{-*yk?khVNkvfxec}@N~ z`*C0He|o>%Wg<>7FLk%( Tqut@XcPh6J>Td>BH@WA(tVZ1m literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/result/20201126-191145/moving_average_rewards_train.npy b/codes/PolicyGradient/result/20201126-191145/moving_average_rewards_train.npy new file mode 100644 index 0000000000000000000000000000000000000000..784889c451dff2745de69707dbc5984dd265b070 GIT binary patch literal 2528 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 Ch!s)* literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/result/moving_average_rewards_train.png b/codes/PolicyGradient/result/moving_average_rewards_train.png new file mode 100644 index 0000000000000000000000000000000000000000..b531cdaf8ab34e061177bb0c2beb3614842769bf GIT binary patch literal 41085 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

UhOvwk*S-18yZqj-(%#q|6U{YFJd@{X$*+<;) z8dGKdZh*v3wbSG$A0=ikiyw7?a3;8YPRQ_qW?fu@H5^_x8t`ai&sYN z=3Me81{Xg9a4pYzcq#ZA;vClTlCYjU`w3mS4q<+c(Bj+eXCyD4ubcY)%YIN3)ZG&W zni(mjITk53(SxYfbImSK*(A*g2?k{E@xB)vcL&;H#}RHt-DCs6`_vVr25uE7^(nQdSv{CP3~-n!l4L(1Pa9yi7K5g(Z6CsZ?Fq z#YRluOSVY*n#i+qyb=d|QKsSV)svS25sMalivR3#Jn61VH^VTm1C7}GMbDwNqUpvg ziB%X=f>4tbXpAuoy#kMwy~9xt)TMWYETD)DnMx5jty&8Ky5ru&%OPuvE>G^gPVJqT zR$=qt*f&UnV1sHfMF|$UA&Uk@@eW*>;fR67)83RqOlJhY?_Y;+qWy#YTak zYllyu0kzf7w(|Ro0uQT*@ve!3rAX3vQ=9-SOWOAPEg>Z}~c=8SSmll>0UY zaxODS6Od6hGu}uY@we#V`*D%NR066A(BGEqZ9?&8ysSs#>_8N<$6+CiIAVR>MfPPk zkd#-MJ9gGM+zu2b*rG%f=pZ(vJ@G}8o2I-hRfFP9yJ2sBu%#1x^P5N_RV2!L*1{37 zjz1g%kRd+x&FuMBsAa4)VKkj!JAl6l>W%ZHQG=VZ$QD7oikuBIdA>P1yON^n`C0Aw z;R^d;84_Zt*?AciLuF9>PzO?O$WHa0e5DI&!Ar7%UuO6K396)OojVYSEwwV}ZCR57 zr6;)vIeOuT{2LvErZe%kk@!FZkBk4({KWUzt8pKSX!=t|iPlaCukg-g)h z;Ru2m)eeX9Xj)sqDNS+Wsw!JxAFTtYtESy{lo8O3vIQJJ!tX>%d~e$So$Ob*E-B&P zG+5G04n!ivM7Zfi?n8-gs;qnWA&)2nSCCDXrP%mhI2e#`Og3oH2*ddkmi&XNl|OMi zzkC%yB59%^aqqDT`fzCA`H5>Z;M#}6ei{;XbwE{XcPet$b4-OqfjXRzpuePJH4hNy zZdtZ#!&n%+Oj__Eb~9{7yxcguZ~jdc-UN_{wcp$F5;4MZMGu}hM%T?VK<`r`wcyY+ z>wRm-=^)f`CGn1cNgV~=TJ>MK1C%wyOY2ve-s$rGYrQzSa9xh%83#U!)ZH4^GUzIG z!~N*K?o4+vKF@B! zTtj~7>_mVo(ynhwPfo~R@8~VCp^9)`tUS^G3{^@qIlbbhn1TL8!e%9<94_Xjl5pva zE1MGngcPo?m1dw#`@|lctMd|*6I3aB$@cdbtCCaw1It{-u{pi=lXS_2pJ@m%ZLdZa zaC+W>!?68tZ>)fV%;#_K)hnL<(gkQow(B;1I3T<_3e9kb%)v1v(?l$anisD1y=ICanB}e)d?TXdaeBB$M#9BJFTH{ zDS68k`!Sv3oS8b3#Ef_n#;Yxd*MYA#AQ@F^ODK>IU?!*{R4MInTS_y}4+)woY6g9^ zCkQ<0Dadd~lH}7fA7|TQ+y^V3uYkIQ1LIpX;3TNDJ1>dy2X$kwt z-z(h8qMj_&32NXl(}{|OfYYTid*uvJx?*DQ?G>y@ft^5x2 z&bp|EV8Dk-F6ff z2rc?wQEPXjF-5l*M>D-dQAWe0rT3P3UwoB3vW^#KSa12J>EjF}fW-gj_<--^k>C8I zlkR^wCG|aCc?hrhP^QvX(t%L1@RW$|5cB+edp>r_XF`M`OCzMQ-o2%B->o5;J^xfE zwiTI#_R~uK`(7m7N?u%y0$u)|HL|C*rZ^L-i0VGZ#90y*w&cy4Rns+nd*p}cwGUJ_ zfTgHhMH}|<=2qRY$GPAYo~Ix7w(h5U8a>D0dg51CegWh0PxhKsyfn(y^l^_C2bnJP z{<*)ntt%R&X@P}`|@hB`9QFW;$NZdsRdB|jnRu&Y@dCV6*KDhx7NltZ(@5!3^( zgOfY^GxA@d?su=S@`yP8Kw1ZMXQH51X9C)>c#X%^%sU)=DHc^eoiIAIs^GpOvb#~$ z;~C;@O^gKywtvJ5qyq4TXW!3yNI9ZmXk92=kB|ebQ2ZVfpUAUS85!m|ih=GH?Nno~ zpR2LA)H^$CSxq(4BCFlr(kXSnrEGguzV}S_eRsoA6Nuh%W}-v<)P+#5`rxtd$BKf( za_3hg9PaO{;=lxU1I9mmIwbSLao8C&2cFjLbgOm+57Pwq*VmCogkhk*33Q=^9Q=hv zCk@yi-voB}XK@b(kaD>?(Ec+wG=La=)K4Sr5EnJ-gBvhmO&A#fL;wrF1}^46Y)M96 zo(%t4oOl&Egj_I8)`no;>lA8b>)amTmK}Scr~D)RKK`9DSTYv1>z6-6-?%BO^S~tp ze~7spCr5=hNNe3Z&^wJ@$1@J_W%$OOmPT+3>{021OG+ViHWL=dSV2(rN&?Er%v`9y zvRYwf+E8e%4C*;Rg76mA+xs=c{0&&vm0=(umw)mEIrP`u;Lfw><-ih>5Itu~G!3HU zX)(TVl#uTfL=&a3U$V$Fj7qT-=b7J_GHE+`M72VO^NrJc!k5q*X)qhr`TA>$ zg7ghFWvsQ1<0K&mcds5%IVmd`ifp16_gHzM^}{Fse&3!l+^9jL%05Y727pfNeOx0W z*{BU>lR)Wzv-m$)YxCj5Vxx+7vwV9dy!`2{O9KhMiSpm@Dxw!LBz`!OUUpTRzMS>H z=#kB^Hz11^5hsku6Qi(34Cxb3YbovBgPPG8t()RM)ts;OYnm&WH1@%38_1k z>KayO*pt0s-A~me#5HS4d3XZ9-1LVHBa0;|Iu+|^af{p(tMJuEEcBS3(x$H71oz$s zW>|4aWRc-oWgr-bot5fV7t&q8gHygEo3FDsp?3{2Vu9REUpZ{c%JQRU_6@J_8i}`t z?piw9qzupfyX=hq-+96X0`}gqy6*|<<-P|Fa`>)EjWcsYLxXD%?}x>@l~_+9iUU;544@GQXCva0Nme=vYT4P0{r3+`_2>O%YScQ_E24d~;^ zlTj&GjCM0HpM`D80$MVyEjEwU2A5tFFvrP4Rl{dqi))tWMEPgQHHPmLH1v?9h?zX24&2 zKY%2;-vSUMGfUun(*;tY@8g9BrALM(5A{bXZqZ8D#4(zYfDhhqt)Ltv1|uo1)zM(` zA9~V|VWx11&oWq$>-K)V9uUTO0@2T|VH@U12VBvZJ2&?Y04@&C_XLvQm~d~8{Y!~H z8me4?nf+(;*J#o!#>*gV#3hw_88W(?R%$PTEA>xgz;+IDE--=^wbIjgrAPeOcP_k? zrOcX?_mlw$Ya4V-@HXOIa0w>^tEBAoOegszP%{R5QQ5H+SlHR|be>03DB&ioFp%&a zFVnXY&{j%)X#}f8Hz%tB`PpC@`T->4wvuoj#V@Wu|0^{aL@XC+$JKx_V z!zdt!fDhsnU1WkQRT=`vGq&4eZ$CMF6n9S`%d+kp0h)^B+Lswq*S|nkU25jTkj7_E zW5HNj9_?hSX`kR;oJfjp>R0KkaE2S>HWKCO0*i!~-rWIJDT!Ya+z*4n0RS%v289Ef z@9xr^)G7B$gomxfBEb!JrYt->+^v(=a1q?ht2Zc00m=qkZiC9%mSUW$$|svtl=RfV zDq#Z34EGdEpvp~SYgSAfQh*8DbnnLd4`j|C>oN-3%M&qtK$ngl`9$w(K@|Zutm*{J z(~o_z-S)o=w*_<|XUh;qEN|)kP@%cn-@o%kq545(pe6+H*`e&ItPz{bw?wfm#Bh%P zy?XiIUoKb6ha})vH-I3kTMR-$(3BG$-rZ?4m^l}}r$Q<1_9%rH`%TzKpOIlioK_UO z?&a##9Q$}VtdcxiTiBwe)kmY_(tr_x>4?cC`g)y8QXBkKqyrSSU=R(H9Jt4#b?0Zp zs?`JL{7PDu#e#HbNRT(flG5hoA2OiCVdwc;T9Mq?I(&!jYlsZt?(+|V&`^`LMFB;X z!fQ}mieCK}X~bz<>(W_LJ0JCFKn4Z;rbH0F-3XG-k7pLn!|-xuDIkBs^AYg==@?cg z>J^~wmBC_LK~~OqKzyYN8kkXe2r0@(<)_qWXmIzcL3dJ-=FaFvIAsUL_d`=J=|N~ zTYoVnhRA#MUZzRRcxGlf!s86dOpp~<{!{x356Sl{ zG9-lC_5Acn)?}K&16TNVPqle0zgVH9Tz5W7)IZ6){d{=R_Q+6%ws!3br8lY4ewK2L zCLg8aPnMbw(VWyKx_VqWC=$g3?oDqxW^aj|vun!|=6iKU?sfu$lzEJq;U#M7Ojy7J z5|#(`DAet_4+>}YEMAk30FWZ6*$F`I+8%|ohT*|l?5C66Ju*q9jz52WG?k74;*qgC zPEU3Wg|fsxqHeCtYzpVc4pcdkhh2{?a$Eka1zKN?KV4)pXvX6@i;1?5-JI3BJgxQ# z6Mk{~`lg3)$`1^R2Oh>&nNGOOL>xdbyFCXThsW&aP`(~69BX*7T)}{a%gE@8ROQZ?rX}{a`iPwG zZJr))s(N|XH*|9)UXAcrnA)CwYYOB7)X~4%*LJaPTgMYu8ZELic*g#GV*mVkdChVI z>nU9Q{&9-j$GsAX;FeEUU)FYIXml~lyyy>-Gv90^g{Ef`#Z_5i{Mc%^K(sbK&BSrM zxQ$1Ck7VL`6Ho*KC0HAv0aOH>{jH3%Ww`qHG(6Z)fbwwY*ADxhpsB9Zf$HWC;ZLd+LLA9$NOl)8GzGGowPz(_7c6MZa?!)cKf9s^_ zr`NvBHpYz{6~G4f}&MsG51rKGvTt38&J)qA~8{Ct1pG#kV|H>Vam+^~#d z@y>v8I5fOaXo_VXDLzW+zMd>xH_rNFIpJjx$%u$k?V6o| zN!D3OoBO@POR(UM2ahs}t1jAJrDsT_0{{-)h+KDHI$wR0ue@q~oze)!V8+7uz z{5=^V^><*l8SxlyI^}}!_7_I86LvKmes>BF7rvYprmCr3!dl6#rqP>Dq`9|P89p(5 zp3B?CAa2;`qQHiSHl*ClYvk>kvHN~P)x;Wh$K&(x%dC!TBkrp^MP)5fV88CK{@1~N zE`nzW?fCCJ_W`?K1*j|e0pWTVC?vT7f4!u|yZ$)7M#GVGqBwIZ;_H~l4b(;SwTYPT zVj=>c3~GaSf2hPcY5DcnMy~*>JTU+)(`(0mRlEQpq)S@!yHRhxFI?AjlXpxcSbjaV zSJ1Di_U_&GH6<$I#wV6zjkm|RQz^RVX_@K3?kC%VSe`C?n1Ozg!4f#ebx5zJ2j4uLMBvk2#`1n+tS9%rl4~(C9Mx!%FqBf? zn!Sul@kB@3+wpgi^t?ASI*M1B%{ciI`{O9vD@v#6#m!28yEIwlq(KfzT5F5P@<*3i zg_W%#gS~mnZFB`1JvS5Zj{9=d4dSWhnPQh*z4j7_sswrf)?Yhm`d#oOn-J~=Hox2!jLQz6HX+(ShTVdMQf53lFUp`Anz6%a`H-l%QQkyFS zyJLsuUX`OU1DHOKZ5!dooU|Cw;}zy-2>a%`zrXz3a+y}Y8@bu+{1Ghk?dwmA3g*v^ zDHV{ep!hrCcR~RqdE(X_Epmqiby$)Y1r*}m>V#oID^<-(>?$wM4PGhvF8c(hzxFv>JaoHq`C#z$C3q$)vMQNTT22qsDyLW3K}*b%6o%vXjn+zr!czomOw~VoHlDrBhUl7B zju_fPvx5^cDR@CisIX1zrX^1Fw-0itSdsJRot1Atoz$}}Qhc6tVD={UXZ(A)>adq- z5X43q>QMG&)+4e&j@)2SBV)J7^%}ZCi2sOGCOG*F%x`cv+GfCXV-sm{IT~z;4uiq_ z^T^p7udClE^AL*EQB69vpv;`@)L_?Fc^Dhz#+9AQ=nM@L#~j_sP{g)C1X|ggW<#WlFs|e%}Epi8de! z5lUJbo68IVcNER+CnEft!g^E@g*GwWK0llpBZ2I{M*Y4%QF+h8ZXa168si&6Kn;Tb z9GhN4-*Sh#lM6V3RXP(erKz_kZ-BGoFB@Ad~-)2PJmS{O9$T-_j2 zE|2r#QWGT?dE&$4`lTB{vUR8a#K2x3zK!@5kW@QK9aA8J~99ZCM z7Fu*ISxg7fNz`t?9+>ZbBjI~ZrJ93YgSLK2(QQdfxPRpjxgqo4 z`h;IF`06hgql|#Xzz)~^DF8BWI23Ja48XWX_mD79UqQr=$$2zl!9{X6%(TT~`DEO;d%54`=%L7 zTQYWR)L=4?wghYEoC;Y z3EXFepd5v-mhrD&VUoBD2Zpb2)Z7uKwajq@7(Wdr;GQch1{8C(;3RyU_xavINdqC<;-!C=+hPC+7^0ZDkpT2b|7|M- zjo9dold7N<+K;Rsyq4nYM?{}B{g~cjW%yyzxo+(C_21TJD^XZU`yh3c(4x}-PUq^N z_3qz=fla*TSFrQ>4^#j!r7+-9^a|UK$~^@Um*d`KvJ+4Ws=>I|k@y$bSH993G8&rQ zF$Np;B)izFxVc-Vx{1c=?*20=gG4NK!_PvcoP+ckWGLfu8jX&e)Xlqi5!COX>5`vl z!>$i`5FZF@Ji7|Qo2{%ZKrVW<5JH(0uBgKB_n1l|!~_?@^)?WDSWCmW-_x4mQrw3=W^GU!8TtX*+P*LCmT2@_} zP-FPic+B)fE(j&{W3yL8b78ON)XN$czD3Z^kG);ztbS{r{iXsj*W)4E zqylRES|&2+!ZpC-zALo2>jt>Rjlzr;vS}v_3*99?8gcuoKLEaH`U@l$ zIN`jT#*fqejqh+=8HHI@BmliKFaf{n(jKG=il7@M2`Qle@9(_~2z;WZn{Nukfmnm4 z)JLQCd9uqob4Bu-plry!IpoZO&r(s$DEzj2i;&~9XIuukaHDRJ7`8V;9m2tdJOD-O z|2|#5p1HQr%CaHxG_h-Mr4$bA!wUyZDFq;&@rZH_0Q!YMsZH8?jfyS6@2iT&wK0l! z%OBC!>jX*^A*4P3=WnS57M~X|kQ(}YCi^=%9Z{XV@jaNpFntd{_GF0EVi@U^qC|#k zTQbRx`dI`KzBIMI_DQOC7bsX??L2D(|kn z@1^+PhpoYrs)Z`ZIkdGu&?4&U84yMeRBF#oLWmI5>bGxaEl0`#hh1u7K#oF z0*iNhaHBZ*J6#b1O4Bc^m;cWYXEqcc@AAG9dNd`he<3DfCS;-B#>^;awDBf|04~MH zak&nSj)sZ9S~0;PE>A5oU`!>Uj*Gi-yuG;5t0V*zYk`?pz@)hbj(hZ=XCU{eeZF)i zt~+S%gT;82%aT8!`IytWV$d9UEMpEJ&K(>w?OMs-BGZK#YTAfsEFpDQ7|)7mn7i}A_Z>doX-^ycm{V()kH)Ln6@xtZ4$LT1h3P9uDdBt!C0^mfdZDx1 zk;P+DBw)IO*L19;^=I#j0||b4QQYd$n<{z9L0_J4AH+QAcvFFDkHITdI(A0&3&?v? zkso{$xCF{#F~Ni6TAw|af~l=KL@&Rjzw4Mr(4K+7&&Y=n^Pyca!FK)+d!X6!M+iLX zbfOi{Acl5y%&L& zOd2*(G;&G90S>iyQ^R*STR+|FofB5WIn<>0NF@k@8(X-kNO2G(k5eJD=S8?4tdFHg zIMU^7xY-uZgWr$02LAb`P8rvYSK2oL+5ItKb!icDU_Y3d#u+aB>RgkreCzxY`B4u< znVmK(MQpPa(^(Ap1~@6ar#6>yVb|ESzhsh}VR%~%f_+GNn!1RryjCH{THIH&ig@w1G+%J!%tbAGf!G$@QNMV zEPqLI*-a6=aG`O#p{QK`KIue>arm9Yt8e^geVYDyiC>p$dYGusyhHK2UT))Fu6eS z$iUf-5g`IR4WLTfjt`Rr)p`mLCV9MYac2H+?Zr7yz(J8YXX00mR2t*d_qs`N2^pD( zhi;z0ji;@8%kn7iKY;Y=qdOGNTfC=!DG8%`WpPj;$r2|jLcCz%oF&c}}8g93m9qAWg_G#JDioV6KMPIo5`hC33 zS~S$GZ~Cwcypa`rC?;ieXS|ki*jJ!LiotWk@!sZFS|48Z+k`r&EKSU_u_&yDK1u;L zHlY`bY#^nep>bwtL4m7Eu!t78aai$Pd-&F17<1=d3mB?7J>hV;3$2ZGaR=i-I z4tkvLVRlmdoc$4rtYPSK%3q?A4Ymmh<0(rt*~jkQnwajVfDJu$=Q0%k^}AnprXXMJ z3*Sx6e?KB?-Nus1E0behTJ_355%x*;6EdbaG~YSpTOaZZ4PPx3Z(0SviIJ&K@9dN_ zYIJ!XAhrJ&cM1&+FP*=y>J@5S-0NoVuCgB~cU!r=bo0=6ee@$OYjPQ{p))BmFaMON z*vXs@k=!rceLc#}FJJFQT-$7uyXj4!2M_rO9$w~~n_b!uhjH?WiMhYMzNFwaz`@Vpn?rD`-3;^4(Oc2RHL#hSG-PgVu zn&CA~0*p7sN3L(92A!qOXyKL!^RsnByroza z*wX%iRv8Yzf&e`z9X>&|<)r@!{{M9TGsLVV+0BbJF~8Ah? zi1z)ndXKebydR8Jm4?iyosfeMYlD58Fm=dAvbeCPk&Kt9TJmtVOF%A7W4T?%c4jjH;VTz2wFo_Kic@Q$Xn>_4{)P@UI{40 zeZoiaaH-PEk)hA^l0vBIq?eRID$oHu_A8-<4^k&Hxa2I)>(EUTY)SbrOWLQZ3JS%O`-t%JXhpsb$04fEvqSV}aA2+Q2 za!e8#ZXCI*t^K){SPkNAoIo3;AyAvcnkjLq5IlZq~!$T%SWI6bbHp(Hj5S z=eNV2=;5v<_EiIGm9!sl^U|fIKCjVy8)H|_N9b$(Qz_`{MWja}ErxihCoR_e8B8q-OLPm6bt!7Ob1+!`O2T*ppR zxvB=~A25F!?mwC=AT1A{Wq9w$x^R<5;TPlfo}=&GGymhEUFugvQo+FuqzH_{(ex=# z#n##VYpw1Fr;N4Lq(+&&69yENOq*!vM^{h(;P5PBC^;ZlLQOY1X1qEYGyM=YOLt=I zVc4aAv4GxW{^)o1SvWy_&7;}wFJyLP%abeA!EUjxA^KTMC>$fWqq!4*2{Hq|H(C)-+J)1Qd`SsO zq^7vtYvCmMlWq#v@5K)dw*>qK(4I*#2pBc0PfhJ|k}6*AH*Omwgb` ziNr~F5+i0^1N?1jy(abCg!SK?5qBl$c=clCl8`5i5F4Pv3%l{giCKaXw_3KL-&%O z4Yxn7*m{H2%ozH9{P5!uLXt7V`O)_$WqFM1C-n~x>HkP-a`axJ;%dEo@q076RptKT zA{T|iH$FrG>FoDVPDtlN523Ff+{MWhPFHy5|K5uW=OW|_>zTqxOZ~Y5=9NtzEP@JCS_l?eC%d=~4Z_#wfvOR^+z zQAqDppx%7IIsg?iDat+^ggHH-b&ZII${+H=P9GEMNDvK;n!pL6#7mN;Elf@bHh?wS5p3C$OzN}a(q!rhHiH>4V|*6Rs-3dmV5bPf zzO>#kL28&{VcG2VqXK`+9o2E`(%3Y8T;?B`Q!{B@-W3Z&52(YhoS@j{pOYlgh9rd% z!*y}hn|rtV>OPH;U)gO{=WpTxE>(`#gPi+de~K?ul= z1pyMl+{F>PT)Fjq;{53NyiU&`dh(0KlPprC$bU2K@Ut1PF^{3+8)dd3n<8V8;QnDk(cJhWc$<3;3z0x$>Lvm{@$nl zQu~E(*$)W5Rb*gBAG9YGVdsz(ZFG55+~eaj7N2Baqu-U4!6hZEdwf--dj;k$!}Dfy z1*fjVxw&%3{dTC+rbpe^E*VF^%r*%s*}$=2-p=Ku?o2e1*4eXL+;|{*CxL>=Ny*dn zvcm?m#1B>TS<(T05}(KJPyWQ9l)>^mFH^G7a}BIJl$6zRj9>`aIaUy>(9V(!r*Dl| zL383kE~%VVvIHR%cXfW=VTK>LaJZvV;yDtvg$jw?U%|wg&AQW_iqm5o8b(0W>s9UasoT3faEX31tsMxRLg@8c?J({PK#^CuPpw}59MH; zLK%?@1Pk6Cy)ntL==AH`EMeDKeW$ntzhFtBs?`k?v>*t3t9iRGGYM)m<(OQ4yXI5! za+WkUB4U;p|1|HmPl)P-V8$h0YYrA;qTVstKhQZ-R@h-XZ2vZPZd*qTo4~_}1GX}Y z!JiaR%Uke>cfR^J`IBbcO{}&iNdZ5LxR1#Qa<5*@8)L!U4!5DFzy;sp(1hi7TIm>c zPH&PE`?Qc6@xlzpZahJ(1vg@UBClgrRK9CrtRa3rzW9ucm|&tyxeX0W;6GgnSJXuu zMz2A**?NyXU|X_hOH50P%8>Q;U3n_|d7LZ$ljO8Hr}Oi#s9ZbW5bBMKLr}Y46+to4EJ+CXu_OiBzxw(#0O^=HvSuuMUi0=?_Ssx~(W~Y=l9Vw?3jINgn+wt`_~=a-93vT?f02>K zq9Su08Gs&Q;LUn|_ZcW++aGp@=Io}{q6 zQQ~FIz8H}Yx>~0t7KIMQP`b16=#|CTVt5kw9bN=|@&pW8ZVYemXYnLY!bV1X$-t68 zd3kvi&NGtSSFiGQbKeQ#zEeWXOJ>!$5A0mnr| z5WoBIq2sarfZx_k?WMJWj1G`v7N3xHpz8YtTV(WuSpqXT;@RF&Q6ake|>w;AnndA=`u?U88vzdR#sM0 zFfx)rYHDiODW@*HWWn#m{c~5B*_b0EnkqN1(X`ehnKpTh4<%DrLQa5`z5X^o-^^b! z9NV^tCe3RPhUvi)LYnqzA?y;#P1nP3wAo!z*%az;*NnV6Q(-Kw%HBo-0I?dREO1wP z(n-?y&)M9htnP{Lzc0)bB|XGmZz3Wnj=aAG-X7Z)R#db}zIee>6uac}EY@;Nltp;Z zt+=!di-Nqjrb9u-72(JS?QX!PQ+?0vB$oPmQCre(hy%g_vtFqT^i+zVu+X7w>z(QG zwo>SC&$fE8l(zW(G3t2-@w3qe$`^`z(@q1Rbq_wVzTR}~Zfpj0d| z%gY&#?QyUrndKr;)7(GjD_VcOnd?gYI(ee*<^mg~Vmvp;QrI;$uSV6ldb5|e5nNnK zI{NxVjm>8*;l9~Ir{m)fB`)ay9}n-@Wpqm=(pBMqUqA`EMxgN9PTW4bM!SBq{UeMRe`+Sv}={p+2kI}%} zJ&SC|e_9oC3;Gx%4kJi!Yxq#~Y0@8EoUPRolSy*!&s&8Q9R3q@X?RiINgVw(yN}he ze410w)I{#&-1l~%HBOxouF$J*9dEyR>LByyc)FWx(38_nW1=&{E1Q zbH&Ki97cT}0F+KftpPU!{*Gil2857nyu59o=HPbn+Zu#F;saVc00%g{_57er>czR- z;r3iKK2Z_KeQz5XrPOM-zDej=h05!i3?2}02_KhFv-B*-?&_er$fFIn6`U|=urk!! zQ+|niUoGX4L)wkHD_(Z5@FB!?N7v&r@bUe`Ff%+@V0%Ptd7)5t|6+NC!h}FcMWqC( zLFl^B;&12V^cf^jMF3=gj>k-f_k1KMfY2pyKLYCj{;_@k{0t;w_oD!G)T3{Vwc2JG zD5>WgWa~3k%Z6{-ik#O^Y{eMk-5kyR{v047%>Px{l|WP3cJ1d-p=2tV$w4VOnTI#? zOd_vvO6I9l#*7(`A}3=ig@lxNQ-+WX;WbCb2p#hf$xMcbZ{Pj@_pkq7>-*RGK5MZS z&NKli@(zV>zB``V)W!kzYu1gj zzrjEWix_SgT6{%l^92?TY<^6V-dEt*GMz42DwFXN%gahPxcrlQ+BQ*){D!12~|8yw_q~D?~nB-Iv*lQJwwzt8Z3~j&Msf$A^i3XV|(3g2hGJ1Wc?w zOOmwTw5&6)@2W>@Pr=Kts*R_7w`@CAT09fX?Xlc0nbH0X5xx748}fDn<5->_RH$c5 zdLBH~bT3EQ?sr_IOOPjpXwW|0<>YbJJHNK%-lwZlhs!n3Iy&1488@?tVFAX(mjMG3 z)WU7J!oJ-(UDB@1+S{iAI^*$d?AXt=mtVA`zHr|a9DbqH`dOMSiAv?Zu9}AIwbPFt zCMr$5D=7&OnQyuAQ!T?ozi;>RI&PJ+nvm%WPU_#>AZv*>#vmH7?jb4Zw0`u8rPWF$ zIvp4iIfG05aOv#N?GI7cUUiu`VfS4kIuweFI%1YYTFOX`ZTsaWG1DG-D*#+OUxx)% z05*l-(irbGSGspRonn4H8{i_t$;9!Q8%v7XbB4m$5@>=O7X6j}q|M?yBmb_5$DCT> zyAmH9Havzq#odCl&XVaB+^JrNm~qhto4VDML{-Jx!9T^DGw^4NeWxSV^5QL}uu;Sh zH_5<5DhM8qFV#Bu=oEETN(a9l)>lp&%2B2Ax8`BM3wzCQn`ztc@k~6tq3*ix`HOT$ z5~B9BxbR*R#c-sE7c3{SUFP~^`hv7KUm`l2{DrV6V+Zzbp<$6^YIY`ejDH&;NJ;Fv3pE=X&&z(oBNEpvLsu8vj0+%Q z&M{?p7GWGJd_5A_)e_p;egn*RvKE(hCC{dltb`@cTDD$%rFPjwG2)z%bz=G6b-id4 zI&LD>s_SnEf`&hK!cm}f_v5q1L*=uNk5Kn&?PJHlB~<6m>z~`^8Iz#SBH&I*l31l% zJKgi@dL1Jy_hy zDV4wF5w=1^3e)QgbXO%ft&OC8b6yvh_>)h2>{+0AvNE|juH(;@MF?|LIXk&EV(mNP z)H)g(Ibzrfb;ro`z1+96k)_>{r#$wwJNo3Dh%qiA;gZ-M^v?9t$ek727Qo}pz&Jy) z#IDh;JAdF%=^N%sm)>zHc}8nqwVwOeFQnL5@_}BKb2|-?(PgZ?wi3 zwYOk6X9br;F<0^-()!>Q&2}b(_g4>mqqdge7#K<&dlJfFv8$-5o(HyHH6gIXMH=BV{GG!7;tj4o0Sn0T&@pZ8~MdB?FcUr>-BSH9*I_&Umb zb9B7V10#hg!V@P`vA`p27k#%;sXLe?itoB| z?HCQ1rblugBFSX3juWy@X6A47)Ue+0_$M|POo+yFNi_HHNN(c}!++yie|rXeC&wO` zVhxQyYOuTi#+$WR)M#B(LzNGxRgFv~^Gk8=&!g}>S?UkDZ8stRfAC7q8WFIEpl+#4 z+hpuN@91>Ze{ik;^hT%bxEW|H{l5w6Cy3!beE5(c>&n}jsysjYX^Bo#Qj5XEOZxtK1d}rWQ5N0`W zK-0)5PMAP2-R|n{zVqgdgt-68rF__VH9C9t@ajyT0KB9wMe#;?;1>($o*WC?#=HEs z@b@Nh!+NdUo+sIhENW!f6V|qOa=MaJ0Jk*Ztq8j*C7yMFb?RWa8a6ghi3N_)I(m96 zPOZtzyLa!#i;Ek<>mzU8q{Lu((7BNP(Fyb#3d)6fT_x%yVM^Y&6``cTHie4Mjjux zUz`u#p-kBQkg{}YOJSv>qZ^&-c-AByUc>)FKM@b@Fa=Zmr;oXVR?{Wk`-zFictM1f zKh!fhoSp*@Q<2qgNhAuhu&~rZU)yf!Aq_TnSyLe)Av{07YO;b~=fv0#DHuLvW&9G7 zlA4y5DIORMv(qGVO8Tf_N+=`(oAZ^iBQ@byTs&oE z{LAOQaOKWd?(h~B6|sw1lbRc*FPEqPi`1?fY+8B@lgoW=*ASyh8v;L%HP}Pmq1~3E z=p}3F=jV4V@4V^=!&NXG=s`nGehJoHVevx3`8Y8>K-|`9P&&rJM=gO$Ve>>uil; z{#PdXrTp#m^z>Ov%b4_ZyoR>6fUs~@ci@VQ>BhzeEhA&Ym!d0Zhf6(q^X~oow@~Wx^y$-pp=m05EKtY7f(N@a2wfJ0g=zQi-#;iPlxkDZ zca}&bH#O-gK+^$Km3Z&|eQ{XO0Z>Vlm7D7$?}A-d_MWT1-SfmWC`gHZ5B2EiXr9-1 zP}0b!N)1?|3j+1Oni01t|MH5T(;}~+mcuyH0QDxlXlcGw`Px(j#&BVPVaoFrJi?Cl zcGC0bf>(zsc#!@E^!5vbQwBIvPQ!Ev4e#%LI@DIPBVAL@Z%GhV5b47&i>&NjG&Iz1 z74A(|)UA< zhtThP{|q`pi%4OxqoV^Og@*20nd+cM1v>`Ga!)CXUn+x@9}+AgVD;Og_LIqcZ$)!O zH-`B6`3bp-Dyeow-m@3%9US;2Bv?qxr4o-@h~>WGa4sT;0`3s(h6+pZ`^v$s9K>Db zJv+K-%4WT%J-qR+nbA?(mPPonGSl~oD|6f!3VdH|sM3&BZ|!-Sl|{R_xJYQ&Pnv6J z9q3&s{UpIoueWfNOX?C6=ColJJ63e1hk)iKLBUVrt;@hmdt3h>(-R)tYU=9Dyu2~% z>%QmCoh$r#xMz%*sDDIg{r+FMBJZP3&Y$P-@bIuM=zCzd=N68dhC##KUHre@k%WCC zQ)pP&2&gBVi!m`V83D(vqpJ%G)o%zSm&HBCby|9{D%qicTQDrVkkIai7@k`LE@m#9 zpw-x385~?&TYLS-x1R@n>}tLnT-jKf@C9{e=>~X^xT?gz+9|%XgYUV%e|}x_>U;r^ zTd$9mL~}~-4QJ&0+`j|6vsI080ybjoNF=j*#7%e~H#Q6T@1_?@x8$zaoGVpdRN!E{NSCS zGgboG-P5zi%g4(G2y@Wd!<}-i_>O>f3>mrnpkMytaP&Lw(W9e!dU_gqdJ&CHO)Qy) zsfVC~^sSD*{y_+~F~x@On;je+E`Le#m5}kTn7a_u1C*7fn%d1?h-`8`bIEeP3u%pw zjZBG&iA{kk5|&|MVYXB4Pm$dw4SLnp)uq3DsW(138TnK_JOUI!4GtbWNQUzg?}2d# z7A`I>j=y4kbYDiXMRP@DNYwyww!g%K_bMMzI(NjSJo%!IOPNuwGE2O^^>ZXha ze=)je@coV7;ShKw^a-^EZAv23-@nIGen?n?$o)$oaojeJiin)1<*$XB`V)?=$;V(t z9)V~@06UawGcq<7NC{Zd6$fGyeaAr*0%%dbID7rLVLb}&qfW}3iA$dApclTkY#>J= z+_GNJ)Wk#x^~s5JAFICuPGhlMo$=1rR=|XJg{v1qmzKZ$Nf=~``1G6_g!%t%K=>~} z+QD|Du1?RZz^=Ttpq^Rz86MW%xVVmQx#}9%Ujr00Qh6+OnPq!>tx|wMXr*MTX^czi z4=UmC>8)MwZ}?oF9~_`$s%nfIC*TC}sjJYP*`_{$rdnlN(2S~u3#8-bAn@LcjM#3va*Cxi~ujtUj7wW z6cW#g-g^fG7;jwsWKAXH_WW%LZgbaizTBpmj7 z&-8}Cwcq*=0zYjB>l^(MJ1i~D3V26avfh3Y*j3?j4CK9x`=q;_{iKLM(xWREv&{`ek_xFWvbEpcQp=vpvy zsQ)o$4Q>EJnWnz}M=u^jJYE{IpYi(@+dr>#_4Gi=GBvDwc>>M()S#cour$}93cUpy z%-!7`*;fp={OFP&(CX1h`v*KdYLMRf=~G;Md`5rJ`htyqio$uiZLG>(0@d**SYM zGAe2pMm%u{X-XmBQy0m$*rCm51D}oZEbx+F*m>~jS87bEU~+FW@-Y3m38EMZl%_R3m38{%iTuMoGwCtqJ5Z{brtsUu`DA%;5xVn zPVRIeU*HP!%k1pa*CTIfMxWMUEq^Opvw3;ctoo155e2A&AC zdV&5%J8$3AqUMcjw0aOhXC6fJLW8KsT! z0}mcOdS;eu`3}zUBCyR)-JSlab|c6csuD zuc&b}IHB=jQPJ}whJ=UmLv7<`$NKs7;Y|6a2&BWp=EcTFgz=;2%}r1q6CWNC9}(^w z9mZE?IhKK}ltr+z82wY2z3qaC=*TEOD;>t4C&t=_B=VzU6O=>ZBW5K=$A*XSBjzT| ziw~Lapv=lxSOhDGMmxLMJm z32dJz@tvb&qrM~C+q*hDJFu!z3OrpttM-|g#;WtA(pZfinkJvs3S|3!nX1EIQ`P<< z&)MD8-PzHF)rnFVJyV9y>PmnnJl%A*pIE6_qFxWQKcCePWCwha=+Gn4;KxWOH?aZi z*nwh+CVbZLGck=dl1LoXLo?>HCV{N!7m1F4Ni_Qb&)(VH#nD;9Gw3HW}XkTmNnqf!53IKO%siU!pa z7Y~2zGrJNRKKMe-o;#ku=1&I8%obXB+!97AZ6d42lymF%$m5@TPEoeuB+O{mA*Y`n zBykIWJ!W(7B@LKqjn%uyLh`Btyr7^tl?KN|wlEQyh?sc2@(Q9Ndv z1zzK3iu+lKD)>i%C%qfqkGe#2Eti94(HdOCmqkNGFIdx}D69_-Wv(}#1`GcHPhI8( zp}tF@Zu>s6U0zKz!@~+nR@*S6Mts8Nra0`F;m=e|+D4r}?W6WfDW;|QGUW}WIM2k5 zI?#tCYGnq>T9-k=+)~te-$iAkDsamkUvlCyU@t#4>p!wc!|DTc zUE(Kd7g|NGWJW-3$OmD1eh$5uvyocXKcSVu<`B`}6CGN|LTXJa9p39EmLBI}vQi-~ znz0$ngsJqw@fP}gZwa-0XNLtN@jI%1Ba%D| z=M!}=Cp@RPl4^5>*!D&lwwq0cq&Hqj(*_G~OmaorJ$iKT5np)qCLFl}GfYvxPlXR| zkVhH0LW4ps-m6If&Yv6)JBLi+pIa`|z$*>3V}%83zcxfsjU#fLR=OSB<%6Y93&_#4 zva#m4`$Xi0e)b&D*&;WSmzXEPfn}m7=vh-4oC3oW?4{TG3!2TI?QJaS1 z_&2}cNY}-rD{~BJ^?EFnJKRpyraI$ByiOk(OVPM+9T@R@DcAEb!BgE?P&BH9CNDF> z$xIH0D{ErTy`PC?%qjZQM^Cg?yGR|cms9B~O?pJNnAYTpgt|kP5U&^knO3U=ep5}M zy+IX!p1BV3nm^uMJdhi9c^|Erpp5B5$Dmu)30f+2#nDevsmIU#VU*TL!qJqYdjmB< zD<_RizVCn-f4YB z{;3@1M%FrLHdhi^b_XNN>;mE?B4av^V{NQ8q*@(@1<{+S^u0dJx#*wqL5mYT^--1? z6n=`Z)y|+-x|Q(51=vf~3^P^_!$BwIk&GKnGe`^#+-4yZrHzMshn^!~i58tJmJmN8PYX+ukH^N1gMd1Ht4O~q! zgs0X6a9@%F?l+giyV9w`{u9j^;Z-3W^)#Grz7WJ1K7Ruzp;4Q&J@Gu_-4=oDmg|v-uG+c&xDcuN{hn0{DMzGMJ`rgAr;w@Q-18sF(Y2c%rxp_RFXXZLW4Ax8F~AsY`+T=(+>8O;U$RLsQVu z-n{zxg?!NS-j5cexoGOfMZ>-ys^uy?U_#ptbX*dPxoAcAkNZU4C-jH>8EeS!XniJJ zcoK5r&l1N!2GRR=E1+wJ4!Q@erm537%=2@vAajz9=zvTNHVv+YD{ppT$Vx?#XIw3I zRl6{zY3ib?5E06rUk=zEkN4DuFq2i&Fwk)ap3gPKO}iV3Ft85}tKLnMqNWp*#1&kv z#6x7i`4r^Oo=Q@WjYP*!SwyyaJGmma32IM`fI5dJ>NVWUljIj*zwSDEU(ucjW=MNT z)n(ujfg7f;=tV}1FBdL2n}S@b%*;Qj!<5D>gdGK{c=mWClmt@P))IdcvQxlR;)H1O21 z04Q9fBD%D*7-h=0;F>ypC|Y=gyqPixVQK~VR7{3HZ(EAmgKQx9*FmW5*hi%C+i=my zMO|dAkqx}62^4v&azXKrM!Ips6}(p11>0xm;d7@=^f31n-1!(ptOdr*wI{*AT(%%q zPfF-(*IU_yY3QdpYnd>)XMGNEosAFhfW<_lk_aUzcJ>us>-V4GUe=rmK zo$A8DE45*(d?b1^Hq7N6D~LS*Cfa*Xf&un=XeatW6!S`m;GPc-+OC7HNuH?QTN7ei zCeo-XBWzpaPIK~N>BRThRQ)z!`a(1G-4sac+m8~D#93IN=}NVE&frzGRmj($O0WAg z)0l{PWLZ@#PT98vGh6ae)@vu}EgJ<^{u#6*vW`T)$i%X@yT}BC4Z`4;43*biivcM- zS|cyOw&}sxp_N1pLxy3!p98tk#d5V@s1wy&AE~suEZiN_P<<4pkV}3XbbIH(l-w$U zY3=KTC$k!{SMdQ&Q6l2>&(1M*^Y;+?$bHVgi&0-l!PoEf-w=g^s>7% zGwSCOM`2ev=DkFPt#|IZEw()+)=P>-^=bgSMyFxxeoD-*9ID&A$l zxXg-%p-Xy+J~dv)*7>*KE*nTzYbJ|m*+)o{xednWTv6z*#B5%71q0rcfJ}Qav^*`M z2S1vkU*b@lJkJDjMwfYVOhk0M-~in`l!M1Nucjvh@8XQP+0-~|3ThpmLmZNJaKj#L z$D(sX;92W=VM(Vq5<%skp;D8Y`w6V2O$pdUgNg>18SK zDF3sA>o!UqN>0S!njKfUHG2;o>$7wg;T-L({wS?R#@e=d8aqkjsC~(F*ttD)_SRy` zDA{3g$sJ6n78(f zP`gx%36vWLTb3^nW(%Hh4erY@9SfFW!J`$}c6kI@7kU8~Jlq4kIep<)rx4wOEI|6E z4apa(VUtxpRqLZ7)RG@eyxuG$sVft3gv(K)?pH?Nu@yuvcOA}Bilt%A6Hz*wr86&f zdQLxkjkZ4U#)d{6EPJ>L1=meMcdswp`t*SMN*NJhfD#=i7>i!M3rNzGjr6XsDYVE* z!_E;2NGzve*xD0xX%QD+M_(ZYLKiw#)0EaF?Bx2calo1n4Ic3$c`(>X57j&=*;Z6q zEx4aTRHt!JzD3}ZjwB<07817#DO|l6h|mS zW>7uk_TG%Uvg0u7*+5*CS`I5N3`LDcFX{9N#<)O#6Adw`!L#-p$RBZ^_KT{;>#y~& zJ&{Y&V}oJTzJWN=JDX&*ohNpfjKu?T;MGQ5VaFSS*V?Z_-cVEO={}I*$Tz^D`AE(c zZpMwh!o@lh!T07TYFN+?`JMa0n5c*bWtyQKcEh=X{it7WAT;`wLj&Dx8F>#QxOk}( z>*L;$xxdE~`HKe3Nz2Vtv*b_D-Mzzz$#6x+9QH%k+6dU5okAPrD=E?a1#YSFg-euH zg2Er$A@tQFx^V7vT)Jp9lWuU4s%Y&Hz8aB=u8-ZA{R8T`vnTsueyl$0$crjCD;Ee;Fr^Ag+ z7R;h`tC%tU_hUi3Gzc_*!RV5kp!3^m(8#wTV|VVsEK`4IEEtWSPF%)?PA^ExvS|!g zPz=MPwNNGYy^vemjv+=0qC08I=*Gs0if(F)d>T2TkP{~`-E;|4S2>C4ZP^zf(w0^# z9AH}ZrZaDC9${0qs_0(B8(c3pSd_c95KHWHAg<;K(LKKllgrEKcuy(jWndViQ#PGB z#{@BZms{hdF&n|V>o&J(^b^{+>=PC(@e|z)oGq%G(hV8iNz^4+Nc}6<;%&Xtlw46^ z?j8^@%Uf46)%#ZC*S@|0-`Vc0XYjuwFw;2jMRi#A7b}*mM`!nQ_AX}|7ahrlWvtF*QdgrPJZd}TcE z=dlclqACpNv_lR@p6guk97-p+plbU?c;IynFWT<{Wupl6I3qrn)!l&F6)K|Z#nPha zwThIp^vE$mY^ld~#aOr?>q+Wdjk$A@M`7&4XLP>RTqw_Q0H*^Ck;JpSb6lVQIe#Ob zZ%?Z3zsuj)%;I}W?kSyCwn&^v=1A&4+gO#u{B7ee**iZU&mWle`)%SMzdI^R?tXb| zWRN&@$C1>rJSoZL@0|A6xji+>58ssUGu+>g{yG(cfnSzbAdY%YI8T z6dUcwq@GOL_oT1m^;?pf#y^n0?9tzozK)FVNLv3y>WTL6NniWix1?u3CjA{(-;=)f zq;E-g`~FbV-yZut>1(f$JSzB4nV|h2(icA*%afP4`O?EcX7JyA|9Ud=*VXm2b8$G0 jVuYlK$4MSlaFqH<-Z>oc9x85=lb3u}6u%_>d;0z#=I`z@ literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/saved_model/20201126-191039/checkpoint.pth b/codes/PolicyGradient/saved_model/20201126-191039/checkpoint.pth new file mode 100644 index 0000000000000000000000000000000000000000..12bfcceb120889bfe526e1ce6f8d275faff96bd6 GIT binary patch literal 6507 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 JhWCHm``?r;5)l9Z literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/saved_model/20201126-191145/checkpoint.pth b/codes/PolicyGradient/saved_model/20201126-191145/checkpoint.pth new file mode 100644 index 0000000000000000000000000000000000000000..0f7ced992387ffb46e5500b86911b75c67f8f952 GIT binary patch literal 8491 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 F{|9xf<2e8T literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/saved_model/checkpoint.pth b/codes/PolicyGradient/saved_model/checkpoint.pth new file mode 100644 index 0000000000000000000000000000000000000000..1f13387e5d05645de837dadae47fb1e42b6f8917 GIT binary patch literal 6507 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 literal 0 HcmV?d00001 diff --git a/codes/PolicyGradient/utils.py b/codes/PolicyGradient/utils.py new file mode 100644 index 0000000..887ca25 --- /dev/null +++ b/codes/PolicyGradient/utils.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# coding=utf-8 +''' +Author: John +Email: johnjim0816@gmail.com +Date: 2020-11-23 13:44:52 +LastEditor: John +LastEditTime: 2020-11-23 13:45:42 +Discription: +Environment: +''' +import os +import numpy as np + + +def save_results(rewards,moving_average_rewards,tag='train',result_path='./result'): + '''保存reward等结果 + ''' + if not os.path.exists(result_path): # 检测是否存在文件夹 + os.mkdir(result_path) + np.save(result_path+'rewards_'+tag+'.npy', rewards) + np.save(result_path+'moving_average_rewards_'+tag+'.npy', moving_average_rewards) + print('results saved!') + +def save_model(agent,model_path='./saved_model'): + if not os.path.exists(model_path): # 检测是否存在文件夹 + os.mkdir(model_path) + agent.save_model(model_path+'checkpoint.pth') + print('model saved!') \ No newline at end of file From 59a09144f156aaf3564ed0cae7dd0ba5a466ca66 Mon Sep 17 00:00:00 2001 From: JohnJim0816 Date: Sat, 28 Nov 2020 10:16:25 +0800 Subject: [PATCH 2/2] update DQN --- codes/dqn/.vscode/settings.json | 3 --- codes/dqn/README.md | 15 +++++++++++++-- codes/dqn/agent.py | 22 +++++++++++----------- codes/dqn/main.py | 13 +++++-------- codes/dqn/plot.py | 14 +------------- codes/dqn/utils.py | 13 +++++++++++-- 6 files changed, 41 insertions(+), 39 deletions(-) delete mode 100644 codes/dqn/.vscode/settings.json diff --git a/codes/dqn/.vscode/settings.json b/codes/dqn/.vscode/settings.json deleted file mode 100644 index be0f1ab..0000000 --- a/codes/dqn/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "python.pythonPath": "/Users/jj/anaconda3/envs/py37/bin/python" -} \ No newline at end of file diff --git a/codes/dqn/README.md b/codes/dqn/README.md index e0419b9..a8e141b 100644 --- a/codes/dqn/README.md +++ b/codes/dqn/README.md @@ -1,3 +1,8 @@ +## 思路 + +见[我的博客](https://blog.csdn.net/JohnJim0/article/details/109557173) +## 环境 + python 3.7.9 pytorch 1.6.0 @@ -6,6 +11,7 @@ tensorboard 2.3.0 torchvision 0.7.0 +## 使用 train: @@ -18,7 +24,12 @@ eval: ```python python main.py --train 0 ``` - +可视化: ```python tensorboard --logdir logs -``` \ No newline at end of file +``` + +## Torch知识 + +[with torch.no_grad()](https://www.jianshu.com/p/1cea017f5d11) + diff --git a/codes/dqn/agent.py b/codes/dqn/agent.py index 9ff8b28..1ad82df 100644 --- a/codes/dqn/agent.py +++ b/codes/dqn/agent.py @@ -5,7 +5,7 @@ @Email: johnjim0816@gmail.com @Date: 2020-06-12 00:50:49 @LastEditor: John -LastEditTime: 2020-10-15 21:56:21 +LastEditTime: 2020-11-22 11:12:30 @Discription: @Environment: python 3.7.7 ''' @@ -24,11 +24,12 @@ from memory import ReplayBuffer from model import FCN class DQN: def __init__(self, n_states, n_actions, gamma=0.99, epsilon_start=0.9, epsilon_end=0.05, epsilon_decay=200, memory_capacity=10000, policy_lr=0.01, batch_size=128, device="cpu"): - self.actions_count = 0 + self.n_actions = n_actions # 总的动作个数 self.device = device # 设备,cpu或gpu等 - self.gamma = gamma + self.gamma = gamma # 奖励的折扣因子 # e-greedy策略相关参数 + self.actions_count = 0 # 用于epsilon的衰减计数 self.epsilon = 0 self.epsilon_start = epsilon_start self.epsilon_end = epsilon_end @@ -67,12 +68,11 @@ class DQN: action = random.randrange(self.n_actions) return action else: - with torch.no_grad(): + with torch.no_grad(): # 取消保存梯度 # 先转为张量便于丢给神经网络,state元素数据原本为float64 # 注意state=torch.tensor(state).unsqueeze(0)跟state=torch.tensor([state])等价 state = torch.tensor( - [state], device='cpu', dtype=torch.float32) - # 如tensor([[-0.0798, -0.0079]], grad_fn=) + [state], device='cpu', dtype=torch.float32) # 如tensor([[-0.0798, -0.0079]], grad_fn=) q_value = self.target_net(state) # tensor.max(1)返回每行的最大值以及对应的下标, # 如torch.return_types.max(values=tensor([10.3587]),indices=tensor([0])) @@ -86,8 +86,8 @@ class DQN: # 从memory中随机采样transition state_batch, action_batch, reward_batch, next_state_batch, done_batch = self.memory.sample( self.batch_size) - # 转为张量 - # 例如tensor([[-4.5543e-02, -2.3910e-01, 1.8344e-02, 2.3158e-01],...,[-1.8615e-02, -2.3921e-01, -1.1791e-02, 2.3400e-01]]) + '''转为张量 + 例如tensor([[-4.5543e-02, -2.3910e-01, 1.8344e-02, 2.3158e-01],...,[-1.8615e-02, -2.3921e-01, -1.1791e-02, 2.3400e-01]])''' state_batch = torch.tensor( state_batch, device=self.device, dtype=torch.float) action_batch = torch.tensor(action_batch, device=self.device).unsqueeze( @@ -99,9 +99,8 @@ class DQN: done_batch = torch.tensor(np.float32( done_batch), device=self.device).unsqueeze(1) # 将bool转为float然后转为张量 - # 计算当前(s_t,a)对应的Q(s_t, a) - # 关于torch.gather,对于a=torch.Tensor([[1,2],[3,4]]) - # 那么a.gather(1,torch.Tensor([[0],[1]]))=torch.Tensor([[1],[3]]) + '''计算当前(s_t,a)对应的Q(s_t, a)''' + '''torch.gather:对于a=torch.Tensor([[1,2],[3,4]]),那么a.gather(1,torch.Tensor([[0],[1]]))=torch.Tensor([[1],[3]])''' q_values = self.policy_net(state_batch).gather( dim=1, index=action_batch) # 等价于self.forward # 计算所有next states的V(s_{t+1}),即通过target_net中选取reward最大的对应states @@ -119,6 +118,7 @@ class DQN: self.loss.backward() for param in self.policy_net.parameters(): # clip防止梯度爆炸 param.grad.data.clamp_(-1, 1) + self.optimizer.step() # 更新模型 def save_model(self,path): diff --git a/codes/dqn/main.py b/codes/dqn/main.py index 9bdc94d..9c6d76a 100644 --- a/codes/dqn/main.py +++ b/codes/dqn/main.py @@ -5,7 +5,7 @@ @Email: johnjim0816@gmail.com @Date: 2020-06-12 00:48:57 @LastEditor: John -LastEditTime: 2020-10-15 22:00:28 +LastEditTime: 2020-11-23 11:58:17 @Discription: @Environment: python 3.7.7 ''' @@ -16,7 +16,7 @@ import argparse from torch.utils.tensorboard import SummaryWriter import datetime import os -from utils import save_results +from utils import save_results,save_model SEQUENCE = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") SAVED_MODEL_PATH = os.path.split(os.path.abspath(__file__))[0]+"/saved_model/"+SEQUENCE+'/' @@ -53,7 +53,7 @@ def get_args(): def train(cfg): print('Start to train ! \n') device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 检测gpu - env = gym.make('CartPole-v0').unwrapped # 可google为什么unwrapped gym,此处一般不需要 + env = gym.make('CartPole-v0') env.seed(1) # 设置env随机种子 n_states = env.observation_space.shape[0] n_actions = env.action_space.n @@ -95,10 +95,7 @@ def train(cfg): writer.close() print('Complete training!') ''' 保存模型 ''' - if not os.path.exists(SAVED_MODEL_PATH): # 检测是否存在文件夹 - os.mkdir(SAVED_MODEL_PATH) - agent.save_model(SAVED_MODEL_PATH+'checkpoint.pth') - print('model saved!') + save_model(agent,model_path=SAVED_MODEL_PATH) '''存储reward等相关结果''' save_results(rewards,moving_average_rewards,ep_steps,tag='train',result_path=RESULT_PATH) @@ -110,7 +107,7 @@ def eval(cfg, saved_model_path = SAVED_MODEL_PATH): env.seed(1) # 设置env随机种子 n_states = env.observation_space.shape[0] n_actions = env.action_space.n - agent = DQN(n_states=n_states, n_actions=n_actions, device=device, gamma=cfg.gamma, epsilon_start=cfg.epsilon_start, + agent = DQN(n_states=n_states, n_actions=n_actions, device="cpu", gamma=cfg.gamma, epsilon_start=cfg.epsilon_start, epsilon_end=cfg.epsilon_end, epsilon_decay=cfg.epsilon_decay, policy_lr=cfg.policy_lr, memory_capacity=cfg.memory_capacity, batch_size=cfg.batch_size) agent.load_model(saved_model_path+'checkpoint.pth') rewards = [] diff --git a/codes/dqn/plot.py b/codes/dqn/plot.py index 2bc3e04..59680c2 100644 --- a/codes/dqn/plot.py +++ b/codes/dqn/plot.py @@ -5,7 +5,7 @@ @Email: johnjim0816@gmail.com @Date: 2020-06-11 16:30:09 @LastEditor: John -LastEditTime: 2020-10-15 22:01:50 +LastEditTime: 2020-11-23 13:48:31 @Discription: @Environment: python 3.7.7 ''' @@ -27,18 +27,6 @@ def plot(item,ylabel='rewards_train', save_fig = True): plt.savefig(os.path.dirname(__file__)+"/result/"+ylabel+".png") plt.show() -# def plot(item,ylabel='rewards'): -# -# df = pd.DataFrame(dict(time=np.arange(len(item)),value=item)) -# g = sns.relplot(x="time", y="value", kind="line", data=df) -# # g.fig.autofmt_xdate() -# # sns.lineplot(time=time, data=item, color="r", condition="behavior_cloning") -# # # sns.tsplot(time=time, data=x2, color="b", condition="dagger") -# # plt.ylabel("Reward") -# # plt.xlabel("Iteration Number") -# # plt.title("Imitation Learning") - - # plt.show() if __name__ == "__main__": output_path = os.path.split(os.path.abspath(__file__))[0]+"/result/" diff --git a/codes/dqn/utils.py b/codes/dqn/utils.py index 0c75408..9f8ca89 100644 --- a/codes/dqn/utils.py +++ b/codes/dqn/utils.py @@ -5,7 +5,7 @@ Author: John Email: johnjim0816@gmail.com Date: 2020-10-15 21:28:00 LastEditor: John -LastEditTime: 2020-10-15 21:50:30 +LastEditTime: 2020-10-30 16:56:55 Discription: Environment: ''' @@ -14,8 +14,17 @@ import numpy as np def save_results(rewards,moving_average_rewards,ep_steps,tag='train',result_path='./result'): + '''保存reward等结果 + ''' if not os.path.exists(result_path): # 检测是否存在文件夹 os.mkdir(result_path) np.save(result_path+'rewards_'+tag+'.npy', rewards) np.save(result_path+'moving_average_rewards_'+tag+'.npy', moving_average_rewards) - np.save(result_path+'steps_'+tag+'.npy',ep_steps ) \ No newline at end of file + np.save(result_path+'steps_'+tag+'.npy',ep_steps ) + print('results saved!') + +def save_model(agent,model_path='./saved_model'): + if not os.path.exists(model_path): # 检测是否存在文件夹 + os.mkdir(model_path) + agent.save_model(model_path+'checkpoint.pth') + print('model saved!') \ No newline at end of file