如何在特定区域内“定位”补丁?

时间:2018-07-19 18:58:49

标签: netlogo

我已经建立了代表人员和商店的代理程序和节点,我的意图是使代理程序以最大的价值(“漏洞”)在其“感知”空间中“定位”商店。我已经通过尝试和错误大致编码了到目前为止的内容,但是将乌龟的目标设置为半径在10个单位半径内的最大值的补丁是我无法克服的障碍。当前,无论其在世界上的位置如何,他们都以最高价值为目标。有人可以建议我考虑如何实现这一目标吗?我已经粘贴了到目前为止编写的内容以供参考。

谢谢。

breed [shoplifters a-shoplifter]
patches-own [vulnerability]
shoplifters-own [target
             awareness]


to setup
  clear-all
  setup-patches
  setup-turtles
  reset-ticks
end

to setup-patches
  setup-stores
end

to setup-stores
  ask n-of num-stores patches [ set pcolor lime ]  ;; create 'num-stores'         randomly
  ask patches [
    if pcolor = lime
    [ set vulnerability random 100
  ]
  ]
end


to setup-turtles
 setup-shoplifters
 setup-target
 end

to setup-shoplifters
   create-shoplifters num-shoplifters [  ;; create 'num-turtles' shoplifters     randomly
    set xcor random-xcor
    set ycor random-ycor
    set shape "person"
    set color red
  ]
end

to setup-awareness
  ask turtles [
  set awareness
  patches in-radius 10
  ]
end

to setup-target
  ask turtles [
    set target
    max-one-of patches [vulnerability]
  ]
end

1 个答案:

答案 0 :(得分:3)

使用max-one-of使您处在正确的轨道上。但是,此刻,您确实需要patches时,将发送patches in-radius 10作为搜索空间以查找具有最大漏洞价值的空间。因此,您可以简单地执行以下操作:

to setup-target
  ask turtles [
    set target max-one-of patches in-radius 10 [vulnerability]
  ]
end

但是,这将效率很低,因为NetLogo将必须首先计算出半径范围内的补丁。您已经要求海龟解决此问题并将其分配给它们的变量“意识”。因此,您真正想要做的是:

to setup-target
  ask shoplifters [
    set target max-one-of patches awareness [vulnerability]
  ]
end

请注意,我也将ask turtles更改为ask shoplifters。只有入店行窃者才具有“目标”属性,因此您只应要求他们进行计算。同样的事情也适用于“意识”。目前您没有其他breeds,因此不会引起错误,但是使用breed是一个好习惯,否则就没有意义了。