如何停止孵化。与母亲联系

时间:2017-07-24 13:11:04

标签: netlogo

我试图制作一个简单的模型,让海龟在世界各地移动,它们只能重现一次。因此,如果模型以20只海龟开始,它必须在达到40时停止(在代码中没有告诉它)。孵化后,新龟将与母亲联系起来。这是代码。

breed [sons son]
sons-own [...]

to setup
  ca
  crt 20
  [while [any? other turtles-here]
    [setxy random-xcor random-ycor]]
  reset-ticks 
end

to go
  move
  reproduce
  tick
end

to move
  ask turtles [
  lt random 45
  rt random 45
  fd 0.5
  ]
end

to reproduce
  ask turtles [
    if count my-links = 0 [
      hatch-sons 1 [create-link-with myself]
      ]
    ]
end

这里的代码完美无缺,但是我想知道是否有一些像stop这样的命令可以在1个儿子之后停止孵化。我试过stop,但我尝试的方式似乎没有用。

2 个答案:

答案 0 :(得分:2)

原始stop是退出循环,但这似乎不必要地复杂,因为你想要做的就是在没有儿子的情况下拉出子集并让它们重现。您现有的代码可以通过一些修改来使它们成为定向链接(否则孩子们不会复制,因为他们有父母的链接),但这可能更清楚。

to reproduce
  ask turtles with [ count my-out-links = 0 ] [
    hatch-sons 1 [create-link-from myself]
  ]
end

请注意,我还更改了要定向的链接创建。

答案 1 :(得分:1)

让你的乌龟孵化一个后代的一种方法是简单地创建一个turtles-own变量,你可以用它来跟踪乌龟是否已经复制。这是一个非常简单的例子:

turtles-own [ have-reproduced? ]

to setup
  ca
  reset-ticks
  crt 20 [
    set have-reproduced? false
    setxy random 30 - 15 random 30 - 15 
  ]
end

to go
  ask turtles [
    if have-reproduced? = false [
      hatch 1       
      set have-reproduced? true
    ]
    fd 1
  ]
end

在上面的代码中,所有海龟的have-reproduced?变量最初都是false。然而,一旦龟孵化了后代,它们的have-reproduced?将设置为true,因此下次调用该程序时它们不会孵化任何后代(尽管它们的后代将会出现)。尝试在您的界面上运行该代码并包含count turtles的监视器,每次调用go时,您将看到海龟数量增加20。