我是Netlogo的初学者,我的问题如下:首先,我有一些植物(1000只海龟),这些植物在胸高和身高上有两个变量直径。我想使用以下方程式估算竞争程度(请参阅链接): 该公式量化了在时间(t)上与给定树(i)相比,其基础面积大于或相等的所有树的基础面积的总和。它是基础面积百分树(i)的相对值,表示相对优势,其中(G(t))是时间(t)时给定林分的每公顷基础面积。单个树木的基础面积是其茎的横截面积,通常在地面以上1.3 m处测量。为方便起见,通常使用圆的面积公式根据杆直径计算基面积。每公顷的基础面积是一种密度度量,将树木的数量及其在特定区域中的大小都考虑在内。计算此方程式:第一步是应将胸高处的直径从最小到最大排序,然后应计算每种植物的基础面积,并计算大于参考树(最小)的所有树木的基础面积之和。计算所有大于前两棵最小树木的所有树木的基础面积的以下树木总和,依此类推。 最后一步:最小的树具有最大值,最大的直径具有(0)。我试图以这种方式编写BAL公式,但是没有用,我对所有海龟都得到了相同的结果,即使dbh相同,结果也应该是累积的,如何使函数对所有海龟都起作用?即,该函数应排除第一个乌龟,然后是前两个乌龟,然后是firtt三个乌龟,然后是前四个乌龟,依此类推:
to calc-treeba
set ba (pi * (dbh / 2) ^ 2 ) ; ba : tree basal area , pi :3.14, dbh = diameter at breast height
end
to calc-bal-for-all-trees ; BAL as non-spatially explicit index
set bal sum ([ba] of turtles with [ba > [ba] of myself])
end
下面您可以找到如何在R中计算BAL,但是很遗憾,这没有帮助我在Netlogo中应用它。
R代码,用于计算较大树木的基础面积。最好在R中定义一个可以在R脚本的多个实例中使用的函数。这样的功能看起来像下面框中给出的代码(请参阅链接):
答案 0 :(得分:1)
您是否可能将BAL设置为全局变量而不是turtles-own
变量?我的代码没问题,假设,calc-bal-for-all-trees
由海龟而不是观察员调用。例如,使用以下设置:
turtles-own [ ba bal ]
to setup
ca
crt 10 [
set ba 10 + random 50
set shape "tree"
set color green
setxy random-xcor random-ycor
set size ba / 10
]
reset-ticks
end
您可以像这样运行代码:
to get-bal
ask turtles [
set bal sum [ba] of turtles with [ ba > [ba] of myself ]
]
end
当我用类似的东西检查它时:
to check-bal
foreach sort-on [ba] turtles [
current-turtle ->
ask current-turtle [
show ( word "BA: " ba ", BAL: " bal )
]
]
end
我得到如下输出:
(turtle 4): "BA: 18, BAL: 301"
(turtle 5): "BA: 21, BAL: 280"
(turtle 3): "BA: 23, BAL: 257"
(turtle 8): "BA: 27, BAL: 230"
(turtle 1): "BA: 29, BAL: 201"
(turtle 0): "BA: 30, BAL: 171"
(turtle 6): "BA: 35, BAL: 136"
(turtle 2): "BA: 37, BAL: 99"
(turtle 7): "BA: 49, BAL: 50"
(turtle 9): "BA: 50, BAL: 0"
是按照您的期望吗?