From 001350bae4ff3e2c8e1102517540292cda7bc021 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Thu, 14 Jul 2016 15:20:45 +0200 Subject: [PATCH] Add q-learning and improve value iteration pseudocode --- .../Value-Iteration/Value-Iteration.png | Bin 23591 -> 28098 bytes .../Value-Iteration/Value-Iteration.tex | 7 +-- source-code/Pseudocode/q-learning/Makefile | 36 ++++++++++++++ source-code/Pseudocode/q-learning/README.md | 3 ++ .../Pseudocode/q-learning/q-learning.png | Bin 0 -> 36408 bytes .../Pseudocode/q-learning/q-learning.tex | 45 ++++++++++++++++++ 6 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 source-code/Pseudocode/q-learning/Makefile create mode 100644 source-code/Pseudocode/q-learning/README.md create mode 100644 source-code/Pseudocode/q-learning/q-learning.png create mode 100644 source-code/Pseudocode/q-learning/q-learning.tex diff --git a/source-code/Pseudocode/Value-Iteration/Value-Iteration.png b/source-code/Pseudocode/Value-Iteration/Value-Iteration.png index e1bbc292b48287edb54e5cf09d769eb71a40ec44..f0736dd4f3f87dd66b68a68c80114907ead47c90 100644 GIT binary patch literal 28098 zcmb4qcUV)ww{7UsA@trc0Vz_XNpAs_8bqW^@4fdX9TKES?+B=fC?FjXB!cuVy@!sp z0D1dLZFp~fP0CFvengIZSi~Witdyf#i zv+~;gfZgHysAxg&VPB#5Y!k4*i9I1EJ^%nI&A&GeAg_QCdyvUj{e`cghrMrrwYME0 zARs{4$=$`r#@f?P*u&c)|L`$00Kf^*Qd5Qo7VH-We50G1ieENe84o$)9IqfrdZDaG zEhykmy|0nVmn1Y@oyeEn%lu4&-+5oiIi*9YUhQ+h1JEO-%6kh(>B~#Y`{DsQZKwiM ztBw($VjuhAqFnjS;g=yF8)tBTh?4#PY`dg=ZGKHG9$|D^-9UP6n} zlYXFljJrVdK?JWznI!nL%tTnxroxPW|E+xR7WofHtIVz0!zU{W619mFOo0;dVK*5r z?`ppbNRYf_GA*vCr_C64l%PEk7$tq7w_y|i!877KSD~A-yRiF<`ePlLdUe-DDP+-P zm0dNTfwcG4GUDelT+BYRTo)@ zS$AhE2{td_GU9&N?4;z&zUt-g znvi)ZiEczlc0r1t>??bI9?$d5d*m66Ix2{>j)5!>2fA534*Ed(iIF!`HHRQ0Bz3sGz-5-}315==z zTe1=)VSm^hY*6#p-R9k;5Ev#!!xz(<#TjvQ7*r4fjEQuCQMNy1){j2CYeYEzr9QT- z$c%j2p2PFzh%rDXCUVHEE%&hC$yno4smiao=Ed2EKKBfQF-o$LqNAiqH zzD%hrWLV*I4Bib!oO{9M{WIlsi~}AhzGUCIP#hMLQho@2HYUHwG23_hsMq|>I{ejH zs+{E~z~(@p?~s^Rhg`Z@ZhGCeRyVoYU5MnW?8=I>s}%KZL?O|FL1Z}AphsjlI`-x7 z6E33xK8YF_DQaTh(I~bflYh}vjzNA?q#k9PP3#3q($O3+bcnI1d!D#>q-jVQ!ipr@OT@4UPp64y}&fFD4iy1nV>7HtfcqQ{R&m5SoB`6#7W^d zzk%n(!=wee`MT~F#FV7;NT=<3pw-9&Hyxj1U9N!Mb7WAW=?vKqN6w9md!P+w+SJGR zx9cMm;b_KOd6Y8$uSXTFqz%*>zeAR9B~WukJ-t*2*e$65PMz*Qh&}gq7`%)KxA;c^&S@I0BlHu;vQAW_zQp4cpmQ>mD|$G zo5}40HLm!|y4|@gmb?~dTRIR&16SWZdvL(6F*0(e7isg^p%vSmyeCG0CFMVNWGf*O z+<#M)%cITVqjR8P@uK(}*zl z=Q0q}`Q;^t_0QB-y@0?vRr_hXinOALxY$Gn>2PMV@!vS35OFeg(mnEp=vZTjupzl> zxCTxzCxMj_1v)j|{(^{IvxlR$Xd+{Uap!4E0Kg_@Q@GBxm+bNF9XJ3nvh=24FmA%_LnXLkvG**?|p)R2> zeuy#yT6l4jP8Gyj*b_ehxZ1cmR;778rBp;diP2V1G33s5Dg9EtP`4ldi?oxb&3(k7 zX+JE4?S57JD-qzeI4zjhv}Lo{oP&Y0a>MV;JAxpUP?LKV#Uu8yGx7Io{I~OEt|$H4 z5_$PiPtVI?JrX$T{v#U7a17&+9&C{;fGzvmqjXO7S9D2&(!=Imx}(WHgg}IkzSXL4 z^QV@>g<_>?Dvu;euzKfw$0+jl$;=2_)Dzg+38UEju=h;W8}zOF#@gFN+Q?O;!ZY7( z|Z<8}~m_X9rb#453W2fh-a>Xr&=o#c(C==NAPL=;|2QoUOVR%~gZ8<_2erC*B z=}Hr@BtQD)8@+bJOTg3THtn1Ip2O3C2TFphl>H(tkZ?TMT!NPX~gAaN;wouUW) zTI?`V1L48R^+I{~tc@c8@AwwHvT8e!e!wJkH_Ht`zSD$LuE;j7AX)ttDs z-^^{$lUmRB-)pv0+5>a#n@K zHb>&2c}RtH2h&-N4BYNj?q0;Vf?+-}DzLsKu+QJNykO&ou81TNmCqwoH#_RIP|II{Zg zG0}qAOyU2;es#b4nwN_=GO83ys{i)u;Rl)5ljmUqfX`vQ|4t*(Hk43AKa{X@qHKOl zcqx?E!Eo4D}v#9}kDA1`>mQ4-Jp{e12Rj_v2+<296d`5(~wYQvP2lh|_e zqfL*;GrgWd0uZU$_|ZqWAWkOZ7E9U7(~^`R!Lg^YRUr6pW5?h%B9LlHv%*)UM6>L2 zHE>~dUdu;5ZT3?c?Kdn28h=ktSpGd$46i#5NO@`^yZl4sP)yUaNX7EZk3{9rcQe#> zHY|XJqi{v0EYrdy13=99Q21`z%+N=4j_HNuXngrok1VygcuW%hr5%Xwa8NDIL$>TC zAfQ!2{+V;onjl;S<`VS$zaHqAq&u}b{FcZ4>JwB*!1tkc^X^C7RDI?}d426MO1;h? z%b+?rk~Px7cSY*8xB%vt4D*wLCMMN2FVAzd>@dBx`LeI4!0hzC67@#dIU`m#X zHo!mp{kc_-jiK8zL1Xt$t^ zjyqEJB62ADQH);XvI?#5H^~Ov&;;5P@|dPOjU+Ac=Jwu?q&1%Cy%>$VJHA?;<*D;? z;{P%h$)*0-PuTvlo+PoG%bz6aFNv4WJN#j3QXPZg4dylmAb9W8*)ID2 zhh6=rO~}dtUvYw`{O&tP**ms6hIz>`VT+ATYEW63X4(g^){_h!9H}^KbhcJJ)V4k2 z+0B0^IRLJga4N^uOG~0ZSJlec9XtooS5`+(9OJNV7B{p; zLYLupucpor|%VxD4R4J9qGvjmGYAaK37A~OB(YW7%|9tJXrm)zxj#0 zcgR1-;s^Om7by(ta7VB~ho*|t7D?v|1%9iB1r^D*-EpY8|-f`mG%kyt0@+7Mr z%@KN3qFB$GTYS4bhVZUuU^ZdL3&l+tX!t}PNdqswla-(;aj7CFQ3D$UK5yxI-NP#3 zvr250YuXGx_LaOiCrxUs7HI@w2lTWwwvPJyz?;&N{Fqqz?sLcI-FEJC&89?e_p)z6 zfyNS&pTK#~>U%zVq-dPbM15IYhOBUp>q^NnroI{>n;uf7e{D9)(#LAMCbV)yyvKms z%#9Ps?fD|D{{v-;=FHL;K~He&(w*w|S4r>nc1kj}?A-b$RZ7|)W5us40oZ}h801Oh zDNs|jpPX3rt%Jn%s1t>wpvH5`4);dhF zB9#2;<$;j_UGY_2IwpKS@$h^ORN^gCtFz8}cHqBR;{F~;#0>7*2tQhz{)o%&iDpjLC`#w-@+I9cw4A>UXM)$r_BvdIWKZsg z9F?tnuLOxcoT*8gvg6#{{`mQvh|6x9Ph#ybMPr6j-2vbk(Su>;;R96w`&4^J=ximg zDEjnbKd7O~So^GEQ|9ch$A$q-@#LmdIGpnpx-qYh6w55ti1zwS4pPTdm|ViRc%l{u&BH{iQ@zHm?vbGUtvQZS71JFW;{HehPZDuKz4aW$G=Glr=KL z@__n-WdiVp5NOovq>{`o3P1m)E29Q(ND179?<&`4Fe-wsQZsHH-?r95>#yMDEv22@ z(=}}p8|#|%2Q_;X8(K2QE}8I?D%>M9D6@&VqWA9gu4(w|@{~MDYY!~49#_oA4lHqJ zL(`*pi&&BJhPHRT;UcOcaDGSI2o`3U!Z-`PiBZUQ7ijf&FsScItd^I3)GS zciuf^d{S7cWj}}8Ft~EwpET2c#&|dR-S&{0ar5H4!!OaG#d;joQP8C@v@A%X^)R3z zm;o;@tq2wKtM0gt{3b=fV5`Rglx;69@G(rjAp;uUQtkc|4n1mdi^lX12Mi9?&Qbml zb+cK|wB;<1I>j^uSi5$bN?X+!z7;rL_yR z3{d(`iRX>3KIZ0N6nRO%;sN4WRE#PdOFnYjBvTPfPaaM>mcn4Q{^H( z#BPe*@6NNlkQj^Px&yavnQD4vh3vvjcSUk#CuE8?y9l6@w~ch=6>qoCN3s^crV*o# zv-+U#zSdUc7(w>|K2^N~(RvAf8R8&2r2# zmw!%*x#CudpxXZ6n(!ln3c@(HG>ejO{BsiE@qEjAXH+I2qFqYQIzOTe@I}8{vpV*Z z$g={{bvSOrTTqAFlZ=V;aLUI8KNKb^e+eloTYM@T?<0>|0v+8cAg`~v_1s1g4>{`8 zzWZ()-epBHb#pADL=Z(gUXi z!48i|yG5DrVegylz9im48w42=)s9okar8@F@3kx0V>(k5pTL_vy7bZZRx#v=r5<>t ze~ffrn%DNr81TwMM0wMHzU`b1KE*XG0wrG>jF*QKtQIiump5JYhPkKU(#o^oMhyE{ z&Hxz7_5!Kl=hdB`sRs@(S(+D^Qaepck`lEZ3|Mz{z`6Z6JY|D*+F?+J=^zQ1@VPFb2zh0w!PMjuNCIJ|(lE)S!?2>EIp;iO1?)3MZTWcs-rU z{9`bRicZ!E;*=6{eo8Anb4rx`M&U{uf61ZszIkx2{8T2*rkP|vkH+))Bk?Q%!YyvdsQf#CgUO5|rya0IP4U%}QzGed*$ zezHbJK3CU{6>2`vN=y`YmhNgHKutK&94^QSzW0eHc(s$1OjX&<%R&XSy!gek$oWfB zts!|ljsu_r)-6q*o1#1u!U(S?XVPwnXl40DpUaPIZPdB^s5oYJ3|m!mXN2JzMrqun zm(H=u!#TuV^aU1^Iv0JeXG+4U9T2*oVX%f%0btSkxT|7!;-i~NZ+rCT5UnJd6AYi$IHQjhgEEY2ISAHJvn`Edt-X=z(UiBET z155f#QwR-$xV9EcP{ig2`az~u*Dr~pnUtRW3dnx`WNcewWo*p#T&#jsyBWWb~rN6gy`ZIKC!<^V%iEI6{rh z{mX0XpS^O)5J%C)44K?!OxzG*qgqz=O!}7Dr)uRV+RoVyoxJ@AA*HcurX`t(5{EO+ z%#AA977A?h?6UO@&o&Yb{r!VCi}ONox=vnuS&kxiLb-f&VhsANsiHW> zB1&VEuFl-1IsJSA1+?8YryP<&4caVRgz5WtT{b$$eqec%NJ8DHJawH%)Sq-DvJfuL zyVAoe-(fzl0kKNu3|I~Ti)QRk;GGtJx&zlPkCIk0h0|V!yuKhRTflJfA^)5WtbgMJ zX=2#iTlgEd1ZzzA`hd-pJ~&v&^HR^1z)IB?2Z9>Ep@HAskwFiRaCniro_j>xH2XH) z{UD-XV&jx+pC z5#m7yqftv6F<-?TEtvYp;^$Vb)ef3t-}+lliL!7uI@#7t$miUY-R7gXSUb6Z!#Ql$ zg;g*b)2!=g{JQRnLS}zLoWp$kSGNf$oQG!S+iiNlAYV5JYz+n#kYNkKYo?;Ztxd!Q z)T)Zgy1a)n^Tbu*W~~o3LmRQEk@;6@cfQQmc|sFB6?P>R3@5K|X!olZuA3&_J~*z) z`2L81ifLg>6=$tgj>M#93FXT0Fpfihv8Wt8T`D@CmSkH7rMH6^^-P%&af(3Di}3i# zU02fTm--JYXe;ks^n7H=b?Nqqe?Z$(&*e$E^Zu-|9DgdABRw|aafipFKP70221jUy zS&Jx^2#nUrUDHru=r)Hq1>xpmg!((MW=Gyv^!%J6_es_@Xpe0a`C#K2wDL#=s&kpTkNZ{N_enV~|b5aU4@v=}qjMh9^z|caiKM5J|KhIbin7|!^AncwG z0xKfjG%v<(f*`qQanE~3SrF{#CwzhpZ&~ywZ$)hn)4m9w9Az6cF1Yw?$i7H?dKm*N z^JF>kiC}S2EZDEwdCHr5_^U6S0!Ln)t7SLMebXJ!@9GherGezE!c zS+JpA@3Lswj$a+$hD8v(olf<2lJG0}eM1AMl@VA=c!$-ZEMl@=U5r z{uf+PrgND@u;bSd68QXD7)pk<~q*ch>ecN$3vThn`!dk^cE&R>7i6DHKi*+N7I_;7Jha#XqMNqb~yUp>UALr0R>%-8!nRv>vtLO1}`czJ` z*CpWis*RA^|JDM?!yB#3_GWmH;bBQ1xJUHc5-YGykXhp6C}}9ic>2c6l9g|s%=x+) zF|t&O^)v3%gh}1I(}>dCFgFQr5!J&43?hfUDP1Jwy;h=JdWFxJjzhT znF8;>py zx53_%?W&H|lT7(K@!FyQvb+feKqbyF^ljzng0{1fqMm;n%$>IC_^F#13`Aqq`BjPJ zMJuq!v?NwZAzs_@{hLPrT;ki-CVEiycLpkO;t^ zG@A$~f5sxfQ8)7i!pB~vtr67eR{{H4eoX>^l)N(pXpf!W3o3@-K(22kYVC9PA=hU= z;;aIo&s!u`XR&Rkk@9K=_flZ+h@+HSJlD}^$VQ5rIqUlLCL2m~2F)<1<7Ml814>y{{)oIpsHLLH$u0P;xnN}XZ)ol%!d%;m@f~COXGO_JE4M~zWNZQUT zjypkwM4V`6qA z*M1UZF$s28ddL;jTwB(C$4ls1p`vu*Rp}~{$=LSYC3-D?U zWzA;F2y!AGyEfNo=;bR%}6p2X&0sybHYE=pKIFwI($Y#=Xe;+!W3&{Lnv(eWC7wt9|Czz>BueW3hn zBdjt&2|+IJHnq^?POZ;~Ere4WP&w~%3y@w@jZ+iv$1g5N=udUffk0=_jk<3f;Cpk7 z$`xeH|FElGF>RzMvhLxrltfQhVl}TIBBeOd-f=Qqk-1L?$6tHGpFm$}F;>E@NTUh~ zTS91B(5OVUDKxxzKr$USWAg}jVcl)UF(ajWV?m+v92XW5p6z0(0;P~{&tAQV(R-}! z7qfHY=SG_H^zv5AV3CPaN{PiP!Zu2p)`X;L%d?%j;^n`TSjvORY}`@$+(6Tk96twc zu1T8Id+}7n*G34D#UY`i1l%?aE{+?3#7p)R{GmS(C&p;t#EtB1liYEMOBV$*JecOz zwYe@6LXF&MI#{1BjK;U)K%tepEu*AHzxF6VxEyzezYrzKIl?#d_IJ|e*}(!tE$6q3 zG8BBkOG|DV3>XsGtcsJMNrcXi$GuhR@uQ)Iy}M)B?R!&kV>RxVh zP2nU7{AW&R_ zWx9xpLR{B(&d>0uP4ETq8_?dR0`D%jx2O$1-a~N)Kpbp?f*1k`!H!EnQOdxjFpllv z9YNdAP8-+D)aHXCFai+E5vLu`A^$(UTS{=B9ORg3>YYr(+1ZbA40fb#q}n}wA9kT; zNE(5^q%wA_fmQg(F#RcU%3Gdv^1zm1W+VqM9_*@EmhEBq9{GLbPf`2AwEco%JnT08OAbyK6LzpBn4sq&9lQGf9?{EYO0|{Xx9f1E)!BP*X>>_&%@Sf zKcbTjow9-CTm7EWnrg9?mol!FX&HB{WM(WMED6lwPKY+1lzv*J>y{*#9XZlJBphk! zuE*VPek4Q27oV2~l&mbL~sBgk(dT{>jy z@82h5kj7&4-rJU-0e>j~16SpW3Y7fe{C)<7W5sgjq(HP}>FCVyOM|R8yP`zT&d+{V zIVbL452t}XPoE!tk^~-WNvQkX=af<(6-|+?P?*B4CeJR{H*e)u@lzJhB>yZ7!lBR< zxxmv~E!5)OKGJ<{g3eR_ln9x^t_D853a}T`wR`o>$-be(s zd=;G6q=+L`CXkIqz&_Z-1xyfK_O-E4@7nCHXO5(W;t!|wIYV4CS=_VUb^=R^9XM4yE+MuoUOuSE6HwitdVXzScBSy=T!~ zZR=UEmoGpY0m$H^LhG(v#&{re+yf=Mc+0vih0{tR*>pIPxlYYJ_RW}IAj2h3gYkTv5px^FuBLR;yT`SBM?<5@ zdo54o{zTi&Imp`M?zJ4fE4fUAMYNo^)Kl&T6eQD3+m(sy3lZoFZtODAd_c44FD5R+ za98#e$kf4kx01`aSppXeDo`VDycv4lgiis>rez^>VzY-7R(n=g?$A1B==)c~2HNt* z@D|vl6?E+nhYi1H2D<3bg5&5Sf5)RuVqREz;LSS@gIe(+&OfoxnRsmE0c-sV_^MRi zPm^eo@O~8GC06?_04QKJK}dX(8aZ!1Ukp>SNYL&N4p-YURRmt+5)=%PHt|ej2v8kB zFaS$tnNSiFk3!nN>y;p3~_v89dU_ zoaP(t=wt^IaPWFO7g8U=f^-w)xD_^#CV$%s1^6qMmk%TGmwtWhDg^1(;xUsesGTJ6 zEJABN!-M(eY}m#dyYQ|g@=M_xKPnh7xz~+A^#R4WSeHlB8a(ZK(j&h|{ed+`_zXM~ zm(Z0HvVNzi-y2??PhRBoqSW}3<>@MnWu5a~V0@cuwseV_=lyZBXhaH!1E)cDJLe6& zI&Z_D8H!QZ)tz$C6uUm{W)R4w7zx&Pf_EhVV+R8Kp0ty_590 zEi>wTF}Jk6BoYGWou;F{pDPief8wAtz8NKi=5Hvq*d*(`Bhn50Vh@9GQ(t)u1wYye z%BoG$VkqrGITq+4~7 z)m?|ITt=|Ty%~qDHF>apaM{VeMJ$gHA0@2OcY3?!l_-53(bqE$;Dss8cs5J)hq8gm zmsAXrXtUKF)#e3<{Flty-Cm#m`Y8?}KK)F@W~LYlSkbqAF1m)|Pb6vX;x&%j4)I+Q zg1=(YIc>)!Am$%>!V&!nqU3WLf@4e+c8a)2(8!`{F0jZG|q9dDQ158KBDg-kT`3zPUH<-?6}G_K#pXW8CkcesMQqsKy~`f0c>0p zKQ(w+ zC+2bcOI+Hhz|Xs=h!20M*&iAqTP3+~e@7c3CKU;;)-6fH(YUnI_Ru1>C z3!LyZtoYDt0~CNAA4J}4`zaGQnE9!Fv10#Fj#VFje*MZYsNoASGxaAWo=tS((*+l9 zaro7hasyF}pQdo3Z&ZSpHjKrdxn_O_No$S^4N3eh9L+b()pK;46oG}i#>axZ`Q_k{WgO$OEA(qe zoSUc(rFqq{ry0ij7J!jX$1N>`==Y(sv1fib&Tp91w*Pc=qnGeD>97D3#5iKmOacIX z{_UOlf**^6^y)fCY51;~Ue2)9I25RQ+jsgyymk|-EOp4j=Nb7@YqgRNH5{L-R%P}y z_Q@fc6cX2-%5+vi(2^;V(XAf{^en-?^5?t9oDG0|q8o*ac?gtT*p@~jBV~k7k;<+O zO>b94D&CN)zO|#BN#)QqkE#RVEwzAdk3kZthb{prI*uE`PhMj4@Y^IO^&|fnz*V%Zer@@``bW1)Ri=}?vYmnm zm88iRndV12Whad>3mE#+2LY7dP6=9GUwCf&3+FA(;$(fbh#S8b@w$QNqRKhf0oK@C z+|O`m#-VIi`i^U}gkMtlLVfye4JgLWoX&nXdU##1f{ZR^4l8>VXiN+O$WiQ}ypk}Kk3%^m&wc zXi3oDoVM^P8#?Ai*66xY5zP1-+tLOOppF;83NtT2qg3KEmk0n|5_J4!vDFyvvih<) zRD59jE@XwhxlRx`o=Y1^Znm6L`n4Zj-ii}a@;j8WWKa5Sb#@pJ6t|U$StdLc|BMNd zf|0Y*H8}knLV;EC2mPG+NxinVt8Jwht?RivV9QKN;xw3lb$Y1dx?mh>;LSjf@U9vJ$_xOgK3~ zsbU6lU|q)oysS@PR(EhvNzHxchwL=0>!7oYV@$Vkg7ch55`Gja$0OQ8Eo|Wg8;ypX zHbyuFF(`qxL59R;$mvGSK0N{R@G_MKA#tt!7G)EWFbZRGwVq7g5ah6AufnVQeibhEzXOXXr4Xs zP|~sDPvYbaE}EKd3y1H}MBC_%hls7vWi}$IUS9vax3ePKVQGww654Mihw7kifTeI| zeTVFv@Od?3MTSeNBuO4$OzMZ`kR}5^JCH59#=Z9~(=@mBqwA)&re^!2khuhlF#)xo z({;Lw;cK%wH$!J{;IF1>!I<>cqmBd;+tmxSw&b+~RulIZkGU~EG!j3XAzFmW$an7v z@3EyS4+16#x5BCoo+*}%;N8!VapBBxQF64GWH5g)&)xu>7%jtSp8sCUhzu(+>-dx}@bH(xx z)bH=zM&eWuLIX3Qd=wsuXiY^(;-M03Ak{&`QR(zpEH=Uu~^hl$; zqpOU1(?sS_j^ibF=~R0+`lFI?*|bymQT*?}9b;kb4=zH8z4tySZAS>zB)wD!WH1DF z?wTVEA)>EZNYNCcuMmHN?RRbjjB zKoD-CKx{cKg^6~5YOC$4;U4=uHc&o5*DNwH;x^>7LV>Qk{g@`a(U#C4c&&5T3wiz2 zXYh$W^h%ZKLIz0uTM8yd*VU;t(i_q}p%%XI8ChvIQDaXEQ{S>Fb7{TrS&qhVCA9(6 zn~v@+(7P&*xowYh5x4S>z!g7neP84NCl;|oaDu_s`Pc!lKm+zG@~GaebxOr z2+vx=-C!)1xJ+o)TS$BNFz?q1{&g|Mk%=Jf11v6;tR_F5BSsP^0&drjk~Ds7bKwL$ z$|KN=vXEW9cVu$LEr)+)hEm@8zD)HjtCg~YmqMw$3+#S(s!xl_N9aDLeiq_#nASm} z-W1@CW{ba>m4{iju^3PZ!0Yp)X=77iqU>qW>xU{Tt;E2SFxc|KIy!(+tmZIQ18JR) zrJwD!S)cAYZc9s?gt3}ijzTp4~OUCwFsnM(tyw9_v3r<&!@9fnePqMcsH#(ipSj+bk0f*gm%6g5*IP>Te) zdy4$b1SsXd95!ROrb!EW96SW}oi5F@=RyTppC1NmsOfI3IGArAh?4P;Ybi%+g!c~p>MJSb zh1PrwpN7hGegU8XL)#*>VKuUYTx>apegk$k6`U16mhQNZ2)1-&IvliQ;6yAbb^q)DU;d``pw+|zFmuOl9)9!oc1ipmJ9DgCJl(SW%WAd0alU~;`(Cu|KZzedbYh*JS>^xr>shRBbM^&bA)+7Hiot>`fgO-DtZZ>`f0l*e?BEwvc76DDcyKnT? za@`#<(vI#|zzo40x}+g}jdmXWjJJKf#`jXb2qdy4!F?Eo`2@X@QnF`LE33sWflk;}HWneml#H zz;b6-v?4E~JSqcyW&es_;QAC)15O?s+fQF7@l0_o*ijhqF2>Wh@4{kWi~ZM`ns+Fr z<1qR--SiF-Bg6UEX30RqxZdJH6`$MI@nj0`!5@$zs^@9D#AIHBe4xT(r83_d&IzQR!Rdu@ z$p-)Wug9`ycGh7#iyH3BtClYUtLeOX$habY;*G!}xHA7bvNuafd1y_Mgm`KHI+Dqa zuX2)9uW^J!pMY~)GgO@F{RDQlEWE_-5MJcE4n z(FiytR-=BmchBUWujI3~tYYWw$}^ zlW|Asq?xl~7a552Ez7B8AtfB@(D_iZU}b;xtHUs_Vn6+hFCVeQ4^>Q)RQXUvOD|Sgv4FUzP1V?2Qpfa zU?$vb=Uzk;p&9h|)Q-E=a+}(SF6E7`{r5tBvY+Kh3-*I)DRuR1OtLfMenJt;h}GHC zuy|Ts%lc}$hUYimg*=jItHO~jtb5bC%BTaXjZY{)-V4vc^s;Y6mYLNA0tROu8yR`8 z53MO}ssHvTi_`ZBJXW&hYh_&QS8!^=hG*4&Yr>J%j+rw9LLM5f)wIbu5Y6DPQ$GJ*5sBkB&%FZyXWckAA+94E3s zvMbTN$)u=Uq&9TJNiVzU${Q%an?>w#9YIoAc}pbr&Y^+5caY0rtyyiyd%jebp;W%# zMe4t`0Ki)s0lkR~1n?_E%|mLw>bJv;&5z@teEY_rHx>msaPRp9NBlcE+BQJzg|%Hf zu;O023O(MD#@uUY<%2_9#&`j@;3^xf0PIqiicuV0zh`g#{fMtR7UZq9mPPcf<|WQl z&bLO*0%6r@R~UqcWuh5b;h5uK`mu#-%aBhZK1b@|d;u$ZbtmBi`PKD}kBknO1hJnK zJO23)Jul-LBGJm;;wfYBpuyxRcI|1;AV}Iv{dLpTMx`QY?i8gu*w6HhY-&C0X1Aqw z?Vz>OF_s@Klj9yVQ24E`avRnhN)pT-9w$KBl-wwys=Z87A+got)9r1W8b|{Ethh0! z`)?)X`+Quz#rBmL2>o-_F{Gm`Fg919pzjKJ<^4&MKJI7~Ie_j_ed8;8DuHAtzn`}& z&E7(jy*(QL(7nwF!F@vA@{H+s{1T|=F5UgE#OEN(KN%`K@OhCM^7%3(?ckGF*fouS z78@a0kiqRcb(r^dg}2j;J*0od`(pAiX05MS3Tc z8^3dY+&y+UPdBM z2{Nw8Dji|%Xa1x9UC#Nh+`!0FsG`8zugOROMe?I6meqid?7{q#gu}q`vSmCwZJ-NL z@IhSI)yC^kwagVT5iFtt73Vu!3DPy8A+#?Vp$0pHuB znRl;m2YQL23f{n9*f1g+(PCCEY!kezZ$bGhWBUis;i=N3@d~7B*cVT2yJUz)vhre| zlo9H!P4j8I>xjYm{p447&R)YJJ^tERQdb>5h0oU|p=`dXbFi2wL%132Cd{*Cb*#OM54_cS&pA7p5O1%(OC3}b)!#+nT>q(gO!36sbA4LBXwT|DLxPz| zL~U2(ah6vv-tpe@tB)ON{o3voA}YedETZ{hoZc}%HBXOS*30Yg!TLT(e}x3+ge|G0+jT=`uW4K_QytW8dfWlKf!#8 zv;JIC+{|rPfEvs2P}hvZsl)B2+dB0zWeL%PS8OzjHm89i>SGIwDlsOYWN%B!))pPsD$=&kiV=HAPp zxII?Ixa4w=MMy)mU%A@O!xKtHA(7u8wOoCGase+c(UaWdjQL`fh)zxdn>Vq;2cz>Mn2 znc`4_e>7a-e`nUaA%k>0!ldzQ1mYq0QeEsh5jjitZQ$|hw z?Z(!}%+BpZv|+ptX2e>jzYFd1$tQ;h7afH9#*EWoEVQsmGAe{UJoP8Foq`kOA-deY z!e)rI1d1(V{@}M$YJ)h*3AdD>{TOF=t_3oN6Nd%0Fq)_v2bU(Da;{&Mw( zC))>k#=LiId3??lo%*ys#YO-GO&7m|&o&rISu&_MI6d zf0_A>OzPAtZOtUha6K$7uYkRdZ5RVxULiGbLT9By4? z3-uuP&*)70XDWrET8NxW3$2CZTjdfx`yQ&wZQmvZu<3*tf?Vaj_SyArx(Etw#h3N| zEE*U}Tfqto75kdD4wCrRei8*`M^f~PsA_imLXA8uexU^vL3T6B4vww)8#12?>pF_` zGJg3$S8rF!mJZaQ(iV~}RqsPl6SC4o_!G+G?dDi!F=jG(Et@2Gxjtw~1|CuM0<;&7 z8;vG$U`s15Z0Xz0**x9c_cJFOUy|oVGIx(ti{?_MChn&Mc9^`?sY~oCN1FGq1>9%% zANaoP7;%gLM^>SQB`11IHwF?>;C2+Q7@mfmJ@MTWB%W!HcgzcjY!*XMRA5ef+MVo7o@?Bma}{_?;og3q?%@ zfrx+^b-J?~?DGLD0l{Qw#;;P=<1c)%TvQ-Di#AOobnQ9UN3v5AQ7 zi}QHTo~Nf5Xw5y~r>4+XgnW4?9jCQkcvFTCtzo&AYJb`>!1&13+h;{1h^|efp{` zfpg48qNhScc&s2x3JR~);`w{c)8Y2)aq*-uF<`TXX0p+GfbH!iol$32IJjM3!>>xE z2>mKa6y@%fvq+}8FUU>N+pVvdx9?(+#fl|ICIJD#{nMK^KNa=lECv))TgR9Zo~zDs zWIsNvlupE_J9ou&Vv!BGwa6}AnrCl-El7iu#$Y@Qtck|?AkN~F<^tH;i z*)gZeV8q3J=SS4H`?%D|y@}MiXqBh*?=@)p#-pcGzUPkO?`9TtaA$N#7ko}R+T`5p z5maMrz291h=6@Y|@lYHetf6O$?`C^~n?+?1)0xNStKmOjXVkqZ9H$*_^%^C&e#i zCtC&+AyCZx`HHja7S)y3UpW4uKjx^|G=X`HnR~#$7SIGRj`3lI6pX21OM=@Nla7zU zF?0_Gz}&Ty&Qno4E#w%kw5At_=%p*aZAO_(hCQaoi)L~o?s0}1^+j7cXdsHu3l%C7 z;5fH(1PqH5_-}2@vWAi$(ME)yc@*|vy2BfgSNj)?`akQ&;}~lM4Acf+%5PI#<-#WD zt_pS4yRL&RW6%|{ZdRFl5MV2-uLdc{yK^=6U6;yu!6?%(>}3paL0?Q3{Hq}+vYhI% zVSZEC$nr5Rl6oJFuhI-|VQJJ7_aYWkw?7N6bTwteTIQbfZQi~2DfSQ$p7_9Wa{Ilq zvnW|f6k+&dn_`WtnBk73S*NW_8n}#7>#x~-%O+ib`rPUyPGwBfz|~$~E*L{7$;_jT z*LwGyjnGKafOoqPIhG71JB9s%{BwmVA^u!Q@1*BT^3{U) ztz@bhu2gkzu<@~&ml`Qlw>Hl^g$N#HCF1lR69p|%gZ#Z!zY(5zN>s&1hYjA81qo4j z3?&`ja$2>z^mDGGZ?KQEHn05}(Q;tWFu!`~;rPo*Jp4b;qXW+{b5XLl%^JS}Rh2$G zyn~2GU%p^hRtSCqj)^*4(y^spB{C-7us?B!%6HAesnuZ|*|LHxC6#yvDok!c@R;x` zQjLl3GgswbHBDL2xmu8i;zPyCOvZ8Vmba(m==fy8PVN>L=Ok-vgPCB(StsSwC;Tcx z;EWBz|16>X?~9T_?8OYAr~epoBEvF($mDq439r!~Do@!GK`tCM)c=Vd7xAJ&SlL>$ z2shs&!tNb~3IC(h@PDnsFZOs?GY$Tu0zsS-nTcO5wi90JU7;}h+cfo~y-cQZ?oi;J zQjOT)^ELDdt62Q-zeeXGmZY@&<`BMJxtj20_^Mb!y72GYdTm%S&gCD3*xUc?!NsUZ zYA)26SMQ6a?vx08M5L_E{rwk?U!?XC!~(NPst)?WPm0H+G&NZBjilNk6b)mt;~9R| zJpOM3PuQA3!M?XBwVrS3SPhxyvE(DT7LR@L3cERt;vbEQs0dd^!*Gs^Sq!AZ>t>Nz zSktOZ*k*xwU_;y!IPjZCy(F+vLDk-)fP7F{9wd>q^yJJHD-Sj9!sZ6c%&F$p!UV4n zb@#v120j_P)=(TYBp1}-fqWLnT1d&lPTG~FO&q@Gy7^Ci5vSPuAgQLUsnCEg%~g+) zN1}hne9F?>QE%3gAp2AQstX{*CNf?P62LYoV(IY2(R045C)YB2m2zkKRPs@L}J8` zGJ+MJuVuCDYsePjXU@z~Uv?y*t^d6aDv>{wa>F_#akE+W`P6HepNVsTbsu-@!|GW`Zp7NllRqk?#Fx)I-zB8HPqc881KkgF$4tCAnF|AQr2 z{y-S~CVA+#`f1iq-MS8#pvZN}>9VY=@$MBb$!QDvh8%zI4#|hKSKv#1`G~okEcstZ zau^SQJPPR4dJqD*Bb15pxIO@S;ihAeV(GT{NCPPK%8`u74rs|?8ePH^kQQ$kxB}n; zT40YAJFHS(vb*sf`rLg2^?P+vyda#zx$M~!q|cdXZp7-qHYxtSDyLEKf@DeCR`tIq zeY(DD4r}~ioH=UR2Z6*4I}3F{d*FwbEpud0e_t?@8&o)%RKqha7dg6*?nF#2ed}Or zH@<~%ymK0yMG_acU|U34HK;qXOUsQ*o(Y_hX+$vV`VOUB;-$){x$z_PYsyY zJHxL+(53N(m+W7KWxs7Ki&V-K4BB)!wy6%~J^SSl45y1StmZ zxyzHeFbcc5dWqPJW;+c4?3T{kQ$ZpQ(oybADl?I8UUv=BI)rNohI3DH5A9R$A^s#$ zY%lG=EGCTtEMqY)pf0(wI%WXH`M(=MB}mZGzAb0NFk)7nH1wF`3Q-p->=(ds=$nwc zs&;h3`>*8}5_j{DtGTW5U*#NgK{;Nrd#=+55xng4dlpmeN*i({nz|9idBBjQAcR)>tqwM)Q}%~_1Zu}MfJmqNGEnP zwX80GEru@Zo2(l=!{sWd?k7!y!WiQp%FqlNy{{V>ejTx8t8n&{jusruq?H}-N|S11 ziT~x-1)hsCl@a?Rx+Vy5#hAk5XaVSv45L!U&rm_E=lU%dLH-gKY17ZHs&L}4?-Gtd z#ZyGOxJ=s1Gjv-@FWwzLV8A-XWm1vEWlIe2`%uIGWxTI2IjmdHhRs0@ItBCt%(2PL z#?;+)4G%9=j;`%2B_JIE0Pp#um1 z8Z^wH(Jxhj)%uJ*1ys25novFxbYDcR`+YT>@9VxW=w5%T#|b%m9Z;lsI-h;4jF>>u z(OtABs^MwUVZByrJ9Cv7B%2F2$1AhGmpE(s`VNMpgPQ=P)?1>z!fBU(QyPxWd%T>> zu#g8hEjpCN6(z7QtccA^^CN-PQsvTPinO}S)%meR^iXs8+zN!s3gbolb{`q0rZln! zmehhes0Tw@yLPn~iR0~6sP>_2dX`2T$p}zS`>lrIm3qLf1;OfjVm!SqGslYVo5OZP zt|5biBb3D3!iB z30%M`A?k*g=}sKRCmH9cRmC2$?kulBWn0Ys#SBG8nk-(ZDN~cQq3YxC5>X$@t#lO) zkGSiiNc;`>8_l}}e-JEixExoLGrka}x_-Sv(pVL@eJ}q&K7=;dMadMW@kw@(U`+I( zcwLgK%$KsMDJFSkavY1oHlyy7QN=|<=}6T5^TH?M(~tZjCJ&-AGBWBB-8?J!dOEu4 z!BJtDYkp;IXu0bLUM5eeKR>fFGUh$X>C+Oi4Lr89d; zGUvXppWYxJ!?ny!Yw*r=aZX9xuop6$%Dolon57HmD2**#^Ho1Y6|fk#ciS+lnCiPK zXYdA4x<0Ll3euN}&d_pCa4%aos656KwNEgQL1|{ujru;imR^D`1+!=((tNOgELyM+ zJes2~dRS<0ui8>%KED#Zn28wDw_*9Mh5T0G^|D*vt*F6TqQY19wtuv?`eAmAe}?Q( zs*?i#rOJ`i6r`kWm&B=wySeX^%_4=d8q#C+ z?dGV>RNMzQ{G~n&D)V2crMb#_DP&MpRaW0vtp~g^e52~3m`oE;H2ah465o;Rp)+vJ zcKQ%rdd@Qt)OBW5MAy{Niy9K9KKoO|VcZ^yHn4*rRR5tMun7dvBW>S@D{V?MC4(yW9#n_?iwDK=w1}Bv2DT9}VBg^0>P$MM);?6+1+oq3 zO@Ga|LT8N!d^}ruRw!RBYf@FibX~q;-2FzXa4cY^a7uY1@cz?Ii>qSZZ2v73>{C(2 z>HvwLIzyE;<_Vm*_1d%oTMJ*%`sQDV9fM3>EJSrZ+OVI|31T#Idt;v;!k{m>PY)(d zcEK*E3YG&l0krAN)Q=w7E~u>8Z%EGWj>|6=mz{;lz+=me9)q760;%)~!ZM|d+HLzq_@a7Kp{1ooZIt}$-h;YPH<^FQqm(CB zF}CG3bkBNv4(6oKg!Mu$zQhYuE9<^srB`xp_GS1hRFMQ;a%2ogo2+1$6z3I!OebP? zlgm&kb>WlJSR{(E(*nxIxI=GbWn5P<8UWd)endxQO3X2hckNp1PMs8I8?`e}i*tZx zO4<5u;Q9NyEKeqRs(2BVmi#^cfgIpL{;IkGGuTAZnEZxP;z0?bqkh;sgjlp+2fO2C z>1(HGiWf#U5{^r%2fC?oybb_OM^Pz#d$}K`e^%H-o)3#bMa~w$rJbX~OnapoV^^Qf z6pKV1#0zoJ95t|z(LUCi3X&zj3%Q`kNKh@2Qd-xu=tXJ+Ggeh9OUggwAJ8Z&x)|Pq ztZsK^k<{Fu@A>LEcN5oTE)16Z`cpo1`93oF=o28pL=yNU`_J{(Fl(0=hm|ktU7kpSQ01J{$^*i|JZnz z;0Wa|H80I7RWMd(9P7b=*qYjdn=->`LtYssix!5M^y$4Q=+tiOlNQF|&o-ft$5m-B z+oQB=d3r8q}H*x@}N&b*cd?nK~F%RX)iou=;&57`O$R{hi?NqhBH!+toZ* zJ}XCNv{E#2<2L<5qvO01EY8r9zw)L|&5~Esbt$biPB3X2V>GIzXz(n?0(?q4Mpx26G4@WZp`a$B)RX7#q1rQ5s#`v~ ziwc7csS(F*T;%a@|LN{4;Xk3~vHnjnbl$&&Pq*?^?q9zzRO_Mc*~Kr_pX&}x>dNIo zcIt8dB)?@}!7_Sc8sQXE{`hKTnPLrmO4|8stU%RKR-b)GgMhEOd^TA2NT~w~S+pgX zHCjrTQRQe)@Xvoa-rv2yQ}6nCeWPXqtlRvsf_~i1+c2~uI@p4_AO;>!k@%AMOkgT6 zRx=PttoZzo$LUp>t(QAL0nMk%M4twk_{g8GY)ljuFa}HyneCT}iRyFZbO8@5gwWqB z<<0)mm^3kz2VrGeOOT6hmqu*n867s2k6GK|Ud7i6?Ocxx-`Q~2Ed*NBbxE3>it`y& z0*{h{Y?Vbk#szQMq`yE@#8_HAn8G5zi>s!My%vd2I$Z_pD5usqM{FH?skYZll;Nc< zb7u;rFKM%&)5@8X2Z?VJ%$;;3AAyvBQ+KY?zsx_haF#0 zs+S=v{;}rpC?(Ehy7xu2HWLSSd2UNsqM64XDO7iK;1Jv?f4w;^T`7`w9q4}Xl9qe% zj}xAi1lpj|zM`@24zL)5LhCdC)aKELBReOZ(lI%D4uiW`@DZ(a!f_N=17J&M`4t0E4&s)(mRjJV3oc1F6 zW_(2JD{$d%wll0|6LG+q(5O!Qb+PMc5Zch~LTAyc*VLMC2()Bz6mib+m(x?oFDT=d z!8KYL7<=toGaFm3W=Ht=eWXEftfTBril3MDlgpS=-x})cp!XZ_FnfCtiGuPU-TaVL zha5fK&zTWPD(fN+1Bd0&kG96QO;fev$V$`lCyAr}h{h<`e?@e`f@^D7zQ2 zdN4RXGW;_fhjJwbj_+gZDIc+%G9BbSZAiaZ9bPCy0(Ge-jLhR z#4tSQA5OsxdLTQLq~P`c?)75s&ZrTop!4}>;wDonYsv+ChKI{b;uQvLM}fJj#?$Gq zMxZ{|o?w)iJY~eQis{#>0YUf`?|=1Sd|qgdV{JQHfFSWkbnVD4ke}ZQ;|jP@XhtoF zy00!GQAXLjzQ`(*{mJ3s*TxHTy<*Gfx&8@i8C2>jR7h3RAq6Ea-*VzgF^cd%u$;KWr~L~ zZqJ~N;Ww!zZ{JP*Fb8Enh$9+H7Ox5>zxu88Rfy(NR#VX=IvW0qB?hk(;-51h3fPSj zmX6qDMaCk(@w>HSTDoHU+1fzQkr9%OfDZ+q3sRDhlV?a&E&>H4<=MZv=n3-0mImY? zygdi2h|KhU@45uF<( z^Wwl_VX2jzEJpB9;7@#_Dsi>hf*>wIJ-SFOLplNKle4ha?|BNxt1DhcZ zdq?JR+pAz_!_TWm>&-1#tp%2f&J(z0VL|Pnu{T@`*OyPh+Y-(%PgfFDt|0cn6KF!6 z1Z|0OMB9sNTfid>!;c)87#X$PO$48{|~!_VAa6%EQc(10IT znFPT`(>~E_o=%xS;8&JUb@PW~9W3x%SX!~X3EWgS{My}2oqiLUz4u%VG^t{>wm)Yc z1y#R(QsnnBgc%$xQNc|>L-YmOt9KcYg%_tFNjNCUAWG{vLB0i|4dp%iIsQm$-H)N# zu`tlHDMUqLKiq(lRC%^j%H6QLM3lr%<_0o9Pj11jvr2Sz;7udaGXAbIMCK>wFht$Q z?hfBS5%-z90Iasf1DJnyrs8?~8y9IA1KZJ7iS6&rFW8$$G9fPvwsMtX@w9$3EMkjvQxz)8^;6Dp=E_P0@cr<@?@8+nzT3=`UT-7xu#kjjs(?Q^Wg4|f;;Cu zf2zqE#qFV5?_lVkj_hm18(`#9L?dP2 z6whB{U93u7hB0h&w%n5yipxCS+z_J7G2KL;wg~_GH~R`z^2dH^8PF{cm}Zm=jwql3 z>Zwg!CPZVjf2+^C<+XV|gnSNT3SsoO7#=n;679~K5iZ5@Ep^$&55y=a6Ru4jp8Pue z7=g@#jb6$9iLj@8=buMfz=O~Q(^ zl}u4whH)$g-@JRKNO({7ug;-LQ zQSk4K$$7%5zOBgGp)^+o;zBQzExyo@{PnAW=##+6Nw!xbx4=N=cwvslb^bvpji~it z`>X?O;(@a5(`kT)eGtxV0=2Eo-KVneXG0WYR`xR+ZMgY&m8xli@CN}RKiV% zXJ(D~@?!udV)=t7?)mv0aH!lEA94czC7(YldIKyc3M)5_Ql+ZuSBd?N$6WK96m`zH(kY0c^Np1T4 zSLeKA0wt)%9*!z{em8DE6rV5)vQ-xmZ-X5^`l7&YG zVm9?igh-x)fmF47ZDOw*;Y`_AG`@gHUO%5Go1_n&fyF7D{LMj}gud4&Z6Tbe+P03l z7-4=JMuO4n(saQcRaFf2VcTC;X9CV>GPs6QztB;PFX<@zCIaYBibJ&y@TKR=Z{P%20n_$30QZLEdt;$DQ5euQ-&!Rl^66Z8To( z$9WxjT)z{;dz4&eUB2BU?+8%sQ`W1JmST#7h(C`+K|;^>UO7_^#{$O@yoa}XMLhnx zEqY7zdDz*hEzXS75?G=nGedp}-@%of?}(Jx$r#6XS3Y+2daEC^lSq*uGK{5Xqy1P- zL=#Hg64A$Bm@)D@D!PiMXrB@21?^Qb;Qe;Q$r9aY&NRY*|EJp8BBVmMY-XirO48wA z9T)R@Ya@OpTiG;p?NaLHP|YKzIfk=^MvefSHSw|!7NbAlE^@B)t1rF;97q-Z4tG2Q zjrKRYY7gozf5enLPI$H>uI@SVelT@4{k$>3hBFoaP$6B8eywG?gR9VB;ySW!z6`6z zu{X%x{u$oeGP!Frr{9s0C$0b&)mSvfWHT`f*p*eXliju3Qm%8#7c}Wfr&;R7Jor*A zeE1-yY3A9Pg6XnaDjys(S?9iv!0u{`*&YlDJ%6t5*}RJtqJ%~Ys>gnBDFoSvsFI&= z=d+$ucG=h$y?b*)iE8F&P+uJIQIS1HO~mZShN8y_PTE6Xbq7)E*|%sR7C(2ettM=k zVPT9DT!x6Q^4z%dK|v+*rH*jxKg=|Pq5$!NUI0|!j-o~#phJA2s=u9yAcZb<24NHQ zoG^lqy~$&!@!YrwBq&uEcVn=-vbDTNOB?nOnD0@UnqzQhwb@|qn3P%I51UoI3W^Xi zP}^_(rFj2?t>U6@LAmaW*5EmmJy@^o{g6HIHF!Al(O>Hd=#TE3BmxP^<`VK zbmR2v0jZA#Asu;y|eTOUmd&j7IJq zi<|xipXN*rM_{74uP{vzxKs8^b=JhAV9qhquW6z5(VhdY2{YVnb4r-?8#YuYBL--p zOPHzB)Z6oHJ#o!^X+Ty#=)JX4?8rsiTo`&}}{voS<&pW;PUL!TRvi<{rpdimr)T zy7>Jyv{cyWK!>tVb^x%4PCSSk39eLvRwF{ln^8XCiplTEz literal 23591 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 Cu&Iv# diff --git a/source-code/Pseudocode/Value-Iteration/Value-Iteration.tex b/source-code/Pseudocode/Value-Iteration/Value-Iteration.tex index e8aac78..c0b5895 100644 --- a/source-code/Pseudocode/Value-Iteration/Value-Iteration.tex +++ b/source-code/Pseudocode/Value-Iteration/Value-Iteration.tex @@ -23,8 +23,8 @@ \Statex Actions $\mathcal{A} = \{1, \dots, n_a\},\qquad A: \mathcal{X} \Rightarrow \mathcal{A}$ \Statex Cost function $g: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$ \Statex Transition probabilities $f$ - % TODO: \alpha? - \Procedure{ValueIteration}{$\mathcal{X}$, $A$, $g$, $f$} + \Statex Learning rate $\alpha \in [0, 1]$, typically $\alpha = 0.1$ + \Procedure{ValueIteration}{$\mathcal{X}$, $A$, $g$, $f$, $\alpha$} \State Initialize $J, J': \mathcal{X} \rightarrow \mathbb{R}_0^+$ arbitrarily \While{$J$ is not converged} \State $J' \gets J$ @@ -37,9 +37,10 @@ \State $J(x) \gets \min_a \{Q(x, a)\}$ \EndFor \EndWhile + \Return $J$ \EndProcedure \end{algorithmic} - \caption{Value Iteration} + \caption{Value Iteration: Learn function $J: \mathcal{X} \rightarrow \mathbb{R}$} \label{alg:value-iteration} \end{algorithm} \end{preview} diff --git a/source-code/Pseudocode/q-learning/Makefile b/source-code/Pseudocode/q-learning/Makefile new file mode 100644 index 0000000..fb4b183 --- /dev/null +++ b/source-code/Pseudocode/q-learning/Makefile @@ -0,0 +1,36 @@ +SOURCE = q-learning +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + make + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg + rsvg-convert -a -w $(WIDTH) -f svg $(SOURCE).svg -o $(SOURCE)2.svg + inkscape $(SOURCE)2.svg --export-plain-svg=$(SOURCE).svg + rm $(SOURCE)2.svg diff --git a/source-code/Pseudocode/q-learning/README.md b/source-code/Pseudocode/q-learning/README.md new file mode 100644 index 0000000..c260ec5 --- /dev/null +++ b/source-code/Pseudocode/q-learning/README.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](q-learning.png) diff --git a/source-code/Pseudocode/q-learning/q-learning.png b/source-code/Pseudocode/q-learning/q-learning.png new file mode 100644 index 0000000000000000000000000000000000000000..59a678cdf002ecc80362b7cc3249deca547879ee GIT binary patch literal 36408 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 C=Z3EU literal 0 HcmV?d00001 diff --git a/source-code/Pseudocode/q-learning/q-learning.tex b/source-code/Pseudocode/q-learning/q-learning.tex new file mode 100644 index 0000000..221a6fc --- /dev/null +++ b/source-code/Pseudocode/q-learning/q-learning.tex @@ -0,0 +1,45 @@ +\documentclass{article} +\usepackage[pdftex,active,tightpage]{preview} +\setlength\PreviewBorder{2mm} + +\usepackage[utf8]{inputenc} % this is needed for umlauts +\usepackage[ngerman]{babel} % this is needed for umlauts +\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf +\usepackage{amssymb,amsmath,amsfonts} % nice math rendering +\usepackage{braket} % needed for \Set +\usepackage{caption} +\usepackage{algorithm} +\usepackage[noend]{algpseudocode} + +\DeclareCaptionFormat{myformat}{#3} +\captionsetup[algorithm]{format=myformat} + +\begin{document} +\begin{preview} + \begin{algorithm}[H] + \begin{algorithmic} + \Require + \Statex Sates $\mathcal{X} = \{1, \dots, n_x\}$ + \Statex Actions $\mathcal{A} = \{1, \dots, n_a\},\qquad A: \mathcal{X} \Rightarrow \mathcal{A}$ + \Statex Reward function $R: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$ + \Statex Black-box (probabilistic) transition function $T: \mathcal{X} \times \mathcal{A} \rightarrow \mathcal{X}$ + \Statex Learning rate $\alpha \in [0, 1]$, typically $\alpha = 0.1$ + \Statex Discounting factor $\gamma \in [0, 1]$ + \Procedure{QLearning}{$\mathcal{X}$, $A$, $R$, $T$, $\alpha$, $\gamma$} + \State Initialize $Q: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$ arbitrarily + \State Start in state $s \in \mathcal{X}$ + \While{$Q$ is not converged} + \State Select $a \in \mathcal{A}$ by $Q$ and an exploration policy (e.g. $\varepsilon$ greedy) + \State $r \gets R(s, a)$ + \State $s' \gets T(s, a)$ \Comment{Receive the new state} + \State $Q(s', a) \gets (1 - \alpha) \cdot Q(s, a) + \alpha \cdot (r + \gamma \cdot \max_{a'} Q(s', a'))$ + \State $s \gets s'$ + \EndWhile + \Return $Q$ + \EndProcedure + \end{algorithmic} + \caption{$Q$-learning: Learn function $Q: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$} + \label{alg:q-learning} + \end{algorithm} +\end{preview} +\end{document}