Algorithm 从区间返回数的随机函数

Algorithm 从区间返回数的随机函数,algorithm,math,random,statistics,probability,Algorithm,Math,Random,Statistics,Probability,如何实现从间隔1..1000返回随机数的函数 在这种情况下,有一个数字N决定达到更高数字或更低数字的可能性 其行为应如下所示: e、 g 如果N=0,我们将生成许多倍的随机数,我们将得到一个特定的平衡,从区间1到1000的每个数都有相同的机会。 如果N=2321,我称之为正因子,则很难实现小数值,通常会生成大于900的数值,有时会生成接近500的数值,很少生成小于100的数值。正因子的最大值表示高数值的最大概率 如果N=-2321负因子,则与正因子相反 很明显,生成的数字将为给定的N条特定特性曲

如何实现从间隔1..1000返回随机数的函数 在这种情况下,有一个数字N决定达到更高数字或更低数字的可能性

其行为应如下所示: e、 g

如果N=0,我们将生成许多倍的随机数,我们将得到一个特定的平衡,从区间1到1000的每个数都有相同的机会。 如果N=2321,我称之为正因子,则很难实现小数值,通常会生成大于900的数值,有时会生成接近500的数值,很少生成小于100的数值。正因子的最大值表示高数值的最大概率 如果N=-2321负因子,则与正因子相反 很明显,生成的数字将为给定的N条特定特性曲线创建。你能告诉我如何实现这个目标,我可以创建什么样的曲线吗?我这里有什么可能性?你将如何限制积极和消极因素等


感谢您的帮助

如果您生成一个统一的随机数,然后将其提高到幂>1,它将变小,但保持在[0,1]范围内。如果将其提升到大于0但小于1的幂次,它将变大,但保持在[0,1]范围内

因此,在生成随机数时,可以使用指数选择幂

def biased_random(scale, bias):
  return random.random() ** bias * scale

sum(biased_random(1000, 2.5) for x in range(100)) / 100
  291.59652962214676  # average less than 500

max(biased_random(1000, 2.5) for x in range(100))
  963.81166161355998  # but still occasionally generates large numbers

sum(biased_random(1000, .3) for x in range(100)) / 100
  813.90199860117821   # average > 500

min(biased_random(1000, .3) for x in range(100))
  265.25040459294883   # but still occasionally generates small numbers

如果生成一个统一的随机数,然后将其提高到幂>1,它将变小,但保持在[0,1]范围内。如果将其提升到大于0但小于1的幂次,它将变大,但保持在[0,1]范围内

因此,在生成随机数时,可以使用指数选择幂

def biased_random(scale, bias):
  return random.random() ** bias * scale

sum(biased_random(1000, 2.5) for x in range(100)) / 100
  291.59652962214676  # average less than 500

max(biased_random(1000, 2.5) for x in range(100))
  963.81166161355998  # but still occasionally generates large numbers

sum(biased_random(1000, .3) for x in range(100)) / 100
  813.90199860117821   # average > 500

min(biased_random(1000, .3) for x in range(100))
  265.25040459294883   # but still occasionally generates small numbers

这一问题严重未得到明确说明。正如所提到的,有一百万种方法可以解决这个问题

不要武断地使用积极和消极的价值观,试着思考它们背后的含义。IMHO,贝塔分布是你应该考虑的。通过选择参数\alpha和\beta,您应该能够适当地调节分布的行为

查看使用某些\alpha和\beta可以得到什么形状


这一问题严重未得到明确说明。正如所提到的,有一百万种方法可以解决这个问题

不要武断地使用积极和消极的价值观,试着思考它们背后的含义。IMHO,贝塔分布是你应该考虑的。通过选择参数\alpha和\beta,您应该能够适当地调节分布的行为

查看使用某些\alpha和\beta可以得到什么形状


首先让我们决定从[0,1]中选取数字,因为它使事情变得更简单。 n是表示分布02321或-2321的数字,如示例所示 我们只需要n>0的解,因为如果n<0。你可以取n的正数,然后从1中减去

区间[0,1]中的一个简单概念是x^n。或者至少是这种形状 计算是对x^n进行积分,然后是x^n+1/n+1 因为CDF最后必须是1,在我们的例子中是1,所以我们的最终CDF大于x^n+1,并且适当加权 为了从中产生这种分布,我们必须计算

分位数函数只是CDF的倒数,在我们的例子中就是这样。x^1/n+1

就这样。您的QF为x^1/n+1

要从[0,1]生成数字,您必须从编程语言中最常见的[0,1]随机函数中选取均匀分布的D random 比这个加1/n+1的幂

我看到的唯一问题是,正确计算1-x^1/-n+1可能是个问题,其中n<0,但我认为可以使用log1p,
因此,如果n让我们从[0,1]中选择数字,因为它使事情变得更简单,那么它就变成了explog1p-x^1/-n+1。 n是表示分布02321或-2321的数字,如示例所示 我们只需要n>0的解,因为如果n<0。你可以取n的正数,然后从1中减去

区间[0,1]中的一个简单概念是x^n。或者至少是这种形状 计算是对x^n进行积分,然后是x^n+1/n+1 因为CDF最后必须是1,在我们的例子中是1,所以我们的最终CDF大于x^n+1,并且适当加权 为了从中产生这种分布,我们必须计算

分位数函数只是CDF的倒数,在我们的例子中就是这样。x^1/n+1

就这样。您的QF为x^1/n+1

要从[0,1]生成数字,您必须从编程语言中最常见的[0,1]随机函数中选取均匀分布的D random 比这个加1/n+1的幂

我看到的唯一问题是,正确计算1-x^1/-n+1可能是个问题,其中n<0,但我认为可以使用log1p,
因此,如果你尝试了什么,它就会爆炸1p-x^1/-n+1?@Woot4Moo这是一个理论知识问题,编程语言在这里并不重要。我对理论非常了解,我的问题仍然有效。@Woot4Moo我不太熟悉随机函数,所以我在这里提问。我试着

首先搜索。我明白了,我在下面有一个简短的解释,如果有什么不清楚的地方,请告诉我,我会更新。你到底尝试了什么?@Woot4Moo这是一个理论知识问题,编程语言在这里并不那么重要。我对理论非常了解,我的问题仍然有效。@Woot4Moo我不太熟悉随机函数,所以我在这里问。我试着先搜索。我明白了,我在下面有一个简短的解释,如果有任何不清楚的地方,请告诉我,我会更新。不,这是不正确的。看起来您正在查看维基百科中随机数的定义:大多数计算机编程语言都包含声称是随机数生成器的函数或库例程。它们通常被设计为提供一个随机字节或字,或一个均匀分布在0和1之间的浮点数。上面的问题可以通过人工解决,因此将其与计算机绑定是不合适的。更不正确的是,声明它将在[0,1]范围内,警告是它不是通过计算机完成的。我不知道您的反对意见是什么。他要求使用一种算法生成具有特定分布的分布,我向他演示了如何将统一的RNG转换为具有符合规范的分布的RNG。我的反对意见是你将其绑定到计算机RNG,而不是理论上的RNG。这是我唯一的抱怨,这是因为他在最初的帖子上给我留下了一条评论,说它不是一个编程解决方案。@Woot:评论说它不是特定于语言的,但可以肯定的是,他会用代码来做。不管他用什么语言,都可以很安全地假设它带有一个统一的RNG。。。我想我从来没有见过一个不这样的答案。@rrenaud这正是我一直在寻找的答案。展示一些生成这些数字的方法,这就是Python中使用的方法,这会更好。我必须进行实验,看看画了哪些曲线。谢谢,这是不对的。看起来您正在查看维基百科中随机数的定义:大多数计算机编程语言都包含声称是随机数生成器的函数或库例程。它们通常被设计为提供一个随机字节或字,或一个均匀分布在0和1之间的浮点数。上面的问题可以通过人工解决,因此将其与计算机绑定是不合适的。更不正确的是,声明它将在[0,1]范围内,警告是它不是通过计算机完成的。我不知道您的反对意见是什么。他要求使用一种算法生成具有特定分布的分布,我向他演示了如何将统一的RNG转换为具有符合规范的分布的RNG。我的反对意见是你将其绑定到计算机RNG,而不是理论上的RNG。这是我唯一的抱怨,这是因为他在最初的帖子上给我留下了一条评论,说它不是一个编程解决方案。@Woot:评论说它不是特定于语言的,但可以肯定的是,他会用代码来做。不管他用什么语言,都可以很安全地假设它带有一个统一的RNG。。。我想我从来没有见过一个不这样的答案。@rrenaud这正是我一直在寻找的答案。展示一些生成这些数字的方法,这就是Python中使用的方法,这会更好。我必须进行实验,看看画了哪些曲线。多谢了,绿色曲线看起来很好factors@xralf好红色曲线是绿色的补充,即对于负面因素,绿色曲线对于正面因素看起来很好factors@xralf好红色曲线是绿色曲线的补充,即表示负面因素