【发布时间】:2020-05-28 16:58:25
【问题描述】:
我正在模拟蚜虫在有花缘的农田中的分布情况。我有几个列表设置为补丁变量,如下所示:
set nl n-values 20 [0];; number of larvae per age (in days)
set il n-values 20 [0.0001];; individual larvae growth per age (in days)
set il_growth n-values 20 [0];; growth of larvae per age (in days)
我给出的值是 0.0001 而不是 0,因为之前我收到了关于 0 的错误。
每个时间戳都会发生以下情况:
to time
set nl fput item 3 peggs nl ;every day the amount of 4 days old eggs are added to the number of larvae
set il fput ((item dtl peggs) * weight_hatch) il ;the weight of the larvae that just hatched are calculated by multiplying nl by the weight they have when they hatch
set il_growth (il * e ^ (g * (aphids)*(1 - (il / weight_max))));;growth individual predator larvae in every age class
set larvae nl * il_growth; the total biomass of al larvae in a patch
end
il_growth 的 for 来自文献,我知道 e、g、aphids 和 weight_max 等参数/变量不是问题,因为在我介绍 il 之前这个公式可以正常工作。
我还不确定生物质的方法是否是最好的方法(因为我将在下面描述 il 的错误),但我认为乘法是可能的,因为 nl 和 il 都是长度相同。
当我对代码进行语法检查时,它不会给出任何错误。但是当我运行它时,它会显示以下内容: * 预期输入是一个数字,但得到了列表 [0 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E -4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4] 代替。 它指向的 * 是 il_growth 公式中的第一个。
我认为这可能是因为代码需要 il 是数字而不是列表。然后我在谷歌上发现这可以通过函数'foreach'或'map'来解决。
用 foreach 我试过这个:
set il_growth foreach il (il * e ^ (g * (aphids)*(1 - (il / weight_max))))
这给出了错误“设置预期的 2 个输入”。我还用foreach 尝试了许多其他配置,但都没有成功。
用地图我试过这个:
set il_growth map report_il il
to-report report_il
report (il * e ^ (g * (aphids)*(1 - (il / weight_max))))
end
这给了我与以前相同的错误:* 预期输入是一个数字,但得到了列表 [0 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4 1.0E-4]。
【问题讨论】:
-
我试图让您的问题可读。我格式化了代码并将一些冗长的评论移到了文本区域,以便代码可读。请检查问题是否仍然是您想要的。
标签: netlogo