我有我的海龟自己的 age 作为他们的变量之一,我将 age 设置为刻度,这样我的海龟在达到一定数量的刻度时就会老化。但是,这会导致所有海龟同时老化(例如,ticks = 5 时),无论它们是何时创建的。

有没有办法让乌龟创建时开始年龄?因此,如果海龟在第 5 个刻度处创建,它的年龄从 0 开始,但仍然等于 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

最佳答案

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

另一种方法是添加 birth-tick——海龟“出生”的刻度——作为 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 的值。

关于netlogo - 给海龟设定年龄,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29997530/

10-10 14:54