From 92ae9237d32f463f95ae9e1bc55af873c06732e1 Mon Sep 17 00:00:00 2001 From: Klafyvel Date: Fri, 12 Jan 2018 17:57:17 +0100 Subject: [PATCH] 12/01/18 --- compte_rendu/images/3_7.png | Bin 0 -> 27290 bytes compte_rendu/images/3_8_astar.png | Bin 0 -> 26886 bytes compte_rendu/images/3_8_dijkstra.png | Bin 0 -> 28267 bytes graphe.py | 127 +++++++++++++++++++++++++-- test.py | 94 ++++++++++++++++---- 5 files changed, 197 insertions(+), 24 deletions(-) create mode 100644 compte_rendu/images/3_7.png create mode 100644 compte_rendu/images/3_8_astar.png create mode 100644 compte_rendu/images/3_8_dijkstra.png diff --git a/compte_rendu/images/3_7.png b/compte_rendu/images/3_7.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5f4a8c26025f98d9a3ca1c459794299983f1a3 GIT binary patch literal 27290 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 literal 0 HcmV?d00001 diff --git a/compte_rendu/images/3_8_astar.png b/compte_rendu/images/3_8_astar.png new file mode 100644 index 0000000000000000000000000000000000000000..75ca3558c600724cc9ffbc2a7198d36937b603e4 GIT binary patch literal 26886 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 literal 0 HcmV?d00001 diff --git a/compte_rendu/images/3_8_dijkstra.png b/compte_rendu/images/3_8_dijkstra.png new file mode 100644 index 0000000000000000000000000000000000000000..974be51b73972be6ef4f620fc8bf59fe69c94f29 GIT binary patch literal 28267 zcmdqIc|25M|2KYYk*t;MTSjC}$QCB+AVkK#Bs-z(*~?ybNtDQtWy~nMv5c*R?1mzQ zEHkoX--h3r?)&~e-~0RA&+qx;_usGAOJ~kG*SW6iT-RrLf8L+ZNw{O6O;5`~3jhGU z4ot%s04VqXfIN)m40xrF_0kS_p!8MKF`)tfh0-|2gXipin&y6Yy`B96?R}g87cXy5 zCvjf~A15a-UsrFxbqcHs0Pq1i8n;Y>-u#|=9BP6ip8nZu$e^nHAW42Dl2-F#sTjFs z&E*oJC9S2~lsn6Vns1nD(~Fu9+nUF`Md4UoF`Q``@oEju^ck(l(~?ol9jdevnlI^m z_OR>O4NH64*SjIv<&J9)DwgKcsK4eaWk`4b>VG^lps>dV@BO+y;UAvzRvCL&-gR)y zYpRje+1dFLTUR#=ICr4>iN8$*9FB7d(bZEuEw2xP;@771_QH2?`srnfgle6xQ^NR zeUM8Q6BBhDj!g(uCj;9SUh+VJXTA?_wS7|-6r@(5X1(|TRZ{Zhd0+>ruR`>*o*oJC zVrbgXRUw!B70e$mM(}#%MQ0Se_{|&gE?w%bMk!KLm0s40P_(SsGt?5u~3BEst~{JVtb z(fy3E6OYmp%;DWtWW$a45zlgo*MSLIp(oT+8`uh0vvA_1l48opQ*HF%hPa{Y*l(_Y$|tgI8Xd+2Fp$1yc+5K5TgM8Ags0$yzVZJr`>A4*;KmJ7zGwuxxm5duc{u zNNO*)_*NGWGAi#!x&HV0>U%?(9Ja?L;W94S0RdhQ8)vtiSeKQ?r_0zo)GhbE>|o{v zv9bCMFx8t2!t{h}fyThbXR4t(dox&L3hyA889gfehuoq{nKx`WHU_i7gY-CEFD5j5 zCDk&rmClAKxeZ`WM`W?VR>YPgfn23E55)&iR)vMeYWu#b;C;s48n=iShUra@FrGu1 zBFFpKiK(qS^uOO0ZA#9JZ(@&cMFj8oW{TQrhgIO0q-~N%RvG0UbU7SG9I!6W@h43Z zI~vPmj?&`u^kJL+s=6bRDt5(5Vt2;xB&b;I8L|*h9*1qf=l__7ULuD&Y_a}8TP;nM zJc)_HxUJDwj=2xEKAHIFTkM5dO%C8yVt+~noV{Fqgbl`;7>}P2a)##CcAT~cA7xor zuy;t;9N;JY2R1#g$K|5z-bmZVof%(gD1JLCUEw`AwwhN4xr1gr-AsLJX?L|7Clnz$ z?9Cel!=Ch>$s7;O+2&HX^CZP~yw}@vuy%FQ^)w`VW|4x%2Q-#W~)AsNZdhF4O*s zA%5?tPbVD?iIw;Lm3FPCLKhMUs~+nJl`ElG@Ll<7eOf>hUBO;Wz?cWG$mW?jEE*S49M_) z!&CH8#9l!_qd#i$cu%`V_{T6~VzR>GeQw3j5{wcjhv6JU9qN}dDrnU+j6Hq&yQA#y zC%pK5>69S{@8-eZTb_)nEk;U}1+`X>qX@(YK8&h&?;h$j=3(v5cx#whZRH3P*6<$43kI;wAd)5E#G6~IruKk_`@RnDy4DKl(Y z<4`7QV>Vu-iF|o3%)ftq!DFG&dmL*s*;~Xvb%^vZ4P?2k{9(!C{l}iwNxkpsm8VOl z%70YT_7?E@$8>HpPr?}iSlATCe?(kvI{#@DBl_(YzZ>-Q1miSqZKHbXy!ySW*k+)Y ziwTI&z$ox(rwJmi6i};V$=SKG+sn zy^gRv4c+n5_TE#qLu0Y0&DiDdD1_hGAJxGa_KKAm&N}2xCA-`}?0f73zoIvhJyGe0 zycN=hlkc(3+wWD9Ze;TS!{7L$sPP$dhW;Z@C*6_UzKc_ZkH-gw_@mC$o{E@rf71e> z9tuRi?Th}?nV zJEH*=j~AXFilcuN3N6l*H!tNOy;I&6t{Z-sXe3I99gk@(DB20%IZ1naa@2J=QQaYf zFPDbz&PG)4&-Ywu5dsQ}OGmIXu9I(-L;P@(6$<%FvNQ4rjs^z+^!&Ah3w|M>vuSyp z=4{(|TWRVg?*+NX^ZrK&GkpBqWt-5|bK(`Z82}ikbu258{?u?Pg{?wOC$llYJ>qg4 z2rY8jK&60@x2RrAal*%*#d)xqnn_kG1o<|Gt%d{d37yt2g19s<*M`Z#&X} zsR8L?k>;xw2j{}(w_|AE?!7wM`eXo_?)31Z4#bO@PEo1cGp@%CzBS9GuVve1n#OU- zMXYYaEFS(p1UMHeL`FjP7)E9!jEBfDl=flxF5f*$j6ybWBAh!}bLVZ<8z%VXX%5F<5 zqAYIR22p7$(>--myG9(lMUciDH2=v&R=icxe@r1U7`D}d;D4<38IN*^I0+1ES;)hj zylCr@((1n@gpbV%>{V{%r6#@RgLIL|Zxv(s>_BN5$of@%RWZZQ`=eps>ij#l>`D@t z&BaxVJ)GcJnfn)qr%%gqW6pV_WrXK0{-5No;M>CY@JUO~9@gUoUYC0-cH2P$JL&_Ywk;X zJ3FI)u+|0slf5joYa>gN1E%XK0i~zEF399}1H(EO)~w#eX)709y-F>r3Tg z-)9?^k9B|(D4p5QemljH_~$uk^mIEPDkdklWtIU#wqCFQQZ%~f3!!M_8D=>v!m7+7 z&PlgYd&KKz?eIFQ61?y7rS7uV1GT@oH2rS1EAJE#g!+-Eq%*Fb}=| z{>&bsj3*|;ueU2>XPKZ%`2D_@m${F8l}Eo5N(&Nn6ZozOFik0E$)0#Mp(V-pOy zXFU^*s8t0S04ynC-4IiuKIMgwk#k|JUz{oCX;>fz_9?U}%{gy?@-um6j+ zA+-hG@<);m|I<)8i1ohwYrtq&{@+Vb>sbc6nanFD|C@SS-8S3u&Jo+acaLnVS8WcekuX$n{?*aILcf5Pp&a zi+oY@xB&| zPjbe7$FxD_T|OqmW|P{X~E!dYtB#x8g3@-m!8Eli8ZQfw(x?~{Bj zpFg|X90bv-h{PQgRqC4>nsM}T7-27%z}@{1xY4Ezfz`jc5InL^5O-a=OVdRjOtpBm zmRV~}Rox5|g!b_LeTgy8k|C2k9K}izi=>5H;ZVY3|2?zcA96mn;$91Ii>uC**lDbn z_}U?!z)d}L3ALHw5@Fc_+?nfB9)R&#lH)F{eSmo0r6-#ANOqk9|209&#(izm`=g@E z6J*L~MN7p#VO0p+M2D>I@T9y2eB+mE5j_N=kK3sM^7V;3Jg8}C==-A(O{lT-nC0ZA z7bqv)NFOB9VbL<|N3Uxixwe4&rOW0=<}e|YYtw0}n+huTvQud=cPf=8dM(0kB9EUt zA?w^q18YRir{ud(o&sy|Pp>%!zBm3RN=@IL}+_&?<>MatOfh2v|U|ziu z*{Mx}B0BF%Kir}rOFu_?TS(JOwKM#bFdj-!yi2@vGk)<|u z^z8Q4KgqR=_u^f8$soyFAL8fS13jDg!H6e^iNR+f*#kz2gA6LX*IR)KUA=?;{oqo)my654(_5^#I4D^FqwarRVmx`#K5*-wuEBYq zkFwT31S73;?%WC6__FNex5I{SFe_I%2g|gx5Vv)cz4v11!|egvGm(ygeDD-k8h)r6 zsF7}8$NQFt-wkJomhb8q7r}?z-F|dyQPC$eylXbCVzrDh@bO#C&q+#_Sz|*SkK1sc zWTXZk|G?SsBdFiA`_ESKLOuL6a1>Bu(Awj_!Y&B0Q;k`mrX@2yD}yn^u4D0s)Ny6T z$lmpbH9qwSrzN(XlC!KVd5wqtL{o*kTw$B}hDE0<%XLIle|;}51per;CXlYFZKljo zKuZo0Bd1AS#L&y;5UPUjHCN9GiYCb@N>!|#JmWT%zEmIVTZmX#;@o*I@BVv6A}rm> z@8GOfm~>J3O@y=%=g!0x)Q@?h2U#klsVtaDEizgIARD%+9r`q1lsQnJv-iYrQ3D|% z8+cG>o?F$5({|t%&vkymn=VpT2<>A*`%tsdmsVQV_qYebXfyR9th{zKll@G>f7mid zYOt)7Y0E@2@y&iAW7p zVCLA7S%D@q;}IW*;7bY^ziTe?z^Lo}Tek)#p;^>08j^M}DJ6{lF)XYF+!8Om0D%1Y zPY(5PJ+@>j2qj5Rm(3GG-E7oom;ylWv_``wXF@f3N$ zqz3rCa?Ey|=80x%l?F$=lqmBk-RNE}jzBd2eg#=9n&h11dc->=O0Sl9 zu_cECih)`mVwB19S<)Y;KMuJj#T~Bz&RF!j7Hdk@71jB&dJV-bcZ39UAa#`ShaM4E zLC$m$B;=s*cl`P8=@b;tjDugtBmb=Bq$^yCg@m8Xk2!$}aT}#MQ25?27Xea!oqx2b zC94igvWDiKFb7hWqnkeC5Kgjnd4ag~$EA}WlW%;L>B)qMiXRoj7iN?De}Dg(z{$Y; zq4vAI>4|0wMT8VEtc`&y7w|^|QV!({lILKwY3~pTs*?|C{;)cYGPGR|1zayEPWkU! z08(ubKfbh>3i%5P2UXdO9kKRN8)W%7;{#f=)lY?fd{;^$frR%gnaQTg)DaVaWz?*x z`1~tcKjFnl;Ljx|6>1>pX|n&yHD1c)JK*Z`C>HdP0jrug#42c!;y@!}%kKxkDE$g1 zQ<%v8Xvk>>bM1sZmF2+`=IoKt-nb4DrinDL{Q3a-`9T9&C#fh=g%nP_%tY zydCKMA*Xp1caF2@yjjn>hu;u;@?uh^q7Lm#%cyt zG$}@8WR`=Y!&-m$SxSO3FqS3%#rn1iDFb&Dh*l-x0 zY$&P!^7=fHJk=CjhCWx3(EaC^D?=`yoE035yBsM$EB})|CA|N2RwD;7eS4xWId(jh zlB(7sDQ}(d<8>(JF#il=Ni}BQ-Hca%&u!uC5Nr6+q%uFTb!mAEnYigdB#)#qfkxh- zp-$NlnNRHSr?|)b@?XA^S7vgm4 zs+@&hERSZWzO|N^-|34q@~{m5G{?DW6I_ z2IMGTe<`D$ll;tIIC%$AszTB_QQOL47~;YfVXfkuy{y9%q@1>*Wq6Ab_Du6lEBl?- zGqEy9qS_IS6GML*q&!3h#XzM+T@2%9LPT?AXvR^(!j5x=&}=7OV?>3*?sX1&v5$(g z?s;oU)xnJs&v6HVjfZpQ+Iq$8pvU4(Htg|%1Y&Wk*npkablMTGo%~FSA6gX|yfKXG zqTy>L(`#i?>!O6&+`eweAf?D)_U|4+Kj?p8F?h?m`_BrL2Ni?v`XQFIO0cXl*7U6@&A@8+zG0-R7@2EWm4*vASG1kL;gKN z!Flr00&?QYP|3 z#p#{M;#aR23I(rZQ$WQ<_#&6U$-2eNn#MCdt`P+>AlTvSCSDjEv$!Jkg z!f4JaLV9&qY<>KX;rt8zbfrs@Hbftk3G;dYSwegnHBe1UMhRm}U{wn^nZ)4@&GqXC zi*p%|s&^mYd7rCc+C(JU2Hl|d3uxP z<*fKb(#$x)nZc%`ne5~cdU3jj=#o-b6H6A<%g?zFOn$-ygxH)S9Q_BVjf*l>!n$y) zugmr(*FQHshR!9>@kBFLQ@62z5lTXD6x02}gp5S;m2%VdtezVd$~JB?9vVAsv-wiV zZx7JbK1Q(SaIWEB5xRFj!&z~P} zBLQ+q6I)#B->@em?-AVka_-|AqpXcU^b1?jT8^8o!jkuP1|rO-FkQ=m#cV3asXS~F zQOTp9_wN25t#G2f(i66Mt}Ce*?<;Yw#Lp)&OndDZu_Cf51X?^=2?K`p9O0TUif}w3 znR__OmrH-0r|LbB@I+^E1FC0snd?7car65eJn8H#Onh#g==14QGeZ%VWT)4DaZahu z6dx%aE0Lc~{7IH_G5H3^)~U7l^yMjql3=S}nKYatU<@mQG*|*-%)hk&rVW0&WG<;` zKY~ulbp-!h5~Vag183|sez9i?j-7aM!b3LX9ef$0JW6~uAO0OT{}cdplKIV{#?OejkCD}_ENCW|KHG#l#-A9Fyi*GV#K+{9hH`|yQinnS zgw55U7Bw>8{8_XZyDRG}sCIe@xwRg!^9gKaAl<{L!@}SFN5_Ja86pKX9t9h}mKvZq zyGU9@Tjw1kNyH~+v&+Xnoy>Z7bu1U%zf@vY)!!df2RwVR@L2CjvVHl2FdYPoVM|o-po_ZXT{=nX`N~BYL)MsP zlMxXp0Hd<2S8mev+I7MeDQn@HILra z&VXUACx00akosjg8@Sqv{le=13ci*Y?+!ES(^7PXT}N4zpzhjfpA%fAv)Gv*<(Lx= z729QXde}sj(`wHFW7fA>?ZJLAlVg~kAV_t`me#{A%bu%2g?`30F&0V-jfsz5aTqPF zKsdatpRlw?vbrPF$-SmJrgA(py>{}Tnwcidjyqg_O|e2xUqw)BbSd&dpCuf(dhDKW zO5>020M1)4n3{EctvRgE8p@$c)^dbh*YY@J8r2cySm$lHGkI<=#&0o%K495t`!l(= z_H_n;yU_j{O+^=^=Aqb`VJ0$4s14if!$`;0BbKx88#as@lbFay=YB9oVv@Pw%n(Hh zk7xDIR6=pslD61_l18!;(A?hyvjP#=SdMQ->wE5l+;NwG4*rxn-1_*7r0e3w&Re zP2Wizj#Drl579rYMF`GZCtR$E4JrSwrzzdtbOskw*b&0&DhoP)`D;U0(8VipAJWdy zOXuwABgRjDx?8-knU3hkxkSR(%$%bnpYy)>Xz2;>Q*j(7|6H)u`N$54`spSE8qeacTVZi_PX*_i~~=7>IJJ zPEUEr?mb4{b(Y8Mx+2IP8{djR+>M191sE#mqiI(U9wIe(pJ`~{C}mQKyaC4J%RyHa z%?ck@54|!*ezGFehSm4LA3Z_f!z{y(PdrV%DHCaLG;kbMrTVzU${b6W8Lr0LyuP4W zy)i4o6HAIsxvH&++UzJE}`AD&A zN;1;|S)iZ%*5;>c`GEVQG~~H;fB$cN$;tiCh#v7m5k^rdZ*uCMV85pn{0arDX>vdZ z8!2b}PUJuNmlcNh2DPIW!xk=V+>@F;Uu6&5*tMbpEr?+*<(%v9zVHXh+SOzxv)}42 zJG2u3J@Z(&kqy-N-62^uCrIZ^>&=zH>fUMH4MX#oOTx=P4#TvC7Hif%<{q+fyBA>l zA&Cz9abMntXGyDr__E|ICyu|cRwNyQjewq?rI3f3K!Hxf>!zBONfJDg|D|Fa{t5L; zY%fI0%AcB6@|RZXmiZyqdzbC~KBWyy>!GH92*vcEULNDh>QjbZOh0-oi@H!$VB|d) z)KPIoBR1s&;aR+X@{BT&uMUR#k)7$3@U$KjIyu{8=aD2r_8eCd&3HP6scJJR=-Sy^ z4=6{_ODFljn@ztEQ!J)-UcyT=&v1MBt;8hvFE8vMUGp1&L4Iu9#;*-|c zcYj7QLjef7(3bP^ts4JtCS9R-Yl2m%bCn?1r}Ln3_ecY0cKT}0Nl4rh$hi^CSn4Hz z3F`v#q2N11SleM?XD`SUxH;^X?AUAwvX-AEi| z>k-rP9WX;+a>b?xY0m2*IO3DdP{#aVZ@UucaXp$zCg-OSIA3u**X7SaDP&S0;g}i# ziuEtavX(R29en4fd066lh3A-5+_AFU8l5!j;(YJxX)i@qUu58+r_f&AO@7Omo<7H> z0zs$7eEX?P)%oTE2wtE!V<@!O67N-YR1V&G)1hrH9}VVQ&VUn~a4W^!+Cd1OJ+IQ< z&L7S9ltOcdVuLhwOLq}RCKb!{d$R&xEz9`juSGMG$N|6&Y5$Ecv>I}&gG4m|keg_* za_7y#gBS=6Z`yutfp`!WcnhLv!1Y#o3}b>Wjb+LPSx_=azPoCjk4?FDrI-S$26`PJ zC$)1{Ah8?o%79}80WKd9DQwIas&P3wpTC`&Ne&zeN^$j)N;^nwq%x6i(_G~sou!t9 z1CO*oLUk1OXM_3kukCHEePE6>z@3R`Qvbz5?bLstNZlP4BXtNwE`iUdjt$F)Ml-7o zQ-I^ygQCFa$*khetY*wPO92yR{{u3{tsb+? zF++G3wA~)8+3AFKAED0-&|TeQK&D6IkHBS0;Sl4%T; z(J40sq5|w zy$O8Lv!tvA%H%&}2yk_JDi8e^gtX3KJzucqIp2Wp%ik-1^EQ-*_b-hJ6+OVP+bEg@ z`^4Z>bjqqlEX9+QzL&I?@&wB+Ng=&Y2Zvt$4yrS~9O}nsYCs*y018{=*!AH~9jzz+ zrpP@#r`P3g(K0!*YCh%L!*|iPsy#zHaaY<0MccJ+GpU{D1y^zQ5xXtm8s(*)^#0IV z`GaklxkFJ}vccDkiytg^pH#c0Alox>N2W25Zd`tE(k1bSGR@D;P>|406Zz=DZvC6b zwvmPRKz4-%n&aV6>@=09o^y;IYCVsis&@_$2V6dpG?O7+aHR(=_hv+}uKL>8Sg+S!9ohygc< zUIdhc^W3cM+SWy#A;JlNwy4u-!HNVvJhRGNayR~u`aY1(0P^tZ9J2!UAT^c`C&^AV z4KEmP&54)sLXAP;1^)|$h?yGffpHhi5)@UKVsuJ$R}UT-1SKG{`lXVz$@)yE_C8D` zI`v!rAsIxLbQyQe58^`u#ss?8MfQ#EfaHpzYcg_W`i02lz{=s*k_|cgy(BmGBG3Xh za$>)-PO;9crg#Y)BUns>hEH6UG3qqjE&!N1;3HO>;N!Ig9skA1 zmrq{$<}6D{Pi^l&d%b?(_X8*mWOdst)w=6jnE5GPwEI81?d-Q$4vkO0wkfpZDU8X% zbvvK0diUSN)qP5x{czOtN9!iHsduK{1==#kUq^Ko&CJ(CzWs9lJx~^Rj~?5LyQ|a` zLhnj-rMQk4d|!5OO;dkK_M~Ek!x6?|Q;8DXBFYWz?s*WnCAYt6Y)j2VS$rqU`8o1-M*i@z3(0x!tVec9o)HJN5avKKV8ydsDL=Arb?Y`r zKgHdG@c2Ui7Z;OW$<1;iQ)nST;4MMwq9m{#xSrYMm$?q3i1&;uj(WLZJ|cGLqfOyg zYXt8bdzqjt+)QBbsm~y7bm|!5kgV_`X`e?Ozr@eW6aVT(`IRL$;_6Ah%sN@{YbZN@aJAIjK2`_Si=xPv86>|MURH8?xlgH(W4-hj%MRny0 zMz?9|;p_`ZnCQvcPlPvAXcdkXSG)}3IMu{Rkm?8FNIIC!=27AHS7W5yp3XZTq+mpi z$eM#pQC*!Rg=gol?f1+okuMxUZQ}&WG%bD&j4-4cEsUl9H?Lii{jzfRW2%AW&_44& z0~^6^5M`de!r6FRWLmln&T7@!E-xqA^2qX1Co=?w9p8+60cH>)E%nQ<^QcI3k8}u% zzCoPHU2{L?ihS`2tl%kuH%|o3_kH9^*W8CvF2;bM?jo2CiyV8_Z64N6UBCzKiaoe1 zuFn}zu}mt1iGI0n40b4Bk3nD@sb$Gd$KdKkGfUx_Dv`VC_c#}t^L(Zf3#9&T=PtSt zn3EXb{ZKZ<4fa3dYlsfq)OWG|a3=jQ<@kG&%9PZHsEL$c%;?xb1?p6CP@^B_=PYwA z_S4}`uwH#>gdXkhUS?s*0oA{5BHkSgD~Vd?9^Herw5Uv3n(uLSopu%%39NXzJRCK! zE9Fr$KByrpiBsSM24NS>I^1{pce+-zV^c7bS|Ha?c)L2Be>V9)=n&^0c_DSe3yZzX zH0KerL1>wQ0hl~+ivdkMcTx6P!U-wq$8Pc$+;XT^hsNQo7KWpr9#Suw@z9sfl&3N@ zwBgDZOdEfEPSMQK8Slme#%D;jt87>QJfoS)u_n%;2xN^sKo9@@vR!j3^Mr>#&J%6R zGwZt0prxD$F$-SRN0zl{#pI%%ja&7dWWYb0Xp4dlBn+say9!|up)TFv0IJU-62MM3 zu9fflC;GUUP&1ICS(frZJIDPJkf7Z3GOM5mlfrLuHjJu94>vM%;+kxcjk#pdHw7=vt0g7)c7QyCyuA#m{c$ zgRkH>t_1l!x4(;8SZk=oXt!Ecx?vOo#^}D6OyW|CMiMvGjWshbmSoQ}e{*ZZnu)}c>bC8?xTsUl3Q zFvCg-|wELtjfy-JF7xsdL@P}Y~{69V6K~4gB7KhAN*Xa~4n~9MlXR-~R zzg@TEKG5*O93R;#g#E)t@6?ibaSWs|q*l)$d59__v7gO(G)uIJ%1o#9%WR%^E}`K);)^)JK*IfPz0Lf`g}mF+2uo#jKM0V2(*GRGCXT z%=?ZZ`on~fPNu0QvgnZzC(GbDvf=X)hrl3hTGnV%04I#&5e@(Umdm73muiKRN7UMCZt9%_6;@I0R&7$W40Uk2gcb~{;H zl=~OvE>7;IuLOjx)^lpDAIu*xn;d2-FL6J@r{UP8BCjsRiEAUma_>>(OpGAW52hpJ zk40{7mrdUg;e%0ev#ZrZDI%Tk{Gg0zWZjUtu$hhFQ4>|5`fnLPb@`R({pW-;hSB4n+%D<@ z`6QPJ3>JV}NBAHmU@jT0G0g~|NQIfe;1$r7f$`rR^wU3Hw2=@EQt?5xPBr+6MfD|6 zn1E{G&>AG>F)z6Fv3nFyJ#g+Iu*soik7fisLG}UwP!|@`8%bwQtxUsaH3!(#6M~&U3uWD0CzknazM`5{rwMRJh4;&>ThwxkkJ9aL_wP9KZ>28 zRu)!a&TKFz&$94qbmyQePSs840KS*jSR5+FQn`7^eO?8hdNp}E$N2^KH2*#Sy(m*g z?+=Fs*2eE;z_77#K#Jq_g|1iuf2nO+DBVX;y{fgT0|tK(O;fNE3%p>J0<~FhvL_SN z8sC>vz8TE9)0fs0XhmE+wI;gdBX(Fh7Xo3TksPbx-c>v_kz;@1`?r6Q6y|l}|HWJT z_#{faa`gLr4bhTq^tLtaGmn>FkYuTL@@PehjIf=^ltkvxjC%V$wo8#?U``I2$O7`6 zcin4(^rmY6rDTRHc}tm^{5uUYg~t|X^faH%F*l-Rdv7p}Etsm6v@Y>d|Dv(~P1&kv zg>Rm4sh;O7yw-2}WY!a`so zfT_PHje#H$7FIYU+fmdTzCysZz2v2?F6n5e?)U&yCnE2WMN^x)$=3(kW#7DNmM`G<-)Tkp6s^8SEvh)-+~N_l z7Jq_o!Px1V$$x^xDG>DQze90>H5zl9$4N--UUx6m^|F~Q<2na!&sT0Q?2GE`eEju{ zcHk9nxbXE-$tO}%C8`u|kNEC`v1rE!8d;Du;|A4^v7bZW`=@Q?+W^_1On)v(4*wR= zMfzRXqUAB`ARm+gM+NZFvr)iYA}E!s_MZOQ46rMpG@k`Ib^y2^X>Se`fK(Dx=@;nn zk62+rpqfFzOe#=q)G>IA=2p7^n8fEJDS6cUcCakxtSEXm3Veuz^pI%H#p_@Y3N9zu z8MN&FGD{>S3G@VPfEov;3c*?(Q0tg%+M^j`?a4|~z*Z;_qazRG)Ipk7f10tAbPI6( zYTnCC3s?@w(DI%X&?$z%#Llup6U#*Tfxi(LJ}SOHx{&iG^TPW3Hqo=ZDnLFd#>pA|yuplq8uXpHI?v6f`yz2f*=z>C zBg#G3Yw~!5Vs+kU?<%ml8Vd$Gb*Xlo&~!enPkT|>4Eqw64tf@>yx-su}W788(DO7>3B zlC`|#yJ>0e(P_zW;yKyN9dNe=_e`a@GQV{^Cd4D6ZziCc=lj;HT3@Z3%6EuBYBXrK z?if->r!bU1m2b)LzddH#ydI%Vrc=3&U){73`Ev9UBT}dvSn*(4$8*~T!Mk^Kdwl0@ zg>7cl&Ns7)vVtNZZ6DHB8-rV2k|~^-0#o*fP3zFYk8SfBOf#R%tWX@$C-trg2xzmv zuW~dP)OmaXhjSEGnx9m>>K(mncJr?Hw@b#ijpImLjVF-~>54Z){mfZ9OMJ&P6|E&# zl6v$fe%nbn*_Gc)PJ4m!vQW>d&!OSI2|(|Y0!KAdmCLUxJZ>AXdP+1JNtyoOH|~82}dNLnofw?=OGo-3&0! zdsBt;pQ)%G*}EGiSLGGPIRB<(Bt&9RwdF8-ZL(IKf5eO`cYTP;CIxx+D(ou#w4v8B zv-0*r(qZMa%3Z&4tsJ5ISS^v zs{vuQ;jiCL?iFe61nU$#EePJ)duwkFRRkF*zP`@V4s{mFRr_FM(_EK+IfVebOLX$` zO(SX-I@5u#XAgt3sQq;pS%U*lkILNtbd&L^fC4s5<6@N-nqy0SC5O(5O~Av(aPnI? zD89qYS+i8BSI+Z=j+)$Bj2Nm27&$(%n*YWJsh+S8Vd2Oa(bRO3b2luhN?v9MpDqc@ z)Pt8Zi+uTAVK9Ln*qbSLda}kbwngLgxo+nlJb_FqFpD_5Rkte?o&Pb|H#WzT`m@L~ zdUz$IVx%_J&NNxkG{Wt{JfE+sVd|O zf&w1{#xOtA9xl@`Vsk=%&0`jbTl3!`ko0PLUSOEs7u>~sN@VzG`RUNZ={OTswO17B zi!{8t^;j!Fiu8TP)ho9Yr9O{_S%_LpI)a&L;C#o2$ZfFp5lX8Qxxs9^+LW#C@hf`k zfLJFoIxl#jd*w663C2VpacZJ^S+I5HTI4Ix!orvz{jPr%Usbz$v+%syuzCkFw~zNj z(uNTuC~RQ818|kkAor!IiPFSVru2z|n3RnszSvn!kk~6t245iEnoCiXelY+Lx94U9 zN;;f^$RJVzE9l|gkQNjp`MP@@r%B3jmW*hG`D$AqJyB0|_e5(Q-hwhVyWW2-OnmPQ z(QsPB->o-voPo_5ciygBqm0k3Ab2?wLJKYf6KHaEM63_K814P`_4C;~@=vVz!{6tx zdbd^1rg+D^G>>=N+h$@XDDx%pj@~Y-=xCYuNd5%#{4;I&Xg=9K<;_Rn-ygy|Gp(GN zh}VmIE=E0v^&FQ{38amBLIo$B@``Wg74Yu0ScbVDLA1`*<(43VPxZQ798J9|c~>%X zh48ukr)6ejZofst>O-R68mFQ03Oe8QSI646lqR0(!U$(~f=Y+lGiD$2?Woi6_I{-x zGv-wP5Ghj?5{3I+gtq-AoLO%iZijf@|4_!ed{oEypct(+{a{D4gE~Mic;|*TqO$3M z=RXW{$od%Or=h>4vyhI~M&Slw)XQgHIy;dqUKV^M`OL!^~$zX zevVo!GmtXfv_s3O~Z`cO^YD@JZmLHz<$0SdO z3>Ht#Rvd8?o3c#g`(5jcXAwE`N)}y?tGJ_+z>6i{cLNS2Sbl}+*-Rcf?n*Z|E*Uqk zSeKSI#C>6%Ui))Rv@qpPN)~~tJJzfbTv?B)kbaFbDI3=cH_R~hY?o4dKo5G=8H}9} zcImc_--kAGup6y6kbkypazio<%?uy&} zh|Pat1o_kS z{3lT&Fdq*>;P@}Wzz+VxT_W2-OJZo9(BcsbVELSuCiVV*s^pZ^dJxNXgbqC3Adad z#3TNd(sN2l>vgZ!==026e~q=}c=yCi4^b8qD7w6yUf5NXrCdSp!IWH$&z_9_@{XO& z_>l1UwOZw+7a`}hu z@?k#VMd+jOqTH4|LSwdqf8b=@&X25_p~=~sAJ=83J{l6>>Z@#9a!_lYiwwyi0kE`*yrSf0oz z^c^#w_-L3D;p?(b6XEF5mLk4-^V8@&D|=bIp7^6~Ivq`&TZMmYtdP5$hts7zw7e?x zJZI^21M}WsdAnE5iHFU*R&dBr?83r0zz2q^8>J3QY>J_|s5)(qU`Ms31*^Q8YP8O< zqF%L@(+Nmbt-eS0FgrY!G0#ltP>rTLuj%BsGz0$>42`flajnjgSn1p~bu+sMgxw1`Pa?uR3MCmfJ{-|IIB|44H#?6i9WVr)6wkd^ zT`SQ&asJM()w+qMvNbAYs%wq99<*=ApQh8X{@N;tG*cRW$I@$&Tx-4KG{|2#|77BH z=RO?L$goxe4{IvzLSOUqi`kyg(z83zw0_s2hVcy@rWeNtVk@h+U^?py9v)=tV93L_ ze&3xY52+M5gPhViItlt6E{;^a8P-BRMRE?gS(+=J zxevpv_rk^WZ+;)O0r$|qT&B!eaj7a+LM-#f>Yc2CZ@H3|hqtOq^ZKMN`W$KkDrx}P zCK{?9CpP?T-yv9bY&hIPBP53xuHFXEF}?FGAdMJ1wti5(R?Z7fKg`CPgLQd(Sm0*e zh2I>C=VydsQZ$zNg0|1`Ljup#6f|6@?Z52Y(Z`6|5 zDw_+TlCV~%T0J=?8dsRn<Oe0nKW@eT;E8i za%ON*JK8%x6TDAMo{ zwP?Ck%uJPsb)r+>P%%fCXsUJ4iK|#14kXp)K(5~R__Q_r`*G~&BCfNaI6a9Y*RB3k z-41iPe-yKdGULs2T0WGrJ#_;PKvLV5)vIgcs+GQLQk# zQuBQonzOWL@FKTGK*sye5hZqVUS8+Kcn0t8r}E>HQQlUiZwAR&ANu12ay9M^1k>Py z$Q!Ce(#h0wLTcYFBWvG!zhv;Lt5Lk~+FgyNRzuO(dNoZBzjwHeI;wnEwwqpP4IY`Hu~P~mlLF6d!Z79=5SSEvfz9(J%0g0ROOX+rT4l~Zm-RW zx#oy(lPh}3`T#F~*9D?4@U3!k%zw{3_(gXa`^B{|5z?$~m`BX!2VD~P`II0G$y zY7)@(#BoK;y+>QmoyrkE3dcC~K1J7+miG4hQnT?p-V5FF?RBHU?>g$72F@u^%Wn1oJm9MELj=E_ds)dFR8zmcEG_}q@woC86O<0wkZG9+a}_S^-Wb#1cj}(7qztn^UWS~f)wChu6usVf;neq&Ybz|*`K{cDb;Y})W$^F17z7CW-~j;uhl$0+LP~|2$sYgC^Ki5Let+VUV$D!EXe3eoOslNQ68Y3nK?61px!<%eb!s zS^K*TngN_%mg-nu1nMPw(Jz8tQT#I445I?}9UM>%&Y4f3!B0NnIga-%46w2Y6P?uh zhBM3o!67V!@wh)6Jh(*d?h%x@{EJkeDxf3h?>^ z@k!bl(TCEnd`rKSNwT18ebUR2n%MWI4{_g=BBCT6S*3TglDEAF#_WALd_z#4&DJ)& zpG|`s7oS1tcqv^cWYzxa6ix)dJq*tjRfIL9I?R@?im zt^B?4kQB3N8Eu}3gzailv0${Wk#o+E^3-yI0g94X*|r%q-psT}=-#D|I=s%nN65C( zyJl|e=6H|$-<|}0yVY;iWX4jHLodT^nOi^n5bqe8XK`8`US1p11;B>Y)L_2{LqlxQ!lIX{CNZ@&rZhh@|0s`YIVTlTyUDtq zpN2_HsuBzsS_s&+2r4bXl(y<1s2b7v4s5~+^y*D1K zOLl+6lurHB#EVw~9!~HR=*WTKtDlG-zw9?mqkQZwh3$VBa4&{MyY`!0_+e*BN53E4 zPtWmAgO3#P{TioA;y5Ei${f7yP6~Vqd+zAF{#&_b(@8`%4;S&Uu!uVbN7499yI%@8Rih>hb{mC#Gjm)R+d!FJSpq{j6{7Ep%y*9twkj(& z2>SIZiQxubC@X4O+rW*dF61-;@eR;N3d+e@1z!DX{$`U=iU_+B|1>LFglA1xCom{v z773(}#@auerEx!0e>D+f-0eGYh}Wf?drR!yGsrD2*c)4$s|^<=(^{NgwVQK8*(fDU zz0d_j;B_akMJ}>=N-;{;0Q1D&GoyHb?=N?*9+TZglS!1Gjm}!7+IYaHccQ#rN{#^t zvLq_wvIjnT0#DEz7dt+vV*^d$X>v=+vBL>TnXM)g5-a=Ei)5L1TzB6Tz{=7`EuRkC zRI_gR$HT}Y;{O#8H-LZ`!vF+CnDqzAy%CUW7$ERoE7P=0eW`NjsQKWr!e5b3__KCO;UD^=*5zT|FPH8&M>h#ul1M|tnD7R>u4Jnt~sz9)dKa!8AZl-ad1(?243J$8eX;8A^&XhJn>ck9Bp>!WG;Ce*3BK)?W(^ca61x4I zxgXJPK|7QXd9Ol)`jEveCp%hrFS^QaL@yx!X`JTbtaZ$7A0To%_ z(I0|xQN_`M6nmTDXEj`Ip)_#;IYLEK6*gPtBsGs+7AD*>w;dDI)DRnmFS$^?sYSOV z1rT0Wp18lbt5Q9Sn(maj3L@&Pwd&J1jB4a;lZ?@ck2)4AUz0L5{}`KQCzF1}w&npW zdK$a19pLGfKrA+utKjA5R3Gd2IgeDIUGbKmIB{&7tqG}f#0VcOQfO)}--q;)(A*`| znG{%kYfR$qylP;qEung}d6wwND5DIc8uKOV*+A?zxbOF#a3^xq+L;bpgjbb&Pic!ph_&T@yj!D3{cJqSu4&aQ@jOE4oKY6EA_%oG4FhoDx=14^}R2HKTE1T zFoZa$&akK%Z`4SkN=BQSWar##8Cl*nJaFsKK-MfK2rA@7x0DG`oHf$jzS*J{7T*?e zBSaa*q0lSGL#HbnB$rJ@qO#mdJ~Rk64+ucYi=`eV&qoK{>0P=1ivU6jxLqE31ckQC zbL!lisyl9iq-yZ6`5od1x6?scgPB-|N;G;x-AcFQk0G4hfK3Ju06ia4c7D~_1<#vM z_#}H(0N_J{zoZPc;o1cFS+{fw*Z2VB_?5d+srs>oWTt_``$3&9u~Z9*M}z2n1EpX4;D*E&SFao3@a@ z1<2bjsyjRVceFfIq!9iwhL9KPz+P5RIWr(dGg5DGK ztu1yN-9_j^lUfnn$sCoJiq~TvJdnH+C|CeTE#tHP($k=DI1NL&g=oV*_k|;8Q)5~0 z3gWmiYK|4_jAxV^5Vjgqyfy`pJS%SoCh8kF{+@J1e42!+$63nz1EPG2JAG_~a?VgW zC?qGsn~C5R9;t~PWQ|$P!JUE~f*FBg52ah!<%S-T(D?EEv`U)sNrJFB+TYo;V@O2Q zF-#^-{*_wfiP}mF-hrJtnnaf17 z!^6!A5$0wKG91cW_Pry3uYQkkhv!doXdv#jbqb?`cpk-X!$qetmDhJdxF{8lnLy{j zc7WOFh4+8$RGPD7Z`YWz9i?{D-qck9wE&4w)kZ4(pas@9UMAgJ2$a_qo-EMsSvM-H z0lk%@67(ke_Yq4_3gGz>zQxwL#=02313RPMi?j6$1yuE3Orb-;%pBxZj~8ytaMyq9 z6K-y6UvO*fFA8c6yfJG(lQay!DTa`TSU3wzRU7g2XZ2+OE-4cw5Z-CqKn_Um(NuLv zIB*|Ipxr5-GHflHpsj{LW67r~K@|W^VA+boDa^cZ$+;k&Q}WfD`@NH|g#cJ;rbF)PuQCR>4-8XZAaDrhRP}kN8e~Bf2+;jAPJVDB?#V37!9vi)`o{0uL0!v z_LlzK6G@r{nrp0FCBn}^Y2`|5X;53SR*h-dEpr?PhM`)e|7+@RKZOY9I=MIIl8kQt zk|x*#R>n@RU*g!|+XS6v)OKDc&reN0j=H?1zDm;DzC>}L#7)zQycF!ts1jL2;pq;@@4mR&Lco-j{~z8dbUaiaZ)CJb>a5ezuj-%KJ?E`4-m9qNul z-bsix=fqz&I}#x(V2V$4b})6Cc!5nEUL>iN^XbA3G_B2Qyb?V_phiWv!IVI>&9nVH zyZc|&hKY$A=4LKUn`Rne^XZS2*FDXusNM$VRwevhRUZ}Dn9jQ@?N__&Q}D}GdYaz0 z;jN&W@`u?xqS1=gBJE*kUt=VdL>#9R=F?R-0Ms& z|5%XZbG3l<;nc~s=(n;_Nnxn5@!TigBK9wc1h1M>-(wEcx%!(}v39WtcE=4p=H9|k z5`WCorA#XlgwfbO-BtH7pC7F4Idi%fk2h646MaPJj9+br=ly3UHyoyG>{A~hdZFm6 zAhw#&Uj9?=kjE$I#3Bau)d=fryPZ{(%R2(JFN(=PfLeB>AnI21g`WLk03z$dc|$o$ z>iMgSiQ*T2(e(G=6pKlCbJUxY)eaj1J|0)bQ}q7EzGbP!+@dzBUBB}~6Th~<&$8bN z2IIyj0w%jD({uwO`HNCZqGpirvzG7iM8Bh6PRoeLyffQX#j$5xYK*3Dtoiu{p8rpZ zV}&+Jt%@4y|Dt8u_cOgZVl^r%QIeY_LOVa6w97nji07xBCU0i$%ZReVF^ZS*~X9brm4-Bmle0zj(fIpizs^HfN~qY19ysD8A1( zHGA$fWmRi~7)H36UQlAHFE&=d^Khetk$lXbz>$synY;#BnWz2qmoPq9Kv8(d%59k- z@&I}+?D(d4*`x1k63v^$OwZlkeTx|xw|l^Nk|853Q&GRnRnmTcB)(l;q|UEVhP(pH zuk4Dqq!45T;1}nQe*6X#Su1?^kCU6V_sc%0tGgW!UBQv-HV6EkMnxy=wB$Yv!DcEl zm_s{wzW-rkH_OK81ervI^BW24!83!Y$$gCaQ5xCgE~2Ift!p9f!kk1z66^p3PN!X$ zGkDe97>P?@5}}-jw^^$XMb^N_@0sHnC~R)DuEj-4CRt1A7bXP9;a5>nWa3CE44s5a z`6na2}0I`ODMOU3h9=t;=P-~5o_BHuS3>W-O zZJfzShsR7|(%zNahoJq+4MQ*0GNgH; zxn7Gu9*G5Ja83xTv#f`+F$cb~-5IT=JnS-tn=Q$N$&-VGO(shTROn%IXCsIk8BaT-(;^JTW^_DL`@cD067 zwxhTGCdSs0Xtao`azNV%5A7Z9rNHy}doaa%v%bZLqvmtEne2w|71oaqXoS}(<;k}Xa{ z)4*1&>F3m`Ju{WFZ6RF2mog%X$|YkAn3@vOIXO_UQN}G zIQA*toP9d{S=P8TQ-RObzW)LvDO-f_kpt{!q=WR85{zr>%QbyJS#yb7sPnT~3jsT5 zo+qG=emoMEGT-ow)5jb$tEVTYr9Gi0Bmg94Rp0HAdLOgt@sFRcdsVmv&ZDYVMggue z4&`-|bL}y$LIe|XwLQK7JpaMK-}wi~ zDFID}q+!j-I7+z%8RoJ8LX?D@2;mO;k}%fIC#_xbHDO{o!SL(j(!wc|v9q0gjV{cxwRxd?y5wUhsZQo!c-J$X^vZ%w z;cHwZ{+p~4rVAwz!gF#j*bkWs#*^=dz7PA5A{;u_wqrVme`AFY+JUvY`lo={Da!(et4k+v$q#GKxFlp?hvu@$2F6D)QC`&71-A?>m%2Ym8V*-ou{?|?^<&IlT7fZJDM-c~)n(7skf{1^ z`R+-gC70^&$bPL5ig#3UN3M8@q(T*-qyXmmP@r;tJ1NOe*_2+?n0w z|BLDh6-|Fs1=i_kmg_n$_w0S-es^K=Y_sV}i)iL`T-GUyv(BCpd`PMVcI{8%Qra^h z>I;IYXs>^40!%Hd<|Lk<)?OL$DGq11c_RZMuBh|x9N)MwpNOA|U5xbSxY7<` zl=F)-e)d^#9h>B3)Zs+3-Mb$rl1AQ7eu9f4Kp*#Y7j~Nb^fZdXT3dkmIa1hq;QNr& z0JlN$6>&>peaBP$rej9nz=6r@GXivgyrC$|sp1m1?B|>Zo^}60oH+pER7p^a=GTeA zu}d=q=#ReQDq_9-Ct3?DMLMV_^tDwI&}EY!42W^bOASYfym(5KxNRT)fiKF_h{0qI zAtbo)w8pHB3A_Epfhmf2?1C(U9~GdrWYCfmXfIwwQjD;xnml1+iIYXu`d-Ng@|=Dw zr}r?yg7)>898OS|6UT4RJ!!g73H_d=7pI$@T}*X52eEUZ5Wh>suirmalrRQESU-My z@=#D0eSd6AM*-3ZD5E`BZ6jZ`WOI4&jkM+1i!2Szuiac?n-%wqji@nY`tKmL6ab-3 zQcC8Lf#cJES2x&cONu{V;JL;U=mq||*kqa4eS8`U#Xh^B;QS{WA;22eN(*7_Z87oG zRtN@&~P zsZUg~$}Ht$OECiLy~Uq#o?RV2=M#}aMG?nfJPv77#N$&1(4G7P-=ZodK?R6kupp~* zJzFt=}5$V&O)(^lkekB4u@?%;7#DwQY=(U z9~>?H^~{F+R|hp6Lx?UKM=RZM#gB|>E^pG)fKxNnKIGqbv`1QtN3}xs^>J ztop;0a(XovBKagNx^fHmbmihr^{3=1r5a<_d_uEj?E%&3?yKQ@XU6{K2fCkyE$ObHPLKM1g34H*|{N_ z!#`iu*_ce0ns8;)@ygiW2!s40*l)MX+j1*eFd?M1>@<@N0i*M(V8#=MwDZ~Yj={^rZ4zI?gq&y zw1qy0y?;=r@nwO`7hpTx4K-x#vtgpH(Th)X<{vme7!BdITzS3K_hsM~wnWy7^fH8PpqXp36JRUYpy65qnX#|?& z5gOqfU5`wx)40J#F|9YU00v6C)?Ea76{?ssqKbNg%2Ytm!_XCY4x z*gLeAd)bRwFA}k?M8|;0Bvv&n?)P7N`*n%tl?6~!4*epnblDbr-&|>J1OJd!$;DaW zzME&Ft`5dPj7(Cs@ItJ~e`nfY8e>?Npzx!#gM9N2*tQV`6LleNe82iC%HHOmqBS zOE!Z{RSEgp!9&+yFI5h~Q!|G*LZ=4PTz8Q0RZfV7{Q2c+5FQ{#-r=+Q_AMimo4JoI z49!hQ!-tTo00gjpF?K44I4YT2_Gg_+t1#JJ2gv`LLo}>bDWmavnJDXyDYX{#L-~k_)Og?Qb0BXf5 zD4I`k?zaFDV4U!M$$*z~EzQ4G%r?6#6r4BX6ErCIn$?~TIO;={jsZ*ki$LBi9C@*T zr#^he252u_G<|3EI8JW7)v}z95}CkQsv5mg=S4d7jnfd!0nAGf70`1H8j}o)Z=p|) zgO+Y>goyXWb3PSyJ996jiBoCfN8PnhZ8=LS$WWGO@D7>>$g*s(JQ>^D1^HvSIm^dk zjV*IJqh-l+@7zsj%Ie(PaW1oGm6pl$m^}v=?K4rg7cZxAUA9*BQzy9vEW+uhlZ>#O zQX~^p3edN%Dh(M_75TKrbq_uiu5KG+XK^<<9DAMY@lMEH-~DL1#ibIZ;@b~bC~X@P zL#Rj7(o00W`V=gG?L%P+8A?#hQ|**ghj_CU%t*O`|r89K4pdQ2*>&ox#6)F z#w^)Qxb>xKQe)XCu3zOzcbEVZ#6jYC3ENrS^y%63)Qw5KfMF~`Y|^gEwq5~5hn=Y= z`ya`*drXi!5hHdRnT8g#+a~`JoeV*h#Ta+EqTYbwgFEFh=B$p4)l1CC3W6Kk+_Gdb_fkDb1nk z)M8h1NnrSSZb|7g9NaNFs*_N#7(oVqYaef>Z{hjFk1n^{Y%UH5|Dk?8pqVA~4J^Ahi(w|O97oIvk z0QO1l;_m&g>{gSHF4p1+(trON0Xww(N=)vSdO#-GH6j^Jnv|p(nc^<<)Vto2UI*ul ziei7jYH>aZYGtj@p--T*JS&SqC!4$~k`nAa#G>WVf5Yxos}$4!ypycf&!JRcMdR^A zj%qyhbbfiA*(QoqdZ&U-dT6lcj%bJO(mNvuHYh2n0yv1b_e?|IpR_8&utC)~@VNAF zYl~E6;H9dP&Vwz4bA!Xcn>EvZ3X6{fPoj&#g<6j~iSe{dL zxXWx2E9B-_Qf8Qit`*}SZLwYRtx(^WwYL$ch92L6Q?$C1PX7_O1#<0L12#pMP_Is& z@^K&FR5k9&-wYfd8)vCJ@XD}EX26`A!(^p9v>xLTnk1;EvU-8auWdSvuYH0r3|7nd zu7xc*Av<_quN`rWi;53{jntr|uvg=5<@9tW%Qd9@CZgvUXKbY1Bx@-Qv&sdI`EmO9LvRXv@2Kb zM4@3HtL)9OxnAQQy#K0*lqz9la2Uj(9P0LJyb}YL2YC?yRoUa!CQ~K5-DmBaIJmBZ z15E)pbTTJ}fW9ia!r74}eS3fnH8^G4i9Ps`rN&7qMKI0K>*%|nBcS(#qVqE+HOW|Rfek?*C!zf& zJWx<(K?JbVdE>Q_g&&J>4_ya?S~vcAgmgG*JMe?z`iBDQB_OH*?U3B~=b!~=(to*- zVuASwxSaoe?t%sIufWClj}s8IKnHvrz|{lHl)xqa?{gOff&K-q|6la~?QZ&h1r8rs W_IPqH=F#=*R#kecSgv3e^1lEI&BMI_ literal 0 HcmV?d00001 diff --git a/graphe.py b/graphe.py index 9c8d6b9..97b40e1 100644 --- a/graphe.py +++ b/graphe.py @@ -1,4 +1,7 @@ +import sys import random +import numpy as np + import triangulation import tas @@ -18,7 +21,8 @@ class Graphe: self.nom = nom self.sommets = [] self.aretes = [] - self.cout = Graphe.Cout.TEMPS + self.cout = None, Graphe.Cout.TEMPS + self.arrivee = None def renomme(self, nom): """Renome le graphe @@ -35,7 +39,7 @@ class Graphe: :return: Le sommet créé. """ - s = Sommet((x, y), len(self.sommets)) + s = Sommet((x, y), len(self.sommets), graphe=self) self.sommets.append(s) return s @@ -77,7 +81,10 @@ class Graphe: for s in self.sommets: dest.changeCouleur(s.couleur) dest.tracePoint((s.x(), s.y())) - dest.traceTexte((s.x(), s.y()), 'v' + str(s.num)) + if hasattr(s, 'nom'): + dest.traceTexte((s.x(), s.y()), s.nom) + else: + dest.traceTexte((s.x(), s.y()), 'v' + str(s.num)) for a in self.aretes: dest.changeCouleur(a.couleur) @@ -166,7 +173,7 @@ class Graphe: sommets.actualise(voisin.cle) voisin.precedent = arete - def dijkstraPartiel(self, depart, arrivee): + def dijkstraPartiel(self, depart=None, arrivee=None): """Calcule les plus courts chemins depuis le sommet `depart` vers `arrivee` (attention, effets de bord). @@ -177,20 +184,63 @@ class Graphe: s.precedent = None sommets = tas.Tas(lambda x: -x.cumul) depart = depart or self.sommets[0] + arrivee = arrivee or self.sommets[-1] depart.cumul = 0 depart.cle = sommets.ajoute(depart) - while not sommets.empty(): + n_visite = 0 + quit = False + while not (sommets.empty() or quit): s = sommets.pop() for arete in s.aretes: voisin = arete.voisin(s) inf = voisin.cumul is None if inf or s.cumul + arete.cout < voisin.cumul: voisin.cumul = s.cumul + arete.cout + voisin.precedent = arete if inf: # cumul infini + n_visite += 1 + voisin.couleur = (0.5, 0.9, 0.1) + if voisin == arrivee: + quit = True voisin.cle = sommets.ajoute(voisin) else: sommets.actualise(voisin.cle) + return self.cheminOptimal(arrivee), n_visite + + def astar(self, depart=None, arrivee=None): + """Calcule les plus courts chemins depuis le sommet `depart` vers + `arrivee` (attention, effets de bord). + + :param depart: Sommet de départ. + """ + for s in self.sommets: + s.cumul = None + s.precedent = None + self.arrivee = arrivee or self.sommets[-1] + arrivee = self.arrivee + sommets = tas.Tas(lambda x: -(x.cumul + x.minCumulRestant)) + depart = depart or self.sommets[0] + depart.cumul = 0 + depart.cle = sommets.ajoute(depart) + n_visite = 0 + quit = False + while not (sommets.empty() or quit): + s = sommets.pop() + for arete in s.aretes: + voisin = arete.voisin(s) + inf = voisin.cumul is None + if inf or s.cumul + arete.cout < voisin.cumul: + voisin.cumul = s.cumul + arete.cout voisin.precedent = arete + if inf: # cumul infini + n_visite += 1 + voisin.couleur = (0.5, 0.9, 0.1) + if voisin == arrivee: + quit = True + voisin.cle = sommets.ajoute(voisin) + else: + sommets.actualise(voisin.cle) + return self.cheminOptimal(arrivee), n_visite def traceArbreDesChemins(self): """Change la couleur des chemins optimaux en violet-rose @@ -198,9 +248,9 @@ class Graphe: """ for s in self.sommets: if s.precedent: - s.precedent.couleur = (252/255, 17/255, 189/255) + s.precedent.couleur = (252 / 255, 17 / 255, 189 / 255) if not s.cumul: # sommet de départ - s.couleur = (10/255, 98/255, 252/255) + s.couleur = (10 / 255, 98 / 255, 252 / 255) def fixeCarburantCommeCout(self): """Fixe le carburant pour cout lors du calcul de plus court chemin.""" @@ -235,11 +285,60 @@ class Graphe: for a in chemin: a.couleur = c + def matriceCout(self, tournee): + """Calcule la matrice de cout d'une tournée. + + :param tournee:La liste des étapes avec en première position le départ. + """ + n = len(tournee) + matrice = np.zeros((n, n)) + for x, sx in enumerate(tournee): + self.dijkstra(sx) + for y, sy in enumerate(tournee): + matrice[x, y] = matrice[y, x] = sy.cumul + return matrice + + def voyageurDeCommerceNaif(self, tournee): + meilleurItineraire = [] + minCout = sys.float_info.max + matrice = self.matriceCout(tournee) + cout = 0 + visite = [False]*len(tournee) + visite[0] = True + itineraire = [0] + def backtrack(): + nonlocal meilleurItineraire, minCout, matrice, cout, visite, itineraire + if cout < minCout: + if len(itineraire)==len(tournee): + if cout + matrice[0, itineraire[-1]] < minCout: + minCout = cout + matrice[0, itineraire[-1]] + meilleurItineraire = [tournee[x] for x in itineraire] + else: + for i,sommet_visite in enumerate(visite): + if not sommet_visite: + visite[i] = True + indicePrec = itineraire[-1] + itineraire.append(i) + cout += matrice[i, indicePrec] + backtrack() + visite[i] = False + cout -= matrice[i, indicePrec] + itineraire.pop() + backtrack() + return minCout, meilleurItineraire + + def traceItineraire(self, itineraire): + for i,x in enumerate(itineraire): + x.nom = "s" + str(i) + suivant = itineraire[(i+1)%len(itineraire)] + c,_ = self.astar(x, suivant) + self.colorieChemin(c, (0.8, 0.1, 0.8)) + class Sommet: """Implémente un sommet de graphe.""" - def __init__(self, pos, num, couleur=(0., 0., 0.)): + def __init__(self, pos, num, couleur=(0., 0., 0.), graphe=None): """Initialise un sommet. :param pos: couple donnant la position du point. @@ -252,6 +351,18 @@ class Sommet: self.aretes = set() self.cumul = None self.precedent = None + self.graphe = graphe + + @property + def minCumulRestant(self): + x, y = self.graphe.arrivee.pos + d = ((self.pos[0] - x)**2 + (self.pos[1] - y)**2)**(1 / 2) + if self.graphe.cout is Graphe.Cout.TEMPS: + return d / 90 # On minore le temps en divisant par la vitesse max + elif self.graphe.cout is Graphe.Cout.CARBURANT: + return d + else: + return 0 def __str__(self): return "v{} (x = {} km y = {} km)".format( diff --git a/test.py b/test.py index 78b43e5..6ea7a34 100644 --- a/test.py +++ b/test.py @@ -269,6 +269,84 @@ def testQuestion3_6(): pl.show() +def testQuestion3_7(): + """Trace le plus court chemin avec dijkstra.""" + g = graphe.pointsAleatoires(30, 30) + g.fixeTempsCommeCout() + + graphe.reseauRapide(g) + g.dijkstraPartiel(g.sommets[0], g.sommets[-1]) + g.traceArbreDesChemins() + g.renomme("Dijkstra partiel") + graphique.affiche(g, (0, 0), 10.) + + +def testQuestion3_8(): + """Trace le plus court chemin avec dijkstra.""" + g = graphe.pointsAleatoires(30, 30) + g.fixeCarburantCommeCout() + + graphe.reseauRapide(g) + g.astar(g.sommets[0], g.sommets[-1]) + g.traceArbreDesChemins() + g.renomme("A*") + graphique.affiche(g, (0, 0), 10., blocage=False) + g.dijkstraPartiel(g.sommets[0], g.sommets[-1]) + g.traceArbreDesChemins() + g.renomme("Dijkstra partiel") + graphique.affiche(g, (0, 0), 10.) + + +def testQuestion3_9(): + """Compare Dijkstra avec et sans tas et A*.""" + prepare = lambda p : graphe.reseauRapide(graphe.pointsAleatoires(p, 10)) + valeurs_n = list(map(lambda x: int(x), np.logspace(1, 3, 50))) + temps1 = chronometre(graphe.Graphe.dijkstra, prepare, valeurs_n) + temps2 = chronometre(graphe.Graphe.dijkstraPartiel, prepare, valeurs_n) + temps3 = chronometre(graphe.Graphe.astar, prepare, valeurs_n) + pl.close('all') + pl.title("Comparaison du temps d'exécution de `dijkstra`, `dijkstraPartiel` et `astar`.") + pl.plot(valeurs_n, temps1, label='Dijkstra') + pl.plot(valeurs_n, temps2, label='Dijkstra partiel avec tas') + pl.plot(valeurs_n, temps3, label='A*') + pl.legend(loc='best') + pl.xlabel("n") + pl.ylabel("temps") + pl.show() + pl.title("Comparaison du temps d'exécution de `dijkstra`, `dijkstraPartiel` et `astar`.") + pl.loglog(valeurs_n, temps1, label='Dijkstra') + pl.loglog(valeurs_n, temps2, label='Dijkstra partiel avec tas') + pl.loglog(valeurs_n, temps3, label='A*') + pl.legend(loc='best') + pl.xlabel("n") + pl.ylabel("temps") + pl.show() + + +def testQuestion4_1(): + """Trace le plus court chemin avec dijkstra.""" + g = graphe.pointsAleatoires(30, 30) + + graphe.reseauRapide(g) + g.renomme("graphe") + print("Points 0,1 et 2") + tournee = [g.sommets[i] for i in (0, 1, 2)] + print(g.matriceCout(tournee)) + graphique.affiche(g, (0, 0), 10.) + + +def testQuestion4_2(): + g = graphe.pointsAleatoires(30, 30) + + graphe.reseauRapide(g) + g.renomme("graphe") + print("Points 0,1,2 et 7") + tournee = [g.sommets[i] for i in (0, 1, 2, 7)] + cout,iti = g.voyageurDeCommerceNaif(tournee) + g.traceItineraire(iti) + graphique.affiche(g, (0, 0), 10.) + + if __name__ == '__main__': n = sys.argv[1] if n in ('--help', '-h'): @@ -276,19 +354,3 @@ if __name__ == '__main__': else: print('Question ', n) locals()['testQuestion'+n]() -# testQuestion1_2() -# testQuestion1_3() -# testQuestion1_4() -# testQuestion2_2() -# testQuestion2_4() -# testQuestion2_5() -# testQuestion2_6() -# testQuestion2_7() -# testQuestion2_8() -# testQuestion2_9() -# testQuestion3_1() -# testQuestion3_2() -# testQuestion3_3() -# testQuestion3_4() -# testQuestion3_5() -# testQuestion3_6()