gpt4 book ai didi

netlogo - 使用列表与代理集

转载 作者:行者123 更新时间:2023-12-04 11:33:40 25 4
gpt4 key购买 nike

代理列表和代理集是 NetLogo 中两种不同的数据类型(可以用 turtle-setsort 转换)。该文档指出,您将列表用于代理的有​​序集合,将集合用于无序集合。似乎可用于列表的匿名过程使列表比代理集更灵活。另一方面,在示例模型中,将 'ask' 与 agentset 结合使用更为常见,并且被认为更具可读性。

可以使用代理集和“询问”将列表和匿名过程的任意组合转换为语句吗?特别是,你能提供一个等效的filter吗?或 map使用 ask和代理集?请告知一些情况,其中一种或另一种更合适,以及该结构提供的好处。

最佳答案

you use lists for an ordered collection of agents and sets for an unordered collection. I feel there is more to it though.



有序与无序是一个重要的区别,但还有另一个关键的区别:列表可以包含重复项,代理集不能。

I do not know how to properly implement an equivalent to filter or map using ask.



你不需要实现那些:它们已经存在了!
filter的agentset版本是 with :
my-agent-set with [ color = red ]

是相同的:
filter [ a -> [ color = red ] of a ] my-agent-list
map的agentset版本是 of :
[ color ] of my-agent-set

是相同的:
map [ a -> [ color ] of a ] my-agent-list

而且,正如您现在可能已经直觉到的, ask相当于 foreach .

掌握这些相似之处是迈向 NetLogo 启蒙的重要一步。 (甚至是一般的编程启蒙。)

统一(或以某种方式概括)这两种类型集合的语法和原语的想法之前已经讨论过(例如, herehere ),但这种大的语言变化往往不会经常发生。

using agentsets (and 'ask') is more in line with the idea of Netlogo. It might be faster or easier to read.



正如上面的代码示例很好地说明的那样,代理集确实有更好的语法。这是一件好事,因为在进行基于代理的建模时,独特代理的无序集合通常是您所需要的。

不过,它们本质上并不是更快。特别是添加到它们比添加到列表更慢。使用一个人为的例子,这样做要快得多:
let my-list []
repeat 50 [ set my-list lput one-of turtles my-list ]
let my-agentset turtle-set my-list

比做:
let my-agentset no-turtles
repeat 50 [ set my-agentset (turtle-set my-agenset one-of turtles) ]

What is your experience on this matter?



大部分时间都需要代理集,但偶尔也需要列表。

Jen 使用它们来实现内存的示例是一个很好的示例,但还有其他用例。希望当您看到它们时,您会认识它们。

关于netlogo - 使用列表与代理集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49813349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com