当满足两个条件时,海龟移动到目标
Turtles moving to target when two conditions are met
我想创建一个有两个条件的目标(品种:商店):
- 店铺开张
- 距离龟(户)所在地最近的店铺
但我不断收到错误,请参阅下面的行。
打开-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?
已经是一个布尔变量(即它只能取值 TRUE
或 FALSE
),则有无需添加等号来评估它:它本身已经评估为 TRUE
或 FALSE
。
综合以上所有要点,您要实现的目标的正确版本是:
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
我想创建一个有两个条件的目标(品种:商店):
- 店铺开张
- 距离龟(户)所在地最近的店铺
但我不断收到错误,请参阅下面的行。
打开-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?
已经是一个布尔变量(即它只能取值TRUE
或FALSE
),则有无需添加等号来评估它:它本身已经评估为TRUE
或FALSE
。
综合以上所有要点,您要实现的目标的正确版本是:
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
这有助于其他人帮助您,并使那些愿意帮助您的人能够节省一些时间,否则这些时间需要花在重新创建您的上下文上。 在这种情况下,很容易回答你的问题,但在更不清楚的情况下,我(和其他人)可能会忽略它,因为没有足够的 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