为领导者NetLogo设定目标

时间:2014-10-23 11:58:04

标签: netlogo

我在这收到错误。我需要让领导者朝着目标前进。但是得到错误

  

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

需要程序帮助

  

前导-朝向目标的

3 个答案:

答案 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)