我在这方面出了点差错。我需要要求领导们朝着一个目标前进。但犯了错误
面对预期的输入是一个代理,但得到了清单5.2代替。程序负责人调用乌龟63跑面时出错--程序调用目标被按钮调用
这是一段代码
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在程序上需要帮助
带头人目标
发布于 2014-10-23 12:57:08
听NetLogo的话。面对一个清单是没有意义的。只需将leader-toward-goal的第一行更改为
let xy one-of goals let x item 0 xy let y item 1 xy let target patch x y或者更好的是,存储补丁而不是它们的坐标。
发布于 2014-10-23 12:59:20
您正在尝试使用列表作为输入来执行原语face。我猜goal是一个补丁列表,尝试实例化它如下:
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获取修补程序而不是列表作为输入
发布于 2014-10-23 14:28:27
其他人建议把目标变成一个补丁,而不是坐标对。这可能是个好建议。但假设你决定坚持坐标。在这种情况下,您将需要facexy而不是face,如下所示:
let target one-of goals
facexy (item 0 target) (item 1 target)https://stackoverflow.com/questions/26527524
复制相似问题