如何在 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
获得一个
由于我不太精通数学,所以我正在努力实现 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