MOVE-TO预期输入为代理,但没有提示,而是运行时错误

时间:2019-04-10 13:49:18

标签: netlogo

当我尝试在他们拥有的半径的不同补丁组上创建代理时,出现运行时错误。

我在这里寻找答案,但是我不完全理解它们。使用(如果有)吗?人们经常这样做。我如何在这里实现该功能或还能做什么?

to set-farm-in-radius [d]
 move-to one-of patches with [not any? other patches in-radius d with 
[belongs-to !=    nobody]]
 set farm patches in-radius farm-size
 ask farm [set belongs-to myself]
 let c random 6 + 61
 ask farm [set pcolor c]
end

我希望它能奏效,因为“移动到一个补丁程序”命令似乎非常简单。

1 个答案:

答案 0 :(得分:0)

因此,move-to one-of patches是一个非常安全的命令,在乌龟环境中运行时,它绝不会失败。

但是您正在做更多的事情:

move-to one-of patches with [not any? other patches in-radius d with [belongs-to != nobody]]

因此patches with [not any? other patches in-radius d with [belongs-to != nobody]]可以为其中的代理集提供0个补丁。并且one-of空代理集将为您提供nobody

所以类似的方法可能会更好:

let open-patches patches with [not any? other patches in-radius d with [belongs-to != nobody]]
ifelse (any? open-patches) [
  move-to one-of open-patches
  set farm patches in-radius farm-size
  ask farm [set belongs-to myself]
  let c random 6 + 61
  ask farm [set pcolor c]
] [
  ; handle the case where there are no open patches...
]

请注意,编写代码后,所有“农场”看起来都很容易被占用,并且没有合适的开放空间,具体取决于您拥有多少只海龟。