逻辑语句确定两个代理集之间的交集是否为空

时间:2014-06-11 18:00:05

标签: netlogo

我在这里看到如何创建两个代理集的交集或联合,但是我想说代理集a中的任何海龟是否在代理集b中,返回true。我在尝试

ifelse (member? (one-of my-intersections) destination-intersections) 

但我很确定这只是测试我的交叉点中的一个元素是否在目标-Intersections中而不是测试每个元素。有没有办法使用每个?还是有其他我不知道的功能?

同样,我已经引用了

NetLogo two agentsets operations

谢谢!

1 个答案:

答案 0 :(得分:1)

编写此类测试的最简单方法是:

to-report test [ as bs ]
  report any? as with [ member? self bs ]
end

试一试:

create-turtles 5
show test (turtle-set turtle 0 turtle 1 turtle 2) (turtle-set turtle 3 turtle 4)
show test (turtle-set turtle 0 turtle 1 turtle 2) (turtle-set turtle 0 turtle 3 turtle 4)

将显示:

observer: false
observer: true

然而,这不是最有效的方法,因为with子句构建了一个并非真正需要的中间代理集。

更快的测试将是:

to-report test [ as bs ]
  let result false
  ask as [
    if member? self bs [ 
      set result true
      stop
    ]
  ]
  report result
end

修改

我讲的太快了。根据{{​​3}},any?with 的组合会得到优化以提前退出。底线:您应该使用第一个版本(即any? as with [ member? self bs ])。