Agent-Based Models with Python: An Introduction to Mesa
Hi there,
I am getting this error when I run the code from step 7.
"""
self.grid.place_agent(trader, (x,y))
:83: UserWarning: Agent 4139 is being placed with
place_agent() despite already having the position (30, 30). In most
cases, you'd want to clear the current position with remove_agent()
before placing the agent again.
"""It seems to happen with the code from the github as well. Any ideas?
Hi Geoff,
place_agent method checks whether the agent already has a position before placing it. You could simply solve this issue by setting pos = None when creating a new agent. Here is the source code.
@warn_if_agent_has_position_already
def place_agent(self, agent: Agent, pos: Coordinate) -> None:
"""Place the agent at the specified location, and set its pos variable."""
x, y = pos
if agent.pos is None or agent not in self._grid[x][y]:
self._grid[x][y].append(agent)
agent.pos = pos
if self._empties_built:
self._empties.discard(pos)
self._empty_mask[agent.pos] = TrueHi Geoff,
the current version of Mesa seems to do quite a bit of things differently to the version they used for the tutorial. I just commented out the call to place_agent() because the x,y coordinates are already given when you instantiate the agent. So, I basically just did it like this:
for _,(x,y) in self.grid.coord_iter():
max_sugar = sugar_distribution[x,y]
if max_sugar > 0:
sugar = Sugar(self, (x,y), max_sugar) # already placed
#self.grid.place_agent(sugar, (x,y)) # do NOT re-place without removing from old location
print(sugar.unique_id, sugar.pos, sugar.max_sugar)
I'm running the code as shown in session 5 but getting the follow error - any ideas?
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
----> 1 model = SugarscapeG1mt()in __init__(self, width, height)
19
20 agent_id = 0
---> 21 for (x,y) in self.grid.coord_iter():
22 max_sugar = sugar_distribution[x,y]
23 if max_sugar > 0:ValueError: too many values to unpack (expected 2)
I've not figured out the error:
for _,(x,y) in self.grid.coord_iter():needs the brackets around (x,y) removed to become:
for _,x,y in self.grid.coord_iter():I have forked the session 5 on GitHub and suggested the change
- Eka Putri Difayanti
- 10 Nov 2024 10:37pm UTC
- in Agent-Based Models with Python: An Introduction to Mesa
I have the same problem. Did you find a solution?
I've had the same problem as well, did anyone come across a solution?
Did this fix not work?
for _,(x,y) in self.grid.coord_iter():needs the brackets around (x,y) removed to become:
for _,x,y in self.grid.coord_iter():Hi Tom, actually I am struggling with another issue when I try to run the last step in the fifth session I get this error about the number of arguments being incorrect with the __init__() function in the Sugar agent parameters, but the code I've used is a direct copy of the Session 5 code provided. Any thoughts on how to troubleshoot would be greatly appreciated. I am new to Python & ABM so the syntax is still new to me
Error message:
TypeError Traceback (most recent call last)
in ()
----> 1 model = SugarscapeG1mt()2 frames
/usr/local/lib/python3.10/dist-packages/mesa/agent.py in __init__(self, model, *args, **kwargs)
62
63 """
---> 64 super().__init__(*args, **kwargs)
65
66 self.model: Model = modelTypeError: object.__init__() takes exactly one argument (the instance to initialize)
Hi Kai,
the problem is that in the current version of Mesa the mesa.Agent does not take the unique_id argument anymore. You do not set the id anymore, the agents do that themselves when they are created. So, when you call super().__init__(...) in your Sugar class, it should NOT pass the unique_id as an argument. If you do that, python thinks this is not for mesa.Agent - becase mesa.Agent's constructor doesn't take that argument anymore - and searches up the class hierarchy for a class that has a constructor that takes both, the unique_id and model as arguments. And then ends up at the top level of the class hierarchy at object - which also takes only one argument.
It took me a while to understand what was going on there (also because the AI generated "explain this error" explanations were simply wrong). I tried installing a older versions of Mesa but couldn't find the correct one - when I tried the versions mentioned in the first videos - 0.8 and 1.1 other stuff broke, like mesa.space.MultiGrid... idk what version they are really using for this tutorial.Anyway, the solution to fix this is to do just
super().__init__(model)
in your Sugar class and to not do anything with this unique_id and agent_id. That stuff is automatic in the agent now.You also need to do this in your SugarscapeG1mt model class now:
def __init__(self, width=50, height=50):
# Initialize the random number generator
self.random = np.random.default_rng(seed=123) # set seedbecause these when these agents now try to register with the model, the model needs to have a random generator.
In an ideal world, they'd update the tutorial to reflect the changes but I'd be already happy if anybody could tell me what version of mesa the tutorial is supposed to use because it seems a lot has changed and it does NOT work with the versions they mentioned (0.8. and 1.1 respectively) either.
Subforums
- Introduce Yourself
- Class Announcements
- Study Groups and Meetups
- Technical Issues
- General Discussion
- Course Feedback
- Course Materials to Share
- Fundamentals of NetLogo
- Functions and Iterations
- Introduction to Differential Equations
- Ordinary Differential Equations
- Maximum Entropy Methods
- Random Walks
- Introduction to Information Theory
- Vector and Matrix Algebra
- Introduction to Renormalization
- Game Theory I • Static Games
- Game Theory II • Dynamic Games
- Fundamentals of Machine Learning
- Introduction to Computation Theory
- Fundamentals of NetLogo
- Lecture: Pandemics
- Lecture: Artificial Intelligence
- Lecture: Crime and Punishment
- Complexity-GAINs Curriculum
- Introduction to Open Science
- Journal Club
- IN DEVELOPMENT: Multicellularity Modules
- UCR Application Tutorial
- Lecture: What is Complexity?
- Agent-Based Models with Python: An Introduction to Mesa
- Lecture: Epistemological emergence