如何在 NetLogo 中创建 "random-pareto"?

How to create a "random-pareto" in NetLogo?

由于我不太精通数学,所以我正在努力实现 NetLogo 中的随机数生成器,它大致遵循帕累托分布。这是这个 的后续问题,我想用 "random-pareto" 之类的东西代替 random-float,以便让事件按照帕累托分布在模型中发生(思考模拟地震及其破坏程度)。

有问题的代码是:

  ask hits [
     let %draw (random-float 100)
     let %strength 0  ;; no damage
     if (%draw < 50) [set %strength (%strength + 1)]  ;;1 for little damage
     if (%draw < 10) [set %strength (%strength + 1)]  ;;2 for middle damage
     if (%draw < 5) [set %strength (%strength + 1)]  ;;3 for strong damage
     if (%draw < 1) [set %strength (%strength + 1)]  ;;4 for complete destruction

     ifelse pcolor = red [die]
     [ ask n-of %strength patches [ set pcolor red ]]
   ]

我受到这个问题的启发 here to do the same in R and the Netlogo Dictionary here 关于 random-exponential 可以写成 (- mean) * ln random-float 1.0 的事实。

有人可以帮忙吗?

您需要的是从均匀分布(随机浮点数)转换为您想要的分布的方程式。对于 stackexchange 统计数据,这可能是一个更好的问题。然而,根据维基百科,公式是:

$$ T = \frac{m}{U^\frac{1}{\alpha}} $$

其中 $U$ 是统一输入,$T$ 是帕累托分布随机数,$m$(最小值)和 $\alpha$ 是分布的参数。如果这是正确的,您可以在 NetLogo 中编码为

to-report random-pareto [alpha mm]
  report mm / ( random-float 1 ^ (1 / alpha) )
end

假设您想要一个最小值为 1 且 alpha 为 3 的分布的随机 Pareto,然后您可以使用代码 random-pareto 3 1

获得一个