- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里是新的 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
最佳答案
是的,self
和myself
一开始会让人感到困惑,但是一旦掌握了窍门,其实并不难。您需要了解的是,每段 NetLogo 代码都会运行到一个“上下文”中。默认情况下,该上下文是观察者,但某些原语可以引入新的上下文。
ask
是引入新上下文的最明显方法:传递给 ask
的命令 block (由 [
和 ]
分隔)将 NetLogo 置于海龟的上下文中。在这种情况下,self
指当前乌龟。
但有时您会在现有的乌龟上下文中引入新的乌龟上下文!在新的环境中,self
含义发生变化:现在指代内部上下文中的乌龟。但是如果您仍然想从外部上下文引用海龟怎么办?这就是myself
是为了。
假设cannibalize
是一个由乌龟运行的程序,您使用 myself
在turtles-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/
我是一名优秀的程序员,十分优秀!