计算机仿真实验报告
学 号:2013214926
班 级:机设13-3班
姓 名: 田启军 指导老师: 翟 华
日期 2016年4月12日
单服务员单队列系统仿真实验
实验要求及实验报告
一.实验要求及目的
通过实验了解离散事件系统仿真一般过程,了解离散事件系统中典型的单服务.单队列系统的仿真一般过程,并理解单服务.单队列系统的流程过程,能画出流程图,了解不同分布随机数的计算机实现过程,了解事件扫描法在离散事件系统中的应用。
同学能在参考源程序的基础上,独立编写C源程序,或其他高级语言程序,能正确理解程序含义,能正确计算仿真结果,并对结果进行分析。
二.实验报告
1.给出RAND()子程序输出的10个数据,以及对应的符合正态分布和指数分布的随机数。 RAND() 1 2 3 4 5 0.979553 0.664057 0.504250 0.527916 0.193561 2.4904 4.0939 3.0001 6.3882 2.6499 6.8468 3.2569 16.4216 NORMAL 2.9767 EXPENT() 0.2066
RAND() 6 7 8 9 10 0.959777 0.683238 0.084337 0.162432 0.080400 4.5799 3.8091 3.7783 24.7294 1.6343 18.1749 6.6180 25.2074 NORMAL 2.9658 EXPENT() 0.4105
2.分别输入下列三组数据,给出相应的计算结果(包括服务员
忙度、平均服务时间、平均到达间隔时间、顾客在系统中平均时间、顾客在队列中平均时间、系统中平均顾客数、队列中平均顾客数、停留4个时间单位以上的顾客比例等),并加以文字说明。 (1)输入数据为:
MIAT=10, MSVT=5,SIGMA=2,TIME=100
miat=10.000000,msvt=5.000000,sigma=2.000000,time=100.000000 rho=0.482677,mq=2.000000,pc=0.454545,clock=114.048820 nd=11.000000,amts=4.362051,amta=9.973741 lq=1.026730,l=1.509407,wq=10.645217,w=3.600372
(2)输入数据为:
MIAT=10, MSVT=3,SIGMA=1,TIME=100
miat=10.000000,msvt=3.000000,sigma=1.000000,time=100.000000 rho=0.242204,mq=1.000000,pc=0.111111,clock=108.105759 nd=9.000000,amts=2.909301,amta=11.269994 lq=0.682092,l=0.924297,wq=8.193123,w=2.863684
(3)输入数据为:
MIAT=10, MSVT=30,SIGMA=2,TIME=100
miat=10.000000,msvt=30.00000,sigma=2.000000,time=100.000000 rho=0.998272,mq=8.000000,pc=1.000000,clock=119.530281 nd=4.000000,amts=29.953489,amta=9.972269 lq=5.037513,l=6.035784,wq=150.533829,w=15.594049
三.实验内容
在C语言环境下,输入C语言程序:
#include \#include \
FILE * fp; float seed; int sstop,ip;
float miat,msvt,svt; float tval,tlq,tmen;
float sigma,time,lqt,lst,tle; float wkst[100];
float b,mq,s,f,nd,ts,is,ta,ia,clock,fel[3]; int imevt,numevs;
rptgen() //报告生成子程序
{ float rho,w,pc,amts,amta,lq,l,wq; rho=b/clock; w=s/nd; pc=f/nd; amts=ts/is; amta=ta/ia; lq=tlq/clock; l=tmen/clock; wq=tlq/nd;
if((fp=fopen(\{printf(\}
printf(\
fprintf(fp,\fprintf(fp,\fprintf(fp,\fprintf(fp,\}
float rand() //随机数生成子程序 {float a,c,m; float rand1; a=25173.0; c=13849.0; m=65535.0;
seed=(seed*a+c)-m*(int)((seed*a+c)/m); if(seed==0.0) seed=1.0; rand1=seed/m;
return rand1; }
float normal(ex,stdx) float ex,stdx; {float sum,x; int i; float r; sum=0.0;
for(i=1;i<=12;i++) {r=rand(); sum=sum+r;}
x=stdx*(sum-6.0)+ex; return x; }
float expent(ex) float ex; {float r,x; r=rand();
printf(\x=-ex*log(r); return x; }
//正态分布随机数生成子程序
//指数分布随机数生成子程序
initlz() //系统初始化子程序 {float aat;
clock=0.0; //置仿真时钟为0.0 imevt=0; //假定系统在时间0为空闲 lqt=0.0; //置以下各统计量初值为0 lst=0.0; tle=0.0; b=0.0; mq=0.0; s=0.0; f=0.0; nd=0.0; ts=0.0; is=0.0; ta=0.0; ia=0.0; tlq=0.0; tmen=0.0;
aat=expent(miat);