From c7c68a1abe2cc1876c895fbc3b360051e44865e8 Mon Sep 17 00:00:00 2001 From: "Joshua E. Jodesty" Date: Thu, 3 Oct 2019 15:31:31 -0400 Subject: [PATCH] semi-final to pr --- README.md | 171 +++++++++++++++++++++++------- distroduce/README.md | 65 +++++++++--- distroduce/dist/distroduce.zip | Bin 33300 -> 36381 bytes distroduce/local_messaging_sim.py | 10 +- distroduce/messaging_sim.py | 10 +- distroduce/simulation.py | 22 ++-- 6 files changed, 218 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 4f2f8ac..b175de4 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,141 @@ ``` - __________ ____ - ________ __ _____/ ____/ | / __ \ - / ___/ __` / __ / / / /| | / / / / -/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ / -\___/\__,_/\__,_/\____/_/ |_/_____/ -by BlockScience -====================================== - Complex Adaptive Dynamics - o i e - m d s - p e i - u d g - t n - e - r + ___ _ __ _ __ __ __ + / _ \ (_)___ / /_ ____ (_)/ / __ __ / /_ ___ ___/ / + / // // /(_--HD z@qNE@f9LMZ?#%3-vpZ-0JDVO2&dUX3Xsf{^pn>kMhTv2TIwThLOmhWwK*s?ez`;iW z_XVfwFe54aQCa)^6b$D2j|@-_&kz1v1)C5BdJSKW0ON~FQ0@zWmVg*&$B4vC^pMj^ z#7#y~2ZKPb0S!!M2%~VOIWz3`4L}FMA$*4efe;8_kc@sp>JDAGfIq9fy zG!||sBlKQsf^){bF0S_aZBz{k1=S3w9NJ0^Se{=P@H0VT@#*K3BL_|TKP@-n+qVHX z<*F}-NAuD$U+pXF1RcL7=ylRRPuj|Fa(}<5W2_c4gfoWvP@1Qk$9+Sz;%W0rFS|Tu zYu8Da7fv?sI%svw)FO?O29Vc_$5AoWL}5dFNB6N=w%;j-MwoicAGLi9Ny1pU=0qM> zdAWkUtq2K1xV>+D_-Od~1f$i9A0#J!Y?_>(U-{$>YfqzaaukG%tSx!CE+1Vn$~DEX zI1X<$mUlhk;=mC+7BtKJxZ`sa;@zwtbXl!hRfprn?lIhkchP6f`J{up_crXsUWcil zRsR*djd#T5=fP*^5@Q$n3r0(%daTL9w$OgPhiOg_B9)iXp8abKX#& z=m^7+NLK*CjQtzY{;q}Qbh>8S`MBQtL&3wY$4ypiO^7@NnB=P4e$r?`P=$G$qoJGO z0Tbps5YUP(`>*v0kl_f!RxeZ!rwshN8V6tg9})%d#FzNZ!WJ|zh_83g(h_|6r&bjn z<`aM!Va7jIC;%3b350TPTPaOH59`EfYl3Cu1?~^@8`YjG~IiQeM z1BR(F-vd$N7uTH#xOBx730`_H59^3k9z;? z#oQk7_aza3I|^1qu$&Pa*&~z~_TI z39JgV#ejao7mk@cei=QoOQ3;uxo?eCt}sf)lXK4Gg06GCkY-x;bl|lqYeaYkPEb?_ znf%X1+QL_QUN0aS;ceX)C?D`Q7=_OHO^_m1+vrr_2lsgfhfJLc997tS71&KZNNTBG z1b%x&#I*K?VK63|Q`s)Zx)VvH7e6$TN`2MY)GB0L0Qn2&V(J6dxmfm)Tj<*-iC=gf z%qUoyAiSg{ozn3M>_bkAWwWi6QiHB*%7_Fh*t#SKM3(aqUy$&R{u4X9E8#QN^1g6E z{QU1jkDK`b|7{QXJw9*E$M;w^ z^$IA2E^!YAAbZ)1b?-mRmd+{&0o;hh!r}CB0__b;SJQ6k(#jjASRvDI3}n+N?QN|pzRm<360sku z+EZ=8Yk$aj;FfSj`uWUEmn1xRo1tgxogVwiA>m}&Rzd(tW78SZCMu(l_dMAPYrmG~ zwW`qGH~Klv8*p*sIGSZy(xQ}?a3e$-hRZin{aPA7ZL_fsyO?)cZ))9o&?w6wi8@BIJsyOK< zGm$j&9|yieWWMlQsN)DDcR0@@-xB_@V196^R+(eKb)vK^p*BV@f<-1KMA~}#*5&2U({*G|5ZvHOTE;FR+Z1bBx2gp zDJIR)UcoifW9$7ysqKN8>FUNJTF5q<3}k2D6xU`k}-?OsxrIgK~|P<%u_G@xu%>fa^YBZXpW+_%t`_Uw zJem1~U|YXDfrpmOcZe|qLAtg0iWf~DpOzUCl!J%iHvzVScmH6knX7rBDU@Ye(sx%e z#fDDHh4{AFaP>A|i18b7@9bBuhc_3eoERdINS6_u4pGvHFwiwzI{Bb!6j}*x**>Mj zLkU8Z8#nW}<1;3;PF8$pnS4l2rASZvNJ_yi&>)k8F+t-AEa^!-NT&Fbo1Omq%MRZu z{~@PQ(k4zWiR@vTr;8JJQjcvY* zdA$8p`x^Yp%C%T8i@JKgaquwA`wo#y?nAmhR)VAXT4iVV%rJrDqp7aNp6x#8QUA$} z-UM7bEpPP>?8iihE}DAjDRih#O`(Q?=bz%4X!S!ozp%S^y**ra(Ab%ErdH<&QH|xu z{w}mn-bkhR&MFjj5h-5Ao!9xrI#AwWY_zvc{SN^2u>sa)xsgoi|APSUL(66`9-t)0 z{wuur$z8zz3Va?)9ly#4!pu-(W%7HV2lZ2*ybo_sH7yyqUyV<-Cw`T;ToOQmj?+C2 z#nPn*gS~A4K0PKRlRrBO(i4EG1GRd$_f~54e}J(Z$I=6O7}(G4C#PBs&l3O)nAd#tNddy4*H%A-w_$%OO@exK(}l}u75%GDn$8ug3s1Q74ee=cyUFzO>e`(zWz#ieQDJOi4;cJI%M^} zpd6+n#f&_t)3Qlhd%j*@t1DMH(CT9DY~esdb5d^hc~4;6iS--n+w^B>4?3N6$ZQOS zcX4|268j{a^IoN3OeyX-^(aMvvp>Ge=+l6r5v_7FFq8i_PvneK6Q z-g07w;+}(ZZTosD&j68)F8Qod$2_@~1nEl!o7yu*xAD9;8{d;p9+a?~&{v>|TrdLu zUtJs47fsWBIFsZd-2p!p7dsj4tsw}+-)Pl5tQ$&4#_G2!UNc;6@<7RxhFe9(UeH!e zSf3AE?&B+FqHePJzm!zNd#=`4X@|3qN*d>3y7{H;%)*0wy6_ZRu~ox^XF<1jf~x$1 zy3!6F7G<*ClV~B9SUmg{olOzOkD6ylsH1K&9JX)Sx^bJ>sd=kZ!A1I+1@e}y*;SmAfw?HiYROf;UPsLsIk#kw81>y6Uop*DZN4x`N)iv9rV!q~h zR`0A4;%er)y^4}Ja9dU^k9D@|t)8}azKT88q{kCdo|?DG^^hPBRubQU;OfH(q4Bgz z_nB-7b!SGkT7%tbJ`~C865(Ec$0jwi!PR!0C&7@SM1Nu%-#1yof#LvSb;yc+Ggr@F zF`d0;@to&!lA7~c$u%q2Sw10%kf|cxqM-6{OC|P)nxdP2bT(I!EDk3o_TD(wj~ucH zM*QZhYNL6(@9|Ylsbtt>kc`Uje$!-;_I;}w&y5+1-fQsnCfqHi*(WJZB1fR%7$t8% zdoh93g>k9Gw>!x3+%YNk;i}BKfF?z2)%pMehG`aMQG>_Fsfq@_q5;2;d{2OByi2Mu zQoR>SZ;TdLh+a_*FWY=mNZYbx4vb(ZTcP%ge=REAUD*AlXp6aws|>vPo zZ;*@R-Iz_)6`l4NDSE{k5h!zf(wc~C;PqII-nxM&WxgtE{8`L|&$nu|Av)1S!+^&q zates;O^=qoMNF1o#vCuJY-pCx=INf~SrWXW>_bsCV$lG3qGr53UJha!xI zv$AiR>a~Vfn4b+7m~1%ta_gn8kv=TX?5h$z`KdF&#y&AF&2c1LMifcz=xgDuA?C2c z{E8-YGi5Sme@2si8qcrGay<*1S~+g!GC?@qCnslDR@~IQYXTyRkVS-oB+*%FBI5^V zd}h?VUNkWv9#bYZawTZDRJ*3(W;d+sSj!|N2aOXM3z#QWjKehkz?0j#rs(wcm?AWU ztI_UL24}L4-3z}@Dc0huekmRlxk9E?D1}c9JBOp;&4cITD&|Tm1)9ID1K> z|8~}?05qt=bXpje=din{%w7r=%n;A^niKC4w4!lMyvBu4SPr{eVulmATTOgEK_1Wj z&~CcdvY9TY@rv1mNwtiV2hzB$H`@J1nhSc!<$F7tB_tKC-%N!V@Z>h9E=`vIS%|hp zIh7SXm04!O)FRE8Bkq)~HIG3%$NrU33kg?L>7H~O{%-$1YQ8D)(gCLwTFa}EYl)ry z5|<&?Y%58K;XLleEtZ+S+8N`Hw4viS?KJD$H>b3Yug&Qd!-le7I!2aOkF)s;<5=p} zLJ~v}-FN7uRg(Qx+XcKWweuS;2OGDMDEpH(^`c6x>gQyw-N$^yOm5D(N{%T*B$M-2 z*G_JE6GE-WI$tgx#yqW}yx2t8V)`1)^|s&WqN$sMKihN5wL&V) zz5+w7g%W#+B`@2ZKkziPZTn~16ohJFAYMskZ(Ss`*0LxNCNJ--Xk%n2MZRTQv+%60 zj)^XS&=;4cP7sAijgYrCK3Yzzag_N{&l^aEK7TgBY|ba@hAw(2LRZo2T(yga9DC=D zdK^#pup_Q$PMxvv;Ova$_;FKu5$i->ecR)^(Y&HZuP;0ypAaZ!KH;+n?~(;|V24tz z-8!`N^%+UEx=~GQc&Nhh*+pGC5;j4j?gYkCX~pdwHm7fL$6-6tG>UyJ~@76q}T zrAMH(m9>Mdr6rfX9x4d_PaKMSua)=m`i2CSrg(+`0*T#g;s0C9+Qrw~$JPtbCL)0R zrTjk`4A+O|?(>2K88%;P+j_5@rr$anHoEsddf++njwRMA#o9-4WvXTpOv_F3?y!DH z9#0@m)%xZsIQW=))^cL+gp^^3E``6O7#vTcO+kv z1lqzT)ovjrLfoAQ=w3l{r{X*`*oa0srY}|0S!7WMjw!{nO>3|+Fl?DzI+kYZ8g$D-+C=1sgJhedTFVPmg=B`?1-}cW#?@e zUm#1{^%8lAZ-9L571O7wL{W*iAJ zU2LoE$p;jLaFM2No^;UqRcjV=K#!TrsYkbX;KSjjTw(#|Ou=Ei z{n(=vl`H&?loLG%WHNNkS^7 z9zkNGD#M(5abwF*bK+QpU#3bkH6Pa|HPz#>L(ra)(qJ2C`{9eYZuJhC5eHSR7~4Nf z&&rszoYhk0EnKZjSs`Ry_Wc;6Dwt=qTTwgq#Lj8p1ALx(2}E+g5$QDmQKM z^Nr2e%@pZEcS}-6gI39VHDQiDBxn4Df;St{w~QD%1Ml??ZE1ml31s$HS?U(-hnQDo zUm=~&i>vCN^JR}mF)?;#m6Tl>A2VFVJQGLV7C`qALt+VJH*>ja@lRYX6A-J)pQq3% zK_Kr#vu*L6xyJP+#+tzNGp$d}($_5|ym;BufmxgSWwZe@n)ehh#)p$rIA4!XsVp$! zZCZ+2!J;Us=ZZ+D)ZR0&qeo)c>1}Rs7p3gXQ)niCp|QzN#xXQ%$na8XNTtxA*~sH1 z-a*8{y8S}q2EO8FP%lgO7knJ1r<ZsTih%Vp~dz%~<*zm)#hA@zne7huch?%TtB zkKF=&Z@J+9*hmw7LWM=Ju8x&Vjebc+ML&5CqbYNWi#=}T0jfno85(LzXv)$LQ1khe z;qp|ie+13vv_AaNA)$_uAI;6A@Y6@zKe8;}TK(i<8;rccYA}L}gkZYp7V$|Ar<7|| zT6a0>i1~`9I6fj5BUbF|*-X{(zhg@>SY*#zl<%L-$)A42)xD(GZ$z6j+rr%*IMKvg z%Te_p*v33Z3S(c{emyxUHP9`u(%o>7g5#9`$f>BX0uPm9cTr8)8Cn9R&hWT<^==Lb^n)!fYa02;P!W8M~sM3qMnfoaCAo zktm_0^fgZtz>saUpn5|i9jFPAsPxNSa`f*WAV-r9GKcWeSRb+|{dDe0`B({;md3m& zi?_msZOLU=oU0v)fXcFqR{=(`5Hzq9FkoZDaR${!Za^z+!6h=r>XB6T3U9+-8T9ZB zrT`XQ%y3)~Y$?N%*U#8-v=bTj5OZ}_-H#|0HJT*IEEP@HNeK0**uJ!xXYrs?N(Y9o znl8%_X8Ry6^N?bYaOmR2+bI7e{_K-~5QWg)etHejVvsXe1*^9xR3pRb%R3c!x>xQR zZh+^wxn;6)^JTi5zAi~F%sUFq&+9-b>vNQ-i-vC?ZBdH{=ObZzGU!t-*K&rVvWpxX zOsZPBGIx^`JLs7ioSYM8>4L=;)t=vZo5-MER4>REg&NJ?S8DN>Yc+e!mpLqydEHvs zUrrt5kN_`wLxmd$3dW?6y$AfLyuZ`!QN1#_hDwXNWvMh61bt(V)Aba%F)5D>#+Iyq z*^OREYV$#_X7~2VRsSurwi+Cm3jX(@8$j*A4Q9DNO{0XJwgDavzp@}O4*JodAO63N z&7QjmfEk7FWq|`1D!3T{!}SpyJK*a22)uv?c)Ak-8?LfoHvC_tG(IMv?j{Y6`in(# z#{g>FWWkHSSzEZzfQP#!94j#9?gZBf`=Zt}N40w2P0vuklaCtB)4opA|TzQ#*9cckiAAG>U8zy{D z5(1xS(SadvX*e{%!-odo@R5bHf>D9shxETBZ+%q3rN2oOz}8m-jL7(R3kpEPhy`%@ zFaZXPSXd;#aRaD0!sg#17{E&}3c%Hc8i??tf|CI9{es{M0Z)H?fYV~u8w3P%(*Oj4(s17a{XkK&9(j(Mh3*gw85p?zu59H9dNMDFH%JZ7hr)%gPC=I zu`v*y``la;go5mu9_Y`HxEBnR!A52B*Qj962cU;j!GF;M0m*vgfKs?LxJw@>@FNA1 z^~r&@a5|blb9W#R!5@#0VG7)ZlY_6-em&&9IgJn;KqUeTJZ|&%ps|6d2nF!5Juna< z2+;T<05uRKn*YI$e_I8Ca6kt#El&5ke}KY&ze`v*zYP2VBmZOIeiBKY?+vj2JLLV1 zDmkq^0(~6Z-8lG!IAK8bAG4J3_rdbmg`BC>?SJ0czYYD@`{VlGxcTpu{o}ul!J;TL Z;_n&2Pm4stk_X9y>c~MLeXsjf_rg-atyY*Iy0LP>!Of`H@$0jVoWmqkcQ zBMScuzW4v$7w4>X_RQ>=J+sf+vwpLu;2|t47Di&I1IHnPoIfni86@m@Q>;0*V{E{X zodyU~;lYZXGmLof#@PNTtj*tr!H87AN9ctPD1%GFE=-uvKj39Juo0@F5`yyqw6W8H zHWCzRuAZuakQV$v6b6AP0zFb5r2a{^Z8KGlZBQsN1d6i{g+Oqqu`yJc>iN#F(zl&h z6s|{cun82@t8yIIxXQ2Bcvz!N%-B%1cb#Hzo8D3%w{PM8oZ6EW-j2MwMOT6$<eQY;R8~Bm3v(_EjjrCH{u$I zP2T$M{Yi0!QI}?iXy^SEqfu!O?j%9Vl4L2Aan`cCYFUEH>W#;&vWU?TTuaN;%PiEB zc%>dQ29D)q*N%72Zjg-;Wi8E%b@O;xuCh5dM;Ul5$WGrd@~mwH=P`I$jioEX{R=h?Gv zeBIg5fHvD)ka+P0>?Sq_~6(!7rbPDon05a(9>i#zP?l$?PEf zk^YrI(ml7`nyDiBx+Ruqx4d$-AB5sId$r^*ya(SIAiN#;SVujy-g&1#wz_>IfpQ>- zx7mj)q0W(BJmCpVckF#=;L2AmPkf0%>*w{iQzL}Fe>iPmkod4RHW$#|zA%T}J4ku_ znjYQU8}a8dU5A0~$vtJ(5fH z7+cexnCJB!8GY?0wMQ*1YR&9C>5bGf+188!rz+9RHnaAC_ONv?)+Q2fBO!h-ll`}t zpVk_yjE<*eg8nUPqtk$Q9RV}}J?bx4OyC)#{ka+eQ$F5rwcq*C#&!i70lr640}}SX zBK7+1`@`R>)o>`E`$X??*#6}K0W_k>Kopn8`HKBqqtNs50S^b^`TjaY{ot@_Dzvy{ z8v$9dzN!IPh=Jo3I0OPC0;hj)Ak}{T@9Z+eW|t_*>op64sZMDR7o8bf*im{VZ?dhq z!weq*&Xl?Fle!Wu|B1pC&QrJ+aV^s{BOE7Sxxg)rhcWc3e<#rvoGg( z*2L=uiell6i89)k#o9V{(zyAbyR11n8H9LOW74gul3K;%XpD#+q}!SEai*CzzQZxP z*^Q8TDtT4mQ5~ms9yM)iSr8AS?Dd>JD|c(FAdV8YMNY_k=L=fO$iu`%s7`XgjT)rH z5l*3%QRnl9HyCjOY6OiIqveu_)za&dB}NI;G6jFH)b7On(MlfQ!7i89Y);(VQsT^} zCCeJ+d*9U_N4Y&X8Ze`ue>nuL*1@mOZKZU_EMN6}(3B?>)7z85z7yTYD@7vvVzg`1 z+%~yj<{0s+N}(*O>sX7ZXy)BSFbxDb?8AF~gc*^h$hCiIGz?aM{|d?Dx!9$i_R;Hz zKIEsH8IcBiJApcBX&XW;5kqTgsvBTBHdipt@r}k#k7nEKea}00OG@(^w#E%$O*dMb z@RQA#6!P;6pSMhN&zrm_MeGX3JH$Jmji;6`TgK*ayzZfEMJa?{k+29Mz4y*8fTXxidDPCp z6EQP1uuh#lZ+hhP^rNNvE1?_sb7L&B$4-7v>PWlI?3@x!@*aG|8F6R}3QjuNYB&5Y zduuW4{oZoS%v7?@Pb#gajHM>ewUAX!YVz8aH!BuCgl@`k`sldj9*P-ui&zK_9Mg;+ zSvyHU(nht2UWl1+PVJor$7Mb))ALUD^{p#-qD|#^Sl<8ZAhz4RuXK#tC<5XuD+?UbW0(#vmEYUuLyg z2Bh-crF#-gH5DHF>V7gcW}N{hkSk>V(`$>n9~lXvcz6|Pn>NjJh!wvrq$#C4k2 z%2j5R=gVDT(cSd^j9Zu71t42a3NhP)F~r-%=TLbLQUs8j*p%z^L2dJ5@k|yM0%3zN zLtJhK1p52B1Ub8kfL`Ck!k1Pe0G+tYc5% zn};|T^Y$f+k;m13kY)>2%%F?24Aq-wroF(o*zy6$`%KhzEWUXtxg$-)9a+C0sf zxed{;C7pLx<#+v1!$O2~C6cqgCTAhLd?`}M9*<$k$Uy#_h_s&ya*brxI{e-Qez({c zUga~YMZRns|DsdXa~nx1F`Ppl?^6mjc*9(Z_X8bf>)o&V^2}MEUEBiv_EE?j3=+r(ruR~ zxZ!CY?+b(J=8exw-_eaq=H>KW_S`VGBKGxk&38qaTkg zEn?k(c5Ky%7Cq}!S8C!c>HTgof}o)zi`3o}vv9<4G{@3VwX(K0A)($rRarEJFL3+t zK_x)`t2SG;Q3Vbh%wWWjjM&VS5CT`H{;MKm0*_P`LAM$edP{W~4)?am22&dCaE0Y; z^aD*5oO85T&>e%FkM#!1&~r^dVAKWo#VQUNJ-e_>Fs6dRl&^z_rrdbn{rjPP;*j_AwI#n(23)gBcRTwYx%gPps7~JeFwnXjfGZ36qXHOz{nfYWHmM#kt;dB$PYO z^2q2{^W(*dcU5AiB6b}oulcX_mqC zABM#e8A$tw_Nbqn==du-dw6w3_;KM`cwen$U#P##t*JDE-91g1R7@l*jjoa|#AF#q zaO0jz3ox#2i;sOU-(c+S5Jcm@nw4x}!7%bA6I|i?(naWZ&6Kt$`;lC{pQtP|+fI$W zwR@$ck#J+VO8dv4uf0Bgb(P;M_N?){3pSs-EGr<1bMn65fFal_4^~{QlJuh0uD$1X zyG7({^p=A?*LyX86_;JJm*E^dN{_rvXQ~Qbj4r8J22ijv8^`7GnZ^td*ow` zcy|$ZKx)P@GYpxwCx(+3fE+W(y0u($shqW^f`^o@YWf8i!Y$Xr&u$`apw$AiyaH?X zL@y)DM;?Vl9DI4Lc_&NwfCRP7C%JYsw>j_SSM>8iY+h3o z^W!U*qBR9%7_J@v(vMT|E+bTw9~$XHTuB&85j zt0pCFbKXT=`otRsV%-{9wXIf~ISDO36p1%~+Ip|#!?$md^&>ayhm7hs9={6AiigHM zj$Gs!E6aG4sCx(Mk$p#_nBe#A>UcyDH_;L5DK71+*gJ@CNE!Y+HJnSIy|%7<(`oG} z$wk z(6}MVk^A-$*>3yPpZUU|@%bmme7-@(`h*hB$$l4OqVkuV2%S7IXci;&RL${B_*v@Yt(d-hdj~Z;j7!D*#iz_q4zY5 zBtyk^Dfd1To=hy>KQ8=wdd)dOp~GIxztZLVOu=5)+mx{UfV77VPwVf`psP6@pgGfq zs`F+mlpYyOf-a6_6Q5%m_wSu_KyJmJN+LVoO!+oO+ZcYaF|6MZ$``rzGLUqjvEq#) z=ail4WV+-gsgiThx(^9qk2~yP#xJr+w1h?k(S&7%x6`AzI?x9y@xqiCu z_r83|n12(TXod$|RkEn%uVoQE*wX#J8&ZMz)I9B2?o532EI9N2s@lF*Ty`Ytb?6r) zAB_F*IL%I{uuKk!sn(2r^ihuq7@Au`wP55{!nhkE8F@#j4WBr&*+*PzD(mkF?bQ33 zqUGsi^v;-a6~f-RTS&M&-z)_wg?K`jUD* z`cy@F8K_Q^$fv7&p`ZAonPx=j`{CYg)NAN=xZ@GGkq7s1 z1xGiLA0oXuc72|^+o<2xIcvZO=#1&_`FuLqncoplvi7s}rqOt&Dn=>J!)IsGQL(8+ z&*8XEsGQx<+xfwVs;YK`o?AGng|zu=_SBkb)27*?*JR09WZaij!Woa|Zn|+s^3oS6 z(HZjM`*%X8CN-T}Qte)oSWDfEi$Eq+6QnKNG->}fklRUp=r!n%XZLMt3*x6JsEkaW z`J?y8O3p%lfk;zIj{f*|GVI2!5Kn&QipbFI2SZ9b_iZHFZwo%qD`S>9Y&bjPXnOVf zbTvFE+ioGeecp3z5{i-fNvBANMn6il80iz2Q8TJoV%3c^*k_yOzkjcY{+%>Y*mb(? z1Z4~Ik4S)VF@|eU=KwD$dbFY|wj(pcik5Isf{{RBm*IbRbbzzJC>)E!pf-RR+sgs< z{!(ykGv}N|69n|Z|D!WA7c2$U2S!2kpe7Ixh=p8+wgAHr2Pg%o4RL^XT!H`$9Sz_M zRe_QLOeh1eqap_Bp-NCUEawXC#C|!zLv{urbcY@2g;G#5Lg>#sOW213vZ4Hn`rMug zU~a2GNdYnp0VKk7pv73q6NWG)Br%?{jcwirG1|JoG075|~@Ge>jUMdIy3xW(l7^MU? z1HLFnXam5YT%dM9I>re)1@dF8;J8u{peV%&7-E&6AAxnOE0h~_#9l-E`!yee{jJS-bfaLQoU$3*`Z<2`;b&jf*Ly<|TkmP=fL6 zUa%C2y0ATcEXfX{5)GjW0F&qqyJU1RXOm6OSq6pO+|C zZ-0@CP_Py0MJNWzm!W>ZC)pNeX?F3Cmy#6}{<|Rk=T?iX|82>Cl&9D&PO$=qyYetz jCv05&;LTlin1(ALOOd9=#XCQ-O4xUU0Ro|PKj;1r&c=!g diff --git a/distroduce/local_messaging_sim.py b/distroduce/local_messaging_sim.py index 5c29896..45762c7 100644 --- a/distroduce/local_messaging_sim.py +++ b/distroduce/local_messaging_sim.py @@ -1,3 +1,4 @@ +import sys from datetime import datetime from cadCAD import configs @@ -30,8 +31,15 @@ if __name__ == "__main__": } ) + # Configuration for Kafka Producer + kafkaConfig = { + 'send_topic': 'test', + 'producer_config': { + 'bootstrap_servers': f'{sys.argv[1]}:9092', + 'acks': 'all' + } + } exec_mode = ExecutionMode() - kafkaConfig = {'send_topic': 'test', 'producer_config': {'bootstrap_servers': f'localhost:9092', 'acks': 'all'}} dist_proc_ctx = ExecutionContext(context=exec_mode.dist_proc, method=distributed_produce, kafka_config=kafkaConfig) run = Executor(exec_context=dist_proc_ctx, configs=configs, spark_context=sc) diff --git a/distroduce/messaging_sim.py b/distroduce/messaging_sim.py index 3a90dfa..d1b7e15 100644 --- a/distroduce/messaging_sim.py +++ b/distroduce/messaging_sim.py @@ -1,3 +1,4 @@ +import sys from datetime import datetime from cadCAD import configs @@ -30,8 +31,15 @@ if __name__ == "__main__": } ) + # Configuration for Kafka Producer + kafkaConfig = { + 'send_topic': 'test', + 'producer_config': { + 'bootstrap_servers': f'{sys.argv[1]}:9092', + 'acks': 'all' + } + } exec_mode = ExecutionMode() - kafkaConfig = {'send_topic': 'test', 'producer_config': {'bootstrap_servers': f'{sys.argv[1]}:9092', 'acks': 'all'}} dist_proc_ctx = ExecutionContext(context=exec_mode.dist_proc, method=distributed_produce, kafka_config=kafkaConfig) run = Executor(exec_context=dist_proc_ctx, configs=configs, spark_context=sc) diff --git a/distroduce/simulation.py b/distroduce/simulation.py index 6bd3695..8dc41eb 100644 --- a/distroduce/simulation.py +++ b/distroduce/simulation.py @@ -57,21 +57,31 @@ def main(executor, sim_config, intitial_conditions, sim_composition): i = 0 for raw_result, tensor_field in executor.execute(): - result = arrange_cols(pd.DataFrame(raw_result), False)[ + result = arrange_cols(pd.DataFrame(raw_result), False) + metrics_result = result[ [ 'run_id', 'timestep', 'substep', 'record_creation', 'total_msg_count', 'total_send_time' ] ] + msgs_result = result[ + [ + 'run_id', 'timestep', 'substep', + 'record_creation', + 'client_a', 'client_b' + ] + ] print() if i == 0: print(tabulate(tensor_field, headers='keys', tablefmt='psql')) - last = result.tail(1) + last = metrics_result.tail(1) last['msg_per_sec'] = last['total_msg_count'] / last['total_send_time'] - print("Output: Head") - print(tabulate(result.head(5), headers='keys', tablefmt='psql')) - print("Output: Tail") - print(tabulate(result.tail(5), headers='keys', tablefmt='psql')) + print("Messages Output: Head") + print(tabulate(msgs_result.head(5), headers='keys', tablefmt='psql')) + print("Metrics Output: Head") + print(tabulate(metrics_result.head(5), headers='keys', tablefmt='psql')) + print("Metrics Output: Tail") + print(tabulate(metrics_result.tail(5), headers='keys', tablefmt='psql')) print(tabulate(last, headers='keys', tablefmt='psql')) print() i += 1