From adfe1567d6f40bea9daa95d9eed4708abf5b3155 Mon Sep 17 00:00:00 2001 From: shinedday <shinedday@gmail.com> Date: Wed, 8 Jun 2022 15:07:49 +0200 Subject: [PATCH] Add some experiments --- ant.zip | Bin 1946 -> 2029 bytes ant/agent.py | 36 ++++++++++----- ant/amas.py | 6 +-- ant/config.json | 6 +-- ant/env.py | 4 +- ant/scheduler.py | 2 +- ant_communicating.zip | Bin 0 -> 2279 bytes ant_communicating/__init__.py | 0 ant_communicating/agent.py | 80 +++++++++++++++++++++++++++++++++ ant_communicating/amas.py | 43 ++++++++++++++++++ ant_communicating/config.json | 11 +++++ ant_communicating/env.py | 15 +++++++ ant_communicating/scheduler.py | 7 +++ box.zip | Bin 0 -> 1539 bytes box/__init__.py | 0 box/agent.py | 17 +++++++ box/amas.py | 18 ++++++++ box/box.py | 9 ++++ box/config.json | 4 ++ box/env.py | 27 +++++++++++ demonstrator.zip | Bin 0 -> 1894 bytes demonstrator/__init__.py | 0 demonstrator/agent.py | 61 +++++++++++++++++++++++++ demonstrator/amas.py | 18 ++++++++ demonstrator/config.json | 3 ++ demonstrator/env.py | 13 ++++++ demonstrator/scheduler.py | 7 +++ 27 files changed, 367 insertions(+), 20 deletions(-) create mode 100644 ant_communicating.zip create mode 100644 ant_communicating/__init__.py create mode 100644 ant_communicating/agent.py create mode 100644 ant_communicating/amas.py create mode 100644 ant_communicating/config.json create mode 100644 ant_communicating/env.py create mode 100644 ant_communicating/scheduler.py create mode 100644 box.zip create mode 100644 box/__init__.py create mode 100644 box/agent.py create mode 100644 box/amas.py create mode 100644 box/box.py create mode 100644 box/config.json create mode 100644 box/env.py create mode 100644 demonstrator.zip create mode 100644 demonstrator/__init__.py create mode 100644 demonstrator/agent.py create mode 100644 demonstrator/amas.py create mode 100644 demonstrator/config.json create mode 100644 demonstrator/env.py create mode 100644 demonstrator/scheduler.py diff --git a/ant.zip b/ant.zip index 7f598ed6dbbf36c137aa684b8571ad27ef2c45db..64f65499b46aa579f4afbf1c9ddb7ad78e624126 100644 GIT binary patch delta 1509 zcmbQm|CWD(dA*S9zK}=WlYWITF)-X?V_@K6U|>khE74C(Pt7aQE2x|r8kj%ZK%lOF z%Kw7J{71E1FRanen0dv1gS~+3G;X!6Y-KFVlxKgtU%pMzVuH`w_@4dNzki=APj{&e z>1}H}>2&q=)PmFBuB;1x9eQ(xRLdoO)8CStnWsy!wTo{y(0g4U8n<y<tN2Q1?nya& znPi-@R*9YsT`G0skbL{Bi75hiRLfW{vMguQJ8k*r$)4VW?dFdaQ!NkG-%XL^HPzao zVz)VMf{UHahO`N8)9+0)ZC;*H$FV7G!_1Dm?gzaWoX|E|ns|D(5z{r9T~h0po?USD zY=vc-MD?A;hf><+u1k1qI<MaO!<)Mk%@sS(A4&Im^g8I$E!NdX@|U$v3R7r2{{Dlr z=Q~d8B)fF$&%tqpzfSQ#3cei>aqg(~{+-8<sqM7bvv<|9qd(XdT>sLex2IM)@8;X| zHLT}d3uk}s@|*VhzxSJmiPm2{a@2Ize)wqF)SkY{;~u+>tEJp;-rb3ZZ1;5wN!0)K z-~Ok4(oCK58*H-I_OG4IDR(+!x<jYD$nGm0wjVxd-}KKrcFbq<>Fjbl;e_*d68|5s zdw!ICowM1Q#;q(ZZ_d75vhU0^eV3#yVx6rz74p~C@V}iU@MF_nx&IQ=10UMkOuNgu zr|`+VA6Z&oxj&h!74t<o-pyS0vvosc+GLKPH}!5!m7ezcIh8ls&QxD3m79LF{q;`Q z^r+&y9e3V-tdY(6b;eF=h1Mo3&o}Rt>QpUr#J?P@dvm@n)7JOe<x8(F)qk7uboawu z*-sw4`KNhk&*Di}=LFrzdpPgXEKbjte+9UU!=)ZgmU^^b>zMlc+Uf63PVf;kpKFr% zhdIETnMH(wp`L+*;kC!Uki<u(Y`Ym57|yaVFmS_?U~XcuUP0y3kb_x|4FvYGf8ux6 zn|k}og~M@9n=hP}`_AqqnG#*5p4}Vdsb`q_zgG2l=bW6&Vpi;p>GSSMd!Bc$%3i~M zefQ5b+uWL`{gcc%voFGaelM%hKgZMdJFi@lWl(&mRG(m{9sN?qrr?N$;Pf2P&jO2r zOcjJCyNmd3{VKF1*J|yJ-J%xx(+{+|-fVHX!<y`pVV81IT4(K~xPw-S!bRDgdo3oV z3HRl#UUTBp;(sDjZW-HL@!VFOwSBtsVduk_*JUL$HcG5{;@0_n)|^9^9am+Y*A<)e z_mRsynN5qH?KGHMFPq=NR29*!DSg$M@!IQ!CCiehzSlXdf77aTle+240PXyhH9aQ& z6Q93*|2?8>{e~sC^!7YhTK37U_4Z9&qaAxS%8sa<`WJlaANQ2ns!0-}mhzQ{^%cqr zWPk1Bbh>`QzvZ|w--YTOzYCwO*rXrb+M1P7B6#Ot%l)>iSz020UDE68lD2;KxVp1n zsbunkEiL^Q480CteOTt_BlazC)BleTr#_xmJ|oFz&p*w}u7A{aSl#C5?J90u8rE^q zIlLoENI9<em)@2-3C%>G4uhqiKK$Qjch5HUbiw__Yfk4LSE_->GXn?1;mVyMIpHbk z5ey6rB@7G<{Ge!_9Ll1@7&y6!#XvEHM<s;&QY<$EG-*InMz_MjBlAJZ87JRk(Wu`t z`N6EdCDK2>ZOhrEy1l0UpZ!7$wUZ0vZRN7QPf`jv75gP$yh6=WhB<wKYsFo+(}$8j zth!LBcjV2Ay&+sn=PhJ+NjlZxcKE{l1E;fBDXrCt$QF5&W41+b?lFa9yY`=s3z?n8 z^jkt;VeUf5o_P`*Bj1YNy5BkL=#>1}jWhC}@8*b2zH;)&u{y@d9juS|Pz%q=6>K^Y z*b*}X0|Nsig8~Bs!)hjI=?Y2O0p5&EA`Bu73^;-Zp|OARA2vA!kl~2%U|`?^DS#U; V!aCWC-Hh?}<U)33wh}gw8~{+*sLTKW delta 1418 zcmaFMKZ}2Yd3|E}=8*3%e$M&I$iPs_%D}+Gz`&50SE8Soo|;#pS5P@M<Y3-n1A)En zr|i$9@gLQ4U2-dC(OIvbjei?CBKss?tVnP_R+6~CE_XqrgLLlBhWmRy+EmLqKXsMn zc3TlL{k7=V)2r5ATm4nbco)m1ZxLPBJ)W%4;b~bMUva8Rl{>ILv>?Rng~PV*3Om$~ z@>r<5PW!yzkP>%e(D4O57v3~Z;eD9%MO(^mx^2j{A2AYg^94)`8lK16IN#<ET*;jq zlhSov+=Q`voz}5mlP~3HMXc`gUbJBUp-EwLi`e}4KiD2-Ay`p(d|v9QFtHQoXI!3s zX^uzdm$v!ON}dOM{5%~w`&9khLI$bR>t8h4^6r`vY_xjTqLS+$Mdv!*`Yj|~VZ#&F z_2=|fi;7#VA9f^ni``4?yYpV5^li-buVpRwqieeqi{<ZBp3I+?ydn9d$7jQbwyW)S zP44{hdY-y_f6<nM%cAol9+l=TZ_<i6v2cyMQjn&Zqvosy(Z+1|=g6nG=AF3}UjJ9c zdge9VFY*)gojh4qFI=;BLxpl;+3Z4&+ZKJ2e@fn03r(xEe^&4EK0D-P{qChjDRGNT zResOm+}^&od-wg%FP=Lb?_3sXZues2<z+Wj-oMMAcCoBy+v$w^7qyeGIX7=J%ToB> z-23N8&?1*}4+|RD&v`p`eQtlKb13)e@p=1A>&*?66F+UgY?ioCK2`bCoDB#6Dj9A4 z#QvK-z?+#xgn@y9gTbSGbBMo_Lcu{s28K&43=G_`B$At0tXELE6p=!DiZn|!Z>_uH zy(Mzxbh+Qmp(aKK7d#K1>zk{!;#Ph9YypML&1<(5J0$F{e4l8~YaXp!&zF<^d~=Ww zb8pf41AkxT7k-Z1fAH8{^H-{&y_?({;x{lF%zwIdli0h`12;5m9;HUG$FojtI5A5$ zDP^Ue@QEXPCMe`jPnfGR;kwVQn=B=2E42R0-CDT*!sN2mFL<6gof2H*_J(EW?MW_$ zRwsC!n%!)+rk1d$gv!r&(>S;HU5{VA?-VzNM$?W<qOS6lvktl6cP)I-C+4;LXs1o| zl_OV+)5<Q*=cz9Fer8!tOqukCsM6?kE2lhlDY=l`mrK%3GB+x!&#`BnRr;Xv_vd<@ zo8b}1_U_%k!Mp5I*PoYf#0~Gnh)5eKr~cMV{mpu+Y|o?s)@bpH+AoW3W2*1p-*drq zOTF;JfAZEZ{CDiN_71uC%rwzW^t)!$?D!8ECc4X=6#Z+asry#9$IN-I;b5*jMfiuf zRY+b*q0QXM6Mo+F{Ui52-*QXM0g<dpU;St5Ju<hu`Y|!0U<P}XX^VtWN$U-bYaQWx z_kF$AzxYUh`w9Q$A)a4<mF(^lme^OfMtH~Xd(|7{R=z2DV*if`5!;24n?t^3Z_rL= zU|^U$c^QidW7y=|ECxEWB3L{4RTBSrO~{?<r4Xlk;zJYzLf5pA4Ivh*CbiCDU|{&l zFj<FHqkik;4W_c5<~MHd-t_WM@#+6h{hbOuCOM|t%6V;_q!e(<_sd*vn~5rYjm8(a z;=W(A`tWA2mdPCP<9~L33yO*O!lkPq6zpaq_3Il8zh|t#l7#^qJdZ1OY<ze8-IZNk zUVOhL1QxDa=+rY$V&g3*kyq~(XC2kCx72_CvTR@UZb3gcX0vb1lW(&=;zKRrCZA^0 ziNKbk85kHC7#S287#Mt*phX}geFu0mGKnxivI0urFfcIigLJ_)noag+ms3Cu3I+x) Y6g9_KCik+NF?LKo!miAw$Oe)F05ULliU0rr diff --git a/ant/agent.py b/ant/agent.py index 0d1d88c..6492e4d 100644 --- a/ant/agent.py +++ b/ant/agent.py @@ -5,12 +5,24 @@ from iotAmak.agent import Agent class Ant(Agent): + int_to_color = { + 0: "#000000", + 1: "#ff0000", + 2: "#00ff00", + 3: "#0000ff", + } + color_to_int = { + "#000000": 0, + "#ff0000": 1, + "#00ff00": 2, + "#0000ff": 3, + } - def __init__(self, identifier: int, broker_ip: str): - self.x = 250 - self.y = 250 - self.color = 0 - super().__init__(identifier, broker_ip) + def __init__(self, arguments: str): + self.x = 0 + self.y = 0 + self.color = "#000000" + super().__init__(arguments) def on_initialization(self) -> None: pass @@ -28,17 +40,21 @@ class Ant(Agent): def on_act(self) -> None: self.x += random.randint(-5, +5) self.y += random.randint(-5, +5) + if self.x < 0: + self.x = 0 + if self.y < 0: + self.y = 0 # count color - color = [0 for _ in range(5)] + color = [0 for _ in range(4)] for ant in self.next_neighbors: - color[ant.get("color")] += 1 + color[Ant.color_to_int.get(ant.get("color"))] += 1 # set color if color.index(max(color)) != 0: - self.color = color[color.index(max(color))] + self.color = Ant.int_to_color.get(color[color.index(max(color))]) # low chance to mutate if random.randint(0, 1000) < 10: - self.color = random.randint(0, 4) + self.color = Ant.int_to_color.get(random.randint(0, 3)) def on_cycle_end(self) -> None: pass @@ -53,5 +69,5 @@ class Ant(Agent): if __name__ == '__main__': - a = Ant(int(sys.argv[1]), str(sys.argv[2])) + a = Ant(str(sys.argv[1])) a.run() diff --git a/ant/amas.py b/ant/amas.py index 267f805..db8368d 100644 --- a/ant/amas.py +++ b/ant/amas.py @@ -6,9 +6,9 @@ from iotAmak.amas import Amas class AntAmas(Amas): - def __init__(self, broker_ip: str, clients, nbr_agent): + def __init__(self, arguments: str, nbr_agent): self.agent_to_create = nbr_agent - super().__init__(broker_ip, clients) + super().__init__(arguments) def on_initial_agents_creation(self): for _ in range(self.agent_to_create): @@ -39,5 +39,5 @@ class AntAmas(Amas): if __name__ == '__main__': - s = AntAmas(str(sys.argv[1]), sys.argv[2], 50) + s = AntAmas(str(sys.argv[1]), 15) s.run() diff --git a/ant/config.json b/ant/config.json index d9cf6ab..d96ea1d 100644 --- a/ant/config.json +++ b/ant/config.json @@ -1,13 +1,11 @@ { - "iotamak_version": "0.0.3", + "iotamak_version": "0.0.4", "seed" : 0, "canvas": { "height" : 500, - "width" : 500, - "x" : "x", - "y": "y" + "width" : 500 } } \ No newline at end of file diff --git a/ant/env.py b/ant/env.py index a4f1c42..ebadace 100644 --- a/ant/env.py +++ b/ant/env.py @@ -6,8 +6,8 @@ from iotAmak.environment import Environment class AntEnv(Environment): - def __init__(self, broker_ip): - super().__init__(broker_ip) + def __init__(self, arguments): + super().__init__(arguments) if __name__ == '__main__': diff --git a/ant/scheduler.py b/ant/scheduler.py index 9aac6b6..01638e3 100644 --- a/ant/scheduler.py +++ b/ant/scheduler.py @@ -3,5 +3,5 @@ import sys from iotAmak.scheduler import Scheduler if __name__ == '__main__': - a = Scheduler(str(sys.argv[1])) + a = Scheduler(str(sys.argv[1]), str(sys.argv[2]), str(sys.argv[3])) a.run() \ No newline at end of file diff --git a/ant_communicating.zip b/ant_communicating.zip new file mode 100644 index 0000000000000000000000000000000000000000..2db59209b24cdbea563f93791e888e8b9e7a2e14 GIT binary patch literal 2279 zcmWIWW@Zs#0D(_I8$v)d49hYwFeK)c#3$$H=9cDVCMT9;=B4Y$$7kkcmc+;F6;#5s zaxnP19t`<pIs4H<CI*Jz><kQ2ShXgmr{<OD6;#d*y_+}NKxAM4lyZy3;zzYy7e?k^ zFw(sBH%_5TN1SIPTN%r;=Fr;jKiNB&mqZ=sEvVc7d2Vq|*gRL&g-SM}Ppgi;$-jH` z_0_7Wp^I45p6pZEf5>G@>fuNymB*H9mQRJMKFhDmT5o!*daoB((De<^FU^l$P_dWk ztAXA|5evcA6$$M5VXNl*^4z<7%qFft&^>BSYVgO&Td#42?~!dvxv5aMU4L@m@-U8d z!u^rSH(1u~I4|Wa5)(apjiC+eWd*Hlp4;9@zb9Ve*>LK#%CS1%ZXJf8r@kvQRwl1V zHJz|nel34=Yk~2^QtnNS$2PVoKFv^k(ix_Fx1BfT74vGd7m_Dd{uh;9Uo*>iZH-7@ zf%}3JYuySKr!PsU59wz$PgSh=!)MRB+|M%IR7m*z5^t`q_>6OQPnR{QPT6~Dw%xKg zzsR~O!O*p<-m<PevbZGet(K|d@&CyMA1>^gw83e0@AiL{f@_(JH9t7&`o8eXm=XLk z`~C-?T}~6OaM&b2QY>j{mvs?dP`hfiR@J+pSsT8X6?5lIcB%6zS*>`ZSmla7>#h14 zz6TE_&$4}&*NHT1`Mb=oiFKQrw&9KP?QedU?#y_1MexFkyXG=hjTK(eF_X$9B$n$g z3|wWm<=>j*z#13sAF-1SzX<MoGcAxWdFk)>a=pv$%CorS#kT(7J=yu8rAZ{fY?4P+ zYmU=DwFVDaF^@p;TDhw>H^hAT*>^vhvfMn~L!V22drHhfRg<k<&0h<C-^pY2wiP)L zy`Ohu^H15Evoji!Vppz-NSbKzacxBT-8q%3t{rf3TKKy4j^L(E&DX1rCq~`cxovmG z?w!|~<aE_8M+Dvs*<-$Kt3hpLK~PXn;`Zk1H9H?j-2c8+;I>BmUFChdPB@n)?U!3r zXyF-Q8Z-T)I3i)Yx*ZHDJ}le1myv<t5DNo?B=&@zn^>$@P`NbZVBT#5p1tfR>;-mS zc^9-;c7yi?o)=4x|8ocw*rdDLM|aiKCrZaQ)XP7$*f`lVyYb@#=AU2gb$@X(T7Ql8 z!`%7jwbFSdMCUcOy_?Pb`KEz_^t+y_lT!lg_$RdWH~d_aG39%~alyxve|Uy(<PTc9 zj$z^qrld!u!Mct+cbU#=j&J18<D6q1veo2~ri7N$=6&4<lOAs2lDei`)|3;!)%(($ z1w{}1m#gV~FAh4}ci_Fp$)f!1Rk4xm97i6AT(|mp;*^NpE#1?y<(mSS^wt>a1}iGX z==YtO;C?N{{`t1j!)qtZdAtATl-aB57+#m!TLqR{ZRvX$XBsCzS5mjy#L7ZTPWf!` zlb>II|Bv{zenZdZwR>(^T1T#Zx^7#y$hvb~vIfej-!)Uev!2SUnG~V=Q=n4y+etCK zqu<R1ceUgx+59;sSH*2^ziz$1P*{oUV#DjEyepel&;O7RxqexYVSLFX{cE=yLgqcw zaxzz*GVOzY$(ln&JNM6DJmcg|-(Ti&_blapHfUZ``90rg?$Lae>o4;{1MaY`>2d4P z+~r`>CGj!o!uO=w{T?ZnDw}2-{j}e2f6r#A_Yb=jzs_u()6r^=i1WjhJ4159Q_>?C z7#K<z7#OgZgUR`MX_@JIS;hHztDij$3J5rLM&I*{@0mV*Z(Xf(XU+$23JNf~V0^(i z@Y2JlOxhZLzP^D$8-ffPI91f2O;r_R77c6O;n3J~<;<5Jp$SsK%oDUWBvht(d9sD@ zsDyA|isfcNIElw^Ur3aLUeyc+28OQ;3=9%jlVNIJnO;GqZ~sBALk2u;@0;FFxE(d2 zDLk=VwuWnBz?R7mX7w$Re)Bf>X34*uPyc^XUudCrazVEo|JEu`L5-(+zqWJROjhY@ zG`_$U_x+mH2Z=peC3Cuy|HV|V)Dy9F=I=N%MX<MRp?%}@>miD3MRG1>@+7VKz0rE> zx<#`N+p)Q1L}v&rR(H$UCeZq=x+Bf-sd~85v)e!O-nv=Lym5mc;hVPLgCTERIAls0 z7#LPEFfhnr^-XbdMrulFPHK@}LFMT)x+nCt0yWm@JbU`+sh9St^Pwls=og;xJ#$Ul z@0^FP=2=hOpc5?`Ty2~UQ__}c9y$J8_1Usx$F*<V(pqu+_;a<iXGf2(j{aDr$>6xC zN!O{_t&me7T<o=~*wX2)(#Nu1X)NfFNbHa}o|Waqdr4dC?BxqA3<2JZOd<@p>qbaD zsQ{q})s!%!u-BC!GZ+~_Mp<JG3s}vGa1sXtwxS7PjtDch$~zHKP$3(GEwv+z;b6sP z3{u)hHVRuRMHn?3t5J|Ni);$E)PXQ1lMS1Lkkd+lH!B-RJsSfX!*)gn1}SzB4*)X( Bh_V0x literal 0 HcmV?d00001 diff --git a/ant_communicating/__init__.py b/ant_communicating/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ant_communicating/agent.py b/ant_communicating/agent.py new file mode 100644 index 0000000..e6a074d --- /dev/null +++ b/ant_communicating/agent.py @@ -0,0 +1,80 @@ +import random +import sys + +from iotAmak.communicating_agent import CommunicatingAgent + + +class Ant(CommunicatingAgent): + int_to_color = { + 0: "#000000", + 1: "#ff0000", + 2: "#00ff00", + 3: "#0000ff", + } + color_to_int = { + "#000000": 0, + "#ff0000": 1, + "#00ff00": 2, + "#0000ff": 3, + } + + def __init__(self, arguments: str): + self.x = 0 + self.y = 0 + self.color = "#000000" + + self.other_color = [0 for _ in range(4)] + + super().__init__(arguments) + + def on_initialization(self) -> None: + pass + + def on_cycle_begin(self) -> None: + pass + + def on_perceive(self) -> None: + self.neighbors = self.next_neighbors + self.next_neighbors = [] + + self.other_color = [0 for _ in range(4)] + for mail in self.mailbox: + self.other_color[Ant.color_to_int.get(mail.payload.get("color"))] += 1 + self.mailbox = [] + + def on_decide(self) -> None: + pass + + def on_act(self) -> None: + self.x += random.randint(-5, +5) + self.y += random.randint(-5, +5) + if self.x < 0: + self.x = 0 + if self.y < 0: + self.y = 0 + + # count color + index_max = self.other_color.index(max(self.other_color[1:])) + if self.other_color[index_max] != 0: + self.color = Ant.int_to_color.get(self.other_color[index_max]) + # low chance to mutate + if random.randint(0, 1000) < 10: + self.color = Ant.int_to_color.get(random.randint(0, 3)) + + def on_cycle_end(self) -> None: + for n in self.neighbors: + self.send_mail(n.get("id"), {"color": self.color}) + + + def send_metric(self): + metric = super(Ant, self).send_metric() + + metric["x"] = self.x + metric["y"] = self.y + metric["color"] = self.color + return metric + + +if __name__ == '__main__': + a = Ant(str(sys.argv[1])) + a.run() diff --git a/ant_communicating/amas.py b/ant_communicating/amas.py new file mode 100644 index 0000000..f79ec7a --- /dev/null +++ b/ant_communicating/amas.py @@ -0,0 +1,43 @@ +import sys +from math import sqrt + +from iotAmak.amas import Amas + + +class AntAmas(Amas): + + def __init__(self, arguments: str, nbr_agent): + self.agent_to_create = nbr_agent + super().__init__(arguments) + + def on_initial_agents_creation(self): + for _ in range(self.agent_to_create): + self.add_agent("ant_communicating") + + def is_neighbour(self, id_a, id_b): + if id_a == id_b: + return False + if self.agents_metric[id_a] == {}: + return False + if self.agents_metric[id_b] == {}: + return False + + x = self.agents_metric[id_a].get("x") - self.agents_metric[id_b].get("x") + y = self.agents_metric[id_a].get("y") - self.agents_metric[id_b].get("y") + + dist = sqrt(x * x + y * y) + return dist < 1500 + + def on_cycle_begin(self) -> None: + + for i in range(self.next_id): + for j in range(i, self.next_id): + cond = self.is_neighbour(i, j) + if cond: + self.agent_neighbour(i, j) + self.agent_neighbour(j, i) + + +if __name__ == '__main__': + s = AntAmas(str(sys.argv[1]), 2) + s.run() diff --git a/ant_communicating/config.json b/ant_communicating/config.json new file mode 100644 index 0000000..d96ea1d --- /dev/null +++ b/ant_communicating/config.json @@ -0,0 +1,11 @@ +{ + "iotamak_version": "0.0.4", + + "seed" : 0, + + "canvas": { + "height" : 500, + "width" : 500 + } + +} \ No newline at end of file diff --git a/ant_communicating/env.py b/ant_communicating/env.py new file mode 100644 index 0000000..ebadace --- /dev/null +++ b/ant_communicating/env.py @@ -0,0 +1,15 @@ +import sys + + +from iotAmak.environment import Environment + + +class AntEnv(Environment): + + def __init__(self, arguments): + super().__init__(arguments) + + +if __name__ == '__main__': + s = AntEnv(str(sys.argv[1])) + s.run() \ No newline at end of file diff --git a/ant_communicating/scheduler.py b/ant_communicating/scheduler.py new file mode 100644 index 0000000..01638e3 --- /dev/null +++ b/ant_communicating/scheduler.py @@ -0,0 +1,7 @@ +import sys + +from iotAmak.scheduler import Scheduler + +if __name__ == '__main__': + a = Scheduler(str(sys.argv[1]), str(sys.argv[2]), str(sys.argv[3])) + a.run() \ No newline at end of file diff --git a/box.zip b/box.zip new file mode 100644 index 0000000000000000000000000000000000000000..1341005ebc9deb871cb11248c71264bfbc027384 GIT binary patch literal 1539 zcmWIWW@Zs#00ATa6CofPhWQy77?ScU^yA|*^D;}~<Mj$EVTw5zw4+XhoHO94Kf%Dj z;KInjzynpBn4X$fqE}GqJHe6bkb!{f_ttxfFOIQf9mrkiWZNJvAerQAdP7BZvR8HW z<ft{9XZ`&A?6Yt#+jHg%K9$qb=a#c=;qINNuPA?tO)+zuuAc1+{W~fvJ-v3F+`MhN zOF_})MH_R^uHMoXQGS(i(KaguqoCUGrZ4>$T{^TDJP_u}zG$Iwe#Z~lKLP*VKi4^B zrjsZ0&E3L!^}pCfdTk%CWmj!_^laIpmPHTlpRhW*@sftiitHPTQY&>I<(Vq1*v@{m zLZ@y*hvB{Hho^p?Dp<Eghff~i<6V&_LVo`-Zh6MQz%YxEfq@(5<J`nzu!nuS4jb^a zes8?vSQ0GVweYr+*xc+XN+z9?yE@+{ST5cB_l76O#Z%XQfBAAakIS&JX6d?DtNITz zwwIKDNk1`BV$%BjjW&(pU*e1;Be-6zlJ#V%JG6Ys6}?x{f{O0x)eb4=IRiUoe{%=O zq@~wRlJ@9gZPiVgmlJa94XgF4{<?$uR+l?WL_}|AXcm6(ZeN@%uVk>H-J@<p))wug zTNA}^EARFRaCx=sYQ)^S!_P|^r@GCXmHe@J{xeaP%A&CK&mU~c`Kj!5`GDj_!RjNQ zuemL_**~>B{O1R?_dn`l=11jsbZ!p+g%liT0#Af+N1sczV_;y&U|?Y2f(A!YeuZ8^ z<>RN1o_d}0)X@toIJJJmBi2tM4GOBJzKV8s#`>F8?BW(%n5z3;=2Bv0QrH*Q+O)Qb zanq+GQ$%94w&sfRFd_ndRpyBh?v)eP*)lLNI5IFWz|v%LeqLH;x?Wase%|V5PlEyi zPMy*BJmY(&Pv2Wt>)e_1!JC2tj4l{oFb==O=q;|EzGT^yXDQE?9-kf}wxnr^aJTm7 zNmDC!W+B;>U3MbmY_QDDEJg-~k4y;vq~?|B6;zf6oz6OJAh3u16Mwhf)Q(jFFEl4O zaqa!a-Xyq5ce!`+$&A#=e`=RrDZI1gs%O;Mb7$-}yshbQNRQH+)~)tK?85QbY`dwY z%|<0<Q~k^j<Ui13zjvqM;O=X?EK;ZbD>=I7S1_Nx_|=O7Pt&~~e4m*#S#g42uJi>d zS+}*8H<OhQwm8psR5>`+QT-E7`^S_XsmB}kD!uy`+;Zu;-N|CcUj7A)vMi7Jrp0@9 zM+V)$d7yRH93QzOyi+nin4dj!dx?LoXXt@TMQMDUX=lSknB6xfy`FOTNlNf+twrTY z_xhtN-guNAaZy^RE}bRZ+j31v_1VrJt{%yAU%81_UXu>g`o*WcaD{c!lbo|h{;d?K z-;z`RRAb7@?0=W1{54?yWfx<^Sy9ti{{GFg`~S|cm)>8Zm(s1%%Wif+#cSHn8G9@b zI?dJlHRJo?nb)#-Z|mA*+?6VcvhSHvdG7JFr;{!ltv1=C7_RZKa?PZW7qa5<0p5&E zA`G}oBuMF`0HH9;CzxjJB@{>(BLhgYE;PBq$}5Dm91PfUIzp#BBcxbNgyef<jo9)8 zLZcoNL?a}JAnU`H$`SgeK=mP|d1TGl5-vjXKd5F%G7j)&Wdq5vF|aYjGBPksU;*&} DlO#Li literal 0 HcmV?d00001 diff --git a/box/__init__.py b/box/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/box/agent.py b/box/agent.py new file mode 100644 index 0000000..7fcf405 --- /dev/null +++ b/box/agent.py @@ -0,0 +1,17 @@ +import sys + +from iotAmak.agent.async_agent import AsyncAgent + + +class BoxAgent(AsyncAgent): + + def __init__(self, arguments: str): + super().__init__(arguments) + + def on_act(self) -> None: + self.publish("box", "") + + +if __name__ == '__main__': + s = BoxAgent(str(sys.argv[1])) + s.run() diff --git a/box/amas.py b/box/amas.py new file mode 100644 index 0000000..d9b787f --- /dev/null +++ b/box/amas.py @@ -0,0 +1,18 @@ +import sys + +from iotAmak.amas.async_amas import AsyncAmas + + +class BoxAmas(AsyncAmas): + + def __init__(self, arguments: str): + super().__init__(arguments) + + def on_initial_agents_creation(self): + for i in range(len(self.clients)): + self.add_agent("box", client_ip=self.clients[i].hostname) + + +if __name__ == '__main__': + s = BoxAmas(str(sys.argv[1])) + s.run() \ No newline at end of file diff --git a/box/box.py b/box/box.py new file mode 100644 index 0000000..041aad9 --- /dev/null +++ b/box/box.py @@ -0,0 +1,9 @@ + + +class Box: + + def __init__(self): + self.x = 0 + + def add(self): + self.x += 1 \ No newline at end of file diff --git a/box/config.json b/box/config.json new file mode 100644 index 0000000..c771fea --- /dev/null +++ b/box/config.json @@ -0,0 +1,4 @@ +{ + "iotamak_version": "0.0.7", + "scheduling_type": "async" +} \ No newline at end of file diff --git a/box/env.py b/box/env.py new file mode 100644 index 0000000..64ddb93 --- /dev/null +++ b/box/env.py @@ -0,0 +1,27 @@ +import sys + +from iotAmak.env.async_env import AsyncEnvironment + +from box import Box + + +class BoxEnv(AsyncEnvironment): + + def __init__(self, arguments, nbr_box): + self.nbr_box = nbr_box + self.boxs = [Box() for _ in range(nbr_box)] + super().__init__(arguments) + for i in range(nbr_box): + self.subscribe("agent/"+str(i)+"/box", self.box_action) + + def box_action(self, client, userdata, message): + agent_id = int(str(message.topic).split("/")[1]) + self.boxs[agent_id].add() + + def behaviour(self) -> None: + for i in range(self.nbr_box): + print("Box : ",i," -> ",self.boxs[i].x) + +if __name__ == '__main__': + s = BoxEnv(str(sys.argv[1]), 4) + s.run() \ No newline at end of file diff --git a/demonstrator.zip b/demonstrator.zip new file mode 100644 index 0000000000000000000000000000000000000000..035d3cff04ceab08e99d3f5296d749f0af940548 GIT binary patch literal 1894 zcmWIWW@Zs#0D(_I8$v)d3`;ODFr=jB=I0fc6eX7A7wN~xXXa&=#K-FuRKj#|Fvz%{ z2>Iq>;u6Qiz_6N~fk6~qS7Lf<UWr~o<=jxm^@|Jy_RanwuNEU0>N0=3X`%4u<$L$s zy&Tt*sTC5ZyoK$;_IK;=&unU9jeGQ((dqf@nfd$91x%gm6X&E?lC$ZfN9g>cTP6CB zEq2Z`3Rre0<&i{}%PXTEpJ{WqcDbx9IrLWUil6<hWxSCZ$0|gYF4B0Q-nP(oKX<Zr z6XUuFxrXAUp(l67pZFrsaAI<C+kzxk*O}}KzE@5yV_j9$S|w;#V{&-cLF)tE9_KeX z94LDp;ZitdW46Woly{py_`UP%-nvsd_pR5GSMt}=x9Bz<d}F;wQa5%JTXWZ?Co|Sq zH5gQxYfbuhZFUu7g>jY73&ZbaYt}a$n;aLhaX-g{=&dnn7froX@1J(zy&Tl;=GNW* zRZ2{kVJ)*!n1=pRza{%q`sPlX#<lZigx0%R_V+}Otvfq~`J-*%ERVZd^8M0jA5QIJ z)LAjX>e<YImHit7&iEGoaeh?k%(v3B=Dly-jXU>5e)rkT)Yh06r*hS`uI|L%UN<2j z<)Dj;UL@!LvyysHI6={-GdrtAbXDU0#o?FtFSMAuA!q)PO^O~YGmAxymuJlsE7Ax# zx>tDhvcq?#t?6EoU3)=m+QhE*sa6m54}BB}{24iW*``;IW+^M@PK*6H$I|)lvgSi~ z)mDj??Y?pFOXB0w?=N&O-_zNgzWL0)NvWT5rkxDmbY}ipqxUH<e+mY=^Ul@pZQpmk zEjOdR$@+$)_R`za%H|y8<6U!LG4s*RyoZUmKEM9>;QD*%J-VL!Q$oe(E;{Yq?Nj8p zYj44$WtR0TcXEfks^g8~3ZJvqX6FJIodv&F-Hd#fcUkq&pEb3Ae(<9v$l1A0c5fLN z7}hf~Fn|&_N-|E&O)S<cs7#%BwyVW}=lJ`k_X5w1ba`6$@>Se;Y<E~eF{AYGt*}{E z8}j$(iVB*wJ4}xM_fuoH=@FJs+PRm_f_eBXmiW8dx5;>x9<ZLWcxu+{L`A_Ls}`(y z^kwrA#oHO`4k_n313P1vu?NgCPp_S%?$O2CdN?IIH{{kFR`pfus}5ebx!hzjU5D>t z(4z<0?W-S&C>d;M_o&;Jwb44Mt#$RAscVI&sPsP8Ta&lA^x$(%&DM(Q195G8%EG6L ze}87}@##rUtpBd-`~CLb>p%KbuGOVwU9<Hf<!>F|lZ6`J*`(&J`4m4x=Vx8*mniv; z&e`EVKeEGuhk;?Q=b@0pcb#7=F)%QIFh(v<&d*EBOxMdQ&d;mn<x)^k%FHiG%uURW zFH0>d&dkqKvQkho&@<38Q{v^Sg_#Q}2jn9TmCj~hVED?wz#xoX4y5Ll=@nG^_8;Ur zWWdw*zIm^6UbZ7wT&t{2#Ro|jr;C0~*;=0FAKvEPEcvH6{f~UTP}h1D$uDbjjXk;? zH02l9?>bPNJL!mF0bA68%Vt@#qqbjMeaQ0ZqZ#(s<yLXKem7uHGE8+@oG4TF;HhD# zhc@f#k}6iiYkzO_Mui2QO_XO=`eIwsaZy;gEW5+$zpcyW8J{L=3w}<m-&&?R$0z3v zJd7ZIVYvGIO&J3N!)68s21#_k6enk-rj+KS7U>mKo<5^{LSHLTW1Y^kr;na`X`ebD zdg6?J;ThjE*R=i4dH8Cc_0)CRAY!C=syUHK!FOgR*T;{QojX^4{K&O!8`rCkA9r@n zto-=#RoI>wE{6##61p!e2#jGmGWBRxr|Zkqi)|ZcS#fD7xk)G;+c;}hK=YR_ug@kX zi~-(^Od{a4&A@=I;D!|93J?lUF%B~Y;%W4P9HgC*0c469dJw>hb%aA8MxbXsgb~M? z(CQOtMnsr^J#`{Xc*cxo0#aH<m;!MJdRj!7V#k7J3M6Hs8-Shw5C(9uq8Wgk90I&q T*+5F!7}ywQGBPl1X9e*9D%In_ literal 0 HcmV?d00001 diff --git a/demonstrator/__init__.py b/demonstrator/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/demonstrator/agent.py b/demonstrator/agent.py new file mode 100644 index 0000000..6c256d0 --- /dev/null +++ b/demonstrator/agent.py @@ -0,0 +1,61 @@ +import random +import sys + +from iotAmak.agent.communicating_agent import CommunicatingAgent + + +class IotAgent(CommunicatingAgent): + + def __init__(self, arguments: str, nbr_agent: int): + self.nbr_agent: int = nbr_agent + self.values = [] + self.asked = [] + super().__init__(arguments) + + def on_initialization(self) -> None: + self.operator = random.choice(["+", "-", "*", "/"]) + self.value = random.randint(0, 9999999) + + def on_cycle_begin(self) -> None: + if self.nbr_cycle == 0: + for i in range(2): + nei = self.id + while self.id == nei: + nei = random.randint(0, self.nbr_agent - 1) + self.send_mail(nei, "AskValue") + self.log("New nei "+str(nei)) + + def on_perceive(self) -> None: + self.values = [] + for mail in self.mailbox: + if mail.payload == "AskValue": + self.asked.append(int(mail.sender_id)) + else: + self.values.append(int(mail.payload)) + self.mailbox = [] + + def on_decide(self) -> None: + pass + + def on_act(self) -> None: + if len(self.values) == 2: + if self.operator == "+": + self.value = self.values[0] + self.values[1] + elif self.operator == "-": + self.value = self.values[0] - self.values[1] + elif self.operator == "*": + self.value = self.values[0] * self.values[1] + elif self.operator == "/": + self.value = self.values[0] / self.values[1] + + def on_cycle_end(self) -> None: + for n in self.asked: + self.send_mail(n, self.value) + self.log(" Value : " + str(self.value) + + " OP : " + self.operator + ) + + +if __name__ == '__main__': + a = IotAgent(str(sys.argv[1]), int(sys.argv[2])) + a.run() diff --git a/demonstrator/amas.py b/demonstrator/amas.py new file mode 100644 index 0000000..775492b --- /dev/null +++ b/demonstrator/amas.py @@ -0,0 +1,18 @@ +import sys + +from iotAmak.amas.amas import Amas + + +class IotAmas(Amas): + + def __init__(self, arguments: str): + super().__init__(arguments) + + 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)]) + + +if __name__ == '__main__': + s = IotAmas(str(sys.argv[1])) + s.run() diff --git a/demonstrator/config.json b/demonstrator/config.json new file mode 100644 index 0000000..6c22a08 --- /dev/null +++ b/demonstrator/config.json @@ -0,0 +1,3 @@ +{ + "iotamak_version": "0.0.6" +} \ No newline at end of file diff --git a/demonstrator/env.py b/demonstrator/env.py new file mode 100644 index 0000000..d3723ef --- /dev/null +++ b/demonstrator/env.py @@ -0,0 +1,13 @@ +import sys +from iotAmak.env.environment import Environment + + +class IotEnv(Environment): + + def __init__(self, arguments): + super().__init__(arguments) + + +if __name__ == '__main__': + s = IotEnv(str(sys.argv[1])) + s.run() \ No newline at end of file diff --git a/demonstrator/scheduler.py b/demonstrator/scheduler.py new file mode 100644 index 0000000..4a21e61 --- /dev/null +++ b/demonstrator/scheduler.py @@ -0,0 +1,7 @@ +import sys + +from iotAmak.scheduler.scheduler import Scheduler + +if __name__ == '__main__': + a = Scheduler(str(sys.argv[1]), str(sys.argv[2]), str(sys.argv[3])) + a.run() \ No newline at end of file -- GitLab