【问题标题】:Only observer can ask all turtles - NetLogo error只有观察者可以询问所有海龟 - NetLogo 错误
【发布时间】:2018-12-10 23:23:46
【问题描述】:

我是 Netlogo 的新用户, 虽然当我检查代码时,没有问题。但是,当我运行程序一段时间时,它会抛出错误消息

只有观察者可以询问所有海龟的集合。龟 0 运行 ASK 时出错。由过程调用 EXIT 由过程 Customer、GO 和按钮“go”调用

to go
customer
end

to setup-turtles
create-turtles 1
ask turtles
[
set shape "person"
set size 3
set heading -90
fd 10
setxy 15 -15
set color red
]
end

to customer
ask turtles
[
set products ( products )
rt (random 360)
fd 1
if patch-here = one-of patches with
[
  pcolor = green
]
[
  set pcolor orange
  set products (products + 1)
]
if patch-here = one-of patches with
[
  pcolor = gray
]
[exit]
show count patches with
[pcolor = green ]


move-to one-of patches with
[
  pcolor = black
]

]
end



to exit
ask turtles
[
ifelse patch-here = one-of patches with
[
  pcolor = gray
]
[ifelse count products >= 2
  [
    die
  ]
  [move-to one-of patches with
    [
      pcolor = green or pcolor = black
    ]
  ]
]
  [
    die
  ]
move-to one-of patches with
  [pcolor = green
  ]

move-to one-of patches with
    [pcolor = black
    ]


  ]

end

【问题讨论】:

  • 我无法用提供的代码复制错误,因为您可能省略了负责更改补丁颜色的代码。但是,我有 99% 的把握确定问题源于您嵌套了 ask 语句的事实——customer 过程中的 ask turtles 调用了 exit 过程,其中包含另一个 ask turtles。因此,尝试 exit 的海龟会要求所有海龟执行此过程 - 尝试从 exit 过程中删除整个 ask turtles 代码块,看看是否遇到相同的错误。
  • 为便于阅读而编辑的问题格式

标签: netlogo


【解决方案1】:

在您的客户程序中,您有

ask turtles
[ ...
  if patch-here = one-of patches with [pcolor = gray]
  [ exit ]
  ...
]

所以退出过程被灰色补丁上的任何海龟调用。满足该条件的每只海龟都进入退出程序。一旦它进入该过程,第一个命令(在退出过程中)就是ask turtles。所以乌龟要求所有乌龟做某事。

这被 NetLogo 语言明确禁止,部分原因是它是初学者错误的常见来源,通常既不必要又低效。您已经选择了要退出的海龟,这只特定的海龟需要做什么才能真正退出。他们不太可能需要识别灰色斑块上的所有海龟。

【讨论】:

    猜你喜欢
    • 2013-04-20
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多