询问另一个代理人的 id 何时在一起并检查它是否重复
Ask the id of another agent when are together and check it is not repeated
步行者(动态)在连接链接的节点之间移动。一些节点具有事件(静态)代理。我想将这些事件的 ID 保存在步行者自己的列表 (eve-ids) 中。现在我在做:
move-to n ; n is a next node
if any? events-here [
let event-x events-here
set eve-ids lput ([who] of event-x) eve-ids
]
这一行将 event
品种 ID 写入 eve-ids
,但我想知道这不是沃克已经发现的重复事件(即只在第一次写入事件 ID 时被发现)。
非常感谢您的帮助
我可以想到两种方法来解决这个问题。两者都认识到 events-here
产生了一个代理集,因此 [who] of event-x
产生了一个事件代理列表。因此,在其他条件相同的情况下,eve-ids
将是一个代理人列表列表。
一种方法是将列表的列表变成一个简单的列表,然后使用remove-duplicates
清除任何重复的事件。在 NetLogo v.5.3 中,第一步可以使用 reduce
和 sentence
完成,如下所示;
set eve-ids lput event-x eve-ids ;add the event-x list to eve-ids
set eve-ids reduce [sentence ?1 ?2] eve-ids ;collapses eve-ids to a simple list
set eve-ids remove-duplicates eve-ids ;insures no duplicate events
当然,如果每次发现新事件时都这样做,那么 eve-ids 每次都会折叠成一个简单的列表,然后建议使用 foreach
的不同方法(尽管相同可能用 map
) 完成。在这里,我们只是附加 event-x 中未在 eve-ids.
中找到的事件
foreach event-x [
if not member? ? eve-ids [set eve-ids lput ? eve-ids]
]
现在我要引导 NetLogo 专家并建议除非你真的需要他们,否则你根本不应该使用 who numbers,而应该为你的事件使用 agentsets。这也使生活更简单,因为代理集不能包含重复项。因此,如果您执行以下操作:
set eve-ids no-turtles ;start with an empty set of events.
启动助行器代理。
那么你的代码可以是:
move-to n ; n is a next node
if any? events-here [
let event-x events-here
set eve-ids (turtle-set eve-ids event-x)
]
您将拥有越来越多的事件代理,并且没有重复项。
希望这对您有所帮助 - 如果您使用的是 NetLogo v6.0,reduce
和 foreach
编码会有点不同,因为那时将使用匿名记者。
查尔斯
步行者(动态)在连接链接的节点之间移动。一些节点具有事件(静态)代理。我想将这些事件的 ID 保存在步行者自己的列表 (eve-ids) 中。现在我在做:
move-to n ; n is a next node
if any? events-here [
let event-x events-here
set eve-ids lput ([who] of event-x) eve-ids
]
这一行将 event
品种 ID 写入 eve-ids
,但我想知道这不是沃克已经发现的重复事件(即只在第一次写入事件 ID 时被发现)。
非常感谢您的帮助
我可以想到两种方法来解决这个问题。两者都认识到 events-here
产生了一个代理集,因此 [who] of event-x
产生了一个事件代理列表。因此,在其他条件相同的情况下,eve-ids
将是一个代理人列表列表。
一种方法是将列表的列表变成一个简单的列表,然后使用remove-duplicates
清除任何重复的事件。在 NetLogo v.5.3 中,第一步可以使用 reduce
和 sentence
完成,如下所示;
set eve-ids lput event-x eve-ids ;add the event-x list to eve-ids
set eve-ids reduce [sentence ?1 ?2] eve-ids ;collapses eve-ids to a simple list
set eve-ids remove-duplicates eve-ids ;insures no duplicate events
当然,如果每次发现新事件时都这样做,那么 eve-ids 每次都会折叠成一个简单的列表,然后建议使用 foreach
的不同方法(尽管相同可能用 map
) 完成。在这里,我们只是附加 event-x 中未在 eve-ids.
foreach event-x [
if not member? ? eve-ids [set eve-ids lput ? eve-ids]
]
现在我要引导 NetLogo 专家并建议除非你真的需要他们,否则你根本不应该使用 who numbers,而应该为你的事件使用 agentsets。这也使生活更简单,因为代理集不能包含重复项。因此,如果您执行以下操作:
set eve-ids no-turtles ;start with an empty set of events.
启动助行器代理。
那么你的代码可以是:
move-to n ; n is a next node
if any? events-here [
let event-x events-here
set eve-ids (turtle-set eve-ids event-x)
]
您将拥有越来越多的事件代理,并且没有重复项。
希望这对您有所帮助 - 如果您使用的是 NetLogo v6.0,reduce
和 foreach
编码会有点不同,因为那时将使用匿名记者。
查尔斯