为每只海龟查询/创建海龟子集

Query / create subset of turtles for each turtle

我有一个 agentset,其中所有海龟的 age/experience 值都不同。我想做的是为每只海龟找到更有经验的海龟,然后跟随这些海龟。不幸的是,ifelse [ age-experience > my-own-age-experience ] 行出现以下错误:

Expected a TRUE/FALSE here, rather than a list or block.

这是我的代码:

turtles-own [
  age-experience
  more-dominant
  dominant-flockmates  
]

to setup
  clear-all
  create-turtles 10 [ set age-experience random-float 1 ]
  reset-ticks
end

to go
  ask turtles [
    find-dominant-flockmates
    ifelse any? dominant-flockmates
      [ show "follow the more dominant flockmates" ]
      [ show "take the lead" ]
  ]
  tick
end

to find-dominant-flockmates
  let my-own-age-experience age-experience
  ask other turtles [
    ifelse [ age-experience > my-own-age-experience ]
      [ set more-dominant true ]
      [ set more-dominant false ]
  ]
  set dominant-flockmates other turtles with [ more-dominant ]
end

好的,这里有多种选择。您可以通过删除 []

来消除错误
to find-dominant-flockmates
  let my-own-age-experience age-experience
  ask other turtles [
    ifelse age-experience > my-own-age-experience
      [ set more-dominant true ]
      [ set more-dominant false ]
  ]
  set dominant-flockmates other turtles with [ more-dominant ]
end

但是还有更有效的编码方法。如果你打算将变量 more-dominant 用于其他目的(所以你需要它),你可以像这样使用 ifelse-value (因为它是 true/false,你实际上不需要 ifelse -value 但了解它是一件好事):

to find-dominant-flockmates
  let my-own-age-experience age-experience
  ask other turtles
  [ set more-dominant ifelse-value (age-experience > my-own-age-experience)
      [ true ]
      [ false ]
  ]
  set dominant-flockmates other turtles with [ more-dominant ]
end

但是如果拥有变量的唯一原因是创建代理集,您可以直接完成整个操作:

to find-dominant-flockmates
  let my-own-age-experience age-experience
  set dominant-flockmates other turtles with [ age-experience > my-own-age-experience ]
end