我正在NetLogo中为蜜蜂中的食物交换编写一个简单的模型。我绘制了一个直方图以显示在每个刻度上具有不同食物量的蜜蜂的分布。现在,我想在每次运行模型时绘制覆盖直方图的正态分布曲线,即适合直方图条的曲线。我在此命令中使用了一支笔来绘制直方图:histogram [food] of turtles
并编写了这样的功能来添加另一支笔:
to draw-PDF
set-current-plot "OVERALL FOOD DISTRIBUTION"
create-temporary-plot-pen "normal"
set-plot-pen-color red
plot-pen-down
let distsd sqrt ( variance ([food] of turtles) )
let distmean mean [food] of turtles
let multconst Number_of_bees / distsd / sqrt(2 * pi)
let expconst 2 * distsd ^ 2
let b 0
while [ b < Number_of_bees]
[
let f foodofeachbee b
let exparg (- ((f - distmean) ^ 2)) / expconst
let y multconst * exp(exparg)
plotxy f y ]
end
foodofeachbee
是我单独定义的记者。但是运行此命令时,出现错误消息“您的模型太大,无法运行!”
有什么建议吗?
答案 0 :(得分:3)
您将不得不为您的特定变量等修改此代码,但是这里有一个完整的模型,该模型演示了如何做我想做的事情。将此代码复制到空白模型中,并使用间隔为0.05的笔创建名为Test的绘图。该代码添加了第二个笔,该笔具有pdf,该pdf由变量的均值和方差构成,并根据海龟数量进行了调整。
您正在尝试为每只蜜蜂构造一个值。 pdf与单个蜜蜂无关,因此除提取平均值和方差所需值的程度外,绘图过程可以完全忽略它们。
histogram [ value ] of turtles
基本上,此代码计算要绘制的变量的均值和方差,并将步进器的特定值(即x坐标)馈入正态分布pdf函数,以计算图的y值。
对于代码,您要做的就是用要绘制的变量的turtles-own [value]
to testme
clear-all
create-turtles 100
[ set value random-normal 0.5 0.1 ]
plot-normalised
reset-ticks
end
to plot-normalised
let meanPlot mean [value] of turtles
let varPlot variance [value] of turtles
let mult (count turtles / 20) / sqrt (2 * pi * varPlot)
set-current-plot "Test"
create-temporary-plot-pen "normal"
set-plot-pen-color red
plot-pen-down
let stepper 0.025
while [ stepper <= 1 ]
[ plotxy stepper (mult * exp ( - ((stepper - meanPlot) ^ 2) / (2 * varPlot) ) )
set stepper stepper + 0.05
]
end
和min
之类的内容替换此代码执行的间隔[0,1]。在计算多重值时,您可以看到max
。这也需要替换。 20是绘图间隔的长度(在本例中为1)除以每个直方图条的宽度(在本例中为0.05)。
因此,代码的最后一部分必须类似于:
count turtles / 20