Netlogo 检查海龟附近的一些补丁

Netlogo 检查海龟附近的一些补丁,netlogo,Netlogo,我正在努力编码,根据面片的属性识别扩展的邻域。我需要检查我的乌龟的视力是否有一堵墙,如果是这样的话,我的乌龟应该不能看穿这堵墙 目前,我的递归代码只能在vision的距离为1(对应于邻居)的情况下工作,但超过2时,我会遇到这样的错误:如果不指定哪个代理,补丁程序就无法访问turtle或link变量 我不知道怎么可能和经纪人一起做这件事,有人有办法吗 breed[robots robot] robots-own[step] globals [ max-dist] patches-own [ di

我正在努力编码,根据面片的属性识别扩展的邻域。我需要检查我的乌龟的视力是否有一堵墙,如果是这样的话,我的乌龟应该不能看穿这堵墙

目前,我的递归代码只能在vision的距离为1(对应于邻居)的情况下工作,但超过2时,我会遇到这样的错误:如果不指定哪个代理,补丁程序就无法访问turtle或link变量

我不知道怎么可能和经纪人一起做这件事,有人有办法吗

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

在这里,我的功能就是解决这个问题,一种方法是去除视线中与墙相交的补丁。您可以想象,如果在每个面片之间绘制一条线,并且如果墙位于绘制的线上,那么该面片应该从视觉中的事物中移除

此链接可能对实现有用: