我已经建立了代表人员和商店的代理程序和节点,我的意图是使代理程序以最大的价值(“漏洞”)在其“感知”空间中“定位”商店。我已经通过尝试和错误大致编码了到目前为止的内容,但是将乌龟的目标设置为半径在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
答案 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
是一个好习惯,否则就没有意义了。