gpt4 book ai didi

netlogo - NetLogo 中链接代理之间的访问属性

转载 作者:行者123 更新时间:2023-12-03 03:58:08 27 4
gpt4 key购买 nike

例如,在我创建的一个项目中,有 1000 个人。现在,如果满足概率,那么我会创建一只狗,并将他与人类联系起来。我们开始吧:

to setup-agents
set-default-shape humans "person"
set-default-shape dogs "default"

create-humans people [
setxy random-xcor random-ycor
set size 1.5
set color green
set sick? false
]

let i 1
while [i <= people] [

ifelse random 100 < 43 [

create-dogs 1 [
set size 0.5
set color green
set sick_dog? false
create-link-from one-of humans [set tie-mode "fixed" tie hide-link]
]
] []

set i i + 1
]

move

end

然后,在创建链接后,我需要访问 humasn 的属性(has_dog?)并将其设置为 true。

humans-own [
has_dog?
sick?
]

我怎样才能要求刚刚链接的人将他的属性设置为true?

最佳答案

我编辑了my answer to your previous question在我看到这个之前。您可能会在那里找到您想要的大部分内容。话虽这么说:

您可能不需要 has_dog? 变量,因为您可以轻松地通过报告器确定人类是否养狗:

to-report has-dog? ; human reporter
report any? out-link-neighbors
end

不过,您可能仍然需要联系狗的主人。这是记者的报道:

to-report my-owner ; dog reporter
report one-of in-link-neighbors
end

(使用链接理论上可以让一只狗拥有多个主人,因此表达式中的one of。但是您的模型的设置方式永远不会发生这种情况。这段代码如果狗没有主人,也会报告 nobody,这是有道理的。)

然后,假设你的人类仍然有一个 has_dog? 变量,你可以这样做:

ask my-owner [ set has_dog? true ]

其他一些要点:

  • 我注意到您有一个带有空 else 子句的 ifelse 语句。为什么不直接使用 if

  • 您使用带有虚拟索引的 while 循环只是为了重复某些操作多次。 NetLogo有repeat为此。

  • 循环的逻辑是一个人可以养多只狗,因为 one-of 可以多次报告同一个人。这并非难以置信,但它可能不是您想要的。

  • 上一个问题可以通过使用ask human而不是 while 循环来避免,并且让人类 hatch有一定概率是一只狗。一般来说,while 很少是 NetLogo 中的正确解决方案。您应该尝试从主体集的角度进行思考,并使用 while 和索引之类的东西作为最后的手段。

关于netlogo - NetLogo 中链接代理之间的访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com