NetLogo两个代理集操作

9

我有两个代理集。 是否有函数可以找到:

  1. 同时存在于两个代理集中的代理集(交集)
  2. 只存在于一个代理集而不在另一个代理集中的代理集

我发现手动实现这一点非常困难,特别是当它需要在三重ask内部时。

理想情况下,使用类似于with语法:

let cross set1 and-in set2
let uniq set1 with [color = red] not-in set2

简单的问题如“代理A是否在代理集合X中?”有一些问题。
1个回答

13

对于第一个问题,你需要使用turtle-set原语。对于第二个问题,你需要使用member?原语,它也可以用于代理集。因此:

to setup
  ca
  create-turtles 10 [set color red]
  create-turtles 10 [set color blue]
  let red-ones turtles with [color = red]
  let blue-ones turtles with [color = blue]

  ;join 2 agent sets
  let joinset (turtle-set red-ones blue-ones)
  show joinset

  let even-ones (turtles with [who mod 2 = 0])
  ;subtract even-ones from red-ones
  let subtractset red-ones with [not member? self even-ones]
  show subtractset
end

1
我没有意识到 [with] 可以接收一个 "reporter"。我的第一个问题是要找到一个交集,而不是一个并集,但看到你对第二个问题的回答,我猜想它应该像 red-ones with [member? self even-ones] 这样简单。谢谢! - Mikhail
谢谢。我也有同样的问题,并没有意识到可以在with结构中使用self。一开始我尝试了,但是收到了一个错误信息,然后再没有其他想法继续进行。 - RussAbbott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接