系统模拟实验的三个案例_第1页
系统模拟实验的三个案例_第2页
系统模拟实验的三个案例_第3页
系统模拟实验的三个案例_第4页
系统模拟实验的三个案例_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. .系统模拟实验的三个案例实验案例   赶上火车的概率   1实验案例1.1 赶上火车的概率1.1.1问题描述如图,一列火车从A站开往B站,某人每天赶往B站上这趟火车。他已了解到:1   火车从A站到B站的运行时间是均值为30分钟,标准差为2分钟的随机变量;2   火车在下午大约1点离开A站,离开时刻的频率分布如下: 出发时刻午后1:00午后1:05午后1:10频率0.70.20.1 此人到达B站的时刻频率分布为:时刻午后1:28午后1:30午后1:32午后1:34频率0.30.40.20.1问他能赶上

2、火车的概率是多少? 1.1.2 变量说明:火车从A站出发的时刻;:火车从A站到B站的运行时间;单位:分钟:他到达B站的时刻1.1.3 问题分析与假设此问题包含多个随机因素。 这里假设,都是随机变量,其中服从正态分布。 1.1.4 模型建立很显然,他能及时赶上火车的条件是:。为了简化计算,将下午1点记为初始时刻。和的分布律如下: /min 0 5 10 0.7 0.2 0.1 /min 28 30 32 34 0.3 0.4 0.2 0.1 为了模拟随机变量。如果为在均匀分布的随机数,为了模拟随机变量,可以通过如下方法。,。其中,和分别用来模拟随机变量和。 1.1.5模拟算法变量说明:

3、 k 临时变量,存储当前累计模拟次数 count 存储赶上火车的次数 第 1 步       输入模拟次数n 第 2 步       k=1,count=0 第 3 步       当k<=n,执行第4步,否那么执行第12步 第 4 步       生成均匀分布随机数赋给r 第 5 步     

4、0; 由r及公式确定T1模拟火车出发时刻 第 6 步       生成均匀分布随机数赋给r; 第 7 步       由r及公式确定T3模拟人到达时刻 第 8 步       生成正态分布随机数T2模拟火车运行时间 第 9 步       IF T1+T2 > T3, count=count+1,END第 10 步  k = k + 1 第

5、11 步  执行第3步 第 12 步  输出赶上火车频率p=count/n 1.1.6 模拟程序%sim_train.mtotal=input('输入模拟次数:'); count=0; for i=1:total, %模拟随机变量t1火车从A站出发的时刻   rt1=rand; if rt1<0.7          T1=0; elseif rt1>=0.7 & rt1<0.9     

6、60;   T1=5; else         T1=10; end%模拟随机变量t2火车的运行时间      T2=30+randn*2;   %模拟随机变量t3他到达B站的时刻      rt3=rand; if rt3<0.3         T3=28; elseif rt3>=0.3 & rt3<0.

7、7          T3=30; elseif rt3>=0.7 & rt3<0.9          T3=32; else            T3=34; end   if T3 < T1 + T2,%赶上了        

8、    count=count+1;   endend%forprob=count/total 1.1.7 模拟结果命令行中输入以下语句: sim_train   运行结果输出:   输入模拟次数:100   prob =   0.6302 此次运行结果显示赶上火车的近似概率为0.6左右。下面列表给出屡次运行模拟程序的结果。   序号 模拟次数 近似概率p 1 500 0.6280 2500 0.6920 3 1000 0.6530 4 1000 0.6490 5 5000 0.6260 6 5

9、000 0.6288 1.1.8 评价与改进方向为了计算赶上火车的概率,本文采用了随机系统模拟的方法。如果能够从模型出发,对赶上火车的概率进展近似计算,然后与模拟结果进展比照,这样模拟会更有说明力。 1.1.9 思考题1   请思考用其它方法计算赶上火车的概率或近似概率。 2   如果要使得他赶上火车的概率大于95%,你有什么方法?结合上面的数学模型及模拟程序来思考。 3   通过该问题的建模求解,你能归纳出一般系统模拟的方法步骤么? 实验案例       理发店模拟 1 实

10、验案例1.1 案例:理发店模拟 例子:一个理发店有两位效劳员A和B,顾客们随机到达店内,其中60的顾客仅需剪发,每位花5分钟时间,另外40顾客既要剪发又要洗发,每位用时8分钟。 理发店是个含有多种随机因素的系统,请对该系统进展模拟,并对其进展评判。准备怎么做可供参考内容“排队论,“系统模拟,“离散系统模拟,“事件调度法1.1.1 问题分析理发店系统包含诸多随机因素,为了对其进展评判就是要研究其运行效率,从理发店自身利益来说,要看效劳员工作负荷是否合理,是否需要增加员工等考虑。从顾客角度讲,还要看顾客的等待时间,顾客的等待队长,如等待时间过长或者等待的人过多,那么顾客会离开。理发店系统是一个典型

11、的排队系统,可以用排队论有关知识来研究。1.1.2 模型假设160的顾客只需剪发,40的顾客既要剪发,又要洗发; 2每个效劳员剪发需要的时间均为5分钟,既剪发又洗发那么花8分钟; 3顾客的到达间隔时间服从指数分布;4效劳中效劳员不休息。1.1.3 变量说明u:剪发时间单位:分钟,u=5m; v: 既剪发又理发花的时间单位:分钟,v=8m; T: 顾客到达的间隔时间,是随机变量,服从参数为 的指数分布,单位:分钟T0:顾客到达的平均间隔时间单位:秒,T0 ;1.1.4 模型建立由于该系统包含诸多随机因素,很难给出解析的结果,因此可以借助计算机模拟对该系统进展模拟。考虑一般理发店的工作模式,一般是

12、上午9:00开场营业,晚上10:00左右完毕,且一般是连续工作的,因此一般营业时间为13小时左右。 这里以每天运行12小时为例,进展模拟。 这里假定顾客到达的平均间隔时间T0服从均值3分钟的指数分布, 那么有3小时到达人数约为 人,6小时到达人数约为 人,10小时到达人数约为 人,这里模拟顾客到达数为60人的情况。 如何选择模拟的总人数或模拟总时间1.1.5 系统模拟根据系统模拟的一般方法,需要考虑系统的如下数据、参数。1.        状态变量1     等待效劳的顾客数;2  &

13、#160;  A 是否正在效劳;3     B 是否正在效劳;2.        实体:两名效劳员、顾客们3.        事件: 1     一名新顾客的到达;2     A 开场效劳;3     A 完毕效劳;4     B 开场效劳;5     B 完毕效劳;4

14、.        活动:1     顾客排队时间2     顾客们到达的间隔时间3     A 的效劳时间4     B 的效劳时间;在系统模拟时,为了研究系统的整体情况,这里考虑顾客到达后不离开,且等待队长不限。要考虑如果效劳员均空闲时,顾客先选择谁效劳?要考虑模拟的时间设置还有顾客数目。模拟终止条件是根据顾客数目还是根据营业时间终止?1.1.6 计算机模拟算法设计自行设计finished=0; 初始化运

15、行时钟 while finished=0             if   产生的顾客数不到规定数目时 then, 产生该顾客的有关数据; 将顾客参加等待队列; else 运行时钟继续; endif 处理效劳员的状态包括工作状态,空闲时间; 获得效劳员的效劳优先顺序; 根据效劳员优先顺序从等待队列中安排效劳; endwhile 有无参考算法?离散系统仿真算法:事件调度法1.1.7 计算机模拟程序顾客到达的间隔时间T的计算机产生方法,利用T=, %理发店系统的模拟案例

16、分析之一%关键词:面向事件的计算机模拟技术clear all curclock=0;%当前时刻,动态变化totalcustomer=0;%总共效劳的顾客数numsrv=2; srvstatus=zeros(numsrv,5);%效劳员有关数据%srvstatus 第1列:效劳状态0空闲,1正在效劳;第2列:当前效劳顾客编号;%   第3列:当前效劳完毕时刻;第4列:效劳员空闲时间;第5列:效劳的顾客总数endtime =0;%完毕时间waiting=;%等待队列数据%waiting 第1列:顾客编号;第2列:顾客到达时刻;第3列:顾客开场承受效劳时刻;% 

17、0;    第4列:承受效劳时间;第5列:顾客完毕效劳时刻;第6列:间隔时间cur=zeros(1,6);%当前产生顾客的数据,对应关系同waitingavgwaitlen=;%平均等待队长avgwaittime =;% 平均等待时间ujiange=5;%平均间隔时间finished=0; numsimucustumer=yesinput('输入等待模拟的顾客数:',10,10 1000); while   finished=0, if totalcustomer < numsimucustumer %产生一个顾客的到达及其有关性质

18、的数据      totalcustomer = totalcustomer+1;            jiange= -log(rand)*ujiange;%与上一个顾客的到达的间隔时间      curclock = curclock + jiange;       cur(1)= totalcustomer ;% 第1列:顾客编号cur(2

19、) = curclock;%第2列:顾客到达时刻cur(6) = jiange; 第6列:间隔时间%下面产生承受效劳时间可改进模型if rand<0.6, %产生顾客有关性质:这里是产生承受效劳时间cur(4) = 5; else         cur(4) = 8; end%放入等待队列if isempty(waiting),          waiting= cur; else    

20、;     m,n=size(waiting);          waiting(m+1,:)= cur; endelsecurclock = curclock + (-log(rand)*ujiange); end%if totalcustomer<%分配等待队列看是否有效劳员空闲,如果有那么分配;否那么继续执行%处理效劳员的效劳状态for i=1:numsrv, if srvstatus(i,1)=1 & srvstatus(i,3) <= curc

21、lock,          srvstatus(i,1)=0;%设置为空闲状态         srvstatus(i,4)= curclock-srvstatus(i,3);%目前已经空闲的时间elseif srvstatus(i,1)=1 & srvstatus(i,3) > curclock,          srvstatus(i,

22、4)= 0;%没有休息正在忙elsesrvstatus(i,4)= curclock-srvstatus(i,3);%目前已经空闲的时间end      end%处理效劳员效劳的先后顺序依据空闲时间精细处理tmp=srvstatus(:,4); for i=1:numsrv,       value,id=max(tmp);       b(i)=id;       tmp(id)=0;%已经排序

23、了      end%此时等待队列必然不为空for j=1:numsrv,       i=b(j);%确定效劳员的序号if(srvstatus(i,1)=0) %找一个顾客开场效劳,同时计算该顾客什么时候承受效劳,完毕效劳;         m,n=size(waiting); if m=0, break; end         &#

24、160;        if waiting(1,5)=0,%还没有开场承受效劳            waiting(1,3)= curclock;             waiting(1,5)= waiting(1,3)+waiting(1,4);%完毕时刻srvstatus(i,1)=1;%设置为忙

25、状态            srvstatus(i,2)=waiting(1,1);%顾客编号srvstatus(i,3)= waiting(1,5);%完毕时刻srvstatus(i,5)=srvstatus(i,5)+1;%又效劳了一个顾客%计算等待时间            avgwaittime(end+1) = waiting(1,3)-waiting(1,2);&#

26、160;                       disp(sprintf('间隔时间(%8.2f) 顾客编号:%5d 承受效劳员%4d效劳(到达时刻%10.2f)',waiting(1,6),waiting(1,1),i,waiting(1,2)           

27、  endtime=max(endtime,waiting(1,5)             waiting(1,:)=;%从等待队列中离开end      end%if      end%for  m,n=size(waiting); %计算队长这里的计算式子可以参考排队论有关术语进展确定if totalcustomer < numsimucustumer &

28、#160;     avgwaitlen(end+1)=m; end   if sum(srvstatus(:,5)>=numsimucustumer,%队列为空,完毕finished=1; endend%whiledisp('效劳顾客数:') disp(srvstatus(:,5)') disp('平均队长'); disp(mean(avgwaitlen); disp('运行时间分钟,小时'); disp(sprintf('%8.f%8.f',curclo

29、ck,curclock/60); disp('平均等待时间分钟'); disp(mean(avgwaittime ); disp('完毕时间分钟'); disp(endtime ); figure hist(avgwaitlen)   title('平均队长') figure hist(avgwaittime) title('平均等待时间'); 1.1.8 思考题请运行模拟程序,并分析运行结果。实验案例 一个修理厂的模拟 1 实验案例1.1 案例:一个修理厂的模拟1.1.1 问题描述某修理厂设有3个停车位置,其

30、中一个位置供正在修理的汽车停放。现以一天为一个时段,每天最多修好一辆车,每天到达修理站的汽车数有如下概率分布: 到达数 0 1 2 概率 06 02 02 假定在一个时段内一辆汽车能够修好的概率为0.7,本时段内未能完成修理的汽车于正在等待修理的汽车一起进入下一时段。试问:该停车厂有无必要增加停车位置,并说明理由。 1.1.2 模拟模型       这种排队论方面的问题采用固定时间增量法模拟。模拟以一天为一个时段,模拟纵时间最好在1000天以上。        模拟汽车到达数

31、量,根据概率分布:产生在0,1上均匀分布的随机数t,如果,那么认为当天到达的车辆数为0辆;如果,那么认为当天到达的车辆数为1辆,如果,那么认为当天到达的车辆数为2辆。        模拟修理情况:由于一天最多修好一辆,而一个时段内一辆汽车修好的概率为0.7,那么模拟每两车的修理情况,如果这些车所能修好数目大于等于1辆,那么以当天修好1辆计。 1.1.3 模拟程序       本模拟程序编写了一个主函数queue,另外在函数queue中编写了2个子函数: gete:模拟车辆到来

32、情况,返回当天到来的车辆数目 getrepaired:模拟修理情况,返回修好的车辆数目 整个模拟程序如下:2005/6/6新版本 function queue %2005-6-6%排队模拟主程序%排队问题模拟%numdays=input('请输入模拟天数:') numstay=0;%假定最初修理站还没有待修理的汽车LEN=6;%定义常量matfrequence=zeros(1,LEN);%第i个元素表示当天末还有i-1辆车在没有修好的时段频数leave_norepair=0;%存储来到,但没有停车位置而离开的车辆数for days=1:numdays%主循环,模拟numdays

33、个时段temp= gete; if numstay + temp>3 ,       leave_norepair = leave_norepair + (numstay + temp - 3); end%nume=numstay+gete;%2004-10-10:这里有问题,受限制与停车位置数量nume=min(3,numstay + temp);%        %头一天还没有修好的车辆数当天新到来的车辆数   %numstay表示当天末还没有修理好的车辆

34、数目   numstay=max(0,nume - getrepaired(nume);%matfrequence(numstay+1)=matfrequence(numstay+1) + 1 ;  endmatfrequence prob=matfrequence/numdays disp(sprintf('平均每天夜里停放在修理站的车辆数=%4.2f',.sum(matfrequence/numdays.*0:LEN-1) %sprintf('=%.4f',sum(matfrequence/numdays.*0:LEN-1)disp(sprintf('平均每天因位置而未修理而离开修理站的车辆数=%4.2f',.leave_norepair/numdays) %sprintf('=%.4f',leave_norepair/numdays)leave_norepair function nu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论