Skip to content

Commit 366b482

Browse files
authored
Update tutorials to use create_agents and rng.integers (#2541)
Updates the tutorials to align with Mesa 3.1's recommended practices for agent creation and random number generation.
1 parent f72a268 commit 366b482

File tree

2 files changed

+44
-48
lines changed

2 files changed

+44
-48
lines changed

docs/tutorials/MoneyModel.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,13 @@ def __init__(self, n=10, width=10, height=10, seed=None):
6262
self.grid = mesa.space.MultiGrid(width, height, True)
6363

6464
# Create agents
65-
for _ in range(self.num_agents):
66-
a = MoneyAgent(self)
65+
agents = MoneyAgent.create_agents(model=self, n=n)
66+
# Create x and y positions for agents
67+
x = self.rng.integers(0, self.grid.width, size=(n,))
68+
y = self.rng.integers(0, self.grid.height, size=(n,))
69+
for a, i, j in zip(agents, x, y):
6770
# Add the agent to a random grid cell
68-
x = self.random.randrange(self.grid.width)
69-
y = self.random.randrange(self.grid.height)
70-
self.grid.place_agent(a, (x, y))
71+
self.grid.place_agent(a, (i, j))
7172

7273
self.datacollector = mesa.DataCollector(
7374
model_reporters={"Gini": compute_gini}, agent_reporters={"Wealth": "wealth"}

docs/tutorials/intro_tutorial.ipynb

+38-43
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,7 @@
246246
" super().__init__(seed=seed)\n",
247247
" self.num_agents = n\n",
248248
" # Create agents\n",
249-
" for _ in range(self.num_agents):\n",
250-
" a = MoneyAgent(self)"
249+
" MoneyAgent.create_agents(model=self, n=n)"
251250
]
252251
},
253252
{
@@ -295,11 +294,8 @@
295294
" super().__init__(seed=seed)\n",
296295
" self.num_agents = n\n",
297296
"\n",
298-
" # Create agents\n",
299-
" for _ in range(self.num_agents):\n",
300-
" a = MoneyAgent(\n",
301-
" self\n",
302-
" ) # This calls the agent class parameter n number of times\n",
297+
" # Create n agents\n",
298+
" MoneyAgent.create_agents(model=self, n=n)\n",
303299
"\n",
304300
" def step(self):\n",
305301
" \"\"\"Advance the model by one step.\"\"\"\n",
@@ -478,10 +474,7 @@
478474
" self.num_agents = n\n",
479475
"\n",
480476
" # Create agents\n",
481-
" for _ in range(self.num_agents):\n",
482-
" a = MoneyAgent(\n",
483-
" self\n",
484-
" ) # This calls the agent class parameter n number of times\n",
477+
" MoneyAgent.create_agents(model=self, n=n)\n",
485478
"\n",
486479
" def step(self):\n",
487480
" \"\"\"Advance the model by one step.\"\"\"\n",
@@ -620,13 +613,13 @@
620613
" self.grid = mesa.space.MultiGrid(width, height, True)\n",
621614
"\n",
622615
" # Create agents\n",
623-
" for _ in range(self.num_agents):\n",
624-
" a = MoneyAgent(self)\n",
625-
"\n",
616+
" agents = MoneyAgent.create_agents(model=self, n=n)\n",
617+
" # Create x and y positions for agents\n",
618+
" x = self.rng.randint(0, self.grid.width, size=(n,))\n",
619+
" y = self.rng.randint(0, self.grid.height, size=(n,))\n",
620+
" for a, i, j in zip(agents, x, y):\n",
626621
" # Add the agent to a random grid cell\n",
627-
" x = self.random.randrange(self.grid.width)\n",
628-
" y = self.random.randrange(self.grid.height)\n",
629-
" self.grid.place_agent(a, (x, y))"
622+
" self.grid.place_agent(a, (i, j))"
630623
]
631624
},
632625
{
@@ -724,12 +717,13 @@
724717
" self.grid = mesa.space.MultiGrid(width, height, True)\n",
725718
"\n",
726719
" # Create agents\n",
727-
" for _ in range(self.num_agents):\n",
728-
" a = MoneyAgent(self)\n",
720+
" agents = MoneyAgent.create_agents(model=self, n=n)\n",
721+
" # Create x and y coordinates for agents\n",
722+
" x = self.rng.integers(0, self.grid.width, size=(n,))\n",
723+
" y = self.rng.integers(0, self.grid.height, size=(n,))\n",
724+
" for a, i, j in zip(agents, x, y):\n",
729725
" # Add the agent to a random grid cell\n",
730-
" x = self.random.randrange(self.grid.width)\n",
731-
" y = self.random.randrange(self.grid.height)\n",
732-
" self.grid.place_agent(a, (x, y))\n",
726+
" self.grid.place_agent(a, (i, j))\n",
733727
"\n",
734728
" def step(self):\n",
735729
" self.agents.shuffle_do(\"move\")\n",
@@ -852,7 +846,7 @@
852846
" other = self.random.choice(cellmates)\n",
853847
" other.wealth += 1\n",
854848
" self.wealth -= 1\n",
855-
" \n",
849+
"\n",
856850
"\n",
857851
"class MoneyModel(mesa.Model):\n",
858852
" \"\"\"A model with some number of agents.\"\"\"\n",
@@ -868,12 +862,13 @@
868862
" )\n",
869863
"\n",
870864
" # Create agents\n",
871-
" for _ in range(self.num_agents):\n",
872-
" a = MoneyAgent(self)\n",
865+
" agents = MoneyAgent.create_agents(model=self, n=n)\n",
866+
" # Create x and y positions for agents\n",
867+
" x = self.rng.integers(0, self.grid.width, size=(n,))\n",
868+
" y = self.rng.integers(0, self.grid.height, size=(n,))\n",
869+
" for a, i, j in zip(agents, x, y):\n",
873870
" # Add the agent to a random grid cell\n",
874-
" x = self.random.randrange(self.grid.width)\n",
875-
" y = self.random.randrange(self.grid.height)\n",
876-
" self.grid.place_agent(a, (x, y))\n",
871+
" self.grid.place_agent(a, (i, j))\n",
877872
"\n",
878873
" def step(self):\n",
879874
" self.datacollector.collect(self)\n",
@@ -1137,12 +1132,13 @@
11371132
" self.grid = mesa.space.MultiGrid(width, height, True)\n",
11381133
"\n",
11391134
" # Create agents\n",
1140-
" for _ in range(self.num_agents):\n",
1141-
" a = MoneyAgent(self)\n",
1135+
" agents = MoneyAgent.create_agents(model=self, n=n)\n",
1136+
" # Create x and y positions for agents\n",
1137+
" x = self.rng.integers(0, self.grid.width, size=(n,))\n",
1138+
" y = self.rng.integers(0, self.grid.height, size=(n,))\n",
1139+
" for a, i, j in zip(agents, x, y):\n",
11421140
" # Add the agent to a random grid cell\n",
1143-
" x = self.random.randrange(self.grid.width)\n",
1144-
" y = self.random.randrange(self.grid.height)\n",
1145-
" self.grid.place_agent(a, (x, y))\n",
1141+
" self.grid.place_agent(a, (i, j))\n",
11461142
"\n",
11471143
" self.datacollector = mesa.DataCollector(\n",
11481144
" model_reporters={\"Gini\": compute_gini}, agent_reporters={\"Wealth\": \"wealth\"}\n",
@@ -1234,8 +1230,7 @@
12341230
" self.num_agents = n\n",
12351231
"\n",
12361232
" # Create agents\n",
1237-
" for _ in range(self.num_agents):\n",
1238-
" a = MoneyAgent(self)\n",
1233+
" MoneyAgent.create_agents(model=self, n=n)\n",
12391234
"\n",
12401235
" self.datacollector = mesa.DataCollector(\n",
12411236
" model_reporters={\"Gini\": compute_gini}, agent_reporters={\"Wealth\": \"wealth\"}\n",
@@ -1320,8 +1315,7 @@
13201315
" ethnicities = [\"Green\", \"Blue\", \"Mixed\"]\n",
13211316
"\n",
13221317
" # Create agents\n",
1323-
" for _ in range(self.num_agents):\n",
1324-
" a = MoneyAgent(self, self.random.choice(ethnicities))\n",
1318+
" MoneyAgent.create_agents(model=self, n=n, ethnicity=self.random.choice(ethnicities))\n",
13251319
"\n",
13261320
" self.datacollector = mesa.DataCollector(\n",
13271321
" model_reporters={\"Gini\": compute_gini},\n",
@@ -1406,12 +1400,13 @@
14061400
" self.running = True\n",
14071401
"\n",
14081402
" # Create agents\n",
1409-
" for _ in range(self.num_agents):\n",
1410-
" a = MoneyAgent(self)\n",
1403+
" agents = MoneyAgent.create_agents(model=self, n=n)\n",
1404+
" # Create x and y positions for agents\n",
1405+
" x = self.rng.integers(0, self.grid.width, size=(n,))\n",
1406+
" y = self.rng.integers(0, self.grid.height, size=(n,))\n",
1407+
" for a, i, j in zip(agents, x, y):\n",
14111408
" # Add the agent to a random grid cell\n",
1412-
" x = self.random.randrange(self.grid.width)\n",
1413-
" y = self.random.randrange(self.grid.height)\n",
1414-
" self.grid.place_agent(a, (x, y))\n",
1409+
" self.grid.place_agent(a, (i, j))\n",
14151410
"\n",
14161411
" self.datacollector = mesa.DataCollector(\n",
14171412
" model_reporters={\"Gini\": compute_gini},\n",
@@ -1902,7 +1897,7 @@
19021897
"name": "python",
19031898
"nbconvert_exporter": "python",
19041899
"pygments_lexer": "ipython3",
1905-
"version": "3.12.5"
1900+
"version": "3.12.3"
19061901
},
19071902
"widgets": {
19081903
"state": {},

0 commit comments

Comments
 (0)