我正在使用MESA模拟新冠病毒-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)
我是一个业余程序员,在我的本科论文工作中使用Mesa,我发现了你的问题(碰巧也是我的问题)
首先,代码中的错误:代码只从调度程序中删除“死”代理,而不是模型本身。你所做的就是阻止你的“死亡代理”更新。您需要使用“grid.remove\u agent(agent)”命令将其从网格中删除。您不希望将代理从当前的计划程序(“model.schedule.remove(self)”)中删除,因为它可能会扰乱未来代理的激活
要解决这个问题,首先必须将代理附加到您在代码中注释掉的“kill_agents”列表中。然后,在模型中的step函数中(该函数在所有代理完成step后完成),您应该具有以下内容:
您的代码应该按如下顺序排列:首先,让模型单步执行。这将防止激活顺序中出现错误。然后,对于“kill agents”列表中的每个代理,将它们从网格中删除(注意,“remove_agent”函数是“grid”的子函数,而不是更常用的“MultiGrid”,然后将其从调度程序中删除,然后将其从kill列表本身中删除
你的特工现在应该成群结队地死去
相关问题 更多 >
编程相关推荐