是否可以在netlogo中创建具有最大值和最小值的正态分布?

问题描述 投票:0回答:2

假设我有 X 个补丁,并且补丁有一个名为“补丁质量”的补丁变量,其值介于 0 和 1 之间。我想按照正态分布为该变量生成一个介于 0 和 1 之间的随机数。

当你在NetLogo中设置正态分布时,你需要一个均值和一个标准差:

random-normal mean standard-deviation

我的正态分布的平均值是 0.5(0 和 1 的平均值),但是有没有办法选择一个标准偏差,这样 NetLogo 就不会生成补丁质量低于 0 和高于 1 的补丁?

总而言之,我想要的是一个正态分布,其中patch-quality的最小值为0,最大值为1,平均值为0.5。

这可能吗?

netlogo
2个回答
1
投票

正态分布函数的签名永远不存在,因为这不是它们在概念上的使用方式。然而,高于或低于平均值超过标准偏差 3 倍的值很少发生。通过将平均值设置为 0.5 并将标准偏差设置为 +- 0.15,高于 1 或低于 0 的数字应该不会出现太多。如果你想加强这一点,你可以简单地添加另一行代码:

ask patches with [number < 0] [set number 0]

>1 个案例也是如此。这应该接近你的要求。


0
投票

这是 ABM 中的一个真正问题,因此我们在本书(第 15.3.2 节) 中解决了它。尽管高于和低于 3 个标准偏差的值很少见......我们经常绘制成千上万的值,因此它们发生。

上一个答案的解决方案有效,我用了很多年。请注意,现在您的值不会真正遵循正态分布。

我也经常改用三角分布。从三角分布中抽取的所有值都在指定范围内,并且靠近中心的值更有可能。它还有一个额外的优点,即最可能的值(众数)不必位于范围的中心。

这是我使用的三角分布程序(从维基百科偷来的算法):

to-report random-triangular [a-min a-mode a-max]
  ; Return a random value from a triangular distribution
  ; Method from https://en.wikipedia.org/wiki/Triangular_distribution#Generating_Triangular-distributed_random_variates
  ; Obtained 2015-11-27

  if (a-min > a-mode) or (a-mode > a-max) or (a-min >= a-max)
   [ error (word "Random-triangular received illegal parameters (min, mode, max): " a-min " " a-mode " " a-max) ]

  let a-rand random-float 1.0
  let F (a-mode - a-min) / (a-max - a-min)

  ifelse a-rand < F
  [ report a-min + sqrt (a-rand * (a-max - a-min) * (a-mode - a-min)) ]
  [ report a-max - sqrt ((1 - a-rand) * (a-max - a-min) * (a-max - a-mode)) ]

end

史蒂夫·雷尔斯巴克

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.