计算机仿真.ppt
《计算机仿真.ppt》由会员分享,可在线阅读,更多相关《计算机仿真.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机仿真计算机仿真5.1 动态实体的实现动态实体的实现1.到达时刻的计算到达时刻的计算对于特定的仿真问题,到达时间间隔是满足对于特定的仿真问题,到达时间间隔是满足指定概率分布的。如将仿真开始时刻确定为指定概率分布的。如将仿真开始时刻确定为t0=0,就可以获得一个,就可以获得一个随机的随机的时间间隔时间间隔i,由,由上一次的动态实体到达时刻上一次的动态实体到达时刻ti-1,计算出本次的,计算出本次的动态实体到达时刻动态实体到达时刻ti=ti-1+i。1 2 t0 t1 t2 t2.动态实体的表示动态实体的表示 以前面的银行系统为例,使用面向事件的以前面的银行系统为例,使用面向事件的仿真程序结构
2、。仿真程序结构。在程序中将使用带指针结构体来表示动态在程序中将使用带指针结构体来表示动态实体。用实体。用C+定义一个动态实体的记录如下:定义一个动态实体的记录如下:struct TRANSACT/动态实体 inttransnum;/动态实体号 unsigned char rank;/优先级(0255)float timeborn,timeenter;/生成时刻,入队时刻 intattrib1,attrib2;/整型属性变量 float attri;/实型属性变量./其它属性 TRANSACT *nexttrans;/后继指针;有关动态实体的基本操作(方法)有有关动态实体的基本操作(方法)有4种
3、:种:(1)动态实体的生成动态实体的生成void generate(int&j);l生成一个动态实体记录生成一个动态实体记录l给出给出编号编号(J)、生成时刻;对有关属性初始化、生成时刻;对有关属性初始化l将新(动态实体)记录加入到将新(动态实体)记录加入到动态实体链动态实体链中中head新新NIL(2)按动态实体编号从相关记录链中寻找按动态实体编号从相关记录链中寻找void findtrans(int transnum,TRANSACT*p)依据动态实体编号(依据动态实体编号(transnum)从)从链链(head)中查找记录(动态实体);中查找记录(动态实体);找到,返回指向该记录的指针找
4、到,返回指向该记录的指针(p),找不到,找不到,p=null。(3)按动态实体编号从记录链中寻取出动态实体按动态实体编号从记录链中寻取出动态实体void transget(TRANSACT&*p,int transo)从从链链中查找编号为(中查找编号为(transo)的动态实体(用)的动态实体(用findtrans()函数)函数)如找到,将该记录从如找到,将该记录从链链上取下,上取下,p指向动态实体指向动态实体未找到,未找到,p=null(4)消灭动态实体消灭动态实体 void terminate(int j)将编号等于将编号等于j的动态实体从的动态实体从链链上取下,还给上取下,还给系统。系统
5、。5.2 排队线的实现排队线的实现对例子(银行)中的顾客要选择排队线,对例子(银行)中的顾客要选择排队线,实现排队线的方法仍可采用记录结构:实现排队线的方法仍可采用记录结构:struct QUEUEBLOCKchar name20;/排队线名字排队线名字int number;/排队线编号(同名的排队线可以有多条排队线编号(同名的排队线可以有多条)int length;/队列的当前长度队列的当前长度intlentgthmax;/队列的最大长度队列的最大长度float timelast;/最后的(入最后的(入/离)队列操作时刻,用于计算离)队列操作时刻,用于计算float waitmax;/(队中
6、实体的)最长等待时间(队中实体的)最长等待时间float waitsum;/(队中实体的)等待时间之和(统计均值用(队中实体的)等待时间之和(统计均值用)float wait2sum;/等待时间之平方和(统计方差用)等待时间之平方和(统计方差用)float lwsum;/队列加权长度和:(统计平均队长)队列加权长度和:(统计平均队长)float l2wsum;/队列加权长度平方和:(统计队长均方)队列加权长度平方和:(统计队长均方)intcount;/离队操作计数器(计数得到服务的实体离队操作计数器(计数得到服务的实体)QUEUEBLOCK *nextqueue;/连接其它排队线连接其它排队线
7、TRANSACT*member;/连接排队的实体连接排队的实体headqueuefile122file111file210NIL顾客顾客顾客顾客NIL顾客顾客NIL排队线结构排队线结构 队名队名 编号编号 队长队长排队线的基本操作有排队线的基本操作有4个:个:(1)定义一个排队线定义一个排队线void queue(char*q,int n)l根据给定的队列名字(根据给定的队列名字(q)和队列数)和队列数(n),建,建立一组新的排队线记录立一组新的排队线记录l对其所有属性变量置对其所有属性变量置0l完成连接到完成连接到headqueue链中链中(2)查找排队线查找排队线void findqueu
8、e(char*q,int n,QUEUEBLOCK&p)从已连接的多个排队线(记录)中,查找具从已连接的多个排队线(记录)中,查找具有指定队列名(有指定队列名(q)和编号)和编号(n)的排队线。的排队线。找到返回指向该记录的指针找到返回指向该记录的指针(p),否则返回否则返回p=null。void findqueue(char*q,int n,QUEUEBLOCK&p)p=headqueue;if(p)while(strcmp(p-name,q)!=0)|(p-number!=n)&(p-nextqueue)p=p-nextqueue;/继续检测下一个排队线记录继续检测下一个排队线记录if(s
9、trcmp(p-name,q)!=0)|(p-number!=n)/找不到找不到 p=null;(3)入队操作入队操作void enqueue(char*q,int n,int j)将指定编号将指定编号(j)的动态实体,按其优先权的动态实体,按其优先权(rank)的大小,插入到指定的排队线的大小,插入到指定的排队线(q,n)的动的动态实体记录排队链(态实体记录排队链(member)中;并进行队)中;并进行队列的统计量的运算。列的统计量的运算。void enqueue(char*q,int n,int j)transget(pt,j);/从动态实体记录链中取出实体从动态实体记录链中取出实体(j)
10、,由,由pt指向指向findqueue(q,n,pq);/查找需插入的队列查找需插入的队列(q,n),由,由pq指向指向if(pq)/找到队列记录找到队列记录 if(排队线排队线“空空”)将将pt指向的动态实体挂在排队线(指向的动态实体挂在排队线(pq)的第一个)的第一个 else 按优先数的大小,将按优先数的大小,将pt指向的动态实体加入到指向的动态实体加入到pq队列中队列中 pt-timeente:=tnow;/记录下当前时刻记录下当前时刻tnowpt-l2wsum=pt-l2wsum+(tnow-pt-timelast)*pt-length*pt-length;pt-lwsum=pt-l
11、wsum+(tnow-pt-timelast)*pt-length;pt-length+;/队长度队长度+1pt-timelast=tnow;/记录最新的队列操作时刻记录最新的队列操作时刻if(pt-lengthmaxlength)pt-lengthmax=pt-length;/修改队列最大长度修改队列最大长度其中统计量的计算:其中统计量的计算:lwsum=l2wsum=Li当前队列长度(当前队列长度(length)仿真结束时的计算:仿真结束时的计算:队列平均长度队列平均长度=lwsum/T (T仿真时间仿真时间)队列长度方差队列长度方差=l2wsum/T(4)离队操作离队操作void edq
12、ueue(char*q,int n,int&j);l将排在指定队列(将排在指定队列(q,n;pq指向)上处于最前指向)上处于最前位置的动态实体(位置的动态实体(j)取下()取下(pt指向),挂回到指向),挂回到记录链中。记录链中。l再对排队线做统计处理:再对排队线做统计处理:.tw=tnow-pt-timeenter;/计算实体的排队时间计算实体的排队时间pq-waitsum=pq-waitsum+tw;/等待时间统计等待时间统计If(tw pq-waitmax)pq-waitmax=tw;/修改最大等待(排队)时间修改最大等待(排队)时间pq-lwsum=pq-lwsum+(tnow-pq-
13、timelast)*pq-length;pq-lwsum=pq-lw2sum=(tnow-pq-timelast)*pq-length*pq-length;pq-length-;pq-timelast=tnow;pq-count+;.5.3 设备的实现设备的实现在银行系统中,出纳员是设备。一个银行在银行系统中,出纳员是设备。一个银行可以有多个出纳员同时工作。可以有多个出纳员同时工作。因此在描述设备时,除了应使用因此在描述设备时,除了应使用“设备(组)设备(组)名名”外,还需要设备的外,还需要设备的“设备号设备号”区别同一类型区别同一类型的不同设备。的不同设备。设备的主要状态标志是要能反映该设备
14、的设备的主要状态标志是要能反映该设备的“忙忙”或或“空闲空闲”状态。设备也可以用记录表示:状态。设备也可以用记录表示:struct EQUIPBLOCK char name8;/设备(组)名设备(组)名 int unit;/设备(部件)号设备(部件)号 int state;/“忙忙”=1或或“空闲空闲”=0 TRANS*trans;/连接正在接受服务的动态实体连接正在接受服务的动态实体 float timestart;/开始服务时刻开始服务时刻 int usecount;/服务次数计数服务次数计数 float timesum;/服务时间计数服务时间计数 QUEUEBLOCK*nextunit;
15、/与同名(组)设备与同名(组)设备,不同部件(设备)的连接不同部件(设备)的连接 QUEUEBLOCK*nextequip;/与不同组(名)设备的与不同组(名)设备的连接接HEADEQUIPE11E12E13nullnullE11nullE11nullnullE12nullnull动态实体动态实体有关设备的操作:有关设备的操作:(1)生成设备组生成设备组void equip(char*f,int n);l根据指定的设备组名(根据指定的设备组名(f)和设备数()和设备数(n),),生成生成n个设备记录个设备记录l对有关变量设置初值(对有关变量设置初值(NULL,FREE,0)l将将n个同名设备按
16、序加入个同名设备按序加入设备链设备链中中(2)查找设备组查找设备组void findequip(char*f,EQUIPBLOCK&*p);从从设备链设备链中找出具有指定设备组名中找出具有指定设备组名(f)的设的设备组记录的首记录,由指针备组记录的首记录,由指针p指向,找不到指向,找不到p=NULL。(3)查找设备(部件)查找设备(部件)void findunit(char*u,LINKEQUIP&*p);从指针从指针p指向的指向的设备组链设备组链中查找具有指定中查找具有指定设备号设备号(u)的设备。返回查到的设备,由的设备。返回查到的设备,由p指指向,或向,或p=NULL。(4)设备服务设备
17、服务void reserve(char*e,char*u,int trans0,float t,int event0);l对指定的设备组对指定的设备组(e)和设备号和设备号(u)的设备查询其状态。当的设备查询其状态。当u=0表示对该设备组中查找其状态为表示对该设备组中查找其状态为“空闲空闲”的任意设备。的任意设备。l如果查找的设备为如果查找的设备为“空闲空闲”,就使该设备进入服务,置状,就使该设备进入服务,置状态态“忙忙”。l进行有关的设备统计处理,将需要服务的动态实体进行有关的设备统计处理,将需要服务的动态实体(trans0)从实体)从实体记录链记录链中找出,挂在设备记录上。中找出,挂在设备
18、记录上。l生成一个生成一个事件记录事件记录(event0,t)加到)加到事件表事件表上上(shedul()(5)服务结束服务结束void giveup(char*e,char*u,int trans0 int b);l对指定的设备组(对指定的设备组(e)中编号为()中编号为(u)的设备进)的设备进行服务结束处理。参数行服务结束处理。参数b=1表示要求对使用的表示要求对使用的设备做使用次数和时间的统计处理,设备做使用次数和时间的统计处理,b=0表示表示不需要。不需要。l使挂在该设备上的动态实体使挂在该设备上的动态实体(trans0)离开,加离开,加入到入到实体记录链实体记录链中。中。l进行相关的
19、设备统计处理进行相关的设备统计处理l置设备为置设备为“空闲空闲”状态状态(6)填写设备(记录)过程)填写设备(记录)过程 void fillequip(PP:EQUIPBLOCK*pp,float t,int trans0,int event0);reserve()过程(设备服务)要调用该过程。过程(设备服务)要调用该过程。具体操作如下:具体操作如下:lstate=1;置设备状态置设备状态“忙忙”l从从实体记录链实体记录链中取下动态实体中取下动态实体(trans0),使用,使用transget(pt,trans0)过程过程l实体记录实体记录的属性中填入事件(的属性中填入事件(event0)l将
20、动态实体挂到设备(将动态实体挂到设备(pp指向)指向)l调度设备调度设备的本次服务开始时刻为的本次服务开始时刻为tnow5.4 事件调度事件调度在面向事件的仿真结构中,所有活动都是在面向事件的仿真结构中,所有活动都是按事件表的预先安排进行的。按事件表的预先安排进行的。仿真事件表是由仿真事件表是由“事件事件”组成的,事件可以组成的,事件可以用记录定义。其结构为:用记录定义。其结构为:struct EVENTBLOCK inteventnum;/需要执行的事件类型需要执行的事件类型(如1到达,2离去)int transom;/与事件相关的实体号与事件相关的实体号 float timeoccur;/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机仿真
限制150内