From edc6edede819a6a857607e5cdb76e237cb86c981 Mon Sep 17 00:00:00 2001 From: LouiseDupuis <louise.dupuis97@gmail.com> Date: Sun, 19 Jun 2022 14:56:25 +0200 Subject: [PATCH] first prototype --- __pycache__/stade_agents.cpython-39.pyc | Bin 0 -> 1665 bytes __pycache__/stade_model.cpython-39.pyc | Bin 0 -> 1156 bytes run.py | 10 +++++++ stade_agents.py | 35 ++++++++++++++++++++++++ stade_model.py | 34 +++++++++++++++++++++++ stade_model_viz.py | 35 ++++++++++++++++++++++++ 6 files changed, 114 insertions(+) create mode 100644 __pycache__/stade_agents.cpython-39.pyc create mode 100644 __pycache__/stade_model.cpython-39.pyc create mode 100644 run.py create mode 100644 stade_agents.py create mode 100644 stade_model.py create mode 100644 stade_model_viz.py diff --git a/__pycache__/stade_agents.cpython-39.pyc b/__pycache__/stade_agents.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce5e413b1868c52548db1b7b4c6dcd81e3709ee2 GIT binary patch literal 1665 zcmYe~<>g{vU|?vTzB1_~GXuk85C<8vFfcGUFfcF_8!#|1q%fo~<}l<kMlmunxHF_M zr7*WJq%fy4HZw;txih4&q_DOyq_Bed%qeWa44UjOL1t+(-ePr3Pt7Yy2Jw(FGn7+o z!N9<f$`Hkv!Vtxj!WhNe&XC3kHlHJk1!8U#YYJNmdkaGpTM9=CXA46VdpiRQLlj3a zgC^H4uHcfylvJ=CRUD3a3W;FbV5WmC0kJ`T0nx=03=9k<49yG+7;6}7m=-cIGNdrp zFvK&ZFa$GbGWp$N^jpb%i?z74AhqZgM|^x{US>&r{4LhvlEjkKmCUzTic@paZgH08 zWfqpE#%HG7V$ID@NzGZwc#AVWJ~=0`xHvw3CBrXUXRDad;?$zz7@z#o%;MA-m;B_? z+|<01;uy!0-2CE#jMSpkfTGlt%;b{%qL^Zk7vjM#FV-ulEMjM1U|<7<JjmG$jC_n$ z!U$jL!CaNh1o9megV-SK4AKUQ*BX$w7{K0Q^jpbT#KFM8pvhDOk^-}f_!$@&AcOz| z1H&!O;?$COus1<Uia};EFjk2m*$Y>Y%m}p<M1evT<X*7FQ49<WH4Iq{S&R#qY8bMZ zQy5d27Bbf|rZA_lv@p~#x-c{|)-u&FEnrDuUC3C%3RTO7P}|Iy!Y0L#%~})yju-Yk zwiKoshIn?cN7(&B+)ykBxf0}nV34nc7#JAR8EP0}xoR0}7_%5AG8M7}L%k>n_Wdm; zJ%d}U;Bbcc92^E<?{nGYWEPhs=jRsKfz0^~@>-QLvhPb$3-oMq@{<#DitY3es&6p{ zzXUl$lcR_S6pk$EMVTqLc+*o$;`357(=(Fti;8bC7vvY;VolC3%`3UZoRgY&O8{9u zBR@aomKa=hd}2{*d~rs8X-Q^Yx+XI?%5HJOrK8xuu~dxi1D4{F)B;{mK!75Ufk}j! zk5P@0gQ<!i%@-&k2#QKj2!f+e1R8xs0yPW^7*iM*GBScw&`Ku1B5`mC7RiHB4Jd>( z8Nm)icLjT5N?BrFa;hZAA&}(D##kkU<OHY!O-@k$%1g{mjgP;@6(66QpHi9wV)Mku z7nUaGKxNqD<5TjJ<Kw}3q6lPhks`<m%Am03h32{B)SR67cqFHQf}sc$uSFogfp9S> zP&gP_n0Qz?m^paB;<(Es1w3UExa?sKX3%80#TA-UQj`cOdo*BWk3xAyzCvcPLSjyN zVr8*HW}X5pE)~ELmke?aD0zV}hz$xQ5RJENDpCUZniWKFf(Wn=;mH>qI-qbV1{nq^ zF%WKpml&FCMJgc8svtrQM5u!ZQ1&g-0I|RZf(fws;1JYgU|^7g#U>~Oi$EfNnk=_i ma#M>Fi$IAV9GqZrq(}gp12W<khYcil?Lesw>_i?W0cijYU1hld literal 0 HcmV?d00001 diff --git a/__pycache__/stade_model.cpython-39.pyc b/__pycache__/stade_model.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0eb213c5c1cf1e5466bdf6a7c3a5be0a9654c4fd GIT binary patch literal 1156 zcmYe~<>g`kfyFD67+4q>9)sA(n1z9X!GVE+q1c0gfgyz<g)xUAmobWw5yWQ7VajEW zVg|FBb69d&qgcUgmK?TR_9*sTjwlXB26u)O))clDh7`6`#%AUy&J^}w22GBaAUiY} zZ?XF3r=;d+GTssk&de>%DM`#r%`Yu>OfJbRODxIE&(mbQ#TA^Hm!6aAUX+=l$#jb= zxFj(p)iFIaujCe2XiiB{BAA^FG7lLu!`!XJz`&5o5XG3n5XF?j7{#2znZlC7+QJyc zlERk4-og;Yn!*vxpveU_8SI`aWk-cvki!(pGfOfQit}?*74k}RlTwQm^3xO&L6#Tm zy<}uyV0g*Iz`&3U3M822YzzzxAnXhZv?@@bG1f4|Gt_`c#uBC)hGr0pxrC*LsfIa) zv6;DsA)d8_t%f0sv6<0@A=a&yrG&kPrG}xIsg|{dA&YqdM-A&jMn;AjhAh?voHZaZ z)&*P(85S~u#kd!6FJwqz%4R9jt6^Qhlfn#ATd0@95X_*-;un%WYbFT1w7<m|tjT+e zy{I%VFEcOw7FS+rZal;%MWC>{#ZjD`k(yGPlUfAw%`KMnqRf<AtVM}=>8VAm3=9mn zm=jY{qPPok5|dLQ8l$+<GV@a6Q*#SSDsQnBCFZ5%=SFcBr<TMQmn4>?YO>v8DNfBv zE8+p^W-ZT5Dap9SmXVs7o>6j(G4mE<;!1`haRvs4UpCHGF`>n&Ma3~b`K6h~sWC43 z$)&lec_qa$jwQMI#RVCuMX3QrsVSMsCHX}$#h?@r4~`$bg34PQ@$s2?nI-Y@oS+aF z0mTC&8xtE77c(C-A0rnd53>jpA7hm;IN^Y!R}ZEm85D&e4Im6+gJKgLaeNF6pa5rB zz_^fsks*aKm_d`NO3pE*EHN)RRiPv!6`DShDi!kcQWc6zQVaC_G?|KcL4IWcaWxr> zgcukgJ_LKSNCL!_Vqjp91346A6$4WhKa#UR+Wa(`i#R|ELB1&h5t?iuFXkoYrpCwL z;)(}(yfg>I=82ClEKSUT%CN`Br{pKc#}`S0bc3vc*a`|^2n%dKJ2ZI~gVHDmBMTFk zXc0)vPm}8wOKxg$ViCw;QJf&AUP)$dDmZmSae?{81&PU!^by4ai3Mm10ws_lkcnWk dAl9K;e2c>-Hy@O|>_FjM4DuomBM1sG0RXJE8dm@S literal 0 HcmV?d00001 diff --git a/run.py b/run.py new file mode 100644 index 0000000..7949daa --- /dev/null +++ b/run.py @@ -0,0 +1,10 @@ +from stade_model import StadeModel + + +num_agents = 100 +num_steps = 10 + +model = StadeModel(num_agents, height = 10, width = 10) + +for i in range(num_steps): + model.step() \ No newline at end of file diff --git a/stade_agents.py b/stade_agents.py new file mode 100644 index 0000000..ce76d6e --- /dev/null +++ b/stade_agents.py @@ -0,0 +1,35 @@ +from mesa import Agent + +class StadeAgent(Agent): + """An agent""" + + def __init__(self, unique_id, model): + super().__init__(unique_id, model) + self.state = "N" + + def set_state(self, state): + self.state = state + + def step(self): + #getting the agent's neighbors : + neighbors = self.model.grid.get_neighbors(self.pos, True, False) + + + states = [agent.state for agent in neighbors] + if states.count("S") >= len(self.model.grid.get_neighborhood(self.pos, True, False))//2: + self.neighbors_are_shouting = True + else : + self.neighbors_are_shouting = False + + + def advance(self): + if self.neighbors_are_shouting: + self.set_state("S") + + +class UltraAgent(Agent): + """An agent who is always in shouting state""" + + def __init__(self, unique_id, model): + super().__init__(unique_id, model) + self.state = "S" \ No newline at end of file diff --git a/stade_model.py b/stade_model.py new file mode 100644 index 0000000..52d4d1e --- /dev/null +++ b/stade_model.py @@ -0,0 +1,34 @@ +from mesa import Model +from mesa.time import SimultaneousActivation +from mesa.space import SingleGrid +from stade_agents import StadeAgent, UltraAgent + +class StadeModel(Model): + """A model with some number of agents.""" + + def __init__(self, num_agents = 1, width = 2, height= 2): + self.running = True + + self.num_agents = num_agents + # Create agents and scheduler + self.schedule = SimultaneousActivation(self) + + #creating a grid - for now, default rid + self.grid = SingleGrid(width, height, True) + + + for i in range(self.num_agents): + a = StadeAgent(i, self) + self.schedule.add(a) + + # Add the agent to a random grid cell + self.grid.place_agent(a, self.grid.find_empty()) + #set the state randomly + if self.random.random()>0.8: + a.set_state("S") + + def step(self): + """Advance the model by one step.""" + self.schedule.step() + + diff --git a/stade_model_viz.py b/stade_model_viz.py new file mode 100644 index 0000000..f9e14ae --- /dev/null +++ b/stade_model_viz.py @@ -0,0 +1,35 @@ +from mesa.visualization.modules import CanvasGrid +from mesa.visualization.ModularVisualization import ModularServer + +from stade_model import StadeModel + +def agent_portrayal(agent): + portrayal = { + "Shape": "circle", + "Filled": "true", + "Layer": 0, + "r": 0.5, + } + + if agent.state == "N": + portrayal["Color"] = "grey" + # portrayal["Layer"] = 0 + elif agent.state == "S": + portrayal["Color"] = "red" + # portrayal["Layer"] = 1 + return portrayal + + +# ---- Parameters----- +width = 20 +height = 5 +num_agents = width * height + +#---------------------- + +grid = CanvasGrid(agent_portrayal, width, height, 500, 500) +server = ModularServer( + StadeModel, [grid], "Stade Model", {"num_agents": num_agents, "width": width, "height": height} +) +server.port = 8521 # The default +server.launch() \ No newline at end of file -- GitLab