文档介绍:随机数发生器与函数实体
北京市高等教育精品教材
《管理系统仿真与GPSS/Java》
第6章随机数发生器与函数实体
随
机
排队
系
统
顾客到达
服务时间
。。。。。。
。。。。。。
。。。。。。
。。。。。。
泊松分布
指数分布
均匀分布
爱尔兰分布
正态分部
随机数及其产生
1) 兰德公司:从数库中随机抽取(50年代)
美国兰德公司在1950 年曾将 100 万个在(0,1)区间内的实数存入计算机外
存储器,以便在仿真过程中进行随机调用。由于效率太低,并且不能保证均匀
分布的性质,这种方法不久即被淘汰。
如何产生随机数
2) 将计算机连接到物理效应设备(如噪声源)上获得
随机数流.
这种方法的随机性和均匀性最好,但产生过程太复杂,未能得到推广。
3) 通过数学算法由计算机产生随机数
这种方法具有简单易行,占用内存少,运行速度快的优点,因此得到广泛的应
用。
随机数及其产生
用户只需给定一个初始的任意“随机”数(或称种子值),即可按某个固定的公式计算出下一个“随机”数。随后,以新产生出来的“随机”数作为种子,来计算出新的下一个“随机”数。不断重复以上的计算即可产生出一系列的“随机”数,称为随机数序列或随机数流。
但是,用算法产生“随机”数流时,第 i+1个“随机”数是用第i个“随机”数
按一个不变的公式进行计算的结果;只要给定初始的种子值,则以后产生的随机数流中的任一个“随机”数都是确定的数值,从本质上来说并不具有真正的随机性,因此被称为“伪随机数”,伪随机数序列会产生退化,即在产生有限个随机数后,数字序列会重复出现。退化的周期越长越好。
用伪随机数进行仿真所形成的随机过程自然也不能认为是真正的随机过程。然而只要仔细设计产生伪随机数的算法,便能通过比较严格的统计检验,仍然可以产生出一系列近似某种分布并且相对独立的随机数,这种随机数流能满足大多数仿真模型需要。
伪随机数的产生:
随机数及其产生
0~1间隔均匀分布随机数
0~1间隔均匀分布随机数具有如下特性:
(1)随机数值是0到1的范围内的实数,包括0,或者包括或者不包括1。
(2)在所定义的区间内,要具有均匀性。即将区间[0,1] 分隔为n个等长的子区间,则在每一个子区间得到的观察值的个数的期望值应该等于N / n,其中N为观察总数
(3)在所定义的区间内,要具有独立性。即每个观察值落在某一子区间的概率和前一观察值无关。
大部分计算机语言都提供了产生0-1间隔均匀分布伪随机数的标准
函数或方法。如 C语言中的rand函数,VB中的randum函数, Java类库
提供了一个名为 Randum的类,通过该类的nextDouble方法可以产生一
个(0,1)间隔均匀分布的双精度实型随机数。
§ 随机数及其产生
1)平方取中法
均匀分布随机数生成算法举例
2)乘法取中法
3)GPSS/H的算法
4)线性同余法。
Java采用线性同余算法,产生随机数的退化周期为255 ,
提供了Randum类。
其构造方法 Randum(int n), n为随机数流对象的初始种子值。
其成员方法 nextDouble(),调用该方法即产生一个0-1间隔均匀分布的
双精度实型随机数。
其成员方法 setSeed(int n),设置n为新的种子值,产生不同的随机数
序列。
随机数及其产生
GPSS/Java使用Randum类定义了8个随机数流对象,初始种子值分
别为100,200,300,400,500,600,700和800,能够产生8个不同的
随机数序列。经包装后GPSS/Java提供8个随机数发生器表示为:
RN$(int n)
其中, n为随机数发生器编号,例如,RN$(1)表示使用1号随机数发生器
产生一个0-1间隔均匀分布的随机数。
1号随机数发生器是缺省的随机数发生器,例如:
transfer(double a,Addr b,Addr c)
当动态实体进入transfer时,由1号随机数发生器RN$(1)产生一个
随机数,如果RN$(1)小于操作数a则转入标号对象为c的模块,否则转
入标号对象为b的模块。
GPSS/Java 随机数发生器
随机数及其产生
通过线性插值法可以将0-1间隔均匀分布的随机数(X轴)转换为其它间隔的均匀分布的随机数(y轴)
任一间隔均匀分布随机数的生成
0
x
y
a
b
1
R
随机变量Y的抽样值
L2
L1
图5-1,均匀分布随机数的分布曲线
P
b
Y=L1+L2
=a+
=a+R