获得死亡时所有海龟的平均年龄

时间:2018-03-19 10:00:30

标签: netlogo

我想得到所有垂死乌龟的平均年龄。我尝试通过以下代码剪切来实现这一点:

globals [mean-death-age]
turtles-own [age prob-die?]

to-report mean-age
  if (prob-die? = true) [
    set mean-death-age mean [age] of turtles
  ]
  report mean-death-age
end

每只乌龟都有死亡的可能性(概率死亡?),应该在每个时间步骤(勾号)计算出新的乌龟。如果问题?设置为真正的平均死亡年龄应该更新。目前我遇到的问题是

  • 我不知道如何启动变量平均死亡年龄。也许,使用if循环可以帮助

    if (ticks >= 1) [    
      if (prob-die? = true) [
        set mean-death-age mean [age] of turtles
      ]
    ]
    
  • 我没有得到已计算的平均死亡年龄的更新,但该变量被覆盖,并返回此蜱的平均死亡年龄

  • 我在访问该值时遇到问题。当我尝试用例如。

    来调用它时
    print mean-age
    

    我收到的错误信息是,即使我尝试将保存作为全局变量,也只能使用平均值 -

整个代码可用here

1 个答案:

答案 0 :(得分:3)

我认为你让它变得比它需要的更复杂。最简单的方法是保留海龟死亡的年龄列表,然后取出该列表的平均值:

globals [death-ages]
turtles-own [age]

to setup
  clear-all
  create-turtles 100 [
    setxy random-xcor random-ycor
    set age random 100
  ]
  set death-ages [] ; start with an empty list
  reset-ticks
end

to go
  if not any? turtles [ stop ]
  ask turtles [
    if random 100 < age [
      set death-ages lput age death-ages ; add age to our list of ages of death
      die
    ]
  ]
  print mean death-ages
  tick
end

唯一的缺点是,当您的模型运行时,您的death-ages列表将继续增长。如果事实证明这是一个问题(虽然可能不会),你需要跟踪当前的平均值和当前的观察数量,并用set avg ((n * avg) + age) / (n + 1) set n n + 1更新你的平均值。

至于为什么你当前的代码不起作用,会有很多解包来解释它(对不起,我现在不能)。作为一般性评论,我建议您在遇到这样的困难时尝试退一步,并考虑解决问题所需的最少量信息。在这种情况下,您需要表示死亡年龄。最简单的方法是什么?保留死亡年龄列表,并在需要时记录该列表的平均值。

相关问题