伪随机数的介绍
伪随机数是用确定性的算法计算出来自[0.1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并能通过随机数检验的伪随机数,以保证计算结果的随机性。伪随机数生成方法1、直接法,根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。2、逆转法,假设U服从[0.1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。该方法原理简单、编程方便、适用性广。3、接受拒绝法,假设希望生成的随机数的概率密度函数为f,则首先找到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。因此,伪随机数生成器一般采用逆转法,其基础是均匀分布,均匀分布PRNG的优劣决定了整个随机数体系的优劣。
伪随机和真随机
真伪随机其实分别指的是几率和概率 很久以前流传着这样一则笑话:一个身患重病的人决定去动手术。在手术之前,他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%。”他很惊慌,但是医生说:“没事的,在你之前我已经治死过99个人了。” 这是一则嘲笑那些不懂“概率”的人的笑话,却讲出了“真随机”和“伪随机”之间的区别。 1.随机性:完全紊乱; 2.不可预测性:从现有号码,无法推断下一个数字; 3.不可重复性:随机数之间没有重复。 真随机数是伴随物理实验,例如:掷硬币、掷骰子、电子元件噪声、核裂变等,其结果符合三个特点。 伪随机数是通过某种算法,获取随机值,不是真的很随机。 伪随机数分为强伪随机数和弱伪随机数。 1.强伪随机数:接近真实随机数,令人满意的特性。随机性与不可预测性,不可预知的。 2.弱伪随机数:满足随机性,可预测的。 在游戏当中我们一直提到的“真随机”和“伪随机”,到底是什么意思? 我们通常说的真随机又名“纯随机”(True Random Distribution),就是我们平常一直说的那种、一般意义上的“随机”。 在真随机中,每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改变。比方说某款游戏为了吸引用户,拥有这么一个随机抽卡系统:每次抽卡时,都有1%的几率抽出SSR卡片,这个概率服从真随机分布。 回到我们最开始说的那个“治死99个”的笑话:我们一眼就能看出这个笑话的不合理性。但在抽卡游戏中,我们的大脑瞬间失去理智。有相当一部分玩家认为:我连抽100次,总能抽到这张卡吧! 实际上,连抽100次却抽不出1%的SSR卡的几率是为(1-0.01)^100=36.6%,甚至还稍稍超过了1/3。将连抽数字上升至300,也仍有4.9%的几率。 换句话说,假设有10000个玩家连抽100次,就有约3660个玩家抽不出这张SSR;10000个玩家连抽300次,也仍有约490个玩家抽不出这张SSR——这对玩家的游戏体验来说可以说是毁灭性的打击。 设计者们提出了“伪随机”的概念:在不确定性的随机事件当中,通过一系列算法使随机事件均匀分布在多次事件当中,尽可能减少或消除极端情况的发生,以提高玩家的游戏体验。 制造“伪随机”的方法有很多, N表示当前攻击的次数,P(N)表示当前攻击的暴击率,C为概率增量。如果我们这次攻击产生了暴击,则需要将 N 重置为 1,如果这次攻击没有产生暴击,则 N + 1。 为了便于理解,这里直接给出一个具体例子: 设我们当前玩家角色暴击率还是0.5,那么对于 PRD算法,此时的 C = 0.3 可以看到,使用 PRD 算法,对于攻击是否会暴击这一问题,仍然是存在着随机性即玩家的运气因素的,但即使是运气最差的玩家,仍然也会在第四次攻击时产生暴击,因此PRD算法可以在保存随机性的同时,减少玩家运气因素对游戏结果的影响。 真随机: 有一天,小明在的班级上举办了一次抽奖活动。这个班级有40个学生,所以为了公平起见,保证每个学生都有1/40的几率中奖,老师准备了40个相同的纸盒,每个纸盒中都有40张纸条,有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖,但每个学生是否中奖并不受其他学生的影响。在极端情况下,这个班上可能40个学生都能中奖。这就是真随机。 伪随机: 小明班上举办了抽奖活动。为了公平起见,老师准备了1个纸盒,纸盒中有40张纸条,只有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖——但是显而易见,这个班上有且仅有一名学生能够中奖。一名学生在中奖后,余下的所有学生中奖几率都会减少至0。这就是伪随机。
伪随机数的生成方法
一般地,伪随机数的生成方法主要有以下3种:(1) 直接法(Direct Method),根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。(2) 逆转法(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。该方法原理简单、编程方便、适用性广。(3)接受拒绝法(Acceptance-Rejection Method):假设希望生成的随机数的概率密度函数(PDF)为f,则首先找到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。因此,伪随机数生成器(PRNG)一般采用逆转法,其基础是均匀分布,均匀分布PRNG的优劣决定了整个随机数体系的优劣[7]。下文研究均匀分布的PRNG。