- 64
- 0
- 约1.36万字
- 约 19页
- 2018-05-11 发布于河南
- 举报
随机数及随机数生成器
我所关注的随机数及其生成器
化学物理系(003) S 马瑞
作为化学物理系从事计算化学和计算物理方面工作的科学工作者,我们在科研中经常用到随机数及其生成器,确切的说应该是“伪随机数”和“伪随机数生成器”!特别是在计算物理学中的蒙特卡罗模拟,还有对其它许多较为复杂的模型的动力学过程模拟……。在这些计算所需的程序中几乎都离不开伪随机数生成器,而且许多对计算机硬件、编程、算法不太在意的同行们,往往就把这里的“伪随机数”当作真正的随机数用了。
我曾经听说过一个故事:有一位计算物理学家在使用蒙特卡罗模拟时,发现其所得的结果总是无法与实验结果相吻合。在排除了其它一切可能之后,他把注意力集中在自己所用的伪随机数生成器上,经过一系列繁琐的数学变换,他最终发现——自己所求解的计算物理模型涉及到高维空间中的一组平行等距平面切分高维球体的问题,而这个伪随机数生成器产生的坐标所确定的点,恰恰不能在这个高维球面上均匀分布!
我的亲身经历
其实,我自己也亲眼见证过类似的事件:大三的时候,我曾经写过一个包含有随机过程的Turbo C程序,它能一边模拟一个模型的演化过程,一边实时将模型的当前状态绘制在屏幕上。刚开始,我使用一个伪随机数生成器来产生连续的伪随机数序列,以此作为二维平面上点的一对又一对坐标值,结果竟然在屏幕的实时监控动画上发现——“随机”确定的一连串点,竟然在平面上近似沿着一条直线散布!这明显会向我的模型演化结果中引入奇异的现象,当然这些现象将是不真实的。
后来,我不时用系统时钟初始化伪随机数生成器,从而产生没有明显分布规律的二维随机点,至少在表面上获得了合乎需要的二维均匀分布。但是自此以后,我一直相当关注随机数及其生成器的问题,特别注意如何有效避免“伪随机数数列”的内在规律对实际使用的干扰,当然还留意一些产生真正随机数而不是“伪随机数”的方法;另一方面,我们从事理论化学和统计物理方面研究的人,常常会对涉及到热力学函数“熵”、“焓”、“内能”的问题感兴趣,恰好关于随机数的研究也可以从“信息熵”的角度来分析。
下面,我将主要围绕三个方面谈谈自己的认识:伪随机数的产生方法,真随机数的产生方法,从信息熵的角度来考察计算程序中的随机数与伪随机数。
谈到伪随机数,就不得不首先讨论随机数与随机性。什么是随机性?如何证明一个数列是随机数序列?答案是:迄今为止,没有人能给“随机性”作一个恰当的定义,我们也无法证明一个数列的随机性;当然,我们可以证明一个数列不是随机数序列,只要找出一个简单的规律能描述该序列,显然它就不会是真正的随机数序列——但是,如果你或者全人类都没有找出简单的规律,也不能说它就是真正的随机数序列,因为也许只不过是因为这个规律很难找,所以我们迄今尚未找到规律而已。
举个例子:
425270376470090434957375449439 ,它是随机数序列吗?也许很难找到规律,但是,请把每一位减去“1”,你将得到:
314159265358979323846264338328 ,它只不过是圆周率π的前30位有效数字。换句话说,上述序列425270376470090434957375449439是“π前30位有效数字逐一加1”这一简单规律构造的序列,它显然不是真正的随机数列。
现代自然科学中,有两类问题可以产生随机数。一类是量子力学,由它产生的随机数至少目前来看无法证明为伪随机数,因为我们迄今为止没有办法揭示隐藏在量子不确定性之下的内在规律,甚至在量子不确定性导致的量子随机现象之下有没有更深层的规律——也就是“隐变量”是否存在,理论物理学家们对此都还没有统一的认识。另一类是浑沌动力学系统,它带来的是“确定性随机现象”,换句话说就是由明确而简单的规律产生的随机数序列,这显然是伪随机数,但是需要看到,由于非线性系统的初值敏感性,目前的科学技术很难从已知的浑沌系统伪随机数序列中反推出产生它的规律!所以某些时候并不把浑沌动力学系统产生的随机数称为“伪随机数”。
除了上述两类情况,其它的随机数产生办法都得归结为伪随机数生成器。下面着重讨论纯软件的伪随机数生成器,也就是各种编程语言中的(伪)随机数库函数。
伪随机数与伪随机数生成器
计算机是确定性的机器,因此它无法直接生成真正的随机数,而浑沌系统的随机数生成速度又比较慢,在许多情况下不适合作为快速的(伪)随机数库函数算法。快速的伪随机数生成算法中最著名的要数linear-congruential method(线性同余法),也就是:
Xn+1 =(a Xn + b )% c // % 就是C/C++ 中的MOD(同余)运算符
这种方法可以从一个种子X0 = seed开始,连续生成任意长的伪随机数序列Xn 。它的运算过程极其简单,并且如果令c = 2m,其中m为Xn的字长,则连MOD运算都直
原创力文档

文档评论(0)