如何在NetLogo中生成0-1范围的指数分布(均值0.13)
在NetLogo生成0-1范围的截断指数分布随机数
你可以用两种方法解决这个问题,按需选择即可:
方法一:简单截断重生成
你设置的均值是0.13,指数分布数值超过1的概率极低(大概万分之4.6),直接生成后判断,超出范围就重新生成就行,代码简单直观:
set patch-quality random-exponential 0.13 while [patch-quality > 1] [ set patch-quality random-exponential 0.13 ]
因为触发循环的概率极低,完全不会影响模型运行效率。
方法二:逆变换法生成严格截断分布
如果需要严格的截断指数分布(把原指数分布0到1之外的部分剔除,剩余部分归一化),可以用逆变换法直接生成,不需要循环:
let max-cdf 1 - exp(-1 / 0.13) let u random-float max-cdf set patch-quality -0.13 * ln(1 - u)
原理是先算出原指数分布在x=1处的累积分布值,生成0到该值之间的均匀随机数,再通过指数分布的逆累积函数算出对应的patch-quality,这样生成的数值必然在0到1之间,完全符合截断后的指数分布特征。
内容的提问来源于stack exchange,提问作者JoseNav
相关产品推荐
相关产品推荐

