第四章随机模拟方法第一节概述第二节随机模拟方法的特点第三节用蒙特卡罗方法求解确定性问题第四节随机模拟方法在随机服务系统中的应用第五节集装箱专用码头装卸系统的随机模拟第六节随机模拟方法在理论研究中的应用1第一节概述(一)随机(统计)模拟的定义2随机模拟即是计算机统计模拟,它实质上是计算机建模,而这里的计算机模型就是计算机方法、统计模型(如程序、流程图、算法等),它是架于计算机理论和实际问题之间的桥梁。它与统计建模的关系如下图。实际问题统计、逻辑模型计算机模拟(程序、算法)统计、计算机解实际解(二)随机模拟方法一般地,随机模拟分类如下:若按状态变量的变化性质分为连续随机模拟和离散随机模拟。而按变量是否随时间变化又可分为动态随机模拟和静态随机模拟。常用的随机模拟方法主要有以下几种:1.蒙特卡罗法2.系统模拟方法3.其它方法:包括Bootstrap(自助法)、MCMC(马氏链蒙特卡罗法)等。(三)puffon随机投针实验1777年Puffon(法)提出用投针实验求圆周率Pi的问题。间距为a的平行线,随机投掷一枚长为l(la)的针,试求此针与一平行线相交的概率P。456(四)Puffon投针的R实现7#应用R软件对buffon投针实验进行模拟pi的取值#先编写“buffon”函数,buffon-function(n,l=0.8,a=1){k-0theta-runif(n,0,pi);x-runif(n,0,1/2)for(iin1:n){if(x[i]=l/2*sin(theta[i]))k-k+1}2*l*n/(k*a)##函数最终输出的值,比如当给定参数n时,输出2*l*n/(k*a)}调用已编号的R程序buffon.R进行模拟,取n=100000,l=0.8,a=1。source(buffon.R)buffon(100000,l=0.8,a=1)##直接调用刚刚编写好的“buffon”函数,当然,l和a的取值由于在函数编写中已经给出了,因此这里不必再给出,可以直接用buffon(100000)。[1]3.142986还可以更改n的数值,与l、a的数值(见表4-1)buffon(100000,l=0.8,a=1)[1]3.119334buffon(1000000,l=0.8,a=1)[1]3.136941buffon(10000000,l=0.8,a=1)[1]3.142697另一种求pi的方法8910MC1-function(n){k-0;x-runif(n);y-runif(n)for(iin1:n){if(x[i]^2+y[i]^21)k-k+1##在n个值当中,有多少个i满足if函数}4*k/n}source(MC1.R);MC1(100000)[1]3.1426811(五)统计模拟的一般步骤第二节随机模拟方法的特点(一)方法新颖、应用面广、适用性强(二)随机模拟方法的算法简单,但计算量大(三)模拟结果具有随机性,且精度较低(四)模拟结果的收敛过程服从概率规律性12第三节用蒙特卡洛方法求解确定性问题(一)计算定积分为了简化计算,a=0,b=1。计算定积分值也就是求曲边梯形的面积S,常用方法有:(1).随机投点法1314记录实验次数N,成功次数M,用M/N作为概率p的估计值,即可得出定积分I的近似解。1516(2).平均估值法1718例:赶火车问题火车离站时刻13:0013:0513:10概率0.70.20.1一列列车从A站开往B站,某人每天赶往B站上车。他已经了解到火车从A站到B站的运行时间是服从均值为30min,标准差为2min的正态随机变量。火车大约下午13:00离开A站,此人大约13:30到达B站。火车离开A站的时刻及概率如表1所示,此人到达B站的时刻及概率如表2所示。问此人能赶上火车的概率有多大?表1:火车离开A站的时刻及概率表2:某人到达B站的时刻及概率人到站时刻13:2813:3013:3213:34概率0.30.40.20.1——问题的分析——这个问题用概率论的方法求解十分困难,它涉及此人到达时刻、火车离开站的时刻、火车运行时间几个随机变量,而且火车运行时间是服从正态分布的随机变量,没有有效的解析方法来进行概率计算。在这种情况下可以用计算机模拟的方法来解决。进行计算机统计模拟的基础是抽象现实系统的数学模型为了便于建模,对模型中使用的变量作出如下假定::火车从A站出发的时刻;:火车从A站到B站的运行时间;:某人到达B站的时刻;:随机变量服从正态分布的均值;:随机变量服从正态分布的标准差;1T2T3T2T2T此人能及时赶上火车的充分必要条件为:,所以此人能赶上火车的概率模型为:。123TTT123{}pTTT为了分析简化,假定13时为时刻t=0,则变量、的分布律为:1T3T05100.70.20.1283032340.30.40.20.11/minT()Pt3/minT()PtR软件求解的总算法:关系式成立产生随机数验证模型成立次数k=k+1否是计算估计结果k/n成立次数不变试验次数是否达到n次是否编写R程序①借助区间(0,1)分布产生的随机数,对变量、概率分布进行统计模拟;1T3T②根据变量、、概率分布及模拟程序、命令产生n个随机分布数;1T2T3T③使用随机产生的n组随机数验证模型中的关系表达式是否成立;④计算n次模拟实验中,使得关系表达式成立的次数k;⑤当时,以作为此人能赶上火车的概率p的近似估计;nkn24windows(7,2)#作图窗口大小prb=replicate(10,{#括号内程序重复100次x=sample(c(0,5,10),1,prob=c(0.7,0.2,0.1))y=sample(c(28,30,32,34),1,prob=c(0.3,0.4,0.2,0.1))plot(0:40,rep(1,41),type=n,xlab=time,ylab=,axes=FALSE)axis(1,0:40)r=rnorm(1,30,2)points(x,1,pch=15)i=0while(i=r){i=i+1segments(x,1,x+i,1)if(x+i=y)points(y,1,pch=19)Sys.sleep(0.1)}points(y,1,pch=19)title(ifelse(x+r=y,poor...missedthetrain!,Bingo!catchedthetrain!))Sys.sleep(4)x+ry})mean(prb)R程序:本节课结束你学到了什么?25