Я программист-любитель, использующий 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 в роях!