From 78623fbcc6c7092859d48f68498fa9f7525381b8 Mon Sep 17 00:00:00 2001 From: Sebastien GOYON <shinedday@gmail.com> Date: Wed, 3 Aug 2022 08:55:51 +0200 Subject: [PATCH] Last push --- ant.zip | Bin 2097 -> 2225 bytes ant/amas.py | 15 ++++++++++++++- ant/config.json | 8 +++++++- ant_communicating.zip | Bin 2341 -> 2329 bytes ant_communicating/amas.py | 2 +- ant_communicating/config.json | 2 +- box.zip | Bin 1539 -> 1532 bytes box/amas.py | 2 +- box/config.json | 2 +- demonstrator.zip | Bin 2075 -> 2062 bytes demonstrator/amas.py | 2 +- demonstrator/config.json | 2 +- philosophers.zip | Bin 3181 -> 0 bytes 13 files changed, 27 insertions(+), 8 deletions(-) delete mode 100644 philosophers.zip diff --git a/ant.zip b/ant.zip index d80181d9e9a677256bae64057edba365daca45d9..97ec78859c67f94f9e2bb70a5d80359d1bf945b7 100644 GIT binary patch delta 859 zcmdleuu*Wsd#3tZz86ERkM2Jv!^FVA&c?vN&A`Brm{+2on44IvS5Uch%Gtcz20X{# zv;N|1(cfx)J%evA%jt%=vOC-?jS9EB4xgE3<f)g$Qu)2JOGrCDyYZ!h^A-R4OCqjs z%)Fuvnk#D}vaUKFf6HYM@jpZQ%&gP5Y7ZStocdee>o^P7)Y|v;Ki)T$-}&*f;y@&C zU_XE8>E6b2&jp^Dr<SF#n`dogITo-eRmXHu?6U)<m&=`^j9HUQ`8HkYF+b<9T!F`l zJ3lpSqZfA`>lrsQrQf|5GQ;NVne%0{1&8WiyHDQ~68ILaSi-OUZEuK_#DXO;CQ5rn zy?Xi|Ui<23ZTq>W&9m|Bs``+<e3}mIzjpSt7Q8f1F#8-WuD4~w-f15uZ+DwBSMss( z8sV^HQ}vmwFW-FozdWeUHTBNzUD~_E{VsCMR=cgzJbm{$zcU(^HCmQ6jzu1uEY3;w zs>XhoxTI^dd&hoD_wxoWeTVI<zF7O*)9YF(wJK~wkck8rM_k<jebu8TWiCtWTf~>D z9KB|=M&G;R!q<)@zW<9dL%gmXe=|pPruFV~>nh7nmpo|`>RoZhK6KaV^|7Jp?du$P zo}St})9v%wtTREqQ+t~@I`7Th?OD?_IrBtQ_4j)d;sd0g&YHUT*>%TvdB^A0eAuS` z@WRVW*Jae!N7l7Z+oK$@WzlZ6Z`aj!xi!74S9{LsU*zF6YgI}ipZjUsr`#(8Cz&66 zan{!GTH%x)+tv`t@~g+?UjIsa^{e_})ZODXn@-%3-_x3H)cQ`<biw`rZ)O$|1_lNW zh9LioA%}n1a#S-gFkE3^VBm))q~!d(w9It9tm6E<-rj>;hYSQ<-Z%Z<@Mh<f3V|i| z^}*9h&a#>6dajvrsoq@r_U_}A{WBxat22B_UM6n)Yi9DN<O6&cwk+G57+kvP(Ba=N zn_qu6+W2Y<%j#`a-igaXKCIfvkoaCjxun2!+0BQ?`6J7gWmvz`yA*Qt{?}&LeeQli z^Yr(7#@^Y7aOgtUb0IEoriRaAU|{$;c^^Cb<^tB!jC`mWVX`N?wgNUUF)%PNFfu4G eFfeGbPM*SU&3I|@1$J}BDU&%kl-VrULDB%gje{Ei delta 693 zcmdlexKUukd#3t@uIECMG<<h&VPs&~!NS16&A`Brm{+2on44IvS5Ub$<Y3-y1D?I? zC+r1wUdan)wtXX{!&-H-&^|z<CFe9>uy>YfWryLH``%W5Z&G}t6KpsPetwbDwVimT z`?H{v__NKYteM@8@?Mxw`?b(cn(N7<=D_najkLa;W;}XRVa3n-H5nls9}-w4gd#6Z zebTu2im1Y*r5!U^?uK{=?91!jX1GSdWk1X8>JU@)6mcHK3v13Nl|)pmUDWoqW3Iw& z@wbyrtXIkWyqqa~?ptZl*?9_YJWt--w{~UOQyYZ|tm|{uPVSGIdFXiA>7w&<b*A)o z3s-Vwm|mTIXKS4Wds4~%XTkMmt9~)9xnBFy=lJUzRoweSguk4exAA0yo4fzf#TRTi z&)?tvKl$YT!$#N2YW%0)I+=BL`R3>)1=WFXIwUoB>uc`L4=8&))nkgtq7R#HPnL}- zzHhEm!h6@H;>U5hU&8O|=2)(J(dCxBE?X*wW&8IJw<Gt?;_96L;*5XTd!?Ytcgneq zdF~pz4~@6DJj|)Im@7Q_<GtKp`t$N5x78d_G5q*zx{vtB=(5sX^1LeR?`tg<Jn9_Y z;Wp8AkJK0D?R63|HatRd9+La-+xM6IznpZwdIImv{M<wG?*qJ<Swt8Z7&sU}@jFL} zOFo%_fuV7-Bdb`t?rBG^1_goEhqV`E+akMnbS^mEvEoTU<Pu52ySD04``$mlo6Fp= zC2jKzPx1ZgQObM`URpO7|0vpYaCh=Di&r(d^NM#Zditw0JIQe6r?Z=#KA5!i7&t7S z^5dh*^uzf+{QKvNgRGyd%^|h<1M6u<K9Ca-No?{-c5MZa5ZqM^3=I4X5WvWwz`($8 bh-I<}hc#o+<NywHMv=)K9Lj7v*gy&ZG~6&K diff --git a/ant/amas.py b/ant/amas.py index 822eb7a..f0485b1 100644 --- a/ant/amas.py +++ b/ant/amas.py @@ -1,5 +1,6 @@ import sys from math import sqrt +from random import random, randint from iotAmak.amas.amas import Amas @@ -12,7 +13,7 @@ class AntAmas(Amas): def on_initial_agents_creation(self): for _ in range(self.agent_to_create): - self.add_agent("ant") + self.add_agent() def is_neighbour(self, id_a, id_b): if id_a == id_b: @@ -38,6 +39,18 @@ class AntAmas(Amas): self.agent_neighbour(j, i) + def to_graph(self) -> dict: + return { + "cycle": self.nbr_cycle, + "point": [ + { + "value": randint(0, 10), + "name": elem + } + for elem in ["a", "b", "c"] + ] + } + if __name__ == '__main__': s = AntAmas(str(sys.argv[1]), 15) s.run() diff --git a/ant/config.json b/ant/config.json index bb33cfc..1b03e65 100644 --- a/ant/config.json +++ b/ant/config.json @@ -1,10 +1,16 @@ { - "iotamak_version": "0.0.7", + "iotamak_version": "0.0.8", "scheduling_type": "sync", "canvas": { "height" : 500, "width" : 500 + }, + + "graph" : { + "height" : 500, + "width" : 500, + "refresh": 10 } } \ No newline at end of file diff --git a/ant_communicating.zip b/ant_communicating.zip index f125378b6c59172994475573018d535ed5586d03..b0646eab6e2fabd5a4733f78b2304c943b78cc12 100644 GIT binary patch delta 523 zcmZ1~G*f7U53}G^-wPp6EV~|TW@KR4!ot8HIr$^2XnkUCVzFL9<<gLYevb_V_J+T* z@2OHu^k&h1yL6Fu;lmUB3MNHD>OP%s9~A~DAKAZt?y}z7x!XOg+2zyb-LEd3=bM$g zhWTBE)yg%23tFmKrFOl)=Bs|Vp{F|Fk*=^;!TvV^`%W{O&K2oRXk(XcnA4&f+hX@a zE0wil$w@^uo!RwSe21>BopkFX(~X;!FYYW_QLFr>X(5xz>)kJS#KO4L6D^aJQ+7`? z^W41m)I9rMUx~ZtJx!vS?oFC>aqrrQ-9};p9?hb=rk&K(HmunaJuUj(6Ni}+TbKMY zHD4>+*I=_D{_~8ERdo!fQ|+xLZMd{G?C|1@2)Q?se+{)>>WH3id{(dep{DMyy!SuZ zX@%Q9?td|7?wV<OGjr24@5~Xso$Pk%ol@#|-cxzgj@fx9iC5HKn9Lhfecyi11=Es= zA3pTjevx}uclVy$(UmW{+>-RNrIc9A_dh(Dv9n{T(~K7yK2doxL6tI#7-D+^W*y#t zVIkMz(|3Q$969qoc4__Nzx904ezpd!T}^cpU+UC7EuNcqpOq^-o?BJWxoe%kRE6FO z(-)h!@2fWb<2~WWb&b!{zd!!@PId0#^Nv%EZ@(&7{EuO?1?zq$UX+NP%)$}Ds53d1 a!;A6M<P{vQjI$=c<1l3NVP{}qU;qFe@%3u} delta 542 zcmbO!v{Yz=4>NCZ(b*7zJwlWBGcqt7pB%}oT%UK_fM+lJ344K^SKb9Jmfhfef#=22 z<Nq821vcsK_R(E6^@-B44fXO*EjCUz&2Id-fcfW-dz)P*pIKeXSo8e(=2MZ(ZmsDH z6n{TERAVM`qRo17oKfnO_x-kBo9q@n+q@|7-eFny1^$mFu1k_r@rq?sGGsk+<n^+s zrlQhp6ZZW~_40RwEXr48c^=V|P;%OA*L^VQ;TA5bYszI!Iq_S)FTGh%^uT|)n$Gvq zptF4k-g}%Z%FkXE8_CXb<blX_tDh%MiP+uJJuO?lDS%0DjiGL^qEd{0-<b*S*Fx-{ zZ!0~#cEXo$>2^<-t<pbGb$7a7$Xvd)$veV(ue;kWPVIMNcRyO6yri<rW`Es(dGCLs z(>89K8g8AgzIyAOt7Q`pU5(txoVMhR-O@Mv9B%gd3oTZWS6Y9jZd0rG$G^TUdJAWB z@ZZ1Tod59I@vmP`wur`F%s5l(dpP9aRsV_&Yr=z9TEv$a#jn}UxYB0sYL2@-0a1tc zUohl4{q$d5-!Y#m^OyH4Dxcfm_{138bMj67sS>gM6L<QRuWou|mXK<aG-naF%i<0} zeYRTtYu~$Fra3EdYfb+D^Y6!Jnz4tzJ6=s+_tZt_594MX*8NOq(fWfug3)4fAcq&@ qwaI}TqLVjr7%(kko4k!pK`g+Vm5qUcfq{*IjbS?@149Hmhz9@!&-?2D diff --git a/ant_communicating/amas.py b/ant_communicating/amas.py index cc5ce22..3e4b76f 100644 --- a/ant_communicating/amas.py +++ b/ant_communicating/amas.py @@ -12,7 +12,7 @@ class AntAmas(Amas): def on_initial_agents_creation(self): for _ in range(self.agent_to_create): - self.add_agent("ant_communicating") + self.add_agent() def is_neighbour(self, id_a, id_b): if id_a == id_b: diff --git a/ant_communicating/config.json b/ant_communicating/config.json index bb33cfc..1337e24 100644 --- a/ant_communicating/config.json +++ b/ant_communicating/config.json @@ -1,5 +1,5 @@ { - "iotamak_version": "0.0.7", + "iotamak_version": "0.0.8", "scheduling_type": "sync", "canvas": { diff --git a/box.zip b/box.zip index 1341005ebc9deb871cb11248c71264bfbc027384..2bbfc77f487ad16ddba641099de911dfe2cffd46 100644 GIT binary patch delta 349 zcmZqX`NO?Ild=A)?}d<uRlfi3GcYhrW@KRCW?*1Q%CFE*%uOuTE2#9H;G1>CfT#6) z;~mG{8y8CKl0A`B)te}wR2X#e2H&(`tL^LSojSs{-CLe+zwx${k3#;--TP)I7aUNu zmH8`Cq|)}}t-Fr<gEl)ab>`9q?~hG&d7%Ag>NG3YT79J_v)=I3cf7Gw)Y|y^52MKR zyOHys@J&i`e5i5LTzab6^8=l)R>yw`O^=#5ZP6nMT~)q)`wB|uIJ2;Q6F8|KwsxCh zTFlN{aW{W8D_t@%O}=XIBzK3O?a$PG%_{!qUTtI7(>yIJ*v6RG(RV}n9$$Uq!#hEI zYd;<H<@^5oPfcd6g4(;dm-UnNm<pKBxt`p-kg14?7bP$zE3kSos!z^lm6Si{dNPE2 p<%D&%3=9m83=9nX3=qJ`puoVu&^viCs}1A#$q!g%**aN3G61n%lCl5* delta 363 zcmeyv-ORH=ld*nR<cW~qe~eq6F)%R9Vq{?8W?*1Q%CFE*%uOuTE2#9H;M;ZBfT#6) z;~mG6VCk-fx1Gf1W=~Nv>73lv`8L6F>E6FLJUK3&y7v3am&18nhK)5#*S%WRe~_`g zr2I?ziHQ=E*5_}uX$=1oXCxWH^=g%@CrjO-<x8&Uy^0o8bWg9YcSt$U8Q3ZNn>#=z zExmS<v_}_ft8U7?oRC{@Sglv}*B#Wiy4+zRB6>SRv+#p=`{HDIC4&v^9(5bCwrD5a znkar-dACo1%d1^iBj(l}eqPcz)otFa<d4nspNXne7KN>U{$NwiPi3de2P7{FRv-C% z&27QW{;B2RKR>9w|4|n+KZ-lQqjPikFZlp(W|qnJtWuL*nSz*CWuDkPi>Zi-7bS2e zOR{>&>M=orCn>)|ub?u(n~_O`L4<*UfrDXH=84G-tkR5ACeLBDVf;7wCaWyl1QrGc G1_l5@A)9;v diff --git a/box/amas.py b/box/amas.py index d9b787f..863cda8 100644 --- a/box/amas.py +++ b/box/amas.py @@ -10,7 +10,7 @@ class BoxAmas(AsyncAmas): def on_initial_agents_creation(self): for i in range(len(self.clients)): - self.add_agent("box", client_ip=self.clients[i].hostname) + self.add_agent(client_ip=self.clients[i].hostname) if __name__ == '__main__': diff --git a/box/config.json b/box/config.json index c771fea..f956d8e 100644 --- a/box/config.json +++ b/box/config.json @@ -1,4 +1,4 @@ { - "iotamak_version": "0.0.7", + "iotamak_version": "0.0.8", "scheduling_type": "async" } \ No newline at end of file diff --git a/demonstrator.zip b/demonstrator.zip index 986fcb0cf7f061607b934e5721516a50504782be..7ef26b5ae2a8cd36cec5c01ebfc428b30842e948 100644 GIT binary patch delta 316 zcmbO&&?m6LiJAAR?}d;{J(rXoFfcI8pX|>pQ$OKgSBn8p+xw>X6K-$WAo9)XL1O=J z9wo($(nGhxX6@RLzdu)0P_5lzvVQ%n`FF*Vn0`*)mO0y!ja}x_^u_YdeM{6HFrT{W zwe{?dNgOrd0U@5hB415N-ejz>>3PeFBkMl12gH=6*G^LR=wfX(PPv~Gaw~>eeAWA^ zgV*gYcWs%HqStpZ=+T4MZMz@IC>d;M_o&;LwUs^T*woc;=B~BZ@SU~HIYL(A)3v+H ztK`mTdwhD5W9z=_pKs-bcFUM|`YK8#vNi&;8{KQ>%x2wndRI>Sse7|^e%`L<i<;lj zxjX#lNB#hBW|qme>{6RcS$dez{LjZ8%;+^aiQSdy8OvmTR?*4(*tM88u};3tDm|H% NLx3%wje&uI0RZ|Li}(Nl delta 338 zcmeAZm@TluiJ4c%{Y1#@TqnD?3=9nGC;KzY)K5Iy)ndSN{C(4VfoDd#Jgs~ADsDWs zJFK9XQF{1R*et6J`TKK41<l$WCddE#sj=Ji2+Jq!+{<RcJbV^Q{N3%_WIRg`SWj6z zHEVXFqTr8J3syY(viXSO?F@B?l=GZ{ow3W<1Ll~g*G^LR=wfX>oD!WIa%&E&`l|I+ z2d~>)ZZfH#uETdR=+T4h_SKI>lngesd(>^q+Gw5B*1G!5)V0D>RC*ult;t(ldhofX zW@|<Dfw;CkW#LoBzdy6~`1B+v)_>Ra{eFAz^&fpI*Xq);uGxB#^0$uf$wH0qY*O>q ze2Sl;^Ruq@OO$*^=j`yGAK3%EnOQ^_7#KJhT*6L;{M!;1G1-otXLANi4-;C@FtP_T jhEEP<cV+xMc{aNP(|*>;=UAmD|6mtj%VA?+U|;|MY_XDt diff --git a/demonstrator/amas.py b/demonstrator/amas.py index 775492b..3469eb8 100644 --- a/demonstrator/amas.py +++ b/demonstrator/amas.py @@ -10,7 +10,7 @@ class IotAmas(Amas): def on_initial_agents_creation(self): for i in range(len(self.clients)): - self.add_agent("demonstrator", client_ip=self.clients[i].hostname, args=[len(self.clients)]) + self.add_agent(client_ip=self.clients[i].hostname, args=[len(self.clients)]) if __name__ == '__main__': diff --git a/demonstrator/config.json b/demonstrator/config.json index 4bb3bf2..771bb3b 100644 --- a/demonstrator/config.json +++ b/demonstrator/config.json @@ -1,5 +1,5 @@ { - "iotamak_version": "0.0.7", + "iotamak_version": "0.0.8", "scheduling_type": "sync", "com_graph": { diff --git a/philosophers.zip b/philosophers.zip deleted file mode 100644 index 36a06f59b5c16b862e0b44f85cc23505f35b0377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3181 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 O2ZIa~1A{dehz9_Z1{22s -- GitLab