我在这收到错误。我需要让领导者朝着目标前进。但是得到错误
FACE预期输入是一个代理,但得到了列表[5 2]。 当程序调用的龟63运行FACE时出错 LEADER-TOWARD-GOAL由程序GO调用GO调用按钮' go'
这是一段代码
patches-own [ is-visited? ]
turtles-own [ is-leader? goals ]
;globals [ number ]
to setup
let number 70
ca
ask patches [set is-visited? false ]
ask n-of number patches [sprout 1 [set size 1 set is-leader? false ]]
choose-leader
ask turtles [ set goals [ [15 10] [5 2] [0 0] ] ]
;tick
end
to go
; ask turtles with [ is-leader? ] [
fd 1
;let target one-of goals
;lt random 20
;rt random 10
;set is-leader? false]
follow-leader
visited-patch
ask turtles with [ is-leader? ] [ leader-toward-goal]
;ask turtles [ tick ]
end
to visited-patch
if any? turtles-here [ set is-visited? true ]
end
to choose-leader
ask max-n-of 7 turtles [ count turtles in-radius 6 ] [set is-leader? true set color red set size 0.7 ]
end
to follow-leader
let nearby-leaders turtles with [is-leader? and distance myself < 30] ;; find nearby leaders
if any? nearby-leaders [ ;; to avoid 'nobody'-error, check if there are any first
face min-one-of nearby-leaders [ distance myself ]
]
; fd 1
end
to leader-toward-goal
let target one-of goals
face target
if patch-ahead 1 = target [ print "target achived" ]
end
需要程序帮助
前导-朝向目标的
答案 0 :(得分:1)
收听NetLogo。 :-)
您将海龟目标设置为列表列表,然后您尝试面对其中一个内部列表。面对一个清单是没有意义的。只需将leader-toward-goal
的第一行更改为
let xy one-of goals let x item 0 xy let y item 1 xy let target patch x y
或者更好的是,存储补丁而不是它们的坐标。
答案 1 :(得分:1)
您正尝试使用列表作为输入执行原始 face 。 我想目标是补丁列表,尝试将其实例化为:
ask turtles [set goals (list patch 0 0 patch 15 10 patch 5 2)]
而不是
ask turtles [set goals [ [15 10] [5 2] [0 0] ] ]
所以你可以说
face one-of goals
获取补丁而不是列表
答案 2 :(得分:0)
其他人建议将目标设为补丁而不是坐标对。这可能是个好建议。但是假设你决定坚持使用坐标。在这种情况下,您需要facexy
而不是face
,如下所示:
let target one-of goals
facexy (item 0 target) (item 1 target)