Netlogo 两个列表组合
我有两个名单给每个代理人。它们表明1)他们被谁吸引,2)他们被谁吸引。 我想创建一个新的set变量,它只显示那些相互吸引的代理。同等吸引力是:代理(自身)的数量在其他代理的“吸引”列表中,而其他代理的数量在第一个代理(自身)的“吸引”列表中。到目前为止,我的代码是:Netlogo 两个列表组合,netlogo,Netlogo,我有两个名单给每个代理人。它们表明1)他们被谁吸引,2)他们被谁吸引。 我想创建一个新的set变量,它只显示那些相互吸引的代理。同等吸引力是:代理(自身)的数量在其他代理的“吸引”列表中,而其他代理的数量在第一个代理(自身)的“吸引”列表中。到目前为止,我的代码是: if attracted != nobody [set attractinglists fput ([self] of attracted) attractinglists] if attracted != nob
if attracted != nobody [set attractinglists fput ([self] of attracted) attractinglists]
if attracted != nobody [set attrlists fput ([self] of attracting) attrlists]
set attractinglist [self] of other turtles with [member? myself attrlists]
编辑以更好地回答以下评论中澄清的问题
好的,现在,海龟们将有一个他们曾经被吸引的所有海龟的列表。每打一次钩,海龟就会被另外三只海龟吸引。他们将这些海龟添加到他们的“吸引对象”列表中(如果它们还没有在该列表中的话)。接下来,海龟们会检查是否有“被吸引”的海龟曾经被吸引过——如果是的话,他们会将这只海龟添加到“相互吸引”列表中(如果还没有)。这就是你想要的吗
turtles-own [
attracted-to
reciprocal-attraction ;;; the turtles to which this turtle is attracted
]
to setup
ca
create-turtles 10 [
set attracted-to []
set reciprocal-attraction []
]
end
to go
ask turtles [
let temp-attraction sort n-of 3 other turtles
show temp-attraction
foreach temp-attraction [
[x]->
if ( member? x attracted-to = false ) [
set attracted-to lput x attracted-to
]
]
]
ask turtles [
foreach attracted-to [
[x]->
if member? self [attracted-to] of x [
if ( member? x reciprocal-attraction = false ) [
set reciprocal-attraction lput x reciprocal-attraction
]
]
]
]
end
它不起作用。请记住,“吸引”和“吸引”是在滴答声期间更新的列表。它们可以在勾号10中被吸引到药剂2,但在勾号2中被吸引到药剂2。代码没有考虑到这一点。请帮助。预期输入为agentset,但得到的却是列表[]。它确实有效;我用海龟运行了上面的代码,它们在每一个滴答声开始时都会更新它们的吸引力。我已经编辑了我的答案,以包括所需的唯一设置过程,因此我的答案现在包括使此正确执行所需的所有行。您的
with
错误源于将with
与列表一起使用,例如上面创建的“同等吸引力列表”,而不是代理集。请注意,在上面的代码中,和
原语都在查询代理集“吸引到”。感谢您的帮助。但是,是的,这个代码可以工作,但它不满足我的模型。我的经纪人列出了他们所吸引的所有人的名单。我不希望它们完全覆盖吸引力集。因此,如果代理1在勾号1和2中吸引了[0,2],那么代理2在勾号4中吸引了代理1。然后在勾选4中,我需要一个变量来显示代理1和代理2在一个集合中。啊,我想我更清楚地理解了你的意图——我会再次更新我的答案,看看我是否正确。