如何在netlogo中动态输出值

时间:2017-02-03 17:15:03

标签: netlogo

我已经创建了一个模型,其中龟出生并基于某些参数死亡。但在任何一个特定点上,我们都说不超过20只乌龟活着。

随着每只新龟的出生和死亡,龟标签逐渐增加,即最初有5只龟,第3只龟死亡,在下一次蜱中,新龟出生。出生的新龟的标签为6,因此旧标签将退役,并替换为下一个标签。

如果我想将与海龟相关的指标输出到监视器中,有没有办法动态确保。即,因为在任何刻度线上不能有超过20只海龟,我是否可以使netlogo自动显示海龟指标和海龟标签。否则我将不得不创建100个监视器,然后使用[公制]或乌龟0 [[公制]的乌龟n进行编码,这是不实际的。

1 个答案:

答案 0 :(得分:1)

如果你真的想为每只乌龟配备一个单独的监视器,你可以这样做: enter image description here

使用[ metric ] of item 0 sort turtles代替[ metric ] of turtle 0(依此类推)可以确保您不依赖于who海龟的数量,您只能依赖于他们在排序的海龟列表。

请注意,这将是非常低效,因为每个监视器都会一遍又一遍地重新整理海龟。

话虽如此,我认为会有很多不同的,更好的方法来解决这个问题。这是一个完全有效的例子:

turtles-own [ metric ]

to setup
  clear-all
  create-turtles 20 [ set metric random 10 ]
  reset-ticks
end

to go
  ask n-of 5 turtles [ die ]
  create-turtles 5 [ set metric random 10 ]
  tick
end

to-report info [ the-turtle ]
  ; format this however you want:
  report [ (word who ": " metric ", ") ] of the-turtle
end

然后,在监视器中,输入:

map info sort turtles

这会给你类似的东西:

enter image description here

如果您map模糊不清,则可能需要检查其词典条目。基本思想是我们通过将info报告者应用于我们的海龟列表的每个元素来构建新的字符串列表。

我在示例中使用了一个监视器,因为这就是你在问题中所说的内容,但是为了显示像这样的多个乌龟的信息,可能是一个情节或输出小部件更合适。在任何情况下,您都可以使用类似的方法,mapforeach

结束时提出一句建议。您的问题表明您可能已经意识到这一点,但是每当您想要通过who号码引用海龟时(例如turtle 0turtle 1,{{1等等,这可能意味着你走错了轨道。 NetLogo用于操作代理集和列表;利用这一点。当您确实需要引用特定的乌龟时,请使用对该乌龟的引用(例如,上例中的turtle 27),从不(或几乎从不)引用其the-turtle数字。