Python - mesa : How to get instance variables of each object

860 Views Asked by At

I am using mesa for my program. I am trying to execute my Model Class, but I got AttributeError from the Agent Class.

This is my script:

class ComtrModel (Model):
    """ A model with some number of Agents"""
    def __init__(self,N):
        self.num_agents = N
        self.schedule = RandomActivation(self)
        for i in range (N):
            a = CommuterAgent(i)
            self.schedule.add(a)

class CommuterAgent (Agent):
    def __init__(self, model):
        self.famsize = famsize
        self.distance = distance
        self.update_need = None


    def step(self):
        if  self.distance >= 10000:
            self.update_need = self.update_need()
            return

    def update_need (self, famsize):
        if self.famsize :
            self.famsize = famsize
            return
            prob_need()

How to get variables of each agent? I need to check it to make sure the model run properly.

So far this is my code to execute (on interactive session):

from src.ComtrModel import *
model = ComtrModel(5)
for i in range (10):
    model.step()

for key, value in CommuterAgent.step(model):
    print(key, value)

EDIT : But it returns

Traceback (most recent call last):
  File "C:src/__init__.py", line 3, in <module>
    from src.ComtrModel import *
  File "C:\src\__init__.py", line 9, in <module>
    for key, value in CommuterAgent.step(model):
  File "C:\src\ComtrModel.py", line 40, in step
    if  self.distance >= 10000:
AttributeError: 'ComtrModel' object has no attribute 'distance'

I also have tried something like this:

>>> hi_obj = hi()
>>> hi_obj.__dict__.keys()

But it only works for single object

1

There are 1 best solutions below

0
On
def __init__(self, model):
        self.famsize = famsize
        self.distance = distance
        self.update_need = None

Doesn't look correct. You don't pass famsize and distance as parameters.