Netlogo 检查海龟附近的一些补丁
我正在努力编码,根据面片的属性识别扩展的邻域。我需要检查我的乌龟的视力是否有一堵墙,如果是这样的话,我的乌龟应该不能看穿这堵墙 目前,我的递归代码只能在vision的距离为1(对应于邻居)的情况下工作,但超过2时,我会遇到这样的错误:如果不指定哪个代理,补丁程序就无法访问turtle或link变量 我不知道怎么可能和经纪人一起做这件事,有人有办法吗Netlogo 检查海龟附近的一些补丁,netlogo,Netlogo,我正在努力编码,根据面片的属性识别扩展的邻域。我需要检查我的乌龟的视力是否有一堵墙,如果是这样的话,我的乌龟应该不能看穿这堵墙 目前,我的递归代码只能在vision的距离为1(对应于邻居)的情况下工作,但超过2时,我会遇到这样的错误:如果不指定哪个代理,补丁程序就无法访问turtle或link变量 我不知道怎么可能和经纪人一起做这件事,有人有办法吗 breed[robots robot] robots-own[step] globals [ max-dist] patches-own [ di
breed[robots robot]
robots-own[step]
globals [ max-dist]
patches-own [ dist ]
to setup
ca
init-environement
create-robots 1 [init-robots]
end
to init-robots
set shape "person"
set size 4
move-to one-of patches with [no-wall? and (not any? turtles-here)]
set step 0
end
to init-environement
ask patches with [ (abs pxcor = max-pxcor) or (abs pycor = max-pycor) ]
[ set pcolor brown ]
ask patches with [ (abs pxcor = 20 and abs pycor > 15)
or (abs pycor = 10 and pxcor > 25)
or (pycor = 0 and pxcor < 1)][ set pcolor brown ]
ask n-of nbObstacles patches [ask patches in-radius random-float 2 [ set
pcolor brown ]]
end
to move-robot
let k 0
let v (neighbors with [no-wall? and (not any? turtles-here)])
if (any? v)[ move-to min-one-of v [dist] paint-agents k neighbors]
set step (step + 1)
output-show step
end
to paint-agents [k case]
let w ([neighbors] of case with [no-wall? and (not any? turtles-here)])
if (k < radius) [
set k k + 1
foreach w [
[x] ->
ask neighbors with [pcolor != brown][ set pcolor [color] of myself - 2
paint-agents k x]
]
]
end
to go
propagate
if any? patches with [pcolor = black] [ clear-output ask robots [move-robot] ]
end
to propagate
ask patches with [ no-wall? ][ set dist -1]
let p (patch-set patches with [pcolor = black])
let d 0
while [ any? p ]
[ ask p [ set dist d ]
set d d + 1
set p (patch-set [ neighbors with [no-wall? and ((dist = -1) or (dist > d))]] of p)
]
set max-dist max [ dist ] of patches
if (max-dist < 0) [ set max-dist 0 ]
ifelse (show-labels?)
[ ask patches with [no-wall?]
[ set plabel-color white
set plabel dist]
]
[]
end
to-report no-wall?
report pcolor != brown
end
在这里,我的功能就是解决这个问题,一种方法是去除视线中与墙相交的补丁。您可以想象,如果在每个面片之间绘制一条线,并且如果墙位于绘制的线上,那么该面片应该从视觉中的事物中移除 此链接可能对实现有用: