From b9998a439d8f5b7dab8e6c6ad64a5db7639d6d39 Mon Sep 17 00:00:00 2001 From: gina9726 Date: Mon, 17 Oct 2016 00:02:33 +0800 Subject: [PATCH 1/5] First commit. --- 81.png | Bin 0 -> 31767 bytes HW2_Policy_Graident.ipynb | 2 +- HW2_Policy_Graident.py | 228 ++++++++++++++++++++++++++++++++++++++ policy_gradient/policy.py | 15 ++- policy_gradient/util.py | 11 +- w69.png | Bin 0 -> 29855 bytes 6 files changed, 250 insertions(+), 6 deletions(-) create mode 100644 81.png create mode 100644 HW2_Policy_Graident.py create mode 100644 w69.png diff --git a/81.png b/81.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec8d82a28f16f450e926767beaca9cdd6f07005 GIT binary patch literal 31767 zcmdqJbzD_lw>G>169sM+L_t82P9+495+pV)-6h>3A&rSr!loo7ge~3O2%v8TdcXGbV4~?`IvPwVt3*Bu2=8cxfW3mMGM96#Bt^ z)u(ZbV{W=?&PU%?wgcHK@npTk$!AYEtK#4Jk!*O>Y>#%9 z|2}VD6WeT@uXzH-f>LN|pT$RhNaR0p8TX5TI^^$lmKQXUzw)!=pF{pkl`zDEKPHOK z!2D3CxXaH@!XLgpw0X#19kl=d{$<0wi3vkq+u@=IxzXI_!K0(2MYba)ju{!o<$LRa zRQJ^F?Ce^an(~UNggrIkXF?JZzC13JgBL6e(=+?pL*xVVqveGS3#+TEj!&M1#m2@4 zQwwQN?Y%lju3GKx?B?OI&=SFlp$lt<|2G-nymJTnj(%Je8l#u&INUToZL2YEc zkKcgRX_PLFYcf0c9Q)y-<}IT6-|exyW^Gq07e-3$ zHSFwi_O_NXt@<*C_Q<}G)ebo~#Tx?CLdI6rB-4JpX1+gr#QAh&y|t$M#%z)ljh8Bhl$zQu z)>!>%&`T2{p0{t`&iAH=S@mZzi-?E_?M%E7a9MocFididKT+gxPSNUn;xj=(!QMP0 z@t~{Rk|IYtk3wsL`%R~0(dbZE)Q=xO+H}U(o`RVT_Kg;rEBY1l!)_-fCr@=*8cvrC zqR23)tvNcF5m}gO4wKmP-d`$>5p*lCt6aLXySv-m+A7PgUG!Z=Q3%`C)<%0+SXj8Z z*2;X*P!X2Ka+fYQ9=iQ8U!3B z>YRmSA6sj#i41IPII-(jX&MH{q_x(cO&#QF;&KheeIY__MeT9K8Fhi zdpncwcukuA*<2h_G4S5S3LpFtU;0t4LC&H3{dwUP#%+0N`{lgx9 zK9(_$mFj`Ry9BZTaS;nMRZ2QNrX(&RZ@fLIXOEEJhtrunoSC- zR=-k~EWl`r-petxraeqvT<%LjUy|+lB)>HL!+n7r`Ouff#=D-!=J9S{jk%)PimeAq z7Dq}umxqxH-j0@wBoW@J>vx%MA(L&5WM_x)5J@6(@IA-J)3d74giA}i#KsafaAC2? zTGP$T5Jk|6ikxdlIwdywa8p@T)o?wJ?d37#i^SG7F$XiNfBxhx{-_>V9u8+#VPgnu zUYij)9?B6C5*o|-;Tb^AS%M7qNvDvx^}Q#*1Ce{cX`KDTYgRb4wcnGfr~~`pQMyKM z{Inm9ciuv&{kU)|Y+oD8ft(L|mC2nf?CkBxRDS;aNxXmR^l6>oYj=&UJKNifofi6W z|6<^^8Idi-$oQ>0ON(0;ju%^k*H-jcwfE7kxh!lnc04@1$gHd^+Rl@x2t1W~R3ho# z#$0k$m7wiVL1TZ3Y3t=NukA6eXgRBqlI(+ngGEWBHJ=0#F_p^SR5+!_xD#0 zxXiw|R}4Y(ozT{Mmz5vcE49ZpP9(drLxtv<50fQJL^Lwh+wXW~O^lBrdsEzx*s?nX zU9pf;xww4c%9S+ur8c8td{NLJJWgf4 zdU|@rX1|W?Vb;LDYm|YawsuT|``Q2v+{>!Y7Z00r8Wl$dkU}QuPyPNuf*tuap}8N` zmFhXV>D3MGg1ZC0p-aSoDuEXNSWpUAR${dS6>Lt($f`zX*&MB z^X2U&;#?XL@6nuujeVXBfDyEZopE1pZnAoNdtd zfI-TVsb4~=(tUb~C(1m1I`Y8&B^A5H%1~kI#ful6mPhZxnq>^~(!CmU9?;8pnEV%O|0_PK<$wll4jJZA3uIPKT?`Y{d5A4=qlF(NMpSa^Al52=pZf2!jmsuNEl}n z7S@+~N3E8s@F6@j)ac&!bOVV9+Zwgk-o`^?cNK$olED#eH z?@PQ-Q28)ES?XPe*ZvmaxpOL-n(rz2?6M4e4%IR>a{HUZ7nzyjHVKp*ImY(B0kb^y|x6$nt8^@+hTHC`goKj*gCy=)bi*#_Hp9OgnN;wqS%e zt86Kd%C=A^Re>s7GhgiC!-wt**`-cD>rY0@F(B9x78uiPQt>+}_?7c~FZ!PAa&MK} zdeP%aNw2kL#tfa(9BS_!BY+{TE_J3g^L?4tusH7X>8VBDhwe+GVGEE~RI*<{y^9-Mj zC51vZMi3d<)vM{e*8LV;A0@1M(?TKEr9!DOj4xROVT6T+MFx-woY*b^7E?1bsgdkD z^RLMDzY~xM8fqx!>Q@)R!IzMdvWBBPT;o-VU}Shmn{z!4iD9$Pk*Zey6u-k&g-`OMrJ3_yP*xy;U5jPSgAewkf6<^B6BNG(J}!Sj7E z{}Jz_ujfZL2#{hiIR7=)w=sa6_2x}+l}~bAkUutCSaWBi47?xCbbMI)jZTFO1iQJV zy^V&I6TxZXSwOh`aJ$9jyFN#r5)U3&Of`if=#oM1ed5V;m-*u!5y92#sBf~J z1l-A4;`VD7qIRN=UAY9*ZTTN!1g(0RY{x3pPLogI!gnCH)*_d>;ytzF#G9~l>y1xW@X#>g1AprG#M00}f2J-tB(*Akr;H7tJ( zC4d#6$&$t*7?G;FdgO44txk$PJRj*FYy)=LPWi5>UcM(jiA)$bcrNR8An~0d)qWPVFT|g(jOjnewrBh{un2Rwws%XA(9$?ycknXx_MR;evLVLsFM1 zKbi2QZ#%lzCZ9YG>}lp^&o53}Pq#$4|9nNhSi<|Gz%(G=paOq zlIdgObGj|FUCBWlpXdHW^M9TBbtNI-ktav+YWd&4oNEa{c&0!O{4J=wvBXpYvrvYb zu2R651Aci_6nsAOf8ds;8F2)mWo>#`Dg$39YcM|A%C z=UFSItNE{ydt$e`WtGDi`k9SH-LB(4s2WTa_G=Q`97gZ@dnqyQAA~_uV#%#$=u5kC zxZ5eI@w_DvVb^>w-t+n4-rrL87-~jIjTis^Z9q^&$A_?^J&k16`=(L|;U@Z4x16^6 zpup+)P+2LYt1q$OksB#oRc31P9ah{gWqX{j;-c!wK-}#g=zBh_*tbi6Bn97BtHUjB z&WMHqI>Cz}Tieu$K8@vy5nQy+*<+4=E>b7u^NXOI6KW@KB9vYkhaZXT+qd1BxiWnj zSM`W82od5>lx%&yv;WWIsiu|MVCrJ;_7==?h3x!~vAxXuFUAeF=QEX;hPwyzCDnp6 z-XK#`dR4XNPkLc>Kf%66%W8CRFVj}1xm|v^LQT7B(7jsXT)GrVy0wPoobp^VBQ}PY zh?z*-UU%BVeglltT8h(F)*JqRk^t^Gs48~~F;WRy2z~ew zM5EFmv6{dE3rQay!@{n4{qS%_IrfgE20=JAZWfs4)-Y-xT|z<#<2)4<6JP({5aYIM zx?sE?L~5R z;o0Fn_J(*$jvm&ub&%|Q#OY&ZIM!ulkG`dNtQ2z;7?dk#=#S0%`xb~J8_mJUyix1}@DT z0ZLHGkdl$9r6e>OcTw6`C2cK@WWu3`tfldeTByjZox*QhugD@4pyM>uFd-rTw12p# zQC?m?eF*6x@nS11gO}=Xjh>7QM!WP*1#P0|KbnO6&hz1sY+4_o5+$O%BZo18EwK@M z_sJ(D=ighYQUR=}YGacHSceA!D3W(`Rv=%IUAT}GdQ-~kaBnl_meKReY?_I0FEOe& zapR$UTNwEU+;2@)uE^NevOBNXIZ24_8p&wl0WfZ9YYV4~ZZ~7stLQbVEi2=9UK&=r zefxGvNsZS&%k}G`fW=Gl9^HxMwf`X)L?faP_#uqWd7)qa?%liofq|+I9=y~pwo>a* zgbm6Pc8)ydG<68L^T>i5vV+L8L$US@$sSJe4nfgI#hV~f&0{jWLEqZnrB$jPYNG0;P#e71*S0e z-qp!(o29jf@_?dx4376SbZP;cqcQdM^^5v6|NL{^$H!-BytYAh>p?sYiO#LRIBP=0#9*Fj{DFDl^-y>b-~KpTCz1|mR3 zcp<2*YZ{(~4BcI=`7Uv*Vb#4w?s~!uYDrC*SxERX0?rxKJ_nDh|J0u=+45K}mjd3i z_mZMu669Sp21uUp4nQBhHV%vjOGh34<{j{k#1G`wKppn|B>)Ks8Qm-fDX{n}!} zWjXsjiA=HgO@Dis4D5s?Bu+;c_B3LpYhEG*J) zbe@6JE^d{fYA8aJC_|e^%4Jl40-KsDTM+M<5E7F3^5qFY7+5TpnTbgn>P`*VW@Nys zo3=(m1#PDcj3mON%zZvhQ&c$~c$Irk!aV}QfRzG zz6SGFT&&YP5h(^$UCvM{lo0-J-Y7kI@WpxT31E#F9?R~aNZ73zA%W+aS!IpIPGt!6 zBgu|GsaJJD1OHrx0FtJBFUiP92nt~nuP3wO1>&SC2eI^Y7!rnZJUhvMG6BAVe8^Pb z%5|Ku6$eQq4<}ynN4Lq%O`-A6{p%k(NJKPiFKVK2*X?N@?=F)#_hsBKF?G1(le281 z!hgrxJbnY9fac$^NW-F6mZ;X&bVZ;#p8fs&8u@6foTLUm|LMP9F!H-qhf5iCXic^g zmlJROy&=DwvVccq9X{y;Tok{!_|GZQzw^JCo(@%6Z&oyN(HFRj(kZKC8%=+T4a_;= zK#f!E7(YMvNM!nZDZnrif5%hT7@+Jf@a!ZL4y{a_AikF8O`nI_!lfI9>prrRk?cX) z1P*upULz!ir7xFrcL$baLig`yd{1usKKlEwqK0_aa7%K9jZ<;&CroGJ3@-J>=~Xe= z4qn${3(hq+k=D{Wak=gSG7{0d0l|@bn_-vP96W`5{9vL=e-T0)J%h}%XUZliMGi(? z3oyOZR8msa)ndGkjxn5w$x=vgI;GkJOU9Z4CFv)*P`er}_r?72{ghAIod%C5rJ6-A zAcOLCEHZutfuOgxmdED3(@_`4Cm#2rVv>6=@fvZ%4Nr#4;1OgcNnkFsV>om} zjy4#rM?!A&*L5fRC7I$Y;Dk~oh3@VY``Uz3LT$z?$@jl3N(#_4ydr(~VA;saoub7VS z`*ySTSU$zcZ|??x!=Xb13!FzE1te3%5_ZZL_eWQaY)L$<3afJ^#_S`L*d* z*wWwVv{GNXJ$>5L+M3zq1rN~VPAqGY3v7fV;XUb=)-Z1!;&T(HV2n(hoQfDETLQI| z_IUCuCI$H4+2DK2-$%=z*dhl}RS01Jn5!(J+QMl5(UfUgDQ!-JO;D1D$pw7pzFa;7 z*Pou5VFX1M$ttX@vLIKwcqt|bXT!+#H>+uBX;o9d>%Rd)uper|)(JEmWUYHoB!|l$ zy01z=K_U_G?wtmRDS9KoYMsycUe)!{Kt>g!V&Ifbh@_$**W_E)ez$0M^czAb(d+i-^Xu5&87Z)v3) zh@?L;hw6ld23HN))k)EyJ+@_XYweJ!d_n3@QD!Z+?$L7PTz%yz4ybxm6>ud|IB<{M z%VWwi{*as^$Z@yAhKN*jXUFzdS9bON=XY^zfG&$3CnKMu#C?w5BwzaB!)`rSt$|z= zlgQueeg7KNtzn=gr6tFJ42TamAerkvPFNMjg&|f{%inv@=a~j<44L;+)nC!WYoYmj zy<4t1y*1T5hQ4qQH3Ho42Ikf~5m=l;C#m7Ul009!X45RCp z;1kJVU?y`#sSB4j2X3&p??qg=oM`;_Y7I%^{kfk%zmCLHy^G6R3n7sVCr|uEA4#pFwW!=<*38s4V^5iXi}Z7~=iwM}I(7ZCBwrB>x>It&i*@{B!>roSMU_bB1iVajKKr zQ&ur=4NNFVP7ILtUT(b{k}TcJ>3e+5ct55 zc>*q`4ZZ|NM@Jr;!CPp|90lv5v9YlefO6w~sC*58a-_KHn1Wac&R$}$`27524F6-} zArZI~lSoth3wtZ_9(7 zRUkd%>C$yd?OK|fADWn?Ks@aQlDWX=ABgD;-uuxh&tDL+6Qp%RP5jNKC7MuVb;YQS*q#Xk}%U z?*##c5e@oHp*0EUqqViQTPx!RIlK@RC>wwPd3qvJnIHT&M=QriilB-j^?v>#gk~tY z!GxhU6$9c&o7oe$$g?PvozhWKC@QcaJWu)QueXf7IePbmwgw+bM#1K9x!@;>|Mk&J z>`O$evl|ltrdZs(BQC!(5|R^8;Tb^10zDa(kdRPNSQrrzK@VDNWlgGLf;#Y{xqJGs z<{99r&>MmL!VBJ^0=FwLy{tu>xxw3#nhsvTmXguX*bk`hcu0g3Kf}I+ndFX+>N+ov zmNymC%SKu>W9Y%b(G6|^bDhcpkV~LeZ0=tHQI;#V-KytPyV|(*&-zzZ<27DG!tf}| zIOgUsjbetMHy>|^PlK?S4&~=5HB~prkrp5o%!87r7Yl`YXS@(EY!sx_&DJT6q(jUh z2!aA?LeKDRP*4QWvEZY@WoU=PwN67LnJcjWW&cY#*MA}6%a;e}Zm=RC#t=}?zWlVN zyknCF>i5vm;{SyUo<0@@oT&;A+o~_+@97;r!}dz<{jK|RFpDh40Y*AH#6bh(wWXyc zAt514*P&V4`x~I-H-7oTBp{#-w114SR|V(^TGZ17C|@qe*$`4vy7Kk0i-t@`XD?$S zMUHgDKzM7^kL9t%Fv!QK4r2gK;|<<8??7y04NTbt3ZC-6N|^ursMIu6sBFdnK-L_p z0XQObK4{jPY`&|w@bc=KfXSf@1P&bI$wbF4pP{9ap)&vo4Hr5Hp;l@$;i|ZZ!bLMN zVk+a$LKAF%zYBq6LJ;@k$*F0yAIT+6l=*$!Jtn@KWo8XvHu5dRk+YQ?4xFqff#86>dQaiZ}|Trf-wgn|wNTgrEa= zsf?n7LJeH$j0#3pNHn6vv)q~TQHMTW+$9{M(>mFyUk;PW#QR%oscP+-=iZ_^@1T!N zSIM-o@$nYn#3F7KGA$w=rfpY{FJCvx`!(>9fFym ztUw^+-P0tFa0QmX^Jr=g)%Q}HAAAU8EXCdKS$~x7Io!w2F7%^I#~36YXm;uiRYnzR zpfo1zobdQ)0npHR?<8??aXA5`ryYo5*D(`SgNzz|jsN=Ll6`k-g7!dG)poqo{*t7| z$qDyz8^c{N7a*r>dU`q?%rI+UUD7MmWCIoIlsbU7z{m*t_BhKA`2A_2;qRG-8sN zJ;MrPN!tDq_WFE&Z~@9ekE3!{7-$bL#NDbu_W4U?73@k)nB==VurK*qObJ?n@F1n4 zlDB{dCh_H)Y_S!Z;1s}nU&`qMmHL{aJ?jsGZpu)iXh5(4D6Nsw3A(A3s43h?`f>no z-g!y}H+Kp>BIFCt=ouKkZtd^vJoWQJmRMD&(giJYWTEFoQnv|90Uj^z3h?hvyac(y zeKSSB8nU&hmP0cy8#$-GDv(wnVt?hTUV&nZ*LhwQan=D(2YfOky&-b-L)DnO4s+=RLj<@ zRENr@2dQYldd0-b+M09x|4Q0MS}ws3AI=vSa1S5*?A!9i)Mx8E_z1i}rkw}-Wb_y} zKffke2rzVzO(C^io>NJdBr-KIY5Ml|oGj{^QD_QMFWXnGzW(*=m($U~E>~@Bqw(Xx<=?-} z$ko>ns{{sd|LEv|Jp$4f88})8`2M%*YpQu0j}(=_nT_G&Q?UGqIvGqOk^?)Om7jlbx#B;0yi-hSDPGuXxMUg2|6h`LOuiio zwV0*P{z0VE>DCo6vD7pf{RU8QJ1wTA(Ud?|S9g>*)eEc|pGJR(fEN?7v$(rgfEy?U z{v)010l^&I{cn+YA2@!fQ>kh`CH|Y2)!~N)Qu3_oO?uH=Ro)emnBn+eGdT>OxoSP~ z<}{h+T0;wXsEUmmPK~LznGF5UqAz>Y9txEv(-9xhpB4JM6Vx}<^k+EzKur4=fpp-t z(IvGv@q)zve6wCI)a~>2ug)R1Y&uJLUSNX>rz5(?uY_^x6xy}`Cnlm>gS#*bsNn9c zJqS+B-~`4v8+ic)1Uy743Hkp0yK)~ewce!=rFRQ9>Ii@&OcZ?2 z)=0(ws~(&ppMU}Z+BfG*F1Q}jp#-Maa;0cJehNFJ@jP|tlfYx@H4h#oKGUVj&aG2^d zF)<;%=MJHg<(=zzvE3s<$CSVSc(1+yXaHKpMy!7dGKN3sX^@V$3!tU zevwX=L?0bNF_~BePj3!lK>h&Yl>>CIrVHmRu|8Xml}eDQdOaAqrXmNW<{kSVx+(1- z;e*HnHo#knw2%e=m9zF5XprFP<~UU6Sd1ijrE=^inS}wcR_P4nq0*{!UAnwrH8wT} z4DMBJfrTM&mKvms#o~b!_sy&Y4V0=K+#<)tQx089g(xeNi(1Sa3hoDwn;RNttx(~7 zQABJSh1LTch;x3H3&PpmH$lbJq`O}(AgNbQ^@3L%Tx`aV93!fwPQyE8JH&~CgvZQ^7QG` zG+05z(SCs*P`qQ2-3LgV{f%3wj8jpBY$PBPQoGOIK=-!u!!^~PHGGI&+ZkuZ9 z;-`_49>TywU6wr3a16%S32=QPJ{A9UdPW`c(ZYz^O3q~)ANRpFE&=8s6<{>_s@$G{ ztYm=M_)2L%Te(uhT_yml7^&|e4|o7*PUL!_5LQyK*twDsyBLqmi3vcWuFTGF7tW zTv`8__>456bkW0Uaty)HLRrsiYvn|b3jBo$Shns>OM+DaIM6ezjBL~4f>*$8WISoE zqeVIodLg_7asZta9@dkJJw52bH4#9g9FwEU`P$5 zv1E3DN5v^Aw<_@KUJ7Ib0RGyyAG1R09h}}Idbg!H zKR9P&o_@?V0VD|?qvsndK01m8u5|PgR{e5Tqh(^UCnr*HKzsDd7ip106RL;JBD70j zpBUAh3*x(0Yu0*MQUi5>1M4k~=_<;q;XHP6y(LR4OPllPcY?Ildl}&orpGY`-l1D7 z=AVUp$JO4}A?*t7@j^N{vll+V{?#^aW&QY##X^Z(q0MmKxT^geuX{7Vv9*~hR&+Ks zF>S>Fegruo8TOwRqQ&z-swT_;IJ`Jw{$Xvi{+#kyg+y+t#SNmXv=UOXKYwCI>_x=J z3M49~FQ-3D_Rl8wU57Ax@!B=E9{VsO_R9g;VRufK(g@wt?be z;5G7J+4ebRbY8L=ld$=I-J0_6a0ptF69CvY6LMt5@zK6ot+&?){>Nfx&z?m@2E-iz zet}tNRZ&BlWxk7(T-AfPt5%aTt`q1Dv}_ zMD4kBq$t7;l?Q;+6+d)=_!Yp%E?tKOrmY)aE-4Pa0uk1G`YmJpckn^6quqCY`V|9t zyihUoKjQRjTVuu6QIOhhLXD2JcztJ~hBr z@iUk3Cr_Nv9T0l);zdMsv}I){ zxT>kPVud_P5Yr&I-bNHmAgCZ#PH?ql&%}FlxV-y6lWN^wC=igN-<(Nzv9(+t#Z)hc zN~LHOW?5^(DIHFQXoDp;T)Phfyz-V8xPfmLI@+V~DgGhv!0D#*wx8`KJ zjuW2-s!ITzn7hnjoGCODguyF?t^Bqz*DbUy9k+Tu@fHMKOfTSRFW8l2d+|u`!{Vo; z=~e^Iu;}P?km_1(?zA>Ei0kX?OYH6K>Vm>WhqYUBDooNE;itz&F6n!gTxgL&To^{`Mp2K+J*0ny8WeJJ$Vj zFh%fsD27@?RjURYOYN}qk=Ob_IT$mgJ_tA$Y~K5S$Wz-0hKE)OgV%ioC?yx+1Et}z zF86}!7ek$*5x-{rS}I+Zl>LaQ&S#{pIY5C1x*F1Q5)m4j)R(CN9Y4$P6suDZJ2&ER zhFH-u?KL(w#{2Y-VYY6$GLYM)#pWg^768^Mggwi$vms>si(DKN0?UXg1Y%&O9n&uW zXS>-*u56J8(FU3=`Y$b>+uPKzY$3HAyk%L3dSrD%iMMR=jBE|G9aw@Oi|i!@knn(K zK-x>dz8^;o1d1q?zjv`WFsNdp4xfsz~XgTq`D6(Mi@Uu7@tJ2a3wO&7UYz@*-0C63m%$=da_Ph5) z?;UXNOklOgY=-aucah9$r~nJTsg3R0V?EHA!x3XTlqiTXog&JU+pI05w6qk;9pGxR z>*_@16NL4k+^PC$ehQT+2xd#KgZz!z#yG)2tPq zstbecV@A3P6gYSwY0YJq{^$m#K0G1<3o0Qi9B~riokS1=gE;b4*Jkb^{iRu8yHqW+ z9Z6Xp%kHTswCDAl4S_1&dnhXE z3oL8OpFa+tv>>>@P|wCt@PrU9l0Uk1(O9n%A4LX;uoW;ag8x_<7$lKqMHq~k6UeV+ zf&miR<;oNSs*X>FvfWUs3=sH1t^EX=2!$TRf`}Gq3%h!?zi|^aab9=Jobe?Y9HJi? zYH;eDiO!+;2>{oIrhwXM0j?s5htLKRWrGN+z#&7c*_}MVcDkJzYTXl`**=|~5QOsu z?TU&%I}J3z3Ee#0nLI9aU0D?xI6nTivhv|dzs-{-i)LoOIJJ+rdD)V0QH4M7V(Ipa z;MVF$!Jd&I#wy8gr8A`7QYN-^Y+_b+l)h3!O!;+T``fyCmF@eXE$`ax8a>Xa?N`+b zE8q5aqlGJ1-1hW9g6)OE-Fc!8FM?S`658-wo!-Lq!#~`^j(dl_CUFIP>k!>ae3laS zJK`>f943uHymMgPnu9#k2W@%0#$V2y);I%o?%Q`!o?ck9_G@})QM$i@i(_U+!>Px7 zJ2t4F>UQA@4Gjf*deq+b%1YB3fZMyPt7hc;Vz2)F`Dti(Kzhv}JHsvj_9cJgNz|QL zD0a09eQJwb*fU??IS9kEkcr~R#`)P=qBwKOSk+S!MylKj{YjaBrFEm&&zG#AP=CDu za1R3?b~iV0a|;0BkT+8hwu}e^i1-Y|CgLzd3V0}}042;$z7tW0cymn;id>GH!unR- zU)U_qqdLC8Rsn4RStqnIFn=4JBF9L_PZ-!7;yu^UjbFbCl!+l8Fvo%-&+?6<{otGv zC@uhO%1L4;)zXyiV}Lirfbej^T5Gzxy4p=Z z0$?8ZeZ*un@wFo^^fJ4#^DR^dqT~5e>J&-Kpn;A5%Sew7R=FXG=-5Y_3B^x^AZNSz z12^uU@ju8=9c`u>XQAjAa^1?}aY}PKDC;fB25Q^aI@u4nX!4Lawjdf#t^RBg>m$!} zZC=Z^E9pKy>1ORZJ`AX-%gDtz4ELO%B7z2*{m#K+S*xM$DzGsR7ojQcDi;hn<|v?= zED>g0x9(Tt@6MH)%3TjgKc|R!s##+BWS`8$%&4Vf3VHEG?GP}X1zkCR;^wGPP z3+m~*<)hh`P>uvb!0+;xHwIuQ452pUp7Z`$pEYK#WwxVH=>i8b2e)2fI#rtBlB_s% z0qQ%8wr=IO7k@9f zZ_4F12SxHJ$Y72RRNN0%bvZAf9C4<5MpLb*nOxmpKW_-FH3iM&e`!QF`lEv=XY7Jd zAtOk^!k-TEiMSs}r$IR#S9jb^!=!0`U>?Zdsyjc+vPPZNZQAPR?rasYYk4ZV}+hG{spdtbh{COQYTKRy9AFAp~! zDnxBy49C!B>spHVOv{9Zc6VcytuhW*S^ZwPdCYi!`1gpC)H3C+l)E3b(6ehxn|DaF zst?kP7omrX1KMfvrf6`}{|?hnS5_{zicZK?mnS^i%+JQgp+I;hgxZ^b+xmoW6(VBQ zon_ZDcGs{eY3m%ZG1DA8*fqQI-pP$$bD0Op!rch2oJ1rbdP-o_vQE=@D)}5AmLjh+fC6SAJvAOtIs3rrvatY! zbxvO1EyOMg9#q8q3E7d1f+7QwGXEa{g>ikq8qLi2UlSF&c$GUUPq#qJD`Z|Xg>$ep z`oSD^WVmi^;7$>rjpK9+&d7`eIfO4^RER^wY6yFXw+27}8ME>OjB2T!o?4dXL+I3@ z00;0*kyFTX(r4qfvk{Y3mynbhDdoO)Ui9bziR>NHgX3e)Un?v2uA}4Q2FTkNR#zWF zUoy02!a77ytJ5J|EEoqK0#_d2e;(E3M$Y+raa~!Z-7`Fk_;h883gabhyDedq!^sno zHnTvh_>*(y0BW}ag-5_`Ed{Q`1KnkaKOAhnNZ+Zlii#S%Y~%d41`s8H3%kpo%v@6v zLS1L{+>Fq|W#zFp zrD|E8YEhbMMbWOu&-(5Ut}!Tl)U7jYLwV44i*&_$?ygaAn*}0E0BOl$=g&`M2_VVN z&tAksm0R>O%{5)Pq%I~VxAL{@akq+M^qv z8;p=!?i)70#v?d2`>Qbk-YOCbHgtM40-RQI5d?L|hj0nGCc;DmI*&2vW67~tu#3HF0|NiZg) z)%yIlJ#>9T1`qEfDxvjWsoqwFM%*~oYbb|S_br}=^1aR0r#X^Dmh-BX8y4KT^gO-i z*YQJ+O}AvHkv`sRoq_vg(=-P;jFd>%9K6>+0?MC~do@trqRoN>07-xzgoUbh4xA}- z1B+lWLk!p>CARBDW~jPs$PRmZ*35Ud_U@->-e#tKo`;XR`>YN_gtYk~ZMH}UDI7y6 zA$q{G*ayW8s7>{^xf!#tKpp3K7f+67~aM!+w;1?w5q+rd7Jw$->x!@+SkeU^tlr(Etiz?b68l26@F6 zkz?ug-_bK)zPzW7T%Dv>?5x^_wCMrE^_9KnJ$fP%+IQ|PhX^0`Zsh6O*EEAKJ5|B# z%|PYKa008Ql2wnSe*kyb5}!>71z$%W7@5itUs@eDh{oPs#eI{@U?BZw_3kGgtMIwU z&21hlXjTmw8XvYXmyzNGuMu0I0PpH^p(YrRWW}*?eAM~!U6ek?uJ&+k)%y_ogdzl7 z!W9xqYRwnaxjUy}?0I>D?Bu8rB4mWEG5lR8Fv4Do?>yYl+~zX-+an3k*VbmwtkIFh zath_(jhlynvkb*Ob@!hq3k3$DpPehyQ$B`{UE3r$=*kV-QH%P(T>BsW=TJ@5$jIrv zc9NWay}Wwl%nn2rP}A!8I#q*<*tM^e%GK^}8jPrke%xSZ+OGC^tc^ZVmToG}EgVX@ z%H6hk;er|dVcoO8pTa$anPl)Lg&yvY?+kZCB2r1g(6=kyvR@g^B|(KeK_E&LCWfVY zGZHpNv|s|+I}r{lenXeM)2K28H`Zb06723cUAr~$d%1APF_ju6x{SbC-LFH1X5vk$ z@m!g{c&IfI+{iT}H|8_VEXXg-;MI9Oy;}hsliins6l$Rq=q6JXHsXLcB3*Kag;r=U zXwzq1skPtIpBwCgek#-&($O~2`Q5A{sF6Gb3hi&pw#P(I@cPuKmO1qQIER{`hBGihOH314 z;mqAoO6?=KusvjB)|hklQk%(6jh8%${QlNJ{7tw>^l5JU_~<5s?3g*P^3Wu4EFoE2 zVeS@CB@q17kAU;K2Km_k&8=#VfXmUZpk6COcD3$ zMJ}PPAA{w}_uQLzQNqWga`Bv6T>G8P3g1_^qiPP-D`u#JK>dW1h2zkzjGX7T`U5*dSHTY17>mPc6B&1@AsNlUz`TLli{a81K&!4*+NMvh| zy?00Ri~t+SP~9_I()u6}{nN5Nc19*0ljD>6t z(Olq|j2@`o9$ukz{P|of-gTH~ZXvgwArRi(0vVT4;r&k)p93QoXM?=Dmob#l0)1{# z`$T7NCrv|>@=Ss&1TEhKe^>xMc=ggyR=x=uDS;O?=XM@H$q_qwN#CwkZ*NW3a$Fc1 zeBm8OZEH36?+p$l3nyjf<(+IDA3uNkiP>~Zw3i+b4D1kA%7UNFwB@W(Q=859 zES1K(F;}`o>rD=1bH_4s=$J)P9d-JEJYR66SQfM8V>Q&7XjeVr65KgV#Rnfp(9) zeF0n`1Isbc1%dn?oEFd?(gXIK;wLi-uU@~N2T(_xajkCi{52+a1G`8j; z9?J7M_69jf7J+6UjD>htfi=u!06d>f0|Oestg276tz}lhq`JzXy}sW^XI{tGx3Hi}HNe{R9*J zM~URGqCo*sK&lWy>DWcOiZDnoQlvKl>4=CC6%?c+nlPyJGV~%CRHO+~9RyKnj=+Ev zk-qQOT-RP}pX_zA4%T(89K-?+-+c3a@B5Vd{ymgyjMCSdDM6n_rl-nZ1Th0wO~U`c zXB`DC9@|e-#oDM>oJU6Zul4KOkPQMU<54jH-BT0|t(nJ&yQ64>gM;jILPA1~HgqhA z_vI6tQH_QyqKC(!|49{^2|;2*Yvy4()oFh?JTX0@ab>Mqzyi<*Zza!E2340y@EtbH zJ3KY*p;?7T%L3v$VnFH3hxAABapKZdME=lq5X)_@&pR7>I+8Q63pRJ>TvK_kD&5Wo^AmRQc5VqZ}IL$6M4VY z9|@ZMX*U=SX+9n#x~<=oer{h~2cow_Qj2Ns$lzf!8+{Ny#W9>`bqtCn0VWbry5d0) zTh!W?;j@RL5Lc#-rb;`yKW(`T06$_S&2qqj8a8=)SYq+Rx^z?JbQ>+Zp2DPxIqVbf zl$hZ`dl*yQW_z-}&8zhXN&fUxg70wC9j~$9r*+?5I#xcdoo;cAc|VATBAOzrv}g{+ zpt2jd2SDtQb^vMN0Z{e{`p<5n9d~_ym|O!s4XCkT6~b~pgUqPN^~2HUb#-De$qK69 zJ&h!uXGtX3Xl|}wXYs2}s!CKz3DRRE$%UQ{UH4yCRczrDjFFVoiZ^F#YF2Qq3FSO> z3jV+LT6dg{Gz6Q%R%$*b}!iNnzu9CPo=pJH65S3 zdw0hnTXcD*tn503)4wwon5>Fs4+-O!hI?069R6-7^Jpuu)=7}+eo}nV4qL2dWMkEw z&G_)&>z^bV%ItUILaRzLxFL=AACXA!Ge6Y%d-h0e{KlV72v)pVzb;lGIAR zG(NI46TM}tjf{Qr{(A1W<(=$r!y}18LM7s^VNv4$e5Q>*QWb&YyW5$49+CUKvSu2P)brDshU+%QTbN^^RL#8` z8qmv3oELZK2AClJ7PmupEUUaxT;6{OV9O>wdDj}pCDn63Q22tdA(#GnV_RCcY4nRo z*<%^dH7#^|GcBq8NIRst4halSmC_|*-2f;E%&AU`P^QE`+(DxXf> z%Va)k-c)O9`Y`UHku0;@thvEb|5QY^;iXa^Y~^#$X?``o{K91^qvyzIoAFv&_8#uO zcSzE6Ojzr_M8K3<*WV3-moJ0&LhMkje-6L7wlnd)w2xHuJ1C(@o+C^5D>3LC9WP01 zIV79urBqY{Y$R z0GqZys;s367PYjG&(m^DwD=gs%~_v1A4Tex62n z(Q6lRelDMKwyN7mud7G0`Q*uPe06n#=4!9Uo@e_VFHnaRF1}>n;rH!>(V}BY3gUDd z&;0n`=uZVGl*3d+R_jQiadfYA9lzWg$G}UI59IY9-!|A?YNNGT1p)pK)^BC#_WGCE zY;+c%1lU+EB2kcI2W#%#$n$N|DVavyO|l6}1`D6~?S?hm`J*<6TuGbjZ%MEvp9TC_ z+=C_knz=7>tJRkm65g%bxsy3*Vb{K=eYC(W6)L#|2lu%?G*1moOPx*V`G1v^Fz7Uk zW1CgNII6!cIx#F$rk}3Uc^Z;nHo&x_a`+9!^v*XS%acX6G?>3(Ta!{m{BP1@4zu=) zoG1m#*5(x`Y#Ciy)Z%E~;Sw(xT>H0Fwe!ngiNWyIJ(qcY{L?|MJ$-9@F4S$5ZnCeT zh$tAUt2ZPJp(}M@^IOG>x1*w^Q&wm7>1qQHjwHBrK=t`P>tEuoKHDVl?5Nw>MdS=F zP_usb(2n4Zp=L{Y=;s{RKWgLSn^-@Ch+=g#;0BJH#niCDUBOFS%rzg%lylHpi+a+ncl_)sVp3J`p-72~EGPl<;$t!GWDZtdLfUG5apv(BE|I>#3M4qx)rP%JJ@I{?Qd8lZYsROV?rxnPu-NNo zh9%g06#smOVpkI*{y^i5rT_G;RIvhdbFiJFn*&WW=ibD{33;z9-Qp~R&zI)irH!2@ z-#5)&B-iYPYt9N&HM@Ab3kh`>vnofDDTziDbgTI|Jn6XGe!Hm zGxb7kH@Tp$EYm-0W8bykLPGF)Vf4DyHtgFsEZ0jIw@p+h@i4A&#D#=3<-b%-SLbYR zY|FEFRoQZVv(3PZB8RjC4o#z<&UoaQA4&IgpwFMbRJt7c70DesNq+a`>{+TvhW3T1 z$8b-t;L}Hijx7$p!-Qw=suqXN^YX$bX=BjOquBInlHv9tBw_RB9S&aCO2nn-23HoF zC+SG?Dp*p}*3cw{hP-u=^?Pt}?7~*IPj6oPD_=PM%KzP19^<=nVRql?A0=$Z4e39B zga$u1ce%_qW#5Mn_q?4~%3=k9q3O(V^3`gHldUbob5$i8wC}tV44n z_tUQNMj00VUL}&LpR}wAEly~(L-P;$3|hHon%e+vd9itL!MU%g>ZkQq6L7y$-b=A< zFjhYr0vQZLaK*53#*4Xo{+sGVbi->u3U$#!XQ8P5xpuNe(0PXgDy9b_q7Z`D{ZAk9I z!HeyE4M)8Eo+nRiq+eux?lbDC&=0>6je;hxpC-J~bV)pb!@Z`EI#OOL|F~7|UeLv3Z!N%iVgiK>-y zgG9MUy*@%3oTNY?%C^B>^Joa78lS7zG$Ic<`|7Ji#@aMXJsrf62Z?EYbaOYqimGI_ zW9)W3x}xV=U*9Je{VKF3gc}HKo0a<1$V4ChxGlnbv!AWK?oPZp^SR#)1*>we1IJ!? zjor39-wa7O<-I*RN|YQ)!4u)(p!CsB9lWC?b^R&&m8ipog+XawPVQWZ`b-2kMfzc{W0hyCa6o2$&aYQQ`+68E3Z`?o`rI z*r*tHk;5V_)-3lvi}-kU%w*x4oYdw&RFa7*zWPW*k>#AovD$a)8FBV=!Y z1Pn4Xu2+JBf+7&R;P((aoJOn<9rr-6C?4=SUg;h3uTu8nAR1U%v3cBG?%6i^A)#N< z=H|>mB&=PDquAJkdsWQqe^{KGKrgIn3nZbir+7OrejO(;QS{+pwAl{}`#3P0kW48+ zUYOG5^W`t*E=I|zh2b6TXWi4*{z60ekPpE_&;7-rZ5}yhhv4s>u!puK*pEMNFc=!g z$1oxg=aG10f#SB!oB83WAUP`t6cBU2hV94`z6VGjhVAaTJh2OD7-QJf%{Q_C#)l#R z*LJUuq4HkCH|NXIyqSEjBu0FJe0jYY1fqOsY4XY*?d14fSrE31KptiM;cM_P9lyVS6RBAfr=H_7@|F$jYS3r?E*{=V~J08(@U!#i^xD%01`^m|qNPMgSlP5&|WYEcF;sJFqO79>(s8)*x1>7ddF0 zIa4-8cJ0F{@4YAFFTjYNxbM75*Z^$MucHJtrm`YV+@R@Y(qK4H`h$jVbhTKLOKL&W z09gTiYg_(J+JE@bM#nfb4x%1hXmKT>_V0Jl*i&3RXYvO55t*V?(VV35=bsTdcnm3} z-~So_LZ^P`6=*amQ)_(BO?jQfufUgH9*K%*&cHRJ#iHG{u=&;R?5boW3 z^OO4I=MO5e-PkZcz=2E+BGt65ducc~Q7S&Ek4=p-$cwLvoH+`!U#vt7ukXw6n>nQ{ zvgYH_@GbCnd0*tjw;g_G(WZ=F|JO`GDX>5tjbLA}<^?$=jL%s&+&weel^p||`iCC0 ztkLmrY-u@#0wv*@z<|en8YMo;djKOCzxzyC5eN$DJrnXC%8g9WSo8qnD?%aazm$fQ zk{J?m`1MU(5#(L#W$3 zw~;&q#_KN&UL(6Q6lnzBCcs2pDvDN9Q^Vf9cJ11R0&$2N#7{YV|K3}1sT*E$to>y> z4P{{m&|xxAFO5+4M)zO-Yu3_7Fl`fZUJSpw5RKdO&-?g~`^Fy_+qi41b3MEZdvU;m zZQsE9hC(U%LjdUaTr4KEjF?%IYi_ox*@mFg>l)VvXOWSFlST>BxR*2}j%0TrUvLa$DmI@Bz)3eYj< zbRZfEt~`^WD*_2X!)xo({Ylmav8gv)i4y6%6ZpuLwM2=KU^?A#_LKTT#u7&Vz@LiqeJqsFkxw+QwE z;uaPI@7KG}Q{Oa}o%}-qGz#$Fqvr?3wLe0Pfx0ji&&m))NT{}s0`u#7(ZFXIU-{hr zC=#UThq#ZB%?~7cTmg~;I&%pylwfH<)m$C(R_X`Br(eL*K#=R{xMQNmrFji^MN)Bc z*_J!f6pI?kg#!ZI2ct0QDGd;bc+=GmE&g)^m!|$jJbCj#qc-*@}ywJD7?6lKMd{_=9R2RQ|IBV-80( zq##s$R)l|oyZFXr#Cf~`)DDm@jmdEeo&F4LH9#f?Hq01$J0v9^HFw(t<6$Qle?+>z z7tki6Mn*9^_xtl)s051azllFqA!wx%WGDW5_S}jdtVK?^7SKv~{`|Qe%r1oS4oave z+Od@qirs{%K`8zXxm6EA`M%Iw>b5Y~A4D8KP)RE-D|kD^A(#+`Rtw6iHex;T7}kv0 zYeYqimZfs@w>yFNDvBCA2@C|(0K7H1+G-(h$0Pzv#9j2tMI$2ZzIUBW0z4%^WfB%X z#>41t*eZS+AdvAKw-PVNtLi5M3LwXU$Vbz=*X;?U|6o!}YaA^J=P){u!GXfcpEL56gjTYW{WE*bfTGovB{1(4Ah z$s{!swApxstV36ms7ZODCk%?~^oDqA2xz}O5@vX_Sa>Bm zF@U8~T>2EZ!bRcQeE4$=O8NsU;6_ggZ0hS7GQ>0M0!KeBXq+{Uim*l|#A#GSX<55Z zgul7x@u=7U5so#C^tn$KK9_fwolQCyYmKf`3t5-YDV2+mkSKwmpr8umFvM?h7q{1_xH0n3%HzDeyqT|eXt-y> zzzH2%o{5H`W2YKxUO77YU*g*4XeMOnq=hRfjjfJ6h7U)8iBG}fxPi7UZV>SmVH=i8 z&cs&;7aKvf{DXo@&wq}OG!ARG5wCo44V*c|)l2mMh=nm?$26+9!UPa)8oUg*FgXlf zX0BHi4sXdhg20cUb`jbJE`6z+@nF5#LyVQDPv6Gqt_++=^_VyS1dc8mYDh)Z)L0A& zed1yv+Dc6BArnlZdg-LumW2(AG~P&yQaeQ{9okAFxCBox8YVH^0jyEI2Zt}S*Gclc z1tMKwZYiZ+?Z>S`u1G9kAh(eVgsdg?Ol3up77TC1-Gwm<#I!@` z5r`|<R`yv#rp@&xfb0c=V~3hK9!dYWH-l-h3zb zD4fQW+nxX_5KcS67ZO+Z>mj*bXzOQDcp|Y*r)} zQd2eDwxj(7?Nw1*wKGJ7Sa+%Db&}a=7&XwbY^Fp>H1>w7HNT*pxsB(4P5SCH7=DFK0hp7K4D?ucGJ7)PtHu2_HK;p8BzyYs(|5$ z9RKBL!Bi8*lkJC7;ug2OPHyFt`huIca~yhZ$H<;2AcCwq>Ss^M%E=I{6BG-eh|0~t z?k#FiKm!~?LXBC=j+sTfFfOLVF)0%m3({?i7CP01(5A0I3x``F0wo+Wy{vC(K^ibQ zoX(_X3zX?s7(-{NwSfKTqb4)Sl^bV%xfqnaLHrd5`o$Z5caHYzUA{7?4Ox% zlaik+FlQeJ>G3FT2eD5Pl7-rE-0mvh*)}qZ3}>%~d&@*Z^6@bbHiT=f=tN%p^6^B) z02!tv(1+Pq5yFkkyOL(6M8sQYcQ(ueU!h{`%+SEVKyZV5KkiAJ86q9J;>fFU_ad}Z z_3`j7pe)f_U_#WF5J~Gpl8iRAX3%$0bHG9&w5qV$wqzW=y56~4ru#gd(L1#`)L{Ck zsnh{)7C$J8wu&KjUUhx>Ch!oE=iz{ImNC+ws+nolLVxT*a2ydf_TU*@Ss0aEMzEr; ztxdhN`vj3ef8UK#x%2mPje)OOgO9Llo0-3bH&WDLYJ!w?7S@=;W2rhh|8J8A;tm92 z;7K-OXq$2Yb9nKl3!0RqVJc&9v@>nyc`GPQ4pV@4tT9pTS%LVRLmUn;WSk@kKCwW4 zgGek7a@cGfkmoRF2jLy7TSi|)Te}!G7blWiFUMCDfxx9f3O!gqZLDwD6-XS4Cjk*J zUQ+}5XkyCBL@bw(;$7nPGY3Zrl3xpia|m0>h%yqkPB+WOT9=tsSPdgKD!`+gjYqAI zCFc~4X^TRyF<}V2;noE_&sks-8(_rDU*t%`5>qTMRGNl!)c_#xF32ayPgnl(Y%|r^ zI2kBo+k5gJFABsP$@ml?dTb9k_r5X2j243X9z_8mACXz~$}#)EO`u2Oyc@l9k~hCA z%iw&rX;lx)^E%=T1b`P1?l&%cydjx|Q_=zKoUZ6o2kr3f6-8rx*(NzdWg{t#c^o$s zi<&Vl$q77=)&)E#Stu76VIE3826H*1!&zroe$fu`L&u)DLNFRc&*eQJ7JCQW!Yxg-_SOYeo&@ja$mWYoL5X#|4mFVs5S)TEyjYgaXg8GnK60CgF&O-3akv5pb0p z>!>Mygi7A?u^|rbBSb(Q60qjwAxg5s_SK7_6vcQzvT*pF1GuxnH5-9&5rWlvTzsQz zuSt&$3NTc-6p3oW5PnVS^-Y3Vn2h0o=a4JMGft*VKv3{GNl`dAZL$Pb#|TTIXzfPs z3y3aWu@E(GYm};1ox#hsrn(9uh{U)IL#Q-Rc*}#=X%}%EP?3COW2#`qXm7d+MsL_% zy?WIEu?6)q+fSsx@;&~kzEG8@h}%UHO);*Jv^>2&FCbTc3c4Nmg7S~G<>(4qCg5g+4!Q);-rt5Aan7>>o}v%#IwNFWpDVH_>s`XA`-Ivw=|1+>WwgU+Q#nFQ!S2_SV7>9WnnUj%3 zp#+8R5t{oox3J_SlrQ$eO71m+Z6p;Z=4b3q#BJXec`YmqK_s-(URfa7@2#JCCLkm< zifSq}ueZiirU6@_t@ag&D^J#}$uKS}!1Gjy32p!zESGy)+2H<>Nr%WI2~}M!DpAHM z1IU6;m_DToKrCX1_`qc{S}Qa(bf$GPJ~c866G=}icB_P;uWXb-<*?8nC{muxbxUM& z4URNsF1GIsKFRVBSW63d$L&5~sV`QEt-Z7?CfCK(b7;7Y|5N&M7&SJzX_=xx7 z?G-VL2`e)0!?(2UkbK#DD+vp~WR0@@ zv|d%GxPK?*wl~y&!I~s{lS$G-NTI&^!>YRe&PKmL7*nNnv8%Zfy zuHQ9#FclHTD0%mI&@d*7KtXlEH^VeG!DV@U2_b(qgs_~*S<&nG1UL}^6N8G825Yi) z*+v9P>@9)d&yb|}go=ti@>0S+#nw-zvk_|&ZtKhXJ!}-YUm@4+ZH=id0n6MD-rY#3 z`J$km68%2-0HBE(q){0-nh9HoY!4(#MWujva#+=?ffXaxG6EQcdK%Pm0=etN2nBN0 z$QnuL@h4>>>>> + a = r - b + # <<<<<<<< + + p["returns"] = r + p["baselines"] = b + p["advantages"] = (a - a.mean()) / (a.std() + 1e-8) # normalize + + obs = np.concatenate([ p["observations"] for p in paths ]) + actions = np.concatenate([ p["actions"] for p in paths ]) + rewards = np.concatenate([ p["rewards"] for p in paths ]) + advantages = np.concatenate([ p["advantages"] for p in paths ]) + + return dict( + observations=obs, + actions=actions, + rewards=rewards, + advantages=advantages, + ) + + def train(self): + for i in range(1, self.n_iter + 1): + paths = [] + for _ in range(self.n_episode): + paths.append(self.sample_path()) + data = self.process_paths(paths) + loss = self.policy.train(data["observations"], data["actions"], data["advantages"]) + avg_return = np.mean([sum(p["rewards"]) for p in paths]) + avg_return_.append(avg_return) + iteration.append(i) + print("Iteration {}: Average Return = {}".format(i, avg_return)) + print("Iteration {}: Loss = {}".format(i, loss)) + + # CartPole-v0 defines "solving" as getting average reward of 195.0 over 100 consecutive trials. + if avg_return >= 195: + print("Solve at {} iterations, which equals {} episodes.".format(i, i*100)) + saver.save(sess, 'model', global_step=i) + break + + if self.baseline != None: + self.baseline.fit(paths) + + def test(self, ob): + return self.policy.test(ob.reshape(1, -1)) + + +n_iter = 200 +n_episode = 100 +path_length = 200 +discount_rate = 0.99 +baseline = LinearFeatureBaseline(env.spec) + +po = PolicyOptimizer(env, policy, baseline, n_iter, n_episode, path_length, + discount_rate) + +# Train the policy optimizer +avg_return_ = [] +iteration = [] +po.train() +plt.plot(iteration, avg_return_) +plt.xlabel('Iteration') +plt.ylabel('avg_return') +plt.title('Without baseline') +plt.show() + +''' +# Test +saver.restore(sess, 'model/model-88') +ob = env.reset() +done = False +while not done: + a = po.test(ob) + print a + env.render() + ob, r, done, _ = env.step(a) +''' diff --git a/policy_gradient/policy.py b/policy_gradient/policy.py index 70b8cdc..318aafb 100644 --- a/policy_gradient/policy.py +++ b/policy_gradient/policy.py @@ -27,7 +27,12 @@ def __init__(self, in_dim, out_dim, hidden_dim, optimizer, session): Sample solution is about 2~4 lines. """ # YOUR CODE HERE >>>>>> - # probs = ??? + W1 = tf.Variable(tf.random_normal([in_dim, hidden_dim])) + b1 = tf.Variable(tf.zeros([hidden_dim])) + W2 = tf.Variable(tf.random_normal([hidden_dim, out_dim])) + b2 = tf.Variable(tf.zeros([out_dim])) + output1 = tf.nn.tanh(tf.matmul(self._observations, W1) + b1) + probs = tf.nn.softmax(tf.matmul(output1, W2) + b2) # <<<<<<<< # -------------------------------------------------- @@ -69,7 +74,7 @@ def __init__(self, in_dim, out_dim, hidden_dim, optimizer, session): Sample solution is about 1~3 lines. """ # YOUR CODE HERE >>>>>> - # surr_loss = ??? + surr_loss = -tf.reduce_mean(tf.mul(log_prob, self._advantages)) # <<<<<<<< grads_and_vars = self._opt.compute_gradients(surr_loss) @@ -98,3 +103,9 @@ def act(self, observation): def train(self, observations, actions, advantages): loss, _ = self._sess.run([self._loss_op, self._train_op], feed_dict={self._observations:observations, self._actions:actions, self._advantages:advantages}) return loss + + def test(self, observation): + assert observation.shape[0] == 1 + action_probs = self._sess.run(self._act_op, feed_dict={self._observations: observation}) + idx = np.argmax(action_probs) + return idx diff --git a/policy_gradient/util.py b/policy_gradient/util.py index 4c57674..db0d009 100644 --- a/policy_gradient/util.py +++ b/policy_gradient/util.py @@ -1,6 +1,7 @@ from gym.spaces import Box, Discrete import numpy as np from scipy.signal import lfilter +import math def flatten_space(space): if isinstance(space, Box): @@ -19,7 +20,11 @@ def flatten_space(space): Sample solution is about 1~7 lines. """ -# def discount_cumsum(x, discount_rate): +def discount_cumsum(x, discount_rate): # YOUR CODE HERE >>>>>> - # return ??? - # <<<<<<<< \ No newline at end of file + R = [x[-1]] + for V in x[:-1][::-1]: + R.append(V + discount_rate*R[-1]) + + return np.array(R[::-1]) + # <<<<<<<< diff --git a/w69.png b/w69.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6c110cebae762b478b70f7f22328e656a2e1f6 GIT binary patch literal 29855 zcmdqJg6Q*r8brE7 z$xTX2e`9T)-#O>{eeZYvfY0lFF5X>h&Nb(lW8C8&_gEj~Wgn4~(U74~C~~yq0|gX{ zhy#T>YH;E>ytBH3V}U=%Z0@6#PQX9c69(_$HK~=Px(y0Np^N-?2?HCx?4j-v_%oKr0yl(0X`X*e41YYE z6LOH3R_c`Jk-uCYYmUO7YQx9>KmW03BQXg{x>0K+@pkNs@w&!u-^52Axq%!o($~FhQ>iY8h$!mops61Gf_=^jDx#INn^rk%->RHnlI5ik4C@7p9 z9cTJ-^#yCDxM@OH0}H z3?7>G{tVoIcJlhoHA<{;kph-kgBE2n?(Xi+YweHh#;RY^>TfQMW}mqxF;ls-sQC10 ze0fC$6)kPX*ViO-Gwq2b+8!h2PR?U5NhmK~WMN=nP)=8op}S+>^}F_?jgN@^eE9zU zW)(Xl=@Chsi^~nW?@H<9<^-~*}UzxR47#it1vk?m(E?at5D&*u8=6Si6%CfL<*p+Y#?>9kXSUXG&HuAjnLToK(SuzZ z*gy2B$3ewn=^R%|ZoW~gLYe(SSHi=SPR`D3@MD|lAKh^2LjC&Fupq5B_X~TqI|nVR zG6Mqs5!wGco+kh4m2C9wPYZ)ZbE|D)z54zlQy0r@re*DByO6t>?ZAE9-dIQ%+y5)x z9LlNq@jT~R?FF6BFr6)DIVa9k_J(QuzkhTKO*$pKC>T`cdNR8+p9sW=d1$k%W+_eo zhynZI5ZRf}-`bBpQoYcJLe+Ayur#QoDX|VRchP`I50vwp3|D z61d!Zgb@{rCb~iC+KJFaXw1G(w@c=Ci8soi=B`?Puvq&kLNf{NFEsccl_V} zeB-D*CGExnjL%|1__T_xq z-P?;X(#<=F6%kjw_>TNivh(_^Al)V2X90{<&$faMbdq}t%~VtL`LU!erC3dL+W;OJ>8{tbJ2b-j*bnTor?7If(QANOG`_CchZ#8ZU2njd-&kNXQ$OE z+3{DeUak3i?21?IZA9tw&lyc_+U(#{;?`OPMn7AQR?c>&_;>y#qhfnDRQv)XCDl0{ z=ix5pgoM_)u;j0dySD7N|pllc6I!A5DlnrVRXZOr#4 zR#)HM+ZjFRp>r7e1c&Z|hTojWSXfdAZsEYB_{-giN0UtCVg#AcedUfUVZ zBoiZ~49875j7v)?Q-cq-TM|3f78f@@g<7iEjJ<#VKCj2VYsGTiCFgNp0i{w~6Btou zsd6W4Jef!(T^So35D;K23(NNL0{8iu3N7xcxF`0p>vO%+C0{FVtf20qB_K2t4ZWzR zBO@hk2QOSi>QvQn z!(~_P3)N%O;M_cU`SRsJ@eBQ|BA&{?c`wX)+t3LW%`#Wc!R~a`^@XC*CcWI55tpS9 zMmk|fdHyI^NV}%TDt>f#l3$ZhjQp`XN<`FM=3vRGU9JXatQ+<Oqx z6=g~Gi*8s*wV4QI^Z-`qwLx2a`R0g=kjsX-pRv1vn1S``RO>*FuK3H1Yy-;&RqiIr zk0DM4sbp$Q+RpE7j`l)4>4wlf3`>ihP^&C7Y(8&jXed~xU2Fx*Mc(u{FH5r|0rrZk ze$LRqV5TL42M+4W#zrXP`h344xC8}F&1i5bL1sTPpA^l47ZEs+IC+_aLz?r+m#z++ z6racbu4X;haeZzWF)H93gp}&b{cjB+B4L9Qa|{@yBqe`ttxhW!S!mU}2UK;GJK2PA zK2d=q9oTJZ$HD5dTzkO|Hs(Ud9jl(iM-=Oe!%r$)HsKx$3tToWGPTN7_V@QAMcqpE zHNiaB|Bn05!O>BMkkgf`|0w2;gX~;ywkm*u?$3{}AwKu!KFrIsKM!Zxo0SPiX70zG zB_$1w$ewJSY(N32kNoM$$jL(tMjz$b;uS>Jeu~fbWJV!T+GVli5%{X^_QXepZaen4 zq@)?JGCvWXhYLY+qK_dOt+nv9J%cqi9VkczKmQpp0xLwO#>U2hFVCZ3Lq9T6pu)*{ zI8aXmJUvl-=6&)2Ou$eCErQq^@mab~!#{2pd0kS0Pz)wm0wbrx>X^;<(}kE*Az-s?t4eI&Y^}r)EedY`<(v8#&6yiPa(D||D?#GdwIMb0Sw?I z|XMSE$&eTvQI)3Ws z=f{b(4#5b754dBbmUR;%F`c0G1MZ47EZApas$$CQ=BS4%poVDr#V?klqDT}6;D`bH zD|cEg@HlWUH1AhPk&Cl0o%;Ua92GTnYNgwbDPSX-TL$m1%S0x968Ad4IY(WoC1(R}MmB5BPyJ1l3{P^v&R4uXRXqo2*PUV&^wU zvmxLfKXoyln#bsN)>hpmOBOaZ4B~8HtdIC%M+K3`qrut_bjUgA?MXZ`PZo?Ce|$z$+$;nx393sx=vGgR1=wayiU#vSyvz z4vWzMrSW~Ib|5&hadOI#U*d1M`2{vv$ZE_JPWn~!K$%1K_}{`brPKs4&w3l=W>FJ< zH7gh1ou*4`4&ydkn`y_+H6cSGdDeQRsB2>ytzab4(xEt%LJfQxmxZ4RfLW0s}t z8HAhlJd&o8nFbC%u*3Q!3rER&KR^3j>YI9RI!hpAHrCfaLZi`wm6qUv(iBttghfP{ z8gtv2;FJOsvGciOHyfOxVirq5cE@QY34x1mPhPOTkbCt!7zC?g@Pw{t>)DAv&F~x#V&1L{4NqSTA|;ejx1Xf$-hLno3? z%K5KuVrMZ0|1ffJJam8E#~1b{D}dlg#xilAX9AM4m-p zSv&^^E42p7!df@7-V+wKNWdY>ww_L*-cN%0>pEeXtjsQOV?Lfo6CIbtVW?w{_Y%ge z&g4|T8Y2elcPZvr$tPqQ)tRj^?1h%x-5DmfXD5;i+L1dzCC-m>KkvWlw(_AJ9dN-2 zVQa>|Otl8Ny5UADd}Uu9vOi;?w|H>GCzF`tg3ICE*Z=2TmF!U2nBV>ES$>Dp<8{dD zD$ect9N3Pwx<**d;+P<2oN{`&)=eV9jSv0sV!#+SNkTeidv=%V@ICKVqpCYrUq07CQ$C56R)TnubagB;R+H7Q##!4lnL|u&;`d3^;x|SoklxkMeI7 zDa_wud~Xw1z-v;Cf?cUPT%?ma9-O{(>=oN-N|}-ECILEx-v>L^`%C$YTrV_bl8Jt1 zOGA0=?Ig_wF3q2RetqjsRb(bUe!K|?o%Z&2!8&l?t zRx&V1LNag23``mVu0-;hU?JXUa4f-nR}WXLc(0B7cVL+ib56N;ubn&l43HsRT}o(d zw`q5@pp7+M(bKO-3!k;$fAQjlpFU6_N+E2@z)>B2)Ss)78F@qZ)o}{?4AOJgC9z1} z`=+`7ta$=k!2j%T1R{1O(0=j?y z{MzoV+Q&ie$;!v4j6|(w?y3w(@8^JGu=N>)z{`l_D6*qEkY5oWJH{d?SfYjm;Np+@ z#<)lHfs3V5kvGMg3`4}EUoq(l=>8e|+SJn0b&|V09vBoA?8NkR3ShUHmn8I7KKUA% zf<{_-Tie@BriJI97{R<80z(Yrlyfz39(z)3PkLq^6jQb247~wl#0CrT?Hze1q)`P% ztuzQ70+=fY(pY0#VfbayM%|?jZ>o(w_CixQibdYkp+|+>whP`-Fl0@~y2x5qtcQ;O z6{iqM0t`9}!~&97FrfjLW8~yi0a`<7i^;N?YN6&c>6mzzjbJNpDs~~dxzVbs?ad_} z$tB>A;|0+d%{E6`X8|(Ph5{+ZjebGp}TE$mztUy(6x!5 zjjpclK)F*smrf-IP+$m@#s&umPw?&oCePEzOw*~_C)Y7+3T8Eh6#iEw0u9d2Hk?WI z@PH$LU+?|6S!lC^Tlo=lhwA)!mGXO-%b{y=3!V@1Z*6S}Ze$?r z0+4BdfMLTK7`P!_g*==}imx&F;z z+)-T27o&$+1_x6@;v=q_rP&VbP9Yo#B-=D>3T_|W-w=RsJF{HR(DtGgz&eC!{LfF~ z2qtrMESB)6&s19=pF9@4`ZQ{#;oKq)Wm_4;D#e|;qtqBWgx1H8UR_(>}K#N8d} zQTWM=ctTj>&C)up0^!<3p7wAKzQbiW9S=jn@H>ZrfETV=Xl87Cmhu825J+Ef5md|8 z<{+_QKAd5VoEVzqbPjFHFaaVw1@;4*o!wPg(T%@TT#gfD76m}7J=yZn}BjWrS3Q@4HObUOHlQR!_ZR@!j9{};eN#U z${xK&7w?cP-QhJ%YRO=qN)Ox< zgQ_JDCzLeVj9VPWDd2oyLWj3veVRVleLrH4{cxp;Gu5s*Ib&jksAG;v91cFop~F>Z z#yo5v1%vY*4%XD4-ytw+<#40#@G1&DSs}N07A`Fw`S){gs*Z|HjKdH_@ZzI~??E6d zaOQI$`F0?$mi6LS4KX=`s3xRy3c$$&$4^N|7cj*jA`E?{uxe>EenZKm_DF+bNBn{-9J;0KL1O|Q@sc@0P za-5g)d!d@Gtqio&dYi|-qMYbf5`w?|#rD-85eB~z7F`GF$>YGlKm>V%vrf4p{_a^v z5}HQH_E~N@Gb}KVdZlKXhO+5U-wdM_70&nc80OXM*CCOSPeMq;WWsOU10t&D4e2>XG|(*yuowvm36$Wx!H=D9FGFtPLR4#| z2hPQz@wHC+xZG}H07+D9=yVALl{5&gvW83o|06N=^YZd)Hp({vGUhFo3OqjJ-!_jV zB9h{mo6(Qe$Yy}ZK%5t_o7s;OB~q;?n}FK&L0&>Q`e`x`E5n2)r{T2{LO95OV`QH- z5+h3|o0%9Gc8IRMH0K~?j|akA3VWVIE&k48u{e|*Q~}$peI;RdR_%GD)Oyl8)@?%_ zy}_glKxAckx$y-ZY?^vzk6!C(Kmtu*??QHYVdr6IaGtl67KdiMGQDPk-&w*@h~5w))g*`C0FBLr2I%CMhs{(>k&P5~%F9qmhj)RC&OXdx z8wUpmP39wbjJuN1L6<63009AEG-I3Laj-u-TIF%2{2XjxZ?1EpTW5uOoJG~M_N$y4 z1r7K z&o?*MV3jPMZds?AD5hE)CI$^f54oq7L-7Nc9O~fD6Hhzcj)ZV&X^6ONbhU{cWB~DU z$8XS_KT|zl0=OM4q=<~EP+>vPAd~<*`Tjdg{q2LS8n&Yokj2Nc*H;``ax{%wBl$`l zmlJ-(iE*Pbva&r`CMiZV5FA1N{{9G*1P(MEE=MC^5#1EVoh@iH^$ap{jdI7_agEB# zN^fuP4&V+DOap|dDb(}4{rr03@4cp^p)qZ60rJ3#39zqLadqcH;2pANyLYFke}@a^ zs&N3JBY*$?D@a!r6cm&aCCJ~tdGid)IW#~4ARrJ<>#)mGg$CrMeqN9KX!tOY6{`Y` zsi&t$NlBR$cWwGSUU_BN$FEQpRr=XfF2<9Cfs*e{kvmc=C2;)F1vyT8hSuR17f%R&8{ zyxjQkVFUMcXzzm4VNihA3eP?(eR|c79!oon8`64LcT}zP3EuGHRZf|0JTuuz3m-yY z6rUgAG&GP``>&60K3-YD((r?));tWA?0Io!^YfDke88iWZ3MX)aPech*;U?4<@+NtR{aD6Ns|7XNj2qEmWzjTuKf|CpaSK7V!|HX&Hej} zB-LCUzgPwlkcY4<@oJ3MF}k`6_zoB(;&2d-J}dtyLh!#ExU(RD|D(H+9Y03cF&1ms zR9HkxO2U*Ma@~BKri4y=jKs=Ihhu8$CAitw>fIC~ZFxty&#Q*{d)Yatf9Dt|WOY}_ zCG^glUsH#pCAt6oy1!nzlx%Iv%o(9OFjAP*Qc48 znM>~etwxIJDwz}T`u+R&n)To7>ezUBm5{PBlw$rakB3A=s8d?P5Y>jXB5bwaCC{9} z78SLdJXQHm>ELedxY{`Iwvf6A*Z+S9uU}PgLDYp?uEk1~<-A5d5W|iBL-6`RUe6$8 zD+x@02h`vuSZ?zios-EU>K1q@j3jsdBqH1`C_XdxV+RD@X{(b8f@Gy`* zFhg~Nr+4*#30>78niXsne-pZrKCB(=$H5KTLo$^FZfph${9V8tuh8Z@ENP<^fK7|` zQ%zNPc;v_taD-ePK5%am;dfLADxM6KDzA+7ju$_q42`nd{rjR~do~>??#Dp#uF@J8 zYD_}P$-odtJMHS`W>~24@fK)U?&eC#gh=>@#=2_|GF2ARnR0<&NYYiYIg$>UV9yMq z!r@{P(!fXsU6&maZuyL0|UIBfs?p78g^Ya_|+>P zS;g}6oEk}xv~LApzhz@Iw$v7X)zZ?kw!Z!jRp{Tpj!;L3 z>@Hm`A3`Bz2zOO*<@T(H+!t_6ZzqM!dNSIfh;FyP>xAB*4*9Qi4NCEfK(88SjXr_u zCPc!fXCi0z@h`loC!eh;lUUPi((=bBu|Ru|Y4Fg^B4Qlzv%$u1omR;Gl-a&c!8r^X5%R z#5x)Rukksr%_O|1K%wO4N8D6}oRu^xH1gDZWM5<7)mXzts5Z4}t9@jfg3Xx(u zP(cPxeumeIgb*<%27_6_fvnY>1iw~BaNd`7e#C|twd90R#g@JLeV^dZDy8GNv`Vf% zlzWfEJfXG>Gee)!FF_$CA= zi(%xOb%)=S#N;jMY|UH)5dGrY-Q97RjwkJii(KjW>79I4)W2EJgufV^FQ`J{ZW;Q> z5;+h&yJwJ~&3x26a_SjTgmBZ_&{7~~Gx>p;(ZeIL6Gd26P5u5`_`aL0S8HY%Jr7f@ z)490{&7q*okzhVDUz~XpR)7&Lw#VqU>I(}2Z|-{$mOwJEElVl=`ueP)?b$I8!lDLr zvjNw^YjC3I);lx8n%=dUl7yrBETA2YGA4{D5az}{Ue6GAl*m_>=r$oKD=wj8PrCM~ zIOL{gQ0mgzP%Ji~O>{^4ksob4ATXQgI04JpBdIWt7AAfb(-BRwlRQGC0YN4wn?bwL z1%+@ZO{W3{xU#Zh9i88A4&>tTWH`zM(*Kj~)6At80 z@CS(a3-wgPW*VcKjd@K1taC#Y%m@k_l;_Tgn;<8R6h3+JLZQkX0W~Q{R*VLibU%Ff zuniS{r4(5@MCAlbm|&fB6o0Fy0SuO9+0BOkc?F-}1`{3%H#sQ<=yQDO<4SQRF|vi1 z9XgZIo1@%(CVH^ub<$7NAP4dBgI_+yh#hb|@4L*Y`3yeEj`Jz- zIizq8$Xyi@07M!F!n=o$9^LV6Y-;KNN0tcEwaTjJ$rd7^s*I7531NgpwKal=xjr1GH4ENyWqsX_)~q`%1Zv-( z5NQrlMn|MG^?cW*!{dRNG^=?->X!>NBIFnfkaj_h{mHW}*vb7SmnF1eGp0=hNSVtX z(t_Wvq7j{n(U0g<;*;lRYTllF>+S~m?c57k*c8a^8sqNtKzcHD`wL{yK;y9s3lEu? z19@i79~BBJhW8)fvKI3#)FwR~CNuK*jX^jK6aHX82pJAZD*QmRXwS!+MIp29c6xMxrGA}zN&b_ojTMU?UB>VpL&8raPh~3#b zV)fw=?lD;S*HvJmSicO}cB5(G)V4@(g8%eu4)>ULoO?VZNr3tImdkock zZ$<`)?_V-FOjZn1%~bJiqqw8VdIL4qfNN>%A=9tiU6BIW&h7eOO?M=LzQC>B1u_mM zL{-9C!44MzqBszLE%CH$}NmLb=#jmv-nc;NPx@< zk+*_qAqy(xz<)>rwIC3320TR-RI0E+IBFimlhA(T%qH;*?|Xmdn(fL2no}(&zIyZt z$O!2~UDdFAvikiD{%`{z6a#-kdG_pY+eHmTIsx*BXg^Svu>tIW+eZrWAR_?S@eJm| z)_bbI)9a4?{8P}qp^BL}HNexaEfgu-9C<*6lv?!$s6#KAj8;~_syQf*Mq#llVfrut znQiO8^;{)-u%0MTJassX_HSm%t2|XncC(rQ?_bJihAjklaCcpr!-L$ii)Q zGe7TvAFI89K%Lt1^-!h6cWZygA(UD8!ifWy1cEzYFRZL`K;NKu_bTCP*sE^ascR!H z3K6%!c@w_rONi7%{dblmD=RyA+AhW%E4EA4YF7gtC)4%oQ_hP3@eMkGAFz_D_XF7} zhP#p_gwxEHW~>JS%h1g7P2!4$8*tMRP+iT`Vi(y62O6~E^C>!0Tef&BFu0)xC_5;B zx=);_53`_5J=lFjBiK<{QYm#|=iCCb4Ay;LePxwLh)({tbfK3aq-BUXb9jhueRfzH zK_VcH4ZeeE4@w3I`FG|F_!;jmj{|m2ZI0GB?&rg7${8#o%Wo*@L8-IsDH$xB%*FvS zqcqj*SVjWLPfFT&GwAo^Bo59GC@*y-9)LSwxpheZGh8Nx$19}BZv0;P^9@Pn8a)&A z(`r^gyE^lMIX1wcN~+I?nnwu~Tdx&iTuT2B=WwNVIN)hby8)O`QYcb|nz?~oN#YUQ z91H)!mcQFO!(aEC$c8?q3Jf2>q!BU(;zP2K-7M6()UmuaQ_>3qh0SB2`$oMro{|O@ zSTBle2sTa%>~*nZnjQ=k5zK)E7SXvdBC;w-A9!wGfus1V*cR>W9|rZ(tg_L6aF&OF|@m8(jSD@7X_6?WF%I0R<`Vc^b$zQqyjn`n_ zUJHXb29JVK>Qh#alJ`>gK|hYT5*v{s(A9ynstP}cELSBp&%9jT(m*$0v76vV5mE~H zQd8JuknUwLvWkdkk&=>nfBe{K!?6Opay=~4bhK(^$VMSm0c_Mq7XSu#`JY$zOCyD&pA|nmd0sLi;?RI^_?eviSgY4g!r&SY3Q9yqga8zz z-b*jyj7VZ7>H$j?Gx0|Oh=!6i0n7O4H`Q2!oponvfgfpA@TV8)%24M?L^2G@G~Y|O zy&YVCKE$7k&A~2eKz^q~_87vh`h$>yKGdr_m8vb0YA6MZTzAV*HxQ{0nnI;fq8>2} zTOethL($yjm(@9t`!Z}|(#29jV)cmL=>aIg5uFprbPY-tN1uVv=yeB-I#e!b!)R%V zKiF@BLz**I&fCZ6_&fz8@diuNOmc>xBT@w_|paT zlM??gRQ*;G3lu{NNHbW#_`o}W95r?WdPD$a&O%*RR-aim`ZEwU>kEUbAOP(I{T#1J z2O~M1P{C!(3n)~0S16|fkd8qjhQutlJGn^BK+S@P8sW0dZEbBYhD-}he}De~s5y`k zQIw`Zrd63meWx@K{>f=ek_%d~qEVig+FW zJVok8*se5Xc2Eo>%0?(qr9CNHY;^+@s-_%qmP*snnH}nf<0}|p|85ez5cDYQP{K&S ztK&Do^U|<{)5P*u})vY=9e5736 z_(ybLRaI4~{X!b(d(#Qk6wt~R$?I$)F$Yu(ZEtT2Wx-rAvHJB%{$iom;^2QQJso70!yM$lBdkkno)}A>t5afU{A~`60!ipquokih5%TMfU=Fx7v4h=w z(E4YCMA8)K#Wan=v{?6Tleb=8>A>ne+$cpVM^Nwqcy1j%2>udc+%-8lIkfe>&Hv8- z={ds`XpLHts?z%tKvxw{Y)DPQow0Fnw8TGP@`8K^#1OLp6uY2eQ(!%b;jI9z^JPtkh~q>txmdDKnu_ev|$N( z?3XjL0<@6|#2Tc-zl;*_Ctp<<UK~J20tle4w#JF+0Q&${O@z)o=^6ttYZi20 z*m=2Q&0GS5?61%RzbIwv%*KBjR*16T}Fh zS7*Lah;_kfREBad!fpx+M;pRdt8Z9VFp2z)U#lj9h>JN5Uq&`T#Cc5~m=vIWvC}J% zD|r6?GwiS-rsEF6z<2{BR=DpLLv@3|>0CxT?>yfb30WKl_(Cw|V5mrsv285mw`H`% zuselsd^+Q4cI!Ey7H~vB5355C5(oZz{x&Fs;5ZdPmQK_On8e}CIem|*rXV>W4q2SQ zuS3$FzOz)N12xWGq-z7|8}Qg&_CnOei2Mi2wi1s3TrhQk9%89VDn%CUMIpuD#^}qy z?c_uqbBb^kgbYS9L}-f%h1?xHa3T=jP>9D6k(}-ViMp>Jn1i&%f&0$u%l-^uvatmh zf`gbB44K&HJjPAC0%Bc$6i44h8x7RtL7i6yq;2#bT$HWu)%ryi!(cwyrV|Z;h=eK- z(g#npRym7I_~nXKKR`JtE9Bgm5x z4ZguTQU=H)e~YpO{=@`W$#dJARX9I7ocmr^F5)UNiB!4@TC0pEhU_js7zkL= z9IP2O3CM#vDDfcOTcF@r>(loKZF1e%8!#&tkeoJ$_Q!qrJsGkY2io6X-*8<@tU?2o zlr4jUGi#_U!+{!TI(&}cVJy#oq&RlDi-yfkDn*;ZX#u z2Cfb#w$w}%f9xp*a@{k)vSQGIpey<9#S{$YM9|gk)4B<6jb$^ zN+xz=K5)ci6xd|4ONZ}46p9oG)A#}fX_dFDN*ax_UlHC}l^ z+G;4sF75p>;B02NqU{YCKc+N>QppFWOWw1${=%4}1vRA~bDUYYs{77|e0+6h-0itW zROiO<=FYJ2V$tCAmn~P((YDQXHyy5`rTk6O4GF@`yFiG%y=`VPiD@*lvFAh0`_dz~ z{u%6a*d@CwD<+@)i2Oe@NJ-#rPthpGtVa?~QORI#33_1;31Z};0Vk04Fic94go3<8-TD$p zrMCZwv$A1UHtZ!$P|j=thK&6}yYvF{ zh_#+4QzLnXGL9xc?>aAuu-;N&Q*LsKBk|P#2bt~5Qd=}g7o5k*Qy*W$_Z#CP`DAXV zs>rOYG;Kwm=giu7pAQH1Vz>URQfKE`s>$LuRJ9XwPw~~Xw=dhxU0)b73B61&wAQmJ z#i}Yh`|~R;)<9iBBa)i`c>K&Y#F~ySw?8uSLzh^CYAXDb=El?fGb)~gr0H+q7Rt8w z98w=q;2W7iDJHYzT~R~kIY=RbteM3Zi;z->FxlvU^IW`DM0eePBDu@T!ir)3QMI7! zs;XO8Gf+7sN5Kjk@(XzLzgrcWb~JMvoU#7}gcjks08-z)q@wuI4#Si4O(;sLQ>2iY z7R|4jnADxZ$2cTS7^F&F$T!9em;T5)b@#D2vZewH4QKKxnpz@^JVHd>S`=y>Mi-DD zD<1=cu@VPqMwDeF&fCp32~q&y2^NdL^@ki`nGOGjeKc5P*_-Gun)WZ2N0@(Tkby#I zf%zs>=nzN+6ddIHst+E#IZZD-lazJ@Rcyzu8X1G{%?PaX4Z>oRmd8oiQM9kCu_VCg zAyIy96hzzz9szHUgB0dIG+I0c$D6k(1td0fEZn+vs{k6zfW3Z%w5x*~35kxL|1Jk> z*xJ|-AmJ0BQ4nyNo;PS#D%93q8D+tIinRGPqW?nZM4-EEdk;eIk)Ax+3BC>KJVsIo z=)F>arW2%>1Y-DECX6H&(N94I#T2@aB5%J);1L4?M4;g5OX|~Kp1xGd2+vPHVs$6M zi;2Sf0yh^LSZ1X!t8f`?Sy@?md3i7>(m)#u(bwQD6&kAkkD;lsP_LHEtLGGG?@JvY zdw;lD*4>-EG;fL;$~wW}^fN_{0f`F;wFrC!(z6EK4e~SqZy%pvP{N(2y&VrCC~%^8 z>gUA8#S5YLN~_$lowS<>Wo2X37V5tB(0R|!SoP?beO*9~@MpE$1f(MtX$J@Vr9Mpp zeK>fJ?wDC1` z1wH=t>lfrU-Xo6VpXn$nfV(qAidj}NyJBh{gBn_dd-?;# zqB%h85T6b>A-O{3`p|~RN4T~V*Gkjl9C#X@*77-4@#HL0hIxLYsPna zp*PZ;J@5$Xsb$pxmrOLv`U3l&<#TG3K#t?G9zqlkmVij@PHJSrTQDH8-9N7p$V8=b zYuMvpPraAH_0K&g7Z<>sT7ueD(DjHky@7PC*DVf;2T!1=ov#Cj2hnolY^EXPg0GWz zoY-IpId}G~QXCcgiZ6Q8Ngi+}qVj_#An70fC4J8zI$Hf{+ff z+2@RCs9qxo7!Xr7Gz^&nodC_2F$h5fO>{zAiqJs-eMwkD^tDGqWoJ=05VL_+HYnAn zLnALzm;oXh9)`e>3UWATqD>SQZjmel?8FY;0|+&QwCba((ow8j?0ryds z_y}jxne>?j(2B7t5$d>&+RA6>{)Hk`EBO+1RK)@-Fzx9Lz9;U*c#FlxsiUYd3=%-% z-)j`frfF-@h-sI$>pk>3jm|ehUz3pZ(1<^aiuSHP3I%=JU$54NY^J8eZ$iVy+V77> zeX16a?Rlc`Z!ge3VMYy|cu9=%ygIW`gnLbb>rR(hLK`GOJC9OH-r9VA$Nrw`l8kil zR9hHQ*IKtzsfAue#1B4f$*#g=S6Mhqnf8EZ5|6xb4}-ZS!W!pp`p#Qqzc@JHvM>Gf z&>QX>>c*<4QG#b60)a#KGy$3ASO5fcqr3u44cl#o1h^_M@cB67Fuww&*;{)T(S(On>)Du$$iV(;PI2Xh_f~abB#Ms8JCnZP9oL?$=RJtUZzx8{4cLNc+6j*(VxLu|1 zMat#$Yy4WpP8J}XejO%WB?JK6Y%g!yUUzcgLQx(^f||wsgZ=BSlHjI69~0rAP*sU1 zZaj69n!3Y>y5sX>qxU`0f<_mdT;@M^q=gi?6!AXw?4NIMm2qBv2->#Q19OxWAvjt< zOTammsg^*~-q0_W0wUL8!&af0pByfgJe{Z`X0q#;KN}`Od>jKU4F1A;Q`zOad2VqO zsH}HzDyr>vck|&?bc`NYywgV~t1@-IJ!z!=s|6Jl%>fldzGw1QeEsG|SKa;Ti8tvX z!$M3+Q(WR5Dcik!MsYzyl_X!_-3%}Xnv472NJp`I5AT)Uno@=Hd0;zbG zmV#P%fkU><$U%B`(u?t=_QX~;9TaN%G8nF=f^9+nwdU#I<_>G>*&M-(PE&jA?R_ii zYAEY?acrp5D#EKmXJ6^+k5?XIsOoj(@NrFs=^Sb?TI)UT2B1#*4(HA9@|w> zMoG(2v12h}N`mTRAl!7_hjShC{T=VmV6!bZ%pyKbT6*x&30$+Wr(=6{Kyw^iAuT^wmOP?Lm_c)st`gxgP#C1`^w4y$ zXZ}IlrDm-A&VuRtz$8((`JD(9Y7064#c$N}rTyyzt_W0a`hWXo+RHz^Sfvwrt9I@4 zG2-FB)cjEq*=K1vpjD=7;0TJ?3t7(6lNY4>X8Jo@cuJ@zn<9`cl9t0{Y7jrUhN>1s z?lUDyZ1hx{^K$JI7p?xhjz7PM70;on`EoLDqN-E5bV5fQ#b<}Mw$t6=;Xrb0U_H^Z zL2@lgTeTl!v`A6aRP6v*t!SEWNs)SaMWI(ws9kCV*`{pm+TaH*aqDx0uPMVKjPVBq zUIA0JT}kR+n((jh&sX)Ra_#3>9?XhS=jt;m+uF?GI425?29*certSCP`95e)hh;Qm#Vm-dxAp5phjxA6iTVrlg#_C zYL)11+{L$xn|4Z=c05>Fx%F#O=ipY*?6qsS>DZu1e!gEg8)K8-5Ad-r(%h#YN7c*c zXtuUL)4+A*$~}10KrhH5l(Mx&jKhfH|Jeq8Y=m)ApW5nbW|8&Ml@jWm%_yrp(-2Aq z%cH(=aS<$|$-dA4sg&BW9v2wR0To$NZXMSv;HQ7I#jvk0#uSyJs=JqCeuyI8^TGy{ zlE?j{v_C@bA<3dLzn!gKIdrPl+96COD_F?3L5JL7l(XW`E5RQzK^qG^B5c~)0tY_v zms2fuY@&sjppO>(2(WPbrbH-8H#qoKy5n^bjej8LfCv}sYri1vXwq5Na-q?7$_G?U zyq2*M+_%g^q5IZtZh4(gyk_OwsE+drdZ&vB#j@S!#l(Oxics8Q1Azt*eb9j(35AxZ zg;)^z0UHVoyBuhMyx+e^5OIvsO_WQCWA50f{((Es8`HIC;M_CH`CN;)D$G>RNeI~k zMi3DHvRKx(memqt=00#I19Ht%$3lfQ3Z4Z*!3%kgl)vaUM7fN1sP^X#2Ze`!266}( z_h-Q6L1Tv>QZ9h9IGdngKRSe{A-lvzrcL5tzhilvcvDm{IsB7Sg>!^*0r0aDzF7N3 zUUrX){Zgj`?TQwIzXAW4^m6eqzfmp%Y(gBgxH<-fA$aagDKvFv0-DlVtppBq78)44 zpq8lg+hd#`7+yes%H;IIYEai{S+|q^c~rCa9XZrHjIyzBj^*F)NzVr2YQ)i^G4r;& zX6dSIe)*sDZ0&;)9gmQW`J2roI+p9)C{O*vU2c30#L(RC)~cYh(mo5Qi=eU(%hy20 zjs@jH0zALU3_ztH3za7wDDkHJcr7h9Xt(gp`BjZl+-N>C47*A=?#+Vk0B>Wf49$(P zy3J5-%j@IkRN#)zykw$49^3p)d7Y-JBQckl#85XeX zkLB&3Kjjxjt8^~V-8@0>sYNShalK46gN0Mebc2bM?ABMkUatJddPd>>B|IKWc8k%x zZl!B$oxP(>^q@OA0%Q5n3ML>rTfpzglSGjE0gzB;`@37vsGrG*pJ)uiCV6^#(q>bf zI1yl|j#R?L=Z*&m;PFP*J6o$p+*k!%o=&!Ur?j(9#lW$s?e*4`imJWPqRl9t`i#GP zj#m3-B&hftef4qSV(4z^=e8H?rT1}s&c{8Z5 zYOlvU(s4Sbx3Wm)5)ZH0lyrVxZ=NA&AVFI`w7X+y5Z<_vI>b!C?h<)K#^|0Nb$-4ngIzQt+ry5M8(AI?a<46-BtKcH6YBj;8>3l z^Y?uTZ@X|G3*5@qQV!U4I$;i<#EsPTptPU+pHd{)vvxr8*-pct`-PkkL^{wMRc5U@ zTH#Uzr;jcBlKHtkDEH?l92y=`=x@HO&Fp+&|+c47TpFD5bgRsl=bgY9*rn*9Tb zNMJ+SzhRjn4>bkV4Dxsgs3v`edK1#;iM#}r-VF3A1v4UiJV=U>uSxjPrb3kv)O_jY z{dv&g^*Kn4*wYLx&CBlo_H9IW=}JDSzSn6WQlb*?5y5jA$~G!2D@~@#-gr&#?LoR= z3Mtka(ntoW8PaF>0COho=$01 zT;YOikOUkU*4v$^mOJmU|NCTq5qfH+c8kx*r@$_K?fbc865Rc_(VNiUzP2?D$YEZA z0#(hB+gWi^PgSXUUqMlZq8=w@6t?~GLOui3V)lmH_ z7`3+0h7iyZ`V>HN^C82l1JH?HG&&v|!w zSEQN#>NQaRCRMt%Mn?uyo=bw4XPKh4fH=lVC@UF=egaH<-5l*@t|jUs={jOI zqL-_Wg+pSvvK&b7+;HmL9cSL1xwhy)ZRf_dIzSK=2bJp7>B{Uj!>z66p|>GzaV{j~ ziQ6a@9LS%Znys*|?Rv2o4K_CwJ+Uawgb9~nqF~?`K|_1vWRqYS6lgTh zy(F$CXJVEDQCXBg6n)^(hDfH4&i2$L{A-F9k%({KJ36G}Oa7nk&NQm&b6ewRrBYF` zRZ$UC6ci)^ipV6OwJHb#4h&(G0%26pKol9ZRaysBW<?))mw`sZ4{p#wpk9kmr8gKaHYx$As_yhEL# zTAr`(Sx8R1_+E|aF6Sflg_rt|dbV$KS2IgfD^=gQL3hGSDpKXbZ|Wr!l5fNp`8iO$ z=P!{L@)OlY!lakDZc~ACVvz!50DiCtC&q&i;taIWo=x1j;#krL?|RTlw%z3Y1ER3HvoF?P!xLP6 zMqFuami@J^;09BRnZI@kpHE$>eDeptZ)|`zT~Qs)59sPT$hp40c=D6BzmZo9_tzU3 zIXyjg*-+-tTkVpz)em;AzY*}!<9z)7WG@B_U^F59%`<_N4wA0tz9AoPFxALv)$~o_ zt-gC$dGSwKy{(&tcMXM~r-L+frY1!h<6Dnz%(PdAd+@K(?gv}km`hbmrA!XTB=!xL ze^cL_NxPe~#qEZJyx7;Yuf-gjIO@>{R1J1iGe^mqEBoe+b)7@055MGN*U`8YgS>{3 z^8AfSoROUEBUe{29(!C%{Bx$IOt)wY$~$W0HMZtfk5DRJ@P~8;2Wct$oRj7_W?oNp zVTXL-%-x10hV~+x@U=acwV1YfwH=Y|vG+FUs~}Oa8*e5*Tyj}0?e}=K?g{U*nXVC5 z@#ouAtK~?GE4>jc=y44iGg`3n`qF|IktL%o<|#f_!>8YV_oW3H(;lBW(&fe!6CB0a z^e@jZ(uP0dq-yQdIjOO5^|qSvg{yoR=jW1zHsO!i+E0I9OdGn2g66DmOx27Z{S4{F z$atAacgP0Om+sFxhwfc>ct>xi{6N0=W`wxk!vI0;!h!B!m)SL!R-j@|z2*IMwz6i^ zoJBQ-({#8wQ3(fVVOU5v9Y94Wa?g=jvhSaXLsN{kX0Z)pAPQk`sJYQ^Jc&;@%hU-( zm4-}{cqU5HSv35CyNl8Cd9g7|aF+LMRqv0~lNF|**i|-jERyY>J)IJW@|0*|pP~uP zaB?zhx)k}Jk|G4jD_&^&_2gNPpip#rjOzJn4dxxaJJUel0UDb0lfG=xIx(>w2X-IX zdCQr4Fx!##UAIFKGtYaV?9x!I3ZExvHU=%{{L#BwxsV4d3x#uIc>S3V$IBQ;7n=# zQMuQ)*yeQ4EOyz;q9Ml;hA1bI*>2ah1;?fW-MImVzsK$KgcA6&@FQd67gV9Mz;`}-vzT*X!84m4pqETB| z75e!@a6HUqp%c{*uRHJFqOXNBO;<{a{(d9qi|1d&$K=Z` zvgxVc(wAAAss>5eR9olCBz;qUU0K1K17D?|e94&)O=*>B>Jsy!3?{06#WgWsS)^O4 zxLYIt*0X$$bUtg7U2SnJ3Z#sI6J__@&Dk20;j^$U=h+u~tS|BHP{Jt-*5;>;_7>nw zG)N;$7`S~~5?ck~kKg>+lJ*Dr#gMQdk&_iRbZG_Tx5x#V#Gi1it5Uy38?XflK-gQR z4j#yS7eQAiFBYR%d*K;z)ykaO^S`C1^ZGLFO{$}41|~nAT_Tq})z(|Xr_M~o=lZ8N z76$CJbodJ?V=w2it{_a_^4L#Jb5-3x9M3O)O zd8@~q&(vrif6MR7eE)*OVJ&BLha61Stw%~%!yUB&&ly{c=APvv56cx@2d_k>gwlmp zS$Bg2`~Q%-3!B5qu4@ycY;UAQ#QfAx+w}Oyt0l<^%4QrdTqzR;s*(ls zA7At2uYY?Gwzx~T&tG%215f@wFC>&BqpaP^v&6mJRA2M3^(llsTYXy9W7V7-9~#>%SGjM9_+v2&yXM9Ii=;(i-u6A$T*{I6h`TXlM)Q z@ndgjM~TKCNWpzEO7h0w#*`9*Ty^vYZwTVJO4O*B6xERF0v-z-&`Euj%?BnB`%YK~ z7q6J^eYXyjwaY8k<$1_=o=kne=O;4SHuVTx3?RSX;e^}}*o&$)IXMnBRaF-Fj4Da)$7cE*-lj9F2 zF7&`zI|MPz#>1W++MX|$EZ!HV7O%_L8gvs8Yh!k5u5aqruu>fwXUiF;wc6ri+m1#_ zt8Fv9xK!hodxeCsq4HjN4K~*DqZi7f_7W~Lo+7Z=dhYQj9OB&0pI)%~*m-YY9>0_6 z>e3m49ccb18I3&`E=I%N`{GKxV@MNaH`IfC`^w0J)lrc%6!O%j7TFB1ft>`XgW_)& z%HD?nwI4dls2I&+0lY86(7*!mp`fg&s9321*S{;9honmwXZ&~6rjTM`CqreK1P%t{ zP{3fDB9cuj(wfqv`yJBlMK7}HbdBiucDYy6%;QU^+vd-boL89s1S@C$00l5t2zs~- zRiWP6;Y!+6V4C(Z0FieU3bKl_g3K!;Jzj-^nE{|BjjjT{Hx&cZwb9j~aUkj>r? zyaBil1ab{|k(#;Yw7}_LyeiG6rD*7S*Y~(L?MVI7hBK?;wnLd~Wp8i)Sl^mbQxEOS zD6-aGP}$F$H;)u|iF_5tJHchGt}0t)3iR}VXAySDnZ{+yHlXa(Z%NI+T0Ml1R4T^l z(Sl{Onb1&mkdxE19vmDbCEezNgoNcF6YT&yumxG7*tobfm{fppeY|6K&DcQwx+_M` z&h=--e}zIuY{@Z-x6j^fNt-Io#&Px5geCtE1`@nWdvVBafY_ML?-_brhhLT>Jp%Gu zYr0Af3Yuw7F}*b$FGqaJ4(B~m7v(s(2xL__$4d#00cM0VrQ>R4Mw{%eD_*qDj0z5s z93i2SSj5eUyAs-=9i|V)hocN;>|eUILk}x<)8cl--K%=^7xTZ-3u>kq%F2HHc!B)> z7x{-ve)jaFEt~jdF2_+t%f@pBeyZdzK|zMXq~7I zvR9YBbWb%7o67jQ%ZbhVHhNI<*6L7oJ)WAqQl3{YD&%By*(GHnzeL81pBbb4j+`0r zquuz?ZnB7%4}>EljQ_il96Lq~g%k*pyWdSz4rot665NRUrAZ+S1q)KO!)i+<6(Q1| z;Qz@Vo2+6vmEpaP9z;nQy44Ke!X99e1KgwPxG(S?1Tf#%w;?Pn49bK*QIR&gFM|i5 z6pVqY4l@bnttZ@A#C+Hl*e54v7-|n(DoWe-%^{FS&Xbfp1e{Hrs>1_99_cO(A?%x| z=;-9n-(B_m^!7Pd^;XrL%W}Uk81vhBn?2ksZzdnG!J2Udjz;3lfVQ1DA@JoMfSREG z+z1!~d+=gpWE>O@VCsNF?oB{y5c}2tzIemdz+u-7p|f4zt`?l#yHfAlfse~`*)FfR zkvoA)LQ#Dum^kzs!qHJnT&6!D^Tq_XgU?y|{r9&Z<8bX<_IKKIVFnq&N-PNq;{>2; z(5Mg+%zw#R9{2U|xK9M)SZs6)P4VkDE#x1z8pH1h1Lnv}m29KG)f2~kckBqq8Uam( ztSth1F^kqy+C|~Fj{qM`GR}kyjHRw^pa6pBymt20BB&Mm3JX_$jM(<~^TESXJrx|! zmYQv1fXtN#sB1EYp~WdsKeB}I9z`+XRhP{Mef1iL7F|{rmQ^<&E0k!s7y8^QXO(4m zjoD7!JjEq}xsU$wWd8A(=ucJ9ECSr3WQRSs_8h5>NJvOvxj?$e%Yt-vH&_&qeOpJi z5P~{D^LOjP3}OU0pA%tGm3Yr&ZF@$VtGB>D&djouFoWa70D`e&~*L4jg#G> zUo!Df?-BR`${85mhoQ2_^Lz75cD$ZDrU}A$K|#S+1h8hCt}nzny?lP0;1L9xKI8Q- zL{E^vBdUBLFCaudfH@4kW~*A_joHMxG)3+RSuss0dpAB^1D)D!h;Ol6c%1Wt|!7+!tF+30(=dIKkpnD zJ9unN43oH_z#%%_mweJ6bPWi*jIhN~$6s?r1V%_48t?*>HG+thQ2@vQ7lU|4n?rKh zAp{={uhJpBBl_f*opycQFgWBwSnjhIBHWy;2HYnE*Wf2X?&GvNWaJtFO~ZBTS`@+H zrh=a$8+Jv@w~Gb44MbH0Ty^y)y}l&zdw^xfy0LjIXt}i8MR;Gfq@e?m7BgR7I1k1< zAX!x8X?3#n$68&iury?Xs!2=!f(@Jk1f@4dOC*JD0q?C%Bpm~S5c{1`XL3)zlPtLh zLz)GqKFhFyJ4R&P8CW>2z!A$N>qyZayFLdfe8~4hxb(ho{PhbF9SaU@EG-ad6%XRx zry#_!L(3fEsnXr6*9S?5>JijihK0fgmn-^l1Hq{VAtMmUc_9iid%*H|n6-I7@qquc zN@L5gjRNni5is{mn@7(MC`#Mnxp9tjVU;2BI+Q;YUvtHk)zvLlt)l5|YU7m>SXVaW zo>*DxKKV)4@%+)}f|Ia$7wP5zo}{{QE?XaT57Pq&4iM!WOxmgMba7>Hv<#1oK&W&V zN6oKJM{0}5yUBLwlprt9bFW(k%Ie+}bh&}io{+xr_V(f0pTUQb>%-eZK&A5X@=+e{ zL2Dl7hr>RNy5X8iQ7s+uv%kOblXJC<603H*uX;9}Le`IJ0CYk}f4Vo;TH!T!Z0nJ7 zvB1DUqI8o%c@pj$7AjXpx0445(i8g&gGPrM+En2#13zz!@ieFiflWKfRlQq9z}v8bM3462ZCVhX9^TrXOUrNJ z_jDf>-hPL<2y|$RcXmnIGN<4JQDm>h9g{Q8%56Rt*r1c`-Che(B~ikE-cMJz&OP&7 z9Hl9K+eKmq50D#+=Vc`hOzwr<0DX2K-aP3~J!b{45FEPavy@}2COv! z00XwQE+p@sVC21;Hnxju!}LhsBE;?Fy|_WT*Y?OI0{p!9{r!mnDP?t{%B$+jEFdOF zBNuDnIjb3=14?Olgf_=cngZevd z(EfCF(4!N(^xC`0oH8c;l-SAll7&~w-_Ax2k_o^r!gxx%2=qM*tWXwM4U-R3U-LnO z!hLyQVZ@%p(M`ot3%5wXU0HRMPy^h(vaq;SGKvn7@zlu}x|FS9;@o+KlW1TQ1R~Z!(ad=+44r5);rPY?6e2 zM8%??kHt49v)f#6*(Jody{!@F9&?NEitVzChcAo*mrouKHWM}rw`+&nZ-$MSJ$UD` zFdJG;D~$e3IPq*TUfEz;9Dy{{?#lLIqh@{VTEUZ_D&sgbHegH1f`B%iFl@1FH8q>a zLIG2q4}6lfWcuZ~R{!80Z+Rd6PQ$(fo)Ro}Jq367TpW&xT;9?Gk3A1|JGpF(k3fzj~8QdZ?ny|$-%ZAa?1+AEDG1ROe63&DxjGrIRcw7c< zqa75~I^2flK#k*Xf66%4S!jioX%l7=DQ8+iSB-`mV+bx@h@#`-Xg~whLu&j8hr>)P z1z(>_0B+ldY~3hOn-I$)#$E|uKbPLcqX=~Mv`B~*zIgLj@ZSIaTvUFP5ARV-Qc@E3 z2nAzQfyvqtolzJnhkQme{3g9UI4)+9)7q1QXNznIYzD*q<z)95JO|p<)Sdk8z`Z0IrHwn;>74^B(b2fP$i;Tc?K0i}_^x zAaR$3#4BvKq#X<`$O@A2A0d{8>qzrhhYh^##QCq_iRh0sGr{Jh1`Ki&i+YIkya0DG zb#!87(}98$Za7#qo_ne%zy+jt1#)aD18l6(4kWrj?;Vwz9J2n97<8`G zs>66jk~afpiH-eu1P{K|;bdp*Qr%Ujdd~Q?01j{)QWI}%N0=fO%_1Cj;A8Y6yoL2< zHAw8PGwH;?+D9=hmN%gFXQhkX9&Ixq*2tIVM+thCvrXr$((2 z3hzh5kun8>J40qNew1{ZLL@;xym<f3i%h{L^yu z$*QvCFPkibukU45Rh2HL!99dA&_5frPa&?>K@xEa8x+C2;A{k9pFAQ%T#Iqk4~rKI z54RJs2M(Vs6t#hj$f1~EP2q8$z)Nca#&Ag)22=4dBlQsvNOOsQkbZDV|(D1c2RkG zxlfp?6)QoZS2Q(CERwi0-fvV=LRki8siQ9^&d%%&Gl*}W=Y);?6-ETfNiaUy#f)$WlyiFi{*3NzP&OsGUC&x=l>^3Eh1(m8L-L&xXYCW zdKwj{0t4Oj3=!EUWv$bKyn-0?u?HgxfQ|@DF2YgaN~nk}w239Tb2Or=0G0yGal2_q*- zv^*rHGHloZ4FRW4pXQ$$LtX+6kb)s2G9&H}U|onA1bttW5T_Ayv3`=o*Ob0k{(`CF zpRF*AMn_wmyrBXivqzyHA3#8hhVc87(+ik Date: Mon, 17 Oct 2016 00:08:31 +0800 Subject: [PATCH 2/5] Create Report.md --- Report.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Report.md diff --git a/Report.md b/Report.md new file mode 100644 index 0000000..3a8a999 --- /dev/null +++ b/Report.md @@ -0,0 +1,50 @@ +# Homework2 - Policy Gradient + +## Problem 1 +We construct a two fully-connected layer for training. + + W1 = tf.Variable(tf.random_normal([in_dim, hidden_dim])) + b1 = tf.Variable(tf.zeros([hidden_dim])) + W2 = tf.Variable(tf.random_normal([hidden_dim, out_dim])) + b2 = tf.Variable(tf.zeros([out_dim])) + output1 = tf.nn.tanh(tf.matmul(self._observations, W1) + b1) + probs = tf.nn.softmax(tf.matmul(output1, W2) + b2) + +## Problem 2 +It's very easy to implement surrogate loss using Tensorflow, but the optimizer in Tensorflow only minimize loss, so we need to add a negative sign(Since we want gradient ascent). + + surr_loss = -tf.reduce_mean(tf.mul(log_prob, self._advantages)) + +## Problem 3 +Accumulated reward + + def discount_cumsum(x, discount_rate): + R = [x[-1]] + for V in x[:-1][::-1]: + R.append(V + discount_rate*R[-1]) + return np.array(R[::-1]) + +## Problem 4 +Just simply do accumulated reward minus baseline + + a = r - b + +## Problem 5 +Compare the variance and performance before and after adding baseline (with figures is better) +Performance without adding baseline converge faster(69 iteraion v.s 81 iteration) + + + + +* Observations: + * Initial value of policy is highly related to the convergence time. If it's a good initial value, then it reaches avg_return >= 195 faster. + * Because we're trying to determine the best action for a state, so we need a baseline to compare from. In theory, training with baseline should converge faster than without baseline. + +## Problem 6 +The reason why we need normalized advantage function is that we want to get a better policy at each time step. When accumulating rewards, the reward we get at a time step is discounted by a factor. However, the later rewards are exponentially less important for the stimulation of action at current time step. Therefore, we normalize the advantage function over time steps to stimulate the action at each time step. + +## Reference paper + +[Continuous Deep Q-Learning with Model-based Acceleration](https://arxiv.org/abs/1603.00748) + +[HIGH-DIMENSIONAL CONTINUOUS CONTROL USING GENERALIZED ADVANTAGE ESTIMATION](https://arxiv.org/pdf/1506.02438v5.pdf) From 8d39043e2ce8a801500eac059a851a555531161e Mon Sep 17 00:00:00 2001 From: Gina Wu Date: Mon, 17 Oct 2016 11:32:17 +0800 Subject: [PATCH 3/5] Update Report.md --- Report.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Report.md b/Report.md index 3a8a999..178396f 100644 --- a/Report.md +++ b/Report.md @@ -1,4 +1,5 @@ # Homework2 - Policy Gradient +Member: 簡廷安, 巫姿瑩, 胡展維 ## Problem 1 We construct a two fully-connected layer for training. @@ -11,7 +12,7 @@ We construct a two fully-connected layer for training. probs = tf.nn.softmax(tf.matmul(output1, W2) + b2) ## Problem 2 -It's very easy to implement surrogate loss using Tensorflow, but the optimizer in Tensorflow only minimize loss, so we need to add a negative sign(Since we want gradient ascent). +It's very easy to implement surrogate loss using Tensorflow, but the optimizer in Tensorflow only minimize loss. So, we need to add a negative sign(Since we want gradient ascent). surr_loss = -tf.reduce_mean(tf.mul(log_prob, self._advantages)) @@ -33,12 +34,16 @@ Just simply do accumulated reward minus baseline Compare the variance and performance before and after adding baseline (with figures is better) Performance without adding baseline converge faster(69 iteraion v.s 81 iteration) - + * Observations: * Initial value of policy is highly related to the convergence time. If it's a good initial value, then it reaches avg_return >= 195 faster. - * Because we're trying to determine the best action for a state, so we need a baseline to compare from. In theory, training with baseline should converge faster than without baseline. + * Because we're trying to determine the best action for a state, we need a baseline to compare from. In theory, training with baseline should converge faster than without baseline; however, for this game, it's opposite. Our guess is that this game is too simple. + * Next, we fix the iteration to 200, (It means that we don't stop training even the avg_return is more than 195), as following: + + + We found that roughly after 100 iteration, the avg_return with baseline almost converges to 200, and avg_return without baseline may cause some vibration. We thought it's because the variance of training without baseline is larger than with baseline, so it can't converge perfectly. ## Problem 6 The reason why we need normalized advantage function is that we want to get a better policy at each time step. When accumulating rewards, the reward we get at a time step is discounted by a factor. However, the later rewards are exponentially less important for the stimulation of action at current time step. Therefore, we normalize the advantage function over time steps to stimulate the action at each time step. From 57a11907603d54eff8cc0a6bab3a6c70389a92d1 Mon Sep 17 00:00:00 2001 From: Gina Wu Date: Mon, 17 Oct 2016 11:35:04 +0800 Subject: [PATCH 4/5] Add images. --- With_baseline.png | Bin 0 -> 25056 bytes Without_baseline.png | Bin 0 -> 29224 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 With_baseline.png create mode 100644 Without_baseline.png diff --git a/With_baseline.png b/With_baseline.png new file mode 100644 index 0000000000000000000000000000000000000000..da869fa0060959bfebdf7c4fdf7e31080bb3b02b GIT binary patch literal 25056 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 literal 0 HcmV?d00001 From c16d8adce134f9c8d9fce42286c6893220e516ef Mon Sep 17 00:00:00 2001 From: Gina Wu Date: Mon, 17 Oct 2016 11:38:09 +0800 Subject: [PATCH 5/5] Edit images' path --- Report.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Report.md b/Report.md index 178396f..924592e 100644 --- a/Report.md +++ b/Report.md @@ -40,9 +40,9 @@ Performance without adding baseline converge faster(69 iteraion v.s 81 iteration * Observations: * Initial value of policy is highly related to the convergence time. If it's a good initial value, then it reaches avg_return >= 195 faster. * Because we're trying to determine the best action for a state, we need a baseline to compare from. In theory, training with baseline should converge faster than without baseline; however, for this game, it's opposite. Our guess is that this game is too simple. - * Next, we fix the iteration to 200, (It means that we don't stop training even the avg_return is more than 195), as following: - - + * Next, we fix the iteration to 200, (It means that we don't stop training even the avg_return is more than 195), as following: + + We found that roughly after 100 iteration, the avg_return with baseline almost converges to 200, and avg_return without baseline may cause some vibration. We thought it's because the variance of training without baseline is larger than with baseline, so it can't converge perfectly. ## Problem 6