如何在netlogo中动态输出值
How to dynamically output value in netlogo
我创建了一个模型,其中海龟根据特定参数出生和死亡。但在任何给定时间点,假设不超过 20 只海龟还活着。
随着每只新海龟的诞生和死亡,海龟标签不断增加,即最初有 5 只海龟,第 3 只海龟死亡,在下一个 tick 中,一只新海龟诞生。新出生的海龟的标签为 6,因此旧标签被淘汰并替换为下一个标签。
如果我想将与海龟相关的指标输出到监视器中,有没有办法动态确保这一点。也就是说,由于任何刻度都不能超过 20 只海龟,我可以让 netlogo 自动显示海龟指标和海龟标签吗?否则,我将不得不创建 100 个监视器,然后使用 [metric] 或 turtle 0..... [metric] of turtle n 进行编码,这是不实用的。
如果你真的想为每只海龟单独设置一个监视器,你可以这样做:
使用 [ metric ] of item 0 sort turtles
而不是 [ metric ] of turtle 0
(等等)将确保您不依赖于海龟的 who
数量,您只依赖于它们的数量在海龟排序列表中的位置。
请注意,这会非常 低效,因为每个监视器都会一遍又一遍地保持 re-sorting 海龟。
话虽如此,我认为会有很多不同的、更好的方法来解决这个问题。这是一个完整的示例:
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
这会给你类似的东西:
如果 map
对您来说晦涩难懂,您可能需要查看其字典条目。基本思想是,我们通过将 info
报告器应用于海龟列表的每个元素来构建一个新的字符串列表。
我在示例中使用了监视器,因为这就是您在问题中所说的内容,但是为了显示有关多只乌龟的信息,也许绘图或输出小部件会更合适。在任何情况下,您都可以使用类似的方法,使用 map
或 foreach
.
结束时的一个忠告。你的问题表明你可能已经意识到了这一点,但任何时候你都想用它们的 who
数字来指代海龟(即 turtle 0
、turtle 1
、turtle 27
, 等), 这可能意味着你走错了路。 NetLogo 是为操纵代理集和列表而构建的;利用这一点。当您确实需要引用特定的海龟时,请使用对该海龟的引用(例如,上面示例中的 the-turtle
),永远不要(或几乎永远不要)它的 who
编号。
我创建了一个模型,其中海龟根据特定参数出生和死亡。但在任何给定时间点,假设不超过 20 只海龟还活着。
随着每只新海龟的诞生和死亡,海龟标签不断增加,即最初有 5 只海龟,第 3 只海龟死亡,在下一个 tick 中,一只新海龟诞生。新出生的海龟的标签为 6,因此旧标签被淘汰并替换为下一个标签。
如果我想将与海龟相关的指标输出到监视器中,有没有办法动态确保这一点。也就是说,由于任何刻度都不能超过 20 只海龟,我可以让 netlogo 自动显示海龟指标和海龟标签吗?否则,我将不得不创建 100 个监视器,然后使用 [metric] 或 turtle 0..... [metric] of turtle n 进行编码,这是不实用的。
如果你真的想为每只海龟单独设置一个监视器,你可以这样做:
使用 [ metric ] of item 0 sort turtles
而不是 [ metric ] of turtle 0
(等等)将确保您不依赖于海龟的 who
数量,您只依赖于它们的数量在海龟排序列表中的位置。
请注意,这会非常 低效,因为每个监视器都会一遍又一遍地保持 re-sorting 海龟。
话虽如此,我认为会有很多不同的、更好的方法来解决这个问题。这是一个完整的示例:
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
这会给你类似的东西:
如果 map
对您来说晦涩难懂,您可能需要查看其字典条目。基本思想是,我们通过将 info
报告器应用于海龟列表的每个元素来构建一个新的字符串列表。
我在示例中使用了监视器,因为这就是您在问题中所说的内容,但是为了显示有关多只乌龟的信息,也许绘图或输出小部件会更合适。在任何情况下,您都可以使用类似的方法,使用 map
或 foreach
.
结束时的一个忠告。你的问题表明你可能已经意识到了这一点,但任何时候你都想用它们的 who
数字来指代海龟(即 turtle 0
、turtle 1
、turtle 27
, 等), 这可能意味着你走错了路。 NetLogo 是为操纵代理集和列表而构建的;利用这一点。当您确实需要引用特定的海龟时,请使用对该海龟的引用(例如,上面示例中的 the-turtle
),永远不要(或几乎永远不要)它的 who
编号。