第四章离散事件系统仿真基础(编辑修改稿)内容摘要:

统的随机模型。  对随机现象进行模拟,实质上是要给出随机变量的模拟,即利用计算机随机地产生一系列数值,它们的出现服从一定的概率分布,称为 随机数。  离散事件系统仿真的基础就是产生随机数 产生随机数的方法   1927年 ,4万随机数表 ,以后有 100万随机数表(可以输入内存,随时调用)   从真实物理现象的随机因素中产生随机数,放射性粒子的放射源,电子晶体管的固有噪音等,单位时间内放射出的粒子数是随机的。  优点:真正的随机数;  缺点:外部设备,无法重复 产生随机数的方法   产生伪随机数:用数学公式或位移寄存器的移位操作来产生的随机数,称为伪随机数。 伪随机数并非概率论意义下的真正的随机数。 因为真实的随机数,只能从客观真实的随机现象本身产生出来,所以产生理想的伪随机数列不是一件容易的事。 一般伪随机数要保证有较好的统计特性  以下将伪随机数与随机数等同  对于产生伪随机数的方法,有如下要求  要求伪随机数列有较理想的随机性和均匀性,即对其随机性和均匀性进行统计检验时,有合乎要求的精度  产生伪随机数的程序应当运算速度快、占用计算机的内存少  伪随机数列的循环周期应当尽可能地大,以满足模拟的需要  伪随机数列中,前后之间和各子列之间要求相互独立 随机数的基础 —— 均匀分布的随机数  均匀分布的随机数(均匀随机数)是产生其它随机数的基础。 例如,抛硬币、抽签、统计经验分布都可以由它产生。  最常用的是在 [0,1] 区间内均匀分布的随机数,即这组数值可以看作是 [0,1] 区间内均匀分布的随机变量的一组独立的样本值。 记 X~ U(0,1),[ 0,1]区间上均匀分布的随机变量 X的概率密度 f(x)和概率分布函数 F(x)分别为 :  111000)(0101)(xxxxxFxxf其它 数学期望 : E(X)=1/2。 方 差 :  = 1/12 均匀分布的密度函数和分布函数示意图 1 1 0 随机数发生器  产生 [0,1]区间上均匀分布的随机变量的算法,称为 “ 随机数发生器 ”  常用  线性同余发生器  组合发生器 一、线性同余发生器  递推公式:  所有参数值均为非负整数, Z0称为随机数源  则 [0,1]区间上的随机数  可证明:  显然本质上非随机且取值有限  例: m=16, a=5, C=3, Z0=7 1( ) ( m o d )iiZ a Z C m/iiU Z m01( ) ( m o d )1nnnaZ a Z C ma 该发生器特点  适当的 m,a,c可使 Zi循环产生,循环周期称为发生器周期,记为 P;当 P=m时,称发生器具有满周期  适当的 m,a,c可使每个周期内每个数仅出现一次,即具有均匀性  当 m足够大且发生器满周期、均匀时, Ui在[0,1]上均匀分布,且取值足够密  (满周期条件)定理:当且仅当满足下列条件,线性同余发生器满周期  m与 c无公因子  若 q是整除 m的素数,在 q能整除 a1  若 m能被 4整除,则 a1也能被 4整除  当 c0时称混合乘同余法, c=0称乘同余法 素数取模乘同余法( PMMLCG)  m是小于 2b的最大素数,而 a的选择满足al1被 m整除的最小整数 l=m1,也就是说能被 m整除的 al1的最小整数为 am11,那么得到的 zj的周期为 m1,且在每个周期内, 1,2,…, m1这些整数严格地只出现一次。 两个经过检验性能较好的 PMMLCG Z Zi i 5 5 1 (mod 235 - 31) Z Zi i 8 5 1 (mod 231 - 1) 二、组合发生器  为提高性能,可用一个发生器控制另一个发生器产生随机数,两种方式  发生器 1产生 ,发生器 2产生 [1,k]上均匀分布的随机整数 I,取出并重新产生 UI  发生器 1, 2产生 和 , 在二进制下循环移位 次得 ,再次与 “ 异或 ” 后得  思路:  减少递推公式的自相关性,提高独立性  加长发生器周期,提高随机数密度和均匀性 1( , )kUU(1)iZ (2)iZ (2)iZ(1)iZ (2)iZ (2)iZiZ三、随机数发生器的测试   常用频率检验:将随机数发生器取值范围[0,1]分为 k个等长区间,由该发生器产生 N个随机数,则落在每个子区间上随机数个数理论值为 n=N/k,称为理论频率,实际第 j个区间上的数据个数 nj 总会有偏差,由此可得 ,其大小反映均匀性程度 221()k jjnnn    计算该随机数序列相邻一定间隔的随机数之间的相关系数,判断相关程度  先由随机数发生器产生 N个随机数 Ui,则前后相隔为 j个数的相关系数的均值为 其中 S2为随机数方差的估计值: 再根据统计理论处理 22111[ ( ) ] /2njj i i jiU U SNj 22111()12NiiSUN C语言中与随机数有关的函数  randomize(void)。 初始化  x=random(int M)。 产生 0~M 之间的随机数  x=rand(void)。 产生 0~2151之间的随机数 Matlab中与随机数有关的函数  Rand(n): n个 [0,1]之间均匀分布随机数  Rand(m,n): m*n 个 [0,1]之间均匀分布随机数  randn(n):n个 N(0,1)标准正态分布随机数  randn(m,n): m*n个 N(0,1)标准正态分布随机数 例 射击命中率 在我方某前沿防守地域,敌人以一个炮排(含两门火炮)为单位对我方进行干扰和破坏.为躲避我方打击,敌方对其阵地进行了伪装并经常变换射击地点.经过长期观察发现,我方指挥所对敌方目标的指示有 50%是准确的,而我方火力单位,在指示正确时,有 1/3的射击效果能毁伤敌人一门火炮,有 1/6的射击效果能全部消灭敌人. 现在希望能用某种方式把我方将要对敌人实施的 20次打击结果显现出来,确定有效射击的比率及毁伤敌方火炮的平均值 说明  这是一个概率问题,只涉及到简单的随机数的产生和处理,可以通过理论计算得到相应的概率和期望值。 但这样只能给出作战行动的最终静态结果,而显示不出作战行动的动态过程  为了能显示我方 20次射击的过程,考虑采用计算机模拟 需要模拟出以下两件事:  (1)观察所对目标的指示正确与否  模拟试验有两种结果,每一种结果出现的概率都是1/2  因此,可以用 投掷一枚硬币 的方式予以确定,当硬币出现正面时为指示正确,反之为不正确  (2)当指示正确时,我方火力的射击结果 模拟试验有三种结果:  毁伤一门火炮的可能性为 1/3(即 2/6),  毁伤两门的可能性为 1/6,  没能毁伤敌火炮的可能性为 1/2(即 3/6). 这时 可用投掷骰子的方法来确定:  出现1、2、3点:则认为没击中敌人;  出现4、5点: 则认为击毁敌人一门火炮;  出现6点: 则认为击毁敌人两门火炮 2. 符号假设 i:要模拟的打击次数; k1:没击中敌人火炮的射击总数; k2:击中敌人一门火炮的射击总数; k3:击中敌人两门火炮的射击总数. E:有效射击比率; E1: 20次射击平均每次毁伤敌人的火炮数 3. 程序流图 初始化 :i=0,k1=0,k2=0,k3=0 i=i+1 骰子 点数 ? k1=k1+1 k2=k2+1 k3=k3+1 k1=k1+1 i< 20? E=(k2+k3)/20 E1=0*k1/20+1*k2/20+2*k3/20 停止 硬币正面 ? Y N N Y 1, 2, 3 4, 5 6 4. 模拟结果 消灭敌人火炮数 试验 序号 投硬币 结 果 指示 正确 指 示 不正确 掷骰子 结 果 0 1 2 1 正 ∨ 4 ∨ 2 正 ∨ 4 ∨ 3 反 ∨ ∨ 4 正 ∨ 1 ∨ 5 正 ∨ 2 ∨ 6 反 ∨ ∨ 7 正 ∨ 3 ∨ 8 正 ∨ 6 ∨ 9 反 ∨ ∨ 10 反 ∨ ∨ 消灭敌人火炮数 试验 序号 投硬币 结 果 指示 正确 指 示 不正确 掷骰子 结 果 0 1 2 11 正 ∨ 2 ∨ 12 反 ∨ ∨ 13 正 ∨ 3 ∨ 14 反 ∨ ∨ 15 正 ∨ 6 ∨。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。