gpt4 book ai didi

hashtable - Netlogo::嗜血的食人乌龟和我自己/ self 困惑

转载 作者:行者123 更新时间:2023-12-02 12:46:51 25 4
gpt4 key购买 nike

这里是新的 NetLogo 用户和首次发帖者,我手上有一些食人海龟。

关于我的模型:

我的海龟有体型(bsize)和品种(雄性、雌性、幼年海龟)。它们以随机的方式移动并在斑 block 上相遇。当两只海龟降落在同一 block 土地上时,我的小动物会互相打量对方,并根据较大海龟品种特有的同类相食概率 (PrCan) 以及两者之间的体型比例 (bsize_ratio),较大的一只会吃掉较小的一个。

我认为这不相关,但我使用 table:make 根据我发现的说明 on this stack overflow answer. 创建了一个由 3 个列表组成的表(PrCanTable),其中有两个键(体型比例、品种和同类相食的概率)。

继续,较大的海龟在表 (PrCanTable) 中查找同类相食的概率 (PrCanT),然后选择一个随机数 (random-float) 并将其与概率 (PrCanT) 进行比较。如果随机数小于或等于概率,小乌龟就死了。太悲伤了!

不幸的是,我的嗜血乌龟行为不端。我遇到了一个问题:

我自己没有可以引用的代理。fa 25 运行 MYSELF 时出错 由过程 CANNIBALIZE 调用 由过程 GO 调用 由按钮“go”调用

NetLogo 有助于突出显示我自己在代码中的最后一个实例...但我不知道为什么。我觉得这是我自己对自己vs self 的理解有问题。我已经尽可能多地阅读了,但说实话,我仍然感到困惑。谁能看一下这段代码并告诉我吗?

to-report get-PrCan_T [ bsize_ratio_T breed_T ]
report table:get (table:get PrCanTable bsize_ratio_T) breed_T
end

to cannibalize
if ( any? turtles-here with [bsize > [bsize] of myself])
and ( random-float 1 <= get-PrCan_T ( precision( bsize / bsize of myself ) 1 ) ( [breed] of self ) )
[die]
end

最佳答案

是的,selfmyself一开始会让人感到困惑,但是一旦掌握了窍门,其实并不难。您需要了解的是,每段 NetLogo 代码都会运行到一个“上下文”中。默认情况下,该上下文是观察者,但某些原语可以引入新的上下文。

ask是引入新上下文的最明显方法:传递给 ask 的命令 block (由 [] 分隔)将 NetLogo 置于海龟的上下文中。在这种情况下,self指当前乌龟。

但有时您会在现有的乌龟上下文中引入新的乌龟上下文!在新的环境中,self含义发生变化:现在指代内部上下文中的乌龟。但是如果您仍然想从外部上下文引用海龟怎么办?这就是myself是为了。

假设cannibalize是一个由乌龟运行的程序,您使用 myselfturtles-here with [bsize > [bsize] of myself]正确的是:乌龟跑with block 是 self (你不需要指定)和乌龟跑cannibalize (“外”海龟)是 myself 。内部上下文由 with 介绍.

但是在你的 if 的第二部分条件( and 之后的所有内容)不再有内部上下文:您不在 with 内不再阻止。所以myself不再定义。只有self .

由于您试图将所有内容打包在同一个长 if 中,因此您的代码也更难调试。健康)状况。尝试使用多个局部变量将其拆分:

to cannibalize
let bigger-turtles-here turtles-here with [ bsize > [ bsize ] of myself ]
if any? bigger-turtles-here [
let cannibal one-of bigger-turtles-here
let ratio precision ([ bsize ] of cannibal / bsize) 1
let p get-PrCan_T ratio breed
if random-float 1 <= p [ die ]
]
end

最后一点:在你的版本和我的版本中,乌龟运行 cannibalize程序就是被吃掉的程序!这很令人困惑。我要么将该过程重命名为 get-cannibalized或者反过来,让运行程序的乌龟负责吃东西。 (命名很重要!)

关于hashtable - Netlogo::嗜血的食人乌龟和我自己/ self 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35605580/

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