我使用的是netlogo 6.0.4,我想从海龟身上拉近海龟。
我使用以下代码:
create-players 1[
set color red
set size 5
set the-player self
set team "red"
]
create-balls 1 [
set color orange
set size 2.5
set the-ball self
]
to-report get-players-close-to-ball
report players with [distance the-ball <= 1]
end
但是我得到了这样的输出(代理集,0只海龟),我无法将其与自身进行比较:
to-report decision-steal-ball
let decision 0
if (self = get-players-close-to-ball)[
set decision 10
]
report decision
end
。 所以我尝试使用:
to-report get-players-closer-to-the-ball
report the-player with [distance the-ball <= 1]
end
但是我收到此错误: “原本以为输入是一个代理集,但却得到了乌龟(玩家10)。”
所以问题是:如何使球员更接近球?
答案 0 :(得分:2)
您的第一个代码在过程中包含to-report
,甚至在试图偷球之前都会产生错误。您也有一个概念上的问题-可能有任意数量的球员接近球。消息告诉您,此时没有球员靠近球。
NetLogo将返回一个与所有靠近球的球员的座席集。无法像'if self = agentset'一样测试agentset。您需要的是if member? self get-players-close-to-ball
,这将检查self是否是该代理集的成员。更好的是,即使agentset为空,它也可以工作,因此您不必先进行测试if any?
。