当满足两个条件时,海龟移动到目标

Turtles moving to target when two conditions are met

我想创建一个有两个条件的目标(品种:商店):

  1. 店铺开张
  2. 距离龟(户)所在地最近的店铺

但我不断收到错误,请参阅下面的行。

打开-nh?是店铺属性。

谢谢!

  let target-nh [min-one-of healthy-shops[distance myself] and open-nh? = true]

该行包含许多语法错误,只需检查 NetLogo Dictionary:

中的相关关键字即可解决所有这些错误
  • let (here) 需要局部变量名称后面没有任何方括号的值。
  • min-one-of (here) 需要在 agentset 和包含 reporter 的后续方括号之间有一个 space(当然这在 NetLogo 中总是如此)。
  • AND (here) 需要前后布尔值。在你的情况下,open-nh? = true 是后面的,它是一个布尔值,但 min-one-of healthy-shops [distance myself] 是前面的,它不是布尔值,它是一个代理。
  • 这不是语法错误,但请注意,如果 open-nh? 已经是一个布尔变量(即它只能取值 TRUEFALSE),则有无需添加等号来评估它:它本身已经评估为 TRUEFALSE

综合以上所有要点,您要实现的目标的正确版本是:

let target-nh min-one-of (healthy-shops with [open-nh?]) [distance myself]

请注意,我在 healthy-shops with [open-nh?] 周围使用了括号,尽管它们对于 NetLogo 不是必需的:它们仅用于增强可读性的目的,明确 min-one-of 的第一个参数(需要be an agentset) 是括号内的内容。

事实上,这里的逻辑是首先获取所有开放的商店并将这些商店用作 min-one-of 的输入代理集。


最后的笔记

我会在问题的评论中发布以下内容,因为这实际上不是答案的一部分,但我想在此处包含一些代码,所以我将此注释添加到答案中:

因为您之前的一些问题已经注意到(例如 here or ), please do include a minimal and reproducible example 您的问题。

这有助于其他人帮助您,并使那些愿意帮助您的人能够节省一些时间,否则这些时间需要花在重新创建您的上下文上。 在这种情况下,很容易回答你的问题,但在更不清楚的情况下,我(和其他人)可能会忽略它,因为没有足够的 material 来处理(或者需要询问更多细节,这对我们和你来说都是额外的时间。

此外,正如我在上面链接的关于可重现示例的同一页面中所述,请描述您遇到的错误:

"It doesn't work" isn't descriptive enough to help people understand your problem. Instead, tell other readers what the expected behavior should be. Tell other readers what the exact wording of the error message is [...].

请在下面查看您的案例的最小可重现示例(现在具有正确的语法):

breed [people person]
breed [healthy-shops healthy-shop]

healthy-shops-own [
  open-nh?
]


to setup
  clear-all

  create-people 1 [
    set color lime
  ]
  
  create-healthy-shops 50 [
    setxy random-xcor random-ycor
    ifelse (random 2 < 1)
     [set open-nh? TRUE
      set shape "square"]
     [set open-nh? FALSE
      set shape "circle"]
    set color white
  ]
end


to go
  ask turtle 0 [
    let target-nh min-one-of (healthy-shops with [open-nh?]) [distance myself]
    ask target-nh [
      set color orange
    ]
  ]
end