如何访问 netlogo 代理集中代理内的属性?

how to access an attribute inside an agent in agentset for netlogo?

这是问题所在:

我需要将 turtles-own 中的一个值 best-food 与同一代理集中的其他代理进行比较,但我不知道如何让代理向他的队友询问这个问题价值,我需要他们 在整个模拟过程中不断地比较彼此的最佳食物价值 。 (这样他们才能获得最高价值的食物)

如果在Java里面,就是这个样子=

if agent1.best-food > agent2.best-food then agent1 go to agent2

但是在netlogo中,我不能这样做。有人可以帮助我吗?

代码如下:

food_quality = 在世界

上找到食物代理

food_quality_found = food_quality 的值保存在 turtles-own

best-food = 每个代理保存他们的食物质量-在最好的食物中找到;然后所有代理比较哪个具有最高值,并且这种比较发生在代理集中。

询问我的团队[ 设置食品质量发现食品质量<br> 设置最好的食物食品质量发现 在此处设置位置补丁 设置本地最佳食物位置]

ask myteamset[

            if best-food != 0 ; I need them to compare constantly so "!=0" need to be substitute with his teammates' best-food, but I don't know how to ask other teammates in same agentset about this value
            [

if (best-food < food-quality-found) ;to make sure best-food always have the highest value. [set best-food food-quality-found set location patch-here set loca-best-food location]

          if best-food > best-food ;

这在逻辑上是不正确的,因为它们都在比较自己的最佳食物值,但我不知道如何询问其他乌龟它们的最佳食物并与我的进行比较。。 [

              set g random 100
              if (g >= probability_teammates_to_go) 
             [ move-to loca-best-food]]  

if (patch-here is loca-best-food) ;how to write if with patches? [set i random 100 if (i >= probability_to_ignore) ;after agent arrives at best-food, they still need to choose whether or not they want to stay there. [ fd 0.25 ]

我试过了let best-food-turtle (turtles with-max [food-quality-found]) 但它并没有将价值与他所有的队友进行比较,而只是与这个特定的代理人进行比较,这是错误的...

提前致谢。

这是您问题的简化版本的解决方案。我忽略了所有不同类型的食物变量,只是为每只乌龟分配了一个名为食物的变量的随机值。每只乌龟也是红队或蓝队(分别称为 R 和 B)的成员。他们找到团队中食物价值最高的成员,用那只乌龟创造一个 link 并面对那只乌龟。

这里重要的原语是max-one-of,它标识指定代理集中的代理(在本例中,同一团队中的所有海龟)具有指定变量的最高值(在本例中, 食物).

turtles-own
[ food
  team
]

to testme
  clear-all
  create-turtles 10
  [ setxy random-xcor random-ycor
    set food random 100
    set team one-of [ "B" "R" ]
    ifelse team = "B"
    [ set color blue ]
    [ set color red]
  ]
  ask turtles
  [ let best-teammate max-one-of turtles with [team = [team] of myself] [food]
    if self != best-teammate
    [ create-link-to best-teammate
      face best-teammate
    ]
  ]
end

一旦你确定了价值最高的海龟,你可以向 ask 那只海龟要它的补丁(使用 [patch-here] of ...)。如果您只想要值,那么您需要 max 而不是 max-one-of.