Random 加权随机数(无预定义值!)

Random 加权随机数(无预定义值!),random,game-maker,Random,Game Maker,目前我需要一个函数,它给出一个加权的随机数。 它应该选择两个双倍/整数之间的随机数(例如4和8),而中间值(6)将平均出现,大约是限幅器值4和8的两倍。 如果这只是关于整数,我可以用变量和自定义概率预定义值,但我需要函数提供一个至少有2位数字的双精度(表示数千个不同的数字) 我使用的环境是“游戏制作者”,它提供各种基本的随机生成器,但不是加权的 有没有人能带领我朝着正确的方向前进?如何实现这一目标 提前谢谢 两个独立的连续均匀(0,1)的总和,U1和U2,在0和2之间具有连续对称的三角形分布。分

目前我需要一个函数,它给出一个加权的随机数。 它应该选择两个双倍/整数之间的随机数(例如4和8),而中间值(6)将平均出现,大约是限幅器值4和8的两倍。 如果这只是关于整数,我可以用变量和自定义概率预定义值,但我需要函数提供一个至少有2位数字的双精度(表示数千个不同的数字)

我使用的环境是“游戏制作者”,它提供各种基本的随机生成器,但不是加权的

有没有人能带领我朝着正确的方向前进?如何实现这一目标


提前谢谢

两个独立的连续均匀(0,1)的总和,
U1
U2
,在0和2之间具有连续对称的三角形分布。分布的峰值在1,两端逐渐变细为零。我们可以通过缩放2并添加4,即
4+2*(U1+U2)
轻松地将其转换为(4,8)范围

但是,您不希望端点的高度为零,而是希望达到峰值高度的一半。换言之,你需要一个三角形在一个长方形的底座上(即,均匀的),在中间的顶点和高度<代码> 2H < /代码>中,高度为代码<代码> h <代码>。这使生活变得简单,因为三角形必须在矩形底部上方有一个高度峰值
h
,而高度
h
的三角形有相同底部和高度
h
的矩形面积的一半。因此,你的概率的2/3在基数中,1/3在三角形中

将上述元素结合起来,可以得到以下伪码算法。如果
rnd()
是返回连续一致(0,1)随机数的函数调用:

define makeValue()
   if rnd() <= 2/3    # Caution, may want to use 2.0/3.0 for many languages
      return 4 + (4 * rnd())
   else
      return 4 + (2 * (rnd() + rnd()))
define makeValue()

如果rnd()两个独立的连续均匀(0,1)的和,
U1
U2
,在0和2之间具有连续的对称三角形分布。分布的峰值在1,两端逐渐变细为零。我们可以通过缩放2并添加4,即
4+2*(U1+U2)
轻松地将其转换为(4,8)范围

但是,您不希望端点的高度为零,而是希望达到峰值高度的一半。换言之,你需要一个三角形在一个长方形的底座上(即,均匀的),在中间的顶点和高度<代码> 2H < /代码>中,高度为代码<代码> h <代码>。这使生活变得简单,因为三角形必须在矩形底部上方有一个高度峰值
h
,而高度
h
的三角形有相同底部和高度
h
的矩形面积的一半。因此,你的概率的2/3在基数中,1/3在三角形中

将上述元素结合起来,可以得到以下伪码算法。如果
rnd()
是返回连续一致(0,1)随机数的函数调用:

define makeValue()
   if rnd() <= 2/3    # Caution, may want to use 2.0/3.0 for many languages
      return 4 + (4 * rnd())
   else
      return 4 + (2 * (rnd() + rnd()))
define makeValue()

如果有人需要在Game Maker(或其他语言)中将rnd()作为通用功能:

if random(1) <= argument0
   return argument1 + ((argument2-argument1) * random(1))
else
   return argument1 + (((argument2-argument1)/2) * (random(1) + random(1)))

if random(1)对于有人需要在Game Maker(或其他语言)中将此作为通用功能的情况:

if random(1) <= argument0
   return argument1 + ((argument2-argument1) * random(1))
else
   return argument1 + (((argument2-argument1)/2) * (random(1) + random(1)))

if random(1)非常感谢!有趣的概念和工作良好@龙族玩家我不能为任何一件作品申请荣誉。对随机变量求和称为卷积,从组成部分组装分布称为合成。这两种技术都是仿真界的知名技术。非常感谢!有趣的概念和工作良好@龙族玩家我不能为任何一件作品申请荣誉。对随机变量求和称为卷积,从组成部分组装分布称为合成。这两种技术都是仿真界的知名技术。