Удаление агента в MESA - PullRequest
0 голосов
/ 09 июля 2020

Я использую MESA для моделирования распространения COVID-19. Я хочу удалить мертвого агента, но когда я запускаю его в сети, количество агентов никогда не уменьшается, даже если я установил уровень смертности на 100%.

def condition(self):
    self.Infection_time +=1
    if self.Infection_time <= self.stage_one:
        self.stage = 1
    elif self.Infection_time > self.stage_one and self.Infection_time <= self.stage_one+self.stage_two:
        self.stage = 2
    else:
        self.stage = 3
        result = 0#rand_pick([0 , 1],[0.1 , 0.9])
        if result == 0:
            model.schedule.remove(self)
            #self.model.kill_agents.append(self)

1 Ответ

0 голосов
/ 07 сентября 2020

Я программист-любитель, использующий Mesa для моей дипломной работы, и я понял вашу проблему (это тоже была моя проблема).

Во-первых, ошибка с вашим кодом: ваш код только удаляет «мертвый» агент из планировщика, а не сама модель. Все, что вы сделали, - это предотвратили обновление «мертвого агента». Вам нужно удалить его из сетки с помощью команды grid.remove_agent (agent). Вы не хотите удалять свой агент из планировщика, в котором он сейчас установлен ("model.schedule.remove (self)"), потому что это может испортить активацию будущих агентов.

Чтобы исправить это, сначала вы должны добавить агента в список «kill_agents», который вы закомментировали в своем коде. Затем в вашей пошаговой функции в вашей модели, которая завершается после того, как все ваши агенты пошагировали, вы должны иметь следующее:

def step(self):
    self.schedule.step()
    for x in self.kill_agents:
        self.grid.remove_agent(x)
        self.schedule.remove(x)
        self.kill_agents.remove(x)

Ваш код должен быть упорядочен следующим образом: Сначала позвольте модели пошагово. Это предотвратит ошибки в заказах на активацию. Затем для каждого агента в списке «убить агентов» удалите их из сетки (обратите внимание, что функция «remove_agent» является подфункцией «сетки», а не более часто используемой «MultiGrid», ЗАТЕМ удалите ее из scheduler, ТОГДА удалите его из самого списка убийств.

Теперь ваши агенты должны d ie в роях!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...