版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Chap 8 离散事件系统仿真前面讨论的系统,其状态变量的取值是连续变化的(时间上可以连续也可以离散),这类系统的仿真称为连续系统仿真。现开始讨论另一类性质完全不同的系统,其状态只是在离散时间点上发生变化,且这些离散时间点一般是不确定的,称为离散事件系统仿真。例如单人理发馆系统,设上午9点开门,晚上11点关门,顾客的到达时间一般是随机的,为每个顾客服务的时间长度也是随机的。描述该系统的状态是服务台的状态(忙或闲)、顾客排队等待的队长。显然这些状态变量的变化也只能在离散的随机时间点上发生。类似的如订票系统、库存系统、加工制造系统、交通控制系统、计算机系统等。由于离散事件系统固有的随机性,对这类系
2、统的研究往往十分困难,经典的概率及数理统计理论、随机过程理论虽然为研究这类系统提供了理论基础,并能对一些简单系统提供解析解,但对工程实际中的大量系统,惟有依靠计算机仿真才能提供较为完整的结果。8.1 基本概念Chap 8 离散事件系统仿真前面讨论的系统,其状态变量的取1、实体 实体是描述系统的三个基本要素之一,在离散事件系统中的实体可分为两大类:临时实体及永久实体。在系统中只存在一段时间的实体叫临时实体。永久驻留在系统中的实体称为永久实体。临时实体按一定规律不断地到达(产生),在永久实体作用下通过系统,最后离开系统,整个系统呈现出动态过程。2、事件 事件是引起系统状态发生变化的行为。从某种意义
3、上讲,离散系统是由事件来驱动的。如,理发馆系统中,可以定义“顾客到达”为一类事件,由于顾客的到达,系统的状态将发生变化服务员可能从闲变忙(如果无人排队),或排队的队长会增加。类似的,可以定义服务开始事件、服务结束事件。 在一个系统中,往往有许多类事件,而事件的发生一般与某一类实体相联系,有些事件的发生还可能引起别的事件的发生,或是另一类事件发生的条件。为了实现对系统中事件进行管理,仿真模型中必须建立事件表,表中记录每一发生了的或将要发生的事件的类型和发生时间,以及与该事件相联的实体的有关属性等等。1、实体 实体是描述系统的三个基本要素之一,在离散事件系3、活动 离散事件系统中的活动,通常用于表
4、示两个可以区分的事件之间的过程,它标志着系统状态的转移。如前例中,顾客的到达事件与该顾客开始接受服务事件之间可以称为一个活动(排队活动),该活动使系统的状态(队长)发生变化。4、进程 进程是由若干个有序的事件及若干有序活动组成,一个进程描述了它所包括的事件及活动间的相互逻辑关系及时序关系。如顾客到达、经过排队、接受服务、服务完毕后离去可称为一个进程。进程排队活动服务活动顾客到达事件服务开始事件服务结束事件3、活动 离散事件系统中的活动,通常用于表示两个可以区分5、仿真钟 仿真钟用于表示仿真时间的变化。在连续系统仿真中,将连续模型进行离散化而成为仿真模型时,仿真时间的变化基于仿真步长的确定,可以
5、是定步长也可以是变步长,称为时间步长法。对于离散事件系统而言,其状态本来就只在离散时间点上发生变化,因而不需要进行离散化处理。但是由于引起状态变化的事件发生时间的随机性,仿真钟的推进步长则完全是随机的,所以说仿真模型中时间控制部件必不可少,应按一定规律来控制仿真钟的推进。8、统计计数器 连续系统仿真的目的是要得到状态变量的动态变化过程并由此分析系统的性能。离散事件系统的状态随事件的不断发生也呈现出动态变化的过程,但仿真的目的主要不是要得到这些状态是如何变化的。由于状态的变化是随机的,某一次仿真运行得到的状态变化过程只不过是随机过程的一次取样。如果进行另一次独立的仿真运行所得到的状态变化过程可能
6、完全是另一种情况。所以它们只有在统计意义下才有参考价值。 在前例中,由于顾客到达的时间间隔具有随机性,服务员为每个顾客服务的时间长度也是随机的,因而在某一时刻,顾客排队的队长或服务台的忙闲情况完全是不确定的,在分析该系统时,感兴趣的是系统的平均队长、顾客的平均等待时间或服务员的利用率等。所以在仿真模型中,需要有一个统计计数部件,以便统计系统中的有关变量。5、仿真钟 仿真钟用于表示仿真时间的变化。在连续系统仿真8.2 仿真钟的推进 离散事件系统仿真的仿真钟推进方法有两种:一种是按下一最早发生事件的发生时间推进,称为事件调度法,亦称为事件步长法;另一种是固定增量推进法。8.2 仿真钟的推进 离散事
7、件系统仿真的仿真钟推进方法有两事件步长法事件步长法是以事件发生的时间为增量,按照事件发生的时间顺序,一步一步地对系统的行为进行仿真,直到预定的时间结束为止。在多数随机系统中,可以有多种性质的事件发生,通常按照发生时间的先后顺序逐个处理,换句话说,首先处理发生时刻距初始时刻最短的事件,这种处理方法称为是最短时间的事件步长法。事件步长法事件步长法是以事件发生的时间为增量,按照事件发生的事件步长法初始状态事件步长加1在当前步长内,考察分析,计算和记录系统的活动仿真时间到否?仿真结束输出结果是否事件步长法初始状态事件步长加1在当前步长内,仿真时间到否?仿事件步长法事件步长法与时间步长法的主要区别是:(
8、1)事件步长法与时间步长法都是以时间为增量来考察系统状态的变化但在时间步长法中,仿真时钟以等步长前进,而在事件步长法中,仿真时钟的步长取决于事件之间的间隔(2)时间步长法在一个步长内,认为系统所处的状态相同,因而所选步长的大小将影响仿真的精度而在事件步长法中,每个事件的发生均有确切的时刻,不需要人为地选取步长,步长的大小对仿真精度影响较小事件步长法事件步长法与时间步长法的主要区别是:(1)事件步长事件步长法(3)时间步长法每前进一个步长就要对整个系统进行一次全面考察,即使状态没有发生变化时也要扫描,而事件步长法只是在某一事件点上判断和比较事件是否出现因此,一般地讲,当判断比较的数目较大时,用时
9、间步长法可以节省用机时间,而当相继两个事件出现的平均间隔较长时,更适合于用事件步长法事件步长法(3)时间步长法每前进一个步长就要对整个系统进行一事件步长法事件表法的基本思路事件表法的主要思路是将系统的仿真过程看成一个事件点序列,根据事件出现的时序,用一个称之为事件表的表格来调度事件执行的顺序对于那些当前需处理的事件,列入事件表中,从中取出最接近的事件进行处理,处理完毕后自动退出事件表在处理当前事件的过程中,往往又会产生一个后继事件,因此,必须预测出这一后继事件的出现时间,并将它列入事件表中事件步长法事件表法的基本思路事件表法的主要思路是将系统的仿真事件步长法-例子例1收款台前的排队过程的仿真。
10、 考虑一个收款台的排队系统。某个杂货店只有一个收款台,顾客的到达时间时服从均值为4.5的负指数分布,每一个顾客的服务时间服从均值为3.2,方差为0.8的正态分布。这里时间的单位是分钟,且服务的时间不取负值. 试对收款台前的排队过程进行仿真。事件步长法-例子例1收款台前的排队过程的仿真。事件步长法-例子收款排队系统主控程序图事件步长法-例子收款排队系统主控程序图事件步长法-例子负指数分布的随机数的产生: x=-4.5ln(u) ,u为均匀分布的随机数正态分布的随机数的产生: y=3.2+0.8v, v为标准正态分布的随机数。假设: 开始时服务台前无顾客,顾客在服务台前不离去;要求: 对100个顾
11、客到收款台缴款排队过程进行仿真关心的问题: 每个顾客的平均等待时间atime, 最大队长maxl, 服务员的工作效率work, ;事件步长法-例子负指数分布的随机数的产生:关心的问题:事件步长法-例子实体: 服务员(忙1,闲0), 顾客 (到达时刻ca,服务时间cs,等待 时间ct) 队列(长度lq);事件event: 顾客到达事件1(交款,排队) 服务结束事件2(闲忙)事件表: 序号 事件类型(1、2) 发生时刻t事件步长法-例子实体:事件步长法-例子顾客到达子程序图事件步长法-例子顾客到达子程序图事件步长法-例子服务结束子程序图事件步长法-例子服务结束子程序图事件步长法-例子例: 机器修理
12、系统仿真有m台机器,由c个工人共同负责修理,并设:各台机器质量相同,机器的连续运转时间相互独立且服从同一负指数分布,平均寿命为1/v(v0)。每个工人技术相同,且修理时间相互独立并服从同一负指数分布,平均修理时间为1/u(u0). 修复后的机器其寿命分布不变。机器停止运转每单位时间的损失费为c1元,工人单位时间的产值为c2元。 若机器的等待时间为E,工人总的空闲时间为F,则系统总的损失费为 S = c1E + c2F试求当机器数m固定时,为使系统的总损失费最小,应配备多少工人为最优?事件步长法-例子例: 机器修理系统仿真事件步长法-例子解:采用最短时间事件步长法进行仿真,首先要确定一个初始状态
13、。不妨假定开始时所有的机器都正常运转,工人处于空闲状态。设T为仿真终止时间。依次仿真计算修理工人数C分别取1、2、3、时的系统损失费。最后根据系统损失费S的极小值来确定最优工人数。 根据以上思想并采用最短时间事件步长法仿真。事件步长法-例子解:采用最短时间事件步长法进行仿真,首先要确事件步长法-例子输入原始数据c1,c2,U,V,m,T给出m台机器的指数寿命B(H)=1?结束F=F+x-KP= T3/T输出C,SC=1E=0 F=0初始状态:B(i)=1,i=1,2,m;D(j)=0,j=1,2,.,c选取寿命最短的机器i:H=i,K=A(i)选取最早释放时刻的工人j:y=j,x=D(j)xK
14、?F=F+x-K改变第y个人工的释放时刻:D(y)=A(H)机器由故障释放改为正常:B(H)=1机器由正常改为故障:B(H)=0C=C+1KT?选取寿命最短的机器i:H=i,K=A(i)给出机器修复时间仿真时钟前进一个步长A(H)=K-1/vLOG(RND(1)给出机器正常运行时间仿真时钟前进一个步长A(H)=K-1/vLOG(RND(1)是否否是是否事件步长法-例子输入原始数据c1,c2,U,V,m,T给出事件步长法-例子框图中各标识符号含义如下:T:仿真终止时间m:机器数c:工人数B(i):第i台机器所处状态A(i):第i台机器现在状态的当前时刻D(j):第j个工人修复机器的释放时刻c1:
15、一个工人单位时间的产值c2:一台机器单位故障时间的损失费B(i)=1 机器正常运转0 机器发生故障事件步长法-例子框图中各标识符号含义如下:B(i)=1 事件步长法-例子U:一个工人单位时间平均能修复的机器数V:一台机器在单位运转时间内发生故障的平均次数S:总损失费用E:机器故障时间累计F:工人空闲时间累计K:最短时间机器的当前时刻H:最短时间机器对应的机器号L:工人修完机器的释放时刻x:最短释放时间工人的当前时刻y:最短释放时间对应的工人序号事件步长法-例子U:一个工人单位时间平均能修复的机器数事件步长法-例子下表列出了当 m= 86,1/V= 500小时,1/U= 34小时,c1=3.46
16、元/小时,c23.2元/小时时的仿真结果,其中每次预定仿真时间为一万个小时,连续仿真五次取其平均值作为仿真结果。由仿真结果可知当工人数c10时,最优工人数为7工人数C2345878910每小时平均损失E 183.0128.976.037.624.59.09.410.215.2事件步长法-例子下表列出了当 m= 86,1/V= 500应用举例-可靠性问题例:一设备上三个相同的轴承,每个轴承正常工作寿命为随机变量,其概率分布如表所示寿命h1000110012001300140015001600170018001900概率50.130.090.120.020.060.050.0
17、5任何一个轴承损坏都可以使设备停止工作,从有轴承损坏,设备停止工作,到检修工到达开始更换部件为止,称为一个延迟时间延迟时间也是随机变量,其概率分布如下表所示延迟时间min51015概率应用举例-可靠性问题例:一设备上三个相同的轴承,每个轴承正常应用举例-可靠性问题设备停工时每分钟损失5元,检修工每小时工时费12元,轴承每个成本 16元更换一个轴承需要 20 min,同时更换两个轴承需要30min,同时更换三个轴承需要40min现在有两种方案:方案一是损坏一个更换一个;方案二是一旦有轴承损坏就全部更换试通过计算机仿真对这两种方案做出评价在这一问题中,轴承寿命在1000到1900
18、h之间,而延迟在5到 15min之间,故若用时间步长法时,步长选取有些困难步长小浪费很大,步长大又不精确,所以采用事件步长法在事件发生时再考虑系统状态的变化情况,这就比较合理应用举例-可靠性问题设备停工时每分钟损失5元,检修工每小时工应用举例-可靠性问题为了进行仿真,首先对轴承寿命和延迟时间与随机数对应,对应规则分别如下两个表轴承寿命h频率随机数区间10000.10(0,0.10)11000.130.10,0.23)12000.250.23,0.48)13000.130.48,0.61)14000.090.61,0.70)15000.120.70,0.82)16000.020.82,0.84)
19、17000.060.84,0.90)18000.050.90,0.95)19000.050.95,1.00)延迟时间频率随机数区间50.60(0,0.6)100.300.6,0.9)150.100.9,1.0)轴承寿命随机数延迟时间随机数应用举例-可靠性问题为了进行仿真,首先对轴承寿命和延迟时间与应用举例-可靠性问题由于在这一问题中各个轴承的寿命完全决定了系统的运行状态,也即决定了两个方案的费用大小,故我们选择轴承发生故障作为事件,这三个轴承发生故障的事件分别记为A、B、C(1)方案一的仿真 产生初始事件表事件类型发生时刻延迟时间A1400h5minB1500h15minC1500h15min
20、应用举例-可靠性问题由于在这一问题中各个轴承的寿命完全决定了应用举例-可靠性问题仿真时钟步进,计算费用,产生下一个事件由表上看出,最早发生的事件是A,所以t 1400hcost (5+20)54116145元,下一个A事件发生的时刻为第2 400小时25分钟(随机产生轴承寿命为1000h),刷新事件表,即删去老的A事件,产生新的A事件刷新后的事件表如下表事件类型发生时刻延迟时间A2400h25min5minB1500h15minC1500h15min应用举例-可靠性问题仿真时钟步进,计算费用,产生下一个事件应用举例-可靠性问题寻找事件表中的最早事件进行处理由上表看出,B、C事件同时发生在第15
21、00 h,故同时处理时钟步进为 t 1500 h,再根据费用的计算方法得: cost= 145(15+30)5 6216408元 最后利用随机数产生新事件B和C,刷新事件表,得到的新事件表:事件类型发生时刻延迟时间A2400h25min5minB2700h45min10minC2900h45min5min应用举例-可靠性问题寻找事件表中的最早事件进行处理由上表应用举例-可靠性问题重复,t=2400 h 25 min, cost= 408 (5+20)5 4 116= 553元事件类型发生时刻延迟时间A3700h50min5minB2700h45min10minC2900h45min5min重复
22、这一过程,一直需要的时间结束即可得到方案的费用应用举例-可靠性问题重复,t=2400 h 25 min应用举例-可靠性问题(2)方案二的仿真方案二与方案一的区别就是一旦故障发生,就更换3个轴承设初始事件表仍为方案一初始表表中最早的事件是A,处理事件A时要考虑延时,更换3个轴承的时间和费用事件类型发生时刻延迟时间A1400h5minB1500h15minC1500h15min cost = (5+40)58316281元应用举例-可靠性问题(2)方案二的仿真方案二与方案一的区别就应用举例-可靠性问题根据下一次三个轴承发生故障的时刻刷新后的事件表:事件类型发生时刻延迟时间A2400h45min5m
23、inB2600h45min10minC2800h45min5min再重复上述过程,累加费用,即可得到方案二的总费用最后比较两种方案的费用大小即可确定选取那一种应用举例-可靠性问题根据下一次三个轴承发生故障的时刻刷新后的应用举例-可靠性问题程序运行结果:T=100000h方案一:cost=32705元方案二:cost=24429元从而得出方案二较方案一优。应用举例-可靠性问题程序运行结果:T=100000h应用举例-可靠性问题/可靠性问题 #include #include #include #define TIMES 100000 struct table float begin; int d
24、elay; int make; ; struct table tab3; float cost=0; int sort3; int make_event1(void) int first=0,sum; sort0=sort1=sort2=-1; float b=tab0.begin; if(btab1.begin)first=1,b=tab1.begin; if(btab2.begin)first=2,b=tab2.begin; int i=0; 应用举例-可靠性问题/可靠性问题应用举例-可靠性问题 if(first=0) sorti+=0; if(tab1.begin=tab0.begin)
25、sorti+=1; if(tab2.begin=tab0.begin)sorti+=2; else if(first=1) sorti+=1; if(tab2.begin=tab1.begin)sorti+=2; else if(first=2)sorti+=2; for(sum=0,i=0;i=0)sum+; switch(sum)case 1:tabsort0.make=20; cost+=(20+tabsort0.delay)*5+4+16; break;case 2:tabsort0.make=30; cost+=(30+tabsort0.delay)*5+6+32; break;ca
26、se 3:tabsort0.make=40; cost+=(40+tabsort0.delay)*5+8+48; break; return sum; 应用举例-可靠性问题 if(first=0)应用举例-可靠性问题int make_event2(void) int first=0,sum;sort0=sort1=sort2=-1;float b=tab0.begin;if(btab1.begin)first=1,b=tab1.begin;if(btab2.begin)first=2,b=tab2.begin;int i=0;if(first=0)sorti+=0;if(tab1.begin=
27、tab0.begin)sorti+=1;if(tab2.begin=tab0.begin)sorti+=2;else if(first=1)sorti+=1;if(tab2.begin=tab1.begin)sorti+=2;else if(first=2)sorti+=2;tabsort0.make=40;cost+=(40+tabsort0.delay)*5+8+48;return sum; 应用举例-可靠性问题int make_event2(void应用举例-可靠性问题 void create_event1(struct table *t) float x,y; struct table
28、 *t1; x=random(1000); x/=1000; t-begin+=(t-delay+t-make)/80.0; if(xbegin+=1000; else if(xbegin+=1200; else if(xbegin+=1300; else if(xbegin+=1400; else if(xbegin+=1500; else if(xbegin+=1800; else if(xbegin+=1700; else if(xbegin+=1800; else if(xbegin+=1900; for(t1=&tab0;t1begin=t-begin) t-delay=t1-del
29、ay;return; y=random(1000); y/=1000; if(ydelay=5; else if(ydelay=10; else if(ydelay=15; return;应用举例-可靠性问题 void create_event1(应用举例-可靠性问题 void create_event2(struct table *t,struct table *t0) float x,y;struct table *t1;x=random(1000);x/=1000;if(t0!=0)t-begin=t0-begin+(t0-delay+t0-make)/80.0;else t-begin
30、+=(t-delay+t-make)/80.0;if(xbegin+=1000;else if(xbegin+=1200;else if(xbegin+=1300;else if(xbegin+=1400;else if(xbegin+=1500;else if(xbegin+=1800;else if(xbegin+=1700;else if(xbegin+=1800;else if(xbegin+=1900;for(t1=&tab0;t1begin=t-begin)t-delay=t1-delay;return; y=random(1000); y/=1000; if(ydelay=5;
31、else if(ydelay=10; else if(ydelay=15; return;应用举例-可靠性问题 void create_event2(应用举例-可靠性问题 void printf_result(void) for(int i=0;i3;i+) printf(%dt%ft%dn,i+1,tabi.begin,tabi.delay); printf(cost=%fn,cost); return; void main1(void) int i;float T=0;memset(tab,0,sizeof(tab);cost=0;randomize();create_event1(&ta
32、b0);create_event1(&tab1);create_event1(&tab2);printf_result();domake_event1();T=tabsort0.begin;printf_result();for(i=0;iTIMES);printf(1:tCost=%f T=%fn,cost,T); 应用举例-可靠性问题 void printf_result(应用举例-可靠性问题void main2(void) int i;float T=0;memset(tab,0,sizeof(tab);cost=0;randomize();create_event2(&tab0,0);
33、create_event2(&tab1,0);create_event2(&tab2,0);printf_result();domake_event2();T=tabsort0.begin;printf_result();for(i=0;iTIMES);printf(2:tCost=%f T=%fn,cost,T); void main(void) main1();main2(); 应用举例-可靠性问题void main2(void)固定增量法选择适当的时间单位T作为仿真钟推进进的增量,每推进一步进行如下处理:1)该步内若无事件发生,则仿真钟再推进一个时间单位;2)若在该步内有若干个事件发生,
34、则认为这些事件均发生在该步的结束时刻。缺点是:仿真钟每推进一步都要检查事件表以确定是否有事件发生,增加了执行时间;将发生的事件均视为发生在这一步的结束时刻,如果T选得过大,会引入较大的误差;且要求确定各类事件处理的顺序,增加了建模的复杂性。主要用于系统事件发生时间具有较强周期性的模型,如定期订货的库存系统,以年、月为单位的经济计划系统等。固定增量法选择适当的时间单位T作为仿真钟推进进的增量,每推进应用举例-报童的策略例 报童每天清晨从报社购进报纸零售,晚上将没有卖掉的报纸退回.每份报纸的购进价为1.3元,零售价为2元,退回价为0.2元.报童售出一份报纸赚0.7元 ,退回一份报纸赔1.1元.报童
35、每天如果购进的报纸太少,不够卖时会少赚钱,如果购得太多卖不完时要赔钱. 试为报童筹划每天应如何确定购进的报纸数使得收益最大.报纸每捆10张,只能整捆购买,报纸可以分为3种类型的新闻日:好、一般、差,它们的概率分别为0.35,0.45和0.2,在这些新闻日中每天对报纸的需求分布的统计结果下图:应用举例-报童的策略例 报童每天清晨从报社购进报纸零售,晚应用举例-报童的策略需求量好新闻的需求概率一般新闻的需求概率 差新闻的需求概率 40 0.03 0.10 0.44 50 0.05 0.18 0.22 60 0.15 0.40 0.16 70 0.20 0.20 0.12 80 0.35 0.08
36、0.06 90 0.15 0.04 0.00 100 0.07 0.00 0.00试确定每天报童应该订购的报纸数量应用举例-报童的策略需求量好新闻的需求概率一般新闻的需求概率应用举例-报童的策略解:我们通过计算机仿真来解决此问题。最优策略应该是每天的利润最大。利润=销售收入-报纸成本-损失+残值这是一个随机现象的计算机仿真问题,故先确定各种情况的随机数的对应关系。新闻日和需求量对应的随机数分别如下面两个表格所示应用举例-报童的策略解:应用举例-报童的策略计算机仿真的流程:1)令每天的报纸订购数变化,40-100;2)让时间从1开始变化(循环)到365;3)产生新闻种类的随机数,确定当天的新闻类
37、型;4)产生需求量随机数,确定当天的报纸需求量;5)计算当天的收入,计算累积利润,8)比较得出最优定货量。需求量好新闻的随机数区间一般新闻的随机数区间差新闻的随机数区间 40 (0.00,0.03 (0.00,0.10 (0.00,0.44 50 0.03,0.08) 0.10,0.28) 0.44,0.66) 60 0.08,0.23) 0.28,0.68) 0.66,0.82) 70 0.23,0.43) 0.68,0.88) 0.82,0.94) 80 0.43,0.78) 0.880.96) 0.94,1.00) 90 0.78,0.93) 0.96,1.00) 100 0.93,1.
38、00应用举例-报童的策略计算机仿真的流程:需求量好新闻的随机数区应用举例-报童的策略具体的计算由Matlab编程计算实现。x1=rand(365,1);x2=rand(365,1);for n=4:10 paper=n*10;购买的报纸量 lr(n)=0;利润 for i=1:365 if x1(i)0.35 if x2(i)0.03 news=40; elseif x2(i)0.08 news=50; elseif x2(i)0.23 news=60; elseif x2(i)0.43 news=70; elseif x2(i)0.78 news=80; elseif x2(i)0.93 n
39、ews=90; else news=100; endelseif x1(i)0.8 if x2(i)0.10 news=40; elseif x2(i)0.28 news=50; elseif x2(i)0.88 news=60; elseif x2(i)0.88 news=70; elseif x2(i)0.98 news=80;应用举例-报童的策略具体的计算由Matlab编程计算实现。 应用举例-报童的策略 else news=90; end else if x2(i)0.44 news=40; elseif x2(i)0.88 news=50; elseif x2(i)0.82 news
40、=60; elseif x2(i)=news sale=news;实际销售量 remand=paper-news;剩余量 应用举例-报童的策略 else 应用举例-报童的策略 else sale=paper; remand=0; end lr(n)=lr(n)+2*sale-1.3*paper+0.2*remand; endendoptnews=40;最佳量optmoney=lr(4);最佳利润 40,lr(4)/365for n=5:10 if lr(n)=optmoney optnews=n*10; optmoney=sb(n); end n,lr(n)/365endoptnews,opt
41、money,optmoney/365 Matlab程序 经过计算机仿真后得到最优购货量是每天60份,平均每天利润34.4元。应用举例-报童的策略 else8.3 随机数的产生 现实世界充满不确定性,我们所研究的现实对象往往难以摆脱随机因素的影响要使我们的数学模型能够较真实地刻画实际对象,必须面对这个现实概率论是用数学的思想和方法处理和研究随机现象的一个有效的工具但是它还难以用来处理复杂系统中的随机性这里介绍使用计算机来模拟随机现象的方法,它经常应用于复杂系统的动态仿真的研究当中是处理复杂系统中随机性的计算机模型也是使用计算机研究和解决实际问题的一条重要途径8.3 随机数的产生 现实世界充满不确
42、定性,我随机现象的模拟1均匀分布的随机数及其产生对随机现象进行模拟,实质上是要给出随机变量的模拟也就是说利用计算机随机地产生一系列数值,它们的出现服从一定的概率分布,则称这些数值为随机数。最常用的是在(0,1)区间内均匀分布的随机数,也就是我们得到的这组数值可以看作是(0,l)区间内均匀分布的随机变量的一组独立的样本值以后我们将指出其它分布的随机数可利用均匀分布的随机数产生随机现象的模拟1均匀分布的随机数及其产生对随机现象进行模随机现象的模拟记 XU(0,1),0,1)区间上均匀分布的随机变量X的概率密度f(x)和概率分布函数F(x)分别为:数学期望: E(X)=1/2; 方 差: = 1/1
43、2 随机现象的模拟记 XU(0,1),0,1)区间上均匀分布随机现象的模拟下图为均匀分布的密度函数和分布函数示意图:随机现象的模拟下图为均匀分布的密度函数和分布函数示意图:随机现象的模拟均匀随机数是产生其它随机数的基础。例如,抛硬币、抽签、统计经验分布都可以由它产生。产生随机数的方法:(1)硬件设备: 从真实物理现象的随机因素中产生随机数,放射性粒子的放射源,电子晶体管的固有噪音等,单位时间内放射出的粒子数是随机的。 优点:真正的随机数; 缺点:外部设备,无法重复随机现象的模拟均匀随机数是产生其它随机数的基础。例如,抛硬币随机现象的模拟(2)数学公式:产生伪随机数 用数学公式或位移寄存器的移位
44、操作来产生的随机数,称为伪随机数.因为真实的随机数, 只能从客观真实的随机现象本身产生出来,所以产生理想的伪随机数列不是一件容易的事. 一般对于产生伪随机数的方法,有如下几点要求:1) 要求伪随机数列有较理想的随机性和均匀性,就是对其随机性和均匀性进行统计检验时, 有合乎要求的精度;2) 产生伪随机数的程序应当简短、运算速度快,占用计算机的内存单元少;3) 伪随机数列的循环周期应当尽可能地大,以满足模拟的需要4) 伪随机数列中,前后之间和各子列之间,要求相互是独立无关的。随机现象的模拟(2)数学公式:产生伪随机数 一般对于随机现象的模拟当我们需要一系列均匀分布的随机数时,可以按照一定的算法由计
45、算机计算产生的伪随机数产生随机数的方法很多,其中以乘同余法使用较广用以产生均匀分布随机数的乘同余法的递推公式为:xn+1= xn(mod M), rn=xn/M其中,是乘因子,M是模数前面式子的右端称为以M为模数(modulus)的同余式。给定了一个初值x0(称为种子)后,计算出的rn即为(0,l)上均匀分布的随机数随机现象的模拟当我们需要一系列均匀分布的随机数时,可以按照一随机现象的模拟无论用哪一种方法产生的随机数都存在这样的问题,必须对它进行统计检验看看它们是否具有较好的独立性和均匀性一般在计算机(或计算器)及其使用的算法语言中都有随机数生成的命令,它们所生成的随机数都是经过检验并且可用的
46、.这里就不再详细介绍检验的方法了随机现象的模拟无论用哪一种方法产生的随机数都存在这样的问题,随机现象的模拟C语言中与随机数有关的函数:randomize(void); 初始化x=random(int M); 产生0M 之间的随机数x=rand(void); 产生0215-1之间的随机数Matlab中与随机数有关的函数:Rand(n)n*n个0,1之间均匀分布随机数Rand(m,n) m*n 个0,1之间均匀分布随机数randn(n)n*n个N(0,1)标准正态分布随机数randn(m,n) m*n个N(0,1)标准正态分布随机数随机现象的模拟C语言中与随机数有关的函数:随机现象的模拟2随机变量
47、的模拟利用均匀分布的随机数可以产生具有任意分布的随机变量的样本,从而可以对随机变量的取值情况进行模拟(l)离散型随机变量的模拟设随机变量X的分布律为Pr(X=xi)=pi,i=1,2,令p(0)=0, p(n)= pi, n=1,2,将p(n)作为分点,把区间(0 , 1)分为一系列小区间(p(n-1), p(n)对于均匀的随机变量RU(0,l),则有Pr(p(n-1)R p(n)= p(n)-p(n-1)= pi ,n=1,2,ni=1随机现象的模拟2随机变量的模拟利用均匀分布的随机数可以产生随机现象的模拟由此可知,事件(p(n-1)R p(n)和事件(X=xn) 有相同的发生的概率因此我们
48、可以用随机变量R落在小区间内的情况来模拟离散的随机变量X的取值情况具体执行的过程是:每产生一个(0,1)上均匀分布的随机数(以后简称随机数)r,若p(n-1)r p(n)则理解为发生事件“X=xn”于是就可以模拟随机变量的取值情况随机现象的模拟由此可知,事件(p(n-1)R p(n)随机现象的模拟(2)连续型随机变量的模拟一般说来,具有给定分布的连续型随机变量可以利用在区间(0,1)上均匀分布的随机数来模拟最常用的方法是反函数法由概率论的理论可以证明,若随机变量Y有连续的分布函数F(y),而X是区间(0,l)上均匀分布的随机变量,令ZF-1(X),则Z与Y有相同的分布由此,若已知Y的概率密度为
49、f(y),由Y=F-1(X)可得XF(Y) = f(y)dyY-随机现象的模拟(2)连续型随机变量的模拟一般说来,具有给定分随机现象的模拟是区间(0,l)上均匀分布的随机变量如果给定区间(0,1)上均匀分布的随机数ri,则具有给定分布的随机数yi可由方程中解出ri F(Y) = f(y)dyyi0例当需要模拟服从参数为的指数分布时,由ri e-xdy=1- e-yiyi0可得yi=-(1/)ln(1-ri).因为(1-ri) 和ri 同为(0,1)区间上的均匀分布的随机数,故上式可以简化为yi=-(lnri)/.随机现象的模拟是区间(0,l)上均匀分布的随机变量如果给定随机现象的模拟反函数法是
50、一种普通的方法,但当反函数不存在或难以求出时,就不宜于使用了舍选法是另一种方法,其实质是从许多均匀随机数中选出一部分,使之成为具有给定分布的随机数步骤如下:设随机变量X有密度f(x),又存在实数ab,使 Pr(aXb)=1.1).选取常数,使f(x) l,x(a,b);2).产生均匀的随机数 r1和 r2,令 y=a(b-a)r1;随机现象的模拟反函数法是一种普通的方法,但当反函数不存在或难随机现象的模拟3).若r2 f(y),则令x=y,否则剔除r1和r2,重返步骤2,如此重复循环,产生的随机数x1, x1,., xn,服从的概率分布由密度函数f(x)确定若不存在上述的有限区间,可以选择一个有限区间(a1,b1)使得 Pr(a1X1-其中 是充分小的正数重复上面的步骤,所产生的随机数仅会出现较小的误差随机现象的模拟3).若r2 f(y),则令x=y,否则剔随机现象的模拟(3)正态随机数的模拟,除了可用反函数和舍选法模拟正态随机变量外,还有两种常用的方法坐标变换法:设r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度城市轨道交通工程进度管理协议合同
- 电力安全教育在科技发展中的角色与挑战
- 2025年度禁止放牧区域生态修复工程合同
- 2025年度海洋资源开发与应用合伙协议
- 电商物流技术创新与智能化发展路径
- 冀教版数学七年级上册《求代数式的值》听评课记录2
- 生态农业与生态教育普及的相互促进
- 环境科学中微生物生态学的实践意义
- 八下物理听评课记录
- 2025年度智能制造生产线操作工劳动合同范本
- 高铁乘务人员形体训练全套教学课件
- 基础护理学智慧树知到期末考试答案章节答案2024年德州学院
- 20210年中考英语复习:阅读理解信息归纳摘录考题汇编(含答案)
- 团餐服务培训资料
- 喉全切除术手术配合
- (正式版)SHT 3225-2024 石油化工安全仪表系统安全完整性等级设计规范
- 人教版六年级数学上册《应用题》专项练习题(含答案)
- 垃圾分类上门回收公司
- (2024年)FSC标准培训课件
- 第三单元 叹锦绣中华书传统佳话(教学设计) 三年级语文下册大单元教学(部编版)
- 商业秘密培训课件模板
评论
0/150
提交评论