netlogo:比较两个不同海龟的变量

netlogo: comparing variable of two different turtle

我正在尝试比较同一补丁中 "capabilities" 和 "prevalues" 的变量。如果值上的数字 = 资源列表上的数字之一,则执行某些操作。 这就是我所拥有的:

capabilities-own [ resource ]
prevalues-own [ value ] 

to setup
  clear-all
  ......
  ask capabilities 
   [ set resource (list 1 2)]
  ask prevalues 
   [set value ((random 4) + 1)]
  ....
  reset-ticks
end

to compare
 ask capabilities-here
    [if any? prevalues-here 
     [ ask one-of prevalues-here   
        [ ifelse ( value = one-of resource)
            [ move-to one-of patches with [pcolor = red] ]
            [die]
]]]

但是我得到了 运行时错误:PREVALUES 品种不拥有变量 RESOURCE

我也尝试使用其他代码,例如:

to compare
  ask capabilities-here
    [ ifelse prevalues-here with [value] = one-of [resource] of myself  
        [ move-to one-of patches with [pcolor = red] ]
        [die]]
end

结果运行时错误:符合预期true/false...

感谢您的帮助

谢谢

您的行 ifelse (value = one-of resource) 导致了第一个问题。 resource 是 capabilities 的代理变量,但是你没有告诉 NetLogo 哪个 capabilities 的资源来比较预值的值。乌龟知道它自己的代理变量和它所在的补丁的补丁变量,但是如果你想从另一只乌龟那里得到什么,你必须明确地说出来。

此外,您是希望它从资源列表中随机 select 一个值,还是只想检查该值是否出现在列表中的某处?

我想你想要这样的东西(未测试):

to compare
 ask capabilities-here
   [ if any? prevalues-here 
     [ ask one-of prevalues-here   
       [ ifelse member? value ([resource] of myself)
         [ move-to one-of patches with [pcolor = red] ]
         [ die ]
]]]

这里假设您想要检查它是否在列表中,我认为这就是您第一段的意思。如果您想从列表中随机 select 一个项目并检查它是否匹配,您将需要更多类似的东西:

 [ let this-resource one-of [resource] of myself
 ask one-of prevalues-here   
   [ ifelse value = this-resource