Netlogo代码问题,乌龟找不到补丁0,0

我试图按照与此视频相同的线条创建模拟(1:29 – 1:45)

https://www.youtube.com/watch?v=pqBSNAOsMDc

我认为实现无限循环进程的一种简单方法是让乌龟面向0,0,然后寻找半径为90的空补丁(所以它们总是向右看.

我收到了错误代码..

‘没有标题从点(3,-6)到同一点定义. “

有人可以用我的代码指出我正确的方向吗?

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


turtles-own [ faction ]

to setup
  clear-all

  ask patches [ set pcolor white ]
  set-patch-size 7
  resize-world min-pxcor max-pxcor min-pycor max-pycor 


  ask patch 0 0
   [ ask patches in-radius ( max-pxcor * .6) with [  random-float 100 < density ]
     [ sprout 1
         [
         set shape "circle"
         assign-factions
         set color faction-color
         set size 1 ] ] ]

   ask turtles-on patch 0 0 [ die ]

   reset-ticks
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to-report faction-color
   report red + faction * 30
end

to assign-factions
   let angle 360 / factions
   foreach n-values factions [?] [
    ask patch 0 0 [ 
      sprout 1 [
        set heading ? * angle
        ask turtles in-cone max-pxcor angle [ set faction ? + 1 ]
        die ] ] ]
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go 

  ask turtles
  [ set heading (towards patch-at 0 0)  ; adjusts heading to point to centre  
    let empty-patches neighbors with [not any? turtles-here]
    if any? empty-patches in-radius 90
      [ let target one-of empty-patches
        face target
        move-to target ] 
  ]

end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

最佳答案 在你的go程序中,你正在使用set heading(朝向patch-at 0 0),但是
patch-at会给你相对于正在询问的乌龟的位置的补丁.因此,如果你要求补丁0 0你总是得到乌龟实际上的补丁.对自己的标题是不确定的,因此你得到的错误.

使用补丁0 0(使用绝对坐标)替换0 0处的补丁将解决您的问题的一半:您所问的乌龟仍然可能已经在补丁0 0处.在这种情况下,您将得到相同的错误像之前一样.

解决方案:使用面部补丁0 0替换设置标题(朝向补丁0 0).如果您要求面对您已经处于的位置,则face原语不会崩溃.

点赞