前面的讨论和例子表明,通常在不可预测或非确定的建模活动中,统计分布是很有用的。例如,排队系统中的到达间隔时间和服务时间,以及产品的需求,实际上往往是不可预测的,至少在某种程度上是不可预测的。此类变量建模为具有某种特定分布的随机变量,而且有标准的统计程序用于估计所假设的分布的参数,以及测试所假设的统计模型的有效性。本节将要讨论对各种广泛应用的连续分布和离散分布的随机采样程序。
假设一个分布已经完全确定,该分布将作为仿真模型的输入变量,本节探寻为该变量产生样本的方法。本节的目的是解释和描述一些广泛应用的生成随机变量的技术,而不是给出最有效技术的综述。实际上,大多数的仿真建模者要么使用仿真软件已经存在的可用程序,要么使用嵌入到正在使用的仿真语言中的程序来表示各种随机分布。然而,有一些编程语言并不包括各种常用分布的内置程序,而且一些计算机也没有安装随机变量生成库,在这种情况下,建模者必须编写可接受的随机变量发生程序。尽管这种事情很少发生,不过知道怎样生成随机变量也是值得的。
随机变量的产生是指生成非均匀随机数的过程;即通过标准均匀随机数产生非均匀随机数的过程。
我们面临的问题是:我们可以随机产生(0,1)之间的随机数(第一部分已经进行了描述),那么如何产生象下面的一些随机数呢?
[a,b]区间均匀分布;指数分布:;二项分布,泊松分布,正态分布,等等。
用于产生随机变量的常用方法有很多,例如:反变换法、函数变换法、组合法、拒绝法等,本章将重点介绍反变换法和拒绝法产生随机变量。
当变量的概率密度函数f(x)可以积分为分布函数F(x),或F(x)是一个经验分布时,而且F(x)很容易求得反函数时,则使用反变换法获取随机变量。反变换法可以用于产生指数、均匀、威布尔、三角以及经验分布的随机样本,它也是很多离散分布产生样本的基本原理。
反变换法的一般步骤:
step1 通过随机变量的概率密度函数f(x)计算其分布函数F(x);
step2 令F(x)=R,x在其取值范围内;
step3 解方程F(x)=R,获得x=F-1(R)
step4 产生(0,1)范围内的均匀随机数序列R1,R2,R3,R4,......,Rn,将这些随机数序列带入函数x=F-1(R),获得随机变量x的随机序列:x1,x2,x3,x4,......,xn。
假设有一个随机变量x服从非标准的均匀随机分布,其概率密度函数为:
如何设计其随机分布发生器。
求解过程如下:
step1 其概率分布函数如下:
(1)
从上图可以看出,因为非标准均匀分布可以看成是标准均匀分布在尺度上的变化,而并未改变均匀分布的性质。
step2 令
(2)
step3 对(2)进行变换,获得(3)如下
x=a+(b-a)*R (3)
其中:R为服从标准均匀分布的随机数。
则:在区间[a,b]上均匀分布的随机变量可由式(3)产生。
结合式(1),如果保证了F(x)的取值为随机均匀的落入[0,1]区间,则对应的x的取值也就满足了随机性特征。那么就可以先通过标准随机均匀分布伪随机数发生器产生一个(0,1)之间的随机数作为F(x)的数值,对应的自变量x的取值也就在(a,b)之间随机均匀取值。
step4 产生随机数序列
假设某随机变量服从(4,10)之间的均匀随机分布,产生此变量的10个随机数。
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
R(i) |
0.86 |
0.95 |
0.70 |
0.99 |
0.71 |
0.95 |
0.52 |
0.22 |
0.54 |
0.35 |
x(i) |
9.16 |
9.70 |
8.17 |
9.94 |
8.27 |
9.71 |
7.10 |
5.35 |
7.26 |
6.12 |
反变换法简要过程:
当分布密度函数f(x)可以积分为分布函数F(x),或F(x)是一个经验分布时,而且F(x)很容易求得反函数时,则使用反变换法获取随机变量。过程:
l 首先产生一个标准均匀随机分布函数;
l 记r为标准均匀随机分布函数产生的随机数,则所需的非均匀随机数为:
服从指数分布的随机变量可以方便地通过反变换方法生成。
step1 参数为λ的指数分布的密度函数为
其中: 可以理解为单位时间内事件发生的次数。例如服务系统中单位时间内顾客到达的数量序列x1,x2,x3,x4,......服从均值为的指数分布,
即为单位时间内顾客平均到达数量,或者叫到达速率。而对于任意的i,即在第i单位时间段内,顾客到达数量的期望值为:
step2 指数随机变量的分布函数如下:
step3 令
F(x)=r,并求解该函数的反函数,得如下表达式:
服从参数为λ的指数分布;
指数分布反变换法图例
step1 假设三角分布随机数的概率密度函数如下:
概率密度函数曲线如下:
图 三角分布函数概率密度函数曲线
step2 分布函数如下:
step3 分布函数对(0,1)随机分布的转换:
step4 对上述两式求反函数,获得下式
假设有一个随机分布的概率分布函数如下:
利用反函数法求其伪随机数。
求该分布的反函数如下:
假设用标准随机分布函数产生了如下的随机数:0.102,0.345,0.765,0.213,则对应的x值为多少?
step1 威布尔概率密度函数:
step2威布尔概率分布函数
step3分布函数对(0,1)随机分布的转换:
step4 求反函数,获得随机变量产生公式
如果建模者找不到能够为输入数据提供好模型的理论分布,那么就必须采用数据的经验分布。一种可能是对观察数据本身进行简单的再取样,被认为是使用经验分布,并且在已知输入过程取值个数有限时会特别有意义。如果数据是从被认为是连续值的输入过程中得到的,那么有时需要在观测数据点之间添加数据以补充缺失值。下面介绍一种从连续经验分布中定义和生成数据的方法。
示例:
在研究消防队工作人员和消防员可能备选的调度策略的仿真中,收集到了消防队接到报警后的响应时间的5个观测值(单位:分钟),数据如下:
2.76 1.83 0.80 1.45 1.24
在收集更多的数据之前,希望以这5个观察值为基础的响应时间分布建立一个初始仿真模型。因此,这就需要一种从响应时间分布中生成随机变量的方法。
Step1
假设响应时间X的范围为,其中c是未知数,但是c可以用=2.76来估计,其中
为原始观测数据,n为观察值得个数。
Step2
将数据由小到大进行排列,令为排序后的序列,根据数据的现实意义,选取数据的最小可能取值。例如本例中的反应时间最小可能值为0,所以定义=0。
Step3 指定每个间隔的概率为1/n=1/5=0.2,可以得到该数列的经验分布曲线,处理过程和cdf曲线分别如表和图所示。其中第i条线段的斜率是:
消防队响应时间的经验分布函数cdf
Step4
通过随机数R获得该经验分布的随机分布样本。当时,计算cdf的逆函数即可获得随机样本:
例如,如果产生的随机数=0.71,那么位于曲线的第四区间(即在0.6和0.8之间),因此,由上式可得:
生成的步骤参看上图。
在例中,每个数据点用经验cdf表示。如果有大的样本可用(用现代化的、自动的数据收集方法可以得到从几百到几万的样本量),那么可以方便地(和以更高的计算效率)用数目小得多的间隔将数据统计成频度分布,然后用一个连续经验cdf来拟合该频度分布。这只需要对线段斜率等式进行一下推广就可以做到。现在第i条线段的斜率由下式给出:
其中:是频度分布的前i个区间的累积概率,而
是第i个间隔。当
时,cdf的逆(即该经验分布对应于R的随机样本值)可以由下式计算:
许多有用的连续分布的cdf或者cdf的反函数并没有闭合形式的表达式,正态分布,伽马分布和贝塔分布都是这方面的例子。由于这个原因,我们经常说随机变量产生的反变换技术不能用于这些分布。实际上,如果我们愿意将cdf的反函数近似,或者进行数值积分并搜索cdf,则反变换机数就可以使用了。这种近似听起来好像不精确,但是,即使一个闭合形式的反函数,为了在计算机上求它的值,也是需要近似的。例如,在由cdf的反函数产生一个指数分布的随机变量时,需要对对数函数进行数值近似。因此,使用近似的cdf的反函数和近似计算一个闭合形式的反函数并没有本质的差别。使用近似的cdf的反函效的问题在于,它们当中的一些在求值时计算速度很慢。
为了说明这种思想,考虑对标准正态分布的cdf的反函数的一个简单近似:
这种近似对0.0013499<=R<=0.9986501都能够产生误差在0.1以内精度的正态分布样本。下表对几个R的这种近似值和通过数值积分得到的精确值进行了比较。还有更加精确的近似,只是形式和计算稍微复杂一些。
在任何一天结束时,M电器公司装货码头的货物数量是0,1或2,观察到发生的相对频度分别为0.50,0.3,0.2。为了提高装货和运输操作的效率,现在要求内部顾问开发一个模型。作为该模型的一部分,模型应该能生成代表每天结束时装货码头上货物数量的数值X。顾问们决定将X表示为一个服从特定分布的离散随机变量,并表示在图上。
概率质量函数pmf如下:
p(0)=P(X=0)=0.5
p(1)=P(X=1)=0.3
p(2)=P(X=2)=0.2
以及cdf函数如下:
货物数量X的分布函数cdf
从cdf图上可以看出,离散随机变量的cdf总是有一些水平线段组成,这些线段在随机变量能够取值的那些点x上发生跃阶,大小为p(x)。例如在x=0处产生大小为p(0)=0.5的跳跃;在x=1处产生了大小为p(1)=0.3的跳跃;在x=2处产生了p(2)=0.2的跳跃。
为了生成离散随机变量,反变换法变成了查表方法,但是与连续随机变量不同的是,这里不需要插值。例如,假设生成了R1=0.73,在cdf图上,首先在垂直轴上定出R1=0.73的位置,然后作水平线段至cdf曲线的“跃阶”出,再作垂线至水平轴得到所生成的变量。这里R1=0.73将获得X1=1。
通过建立一个如表8-6所示的表格,查表方法变得非常容易。当R1=0.73时,首先找到R1位于的区间。一般说来,对于R=R1,如果:
那么取。上式中,
,
是随机变量可能的取值;并且
(k=1,2,...,n)。在本例中,n=3、
;
。
本例中离散随机分布发生方案总结如下:
考虑具有如下pmf的几何分布:
其中,0<p<1。对于x=0,1,2,......,它的cdf如下:
使用反变换技术,如果产生了一个R,则随机变量X的取值x将由下式获得:
因为p<1,所以,对上式两边同除以,得下式:
因为x为整数,所以x取不小于-1的整数,即
思考题:
假设有一随机变量的分布函数是由如下列表给出,试设计其伪随机数产生方法:
X+ |
0 |
3 |
6 |
8 |
10 |
12 |
13 |
20 |
F(x) |
0 |
0.2 |
0.3 |
0.45 |
0.6 |
0.7 |
0.9 |
1 |