- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排队系统仿真 包含C
排队系统仿真实验
1. 实验目的
离散事件系统大量存在于现实生活中。离散事件系统往往是随机的,具有复杂的变化关系,难以用常规的微分方程、差分方程等模型来描述,计算机仿真技术是解决这类问题的有效手段。排队系统是一种非常重要的离散事件系统,也是最早研究的离散事件系统。本实验通过设计一种最简单的单服务台排队系统仿真程序,深入理解排队系统的建模与仿真方法,掌握排队系统仿真的基本步骤和程序设计技术,了解离散事件系统仿真的一般原理。
2. 排队系统仿真程序功能
模拟一个单服务台单队列排队系统的运行过程,完成一定数量活动实体的服务过程,输出排队系统的常用统计指标。
仿真运行时间(可由活动实体数确定)、活动实体到达平均时间间隔、平均服务时间作为参数在程序运行时输入。
3. 关键技术
(1)随机数发生器——乘同余法
递推公式:
程序中采用:
(2)随机变量的产生——变换抽样法
指数分布随机变量的产生:
其中,λ为到达(或服务)速率,1/λ到达时间平均间隔(或平均服务时间),u为随机数。
(3)排队、到达、服务模式
排队规则:先到先服务(FIFO);
到达模式:泊松到达,即相邻两个顾客到达的时间间隔服从指数分布;
服务模式:服务台为活动实体提供服务的时间是随机的,服从指数分布。
(4)常用统计性能指标计算
平均延误时间:
其中,Di为第i个活动实体在队列中耽误的时间。
平均滞留时间:
其中,Wi为第i个活动实体在系统中滞留的时间,Si为第i个活动实体接受服务台服务的时间。
平均队长:
其中,Q(t)为t时刻系统中队列的长度。
平均实体数:
其中,L(t)为t时刻系统中的活动实体数,Q(t)为t时刻队列的长度,S(t)为t时刻接受服务台服务的活动实体数。
4. 程序架构
(1)基本模块
void initialize(void); /*变量初始化*/
void timing(void); /*时间调度*/
void arrive(void); /*到达事件处理*/
void depart(void); /*离开事件处理*/
void report(void); /*统计量输出*/
void update_time_avg_stats(void); /*统计量的更新*/
float expon(float mean); /*指数分布随机变量的变换抽样法*/
(2)程序流程(main()函数)
(3)到达事件处理流程(arrive()函数)
(4)离开事件处理流程(depart()函数)
5. 程序设计
(1)定义
#include stdio.h
#include math.h
/*#include lcgrand.h Header file for random-number generator. */
#define Q_LIMIT 100 /* Limit on queue length. */
#define BUSY 1 /* Mnemonics for servers being busy */
#define IDLE 0 /* and idle. */
int next_event_type, num_custs_delayed, num_delays_required, num_events,
num_in_q, server_status;
float area_num_in_q, area_server_status, mean_interarrival, mean_service,
sim_time, time_arrival[Q_LIMIT + 1], time_last_event, time_next_event[3],
total_of_delays;
FILE *infile, *outfile;
float lcgrand(int stream);
void initialize(void);
void timing(void);
void arrive(void);
void depart(void);
void report(void);
void update_time_avg_stats(void);
float expon(float mean);
(2)主程序
main() /* Main function. */
{
/* Open input and output files. */
infile = fopen(mm1.in, r);
outfile = fopen(mm1.out, w);
/* Specify
文档评论(0)