设定海龟的年龄

Setting Age on Turtles

我让我的海龟拥有 age 作为它们的变量之一,并且我将 age 设置为刻度,以便我的海龟在达到一定数量的刻度时老化。然而,这会导致所有海龟同时老化(比如 ticks = 5 时),而不管它们是何时创建的。

有什么方法可以让创建海龟时的年龄开始吗?因此,如果海龟将在第 5 个刻度创建,它的年龄从零开始,但仍等于与第 1 个刻度相同的长度?

是的!对不起!这是我在将其放入实际模型之前一直在玩的代码

breed [kids kid]
breed [adults adult]
breed [elderlies elderly]

turtles-own [age
  z]

to setup
  clear-all
  create-kids 10
  [setxy random-xcor random-ycor]
  set-default-shape kids "fish"
  create-adults 10
  [setxy random-xcor random-ycor]
  set-default-shape adults "person"
  set-default-shape elderlies "cow"

  clear-output
  reset-ticks
end

to go
  ask kids [birthday
    move]
  ask adults [birthday
    reproduce-adults
    move]
  tick
end

to birthday
  set age ticks
  if age > 5 [set breed adults]
  if age > 10 [set breed elderlies]
  if age > 15 [die]
end

to reproduce-adults
  set z random 100
  if z > 65
  [ hatch-kids 1]
end

to move
  rt random 360
  fd 1
end

在您的 go 过程中,包括 ask turtles [increment-age],其中

to increment-age
  set age (1 + age)
end

如果您希望 age 等于自海龟创建以来的刻度数,Alan 的解决方案很好。如果您想要不同的年龄衡量标准,可以将该数字除以另一个数字。例如,如果刻度表示月,则可以除以 12 得到年。

另一种方法涉及添加 birth-tick——海龟 "born" 所在的刻度——作为 turtles-own 变量。假设您想要每 5 个刻度增加年龄。那么你可以这样写increment-age

to increment-age
  let age-in-ticks birth-tick - ticks
  if (age-in-ticks > 0) and (age-in-ticks mod 5 = 0) [
    set age (1 + age)
  ]
end

包含mod的表达式测试自出生以来的刻度数是否能被5整除。

编辑:我应该澄清一下,您需要在创建每个海龟时将 birth-tick 设置为 ticks 的值。