Random 生成一个范围内的数字,并考虑平均值

Random 生成一个范围内的数字,并考虑平均值,random,netlogo,agent,agent-based-modeling,Random,Netlogo,Agent,Agent Based Modeling,我想在考虑平均值的同时,生成一个范围内的随机数 我有一个生成范围的解决方案: turtles-own [age] to setup crt 2 [ get-age ] end to get-age let min-age 65 let max-age 105 set age ( min-age + random ( max-age - min-age ) ) end 然而,如果我使用这种方法,每个数字都可以以相同的概率生成,这在这种情况下没有多大意义,

我想在考虑平均值的同时,生成一个范围内的随机数

我有一个生成范围的解决方案:

turtles-own [age]

to setup
  crt 2 [
   get-age 
  ]     
end

to get-age
  let min-age 65
  let max-age 105
  set age ( min-age + random ( max-age - min-age ) )
end
然而,如果我使用这种方法,每个数字都可以以相同的概率生成,这在这种情况下没有多大意义,因为65岁的人比105岁的人多。 因此,我想包括一个平均值。我发现了
随机正态分布
,但由于我没有标准差,而且我的值不是正态分布,所以我不能使用这种方法

编辑:

例如:我有两种代理类型。代理人类型1的平均年龄为79岁,年龄范围为67-90岁。代理人类型2的平均年龄为77岁,年龄范围为67-92岁

如果我在NetLogo中实现上述代理类型,则代理类型1的平均年龄为78岁,代理类型2的平均年龄为79岁。原因是,对于每个年龄段,生成的代理数量都是完全相同的。这最终给了我一个错误的结果


[编者按:此处添加了asker的评论。]


我想要一个值的分布,最小值的值最多,最大值的值最少。然而,分布曲线不一定是负线性的。因此,我需要平均值。我需要这种方法,因为有可能一个代理类型的年龄范围为65-90岁,平均年龄为70岁,另一个代理类型的年龄范围相同,但平均年龄为75岁。因此,代理的实际年龄分布看起来会有所不同。

这是一个数学问题,而不是NetLogo问题。你还没有计算出你想要你的分布是什么样子的(很多不同的曲线可以有相同的最小值、最大值和平均值)。如果你不知道你的曲线是什么样子的,那么在NetLogo中编码它是相当困难的

但是,让我们用最简单的曲线。这是两个均匀分布,一个是从最小值到平均值,另一个是从平均值到最大值。虽然它不会沿长度递减,但它会给出所需的最小值、最大值和平均值,并且只要平均值小于从最小值到最大值的中间点,则较高的值的概率较低唯一的问题是从两个均匀分布中选择的概率是多少

如果L是你的最小值(低值),H是你的最大值(高值),M是平均值,那么你需要找到概率p,从较低的范围中选择(1-p)对于上限。但是你知道下限的总概率必须等于上限的总概率必须等于0.5,因为你想在平均值处切换范围,并且平均值也必须是组合分布的平均值。因此,每个矩形的大小相同。即P(M-L)=(1-P)(H-M).解决P问题会让你:

p=(H-M)/(H-L)

将其放入函数:

to-report random-tworange [#min #max #mean]
  let prob (#max - #mean) / (#max - #min)
  ifelse random-float 1 < prob
  [ report #min + random-float (#mean - #min) ]
  [ report #mean + random-float (#max - #mean) ]
end

你应该考虑的另一件事——年龄有多重要?这是一个设计问题。你只需要包括改变代理人行为的因素。如果70岁的代理人与80岁的代理人做出相同的决定,那么你真正需要的是年龄在这个范围内,而不是具体的值。

这是一个数学问题这不是NetLogo的问题。你还没有弄清楚你希望你的发行版是什么样的(很多不同的曲线可以有相同的最小值、最大值和平均值)。如果你不知道你的曲线是什么样的,在NetLogo中编写代码是相当困难的

但是,让我们看一条最简单的曲线。这是两个均匀分布,一个从最小值到平均值,另一个从平均值到最大值。虽然它不会沿长度递减,但它会给出你想要的最小值、最大值和平均值,只要平均值小于从最小值到最大值(如果目标值在减少),唯一的问题是从两个均匀分布中选择的概率是多少

如果L是你的最小值(低值),H是你的最大值(高值),M是平均值,那么你需要找到概率p,从较低的范围中选择(1-p)对于上限。但是你知道下限的总概率必须等于上限的总概率必须等于0.5,因为你想在平均值处切换范围,并且平均值也必须是组合分布的平均值。因此,每个矩形的大小相同。即P(M-L)=(1-P)(H-M).解决P问题会让你:

p=(H-M)/(H-L)

将其放入函数:

to-report random-tworange [#min #max #mean]
  let prob (#max - #mean) / (#max - #min)
  ifelse random-float 1 < prob
  [ report #min + random-float (#mean - #min) ]
  [ report #mean + random-float (#max - #mean) ]
end

你应该考虑的另一件事——年龄有多重要?这是一个设计问题。你只需要包括改变代理人行为的因素。如果70岁的代理人与80岁的代理人做出相同的决定,那么你真正需要的是年龄在这个范围内,而不是具体的值。

这是否回答了你的问题n?包含平均值是什么意思?您实际希望分布是什么样的?因此,您似乎希望从连续分布中采样(1)在区间[
min
max
],(2)从[
min
max
]开始具有单调递减曲线,以及(3)这在
mean
中有一个平均值。我知道你获得该分布的唯一方法是优化这些参数,类似于,在NetLogo中这听起来很简单。@PeterO。你所描述的对我来说似乎很合适。但是,我需要在NetLogo中使用它。否则我会重新安排我的整个模型…这是否符合你的要求估计?包含平均值是什么意思?您实际希望分布是什么样子?因此,您似乎希望从一个连续分布中采样(1)在区间[
min
max
],(2)从[
min
max
]开始有一个单调递减的曲线