【问题标题】:Get the mean age of all turtles on the time of death获取所有海龟死亡时的平均年龄
【发布时间】:2018-03-19 10:00:30
【问题描述】:

我想得到所有垂死乌龟的平均年龄。我尝试使用以下代码来实现:

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

每只海龟都有死亡的概率(prob-die?),每个时间步(tick)都应该重新计算。如果概率死?设置为 true mean-death-age 应该更新。目前我遇到的问题是

  • 我不知道如何启动变量 mean-death-age。也许,使用 if 循环会有所帮助

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

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

    print mean-age
    

    即使我尝试将其保存为全局变量,我也会收到错误消息,即 mean-age 仅适用于海龟。

完整代码可在here获取。

【问题讨论】:

    标签: netlogo


    【解决方案1】:

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

    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 之类的内容更新您的平均值。

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

    【讨论】:

    • 谢谢。那行得通。也感谢您的发言。
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2018-12-26
    • 2019-05-08
    相关资源
    最近更新 更多