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