当前位置:文档之家› 离散事件仿真

离散事件仿真

离散事件仿真
离散事件仿真

离散事件仿真基本原理

赵问道

浙江大学信息与通信工程研究所

目录

一、离散事件仿真的基本概念 (3)

1. 基于事件的(event-based)离散事件仿真 (3)

2. 基于活动的(activity-based)离散事件仿真 (3)

3. 基于进程的(process-based)离散事件仿真 (3)

4. 三阶段(three-phase)离散事件仿真 (3)

二、离散事件仿真系统的组成 (4)

1. 时钟(Clock) (4)

2. 事件列表(Events List) (4)

3. 随机数发生器(Random-Number Generators) (5)

4. 统计(Statistics) (5)

5. 结束条件(Ending Condition) (5)

三、仿真引擎逻辑(Simulation Engine Logic) (5)

1. 开始(Start) (5)

2. 循环(“Do loop” or “While loop”) (6)

3. 结束(End) (6)

离散事件仿真基本原理

一、离散事件仿真的基本概念

在离散事件仿真中,系统的操作通过按时间顺序排列的一组事件序列来表示。每个事件发生在某一时刻,表示系统的状态改变。例如,如果仿真电梯,那么事件可以是“6层的按钮按下了”,随之系统状态改成“电梯移动”,并且最后到达状态“电梯位于6层”i。

学习如何建立离散时间仿真的一个普通例子是仿真一个队列(queue),如顾客到达银行接受出纳员的服务,这里的系统实体是“顾客队列”(CUSTOMER-QUEUE)和“出纳员”(TELLERS)。系统事件是“顾客到达”(CUSTOMER-ARRIV AL)和“顾客离开”(CUSTOMER-DEPARTURE)(事件“出纳员开始服务”(TELLER-BEGINS-SERVICE )可以是到达和离开事件逻辑的组成部分) 。可以由这些事件改变的系统状态有“队列中的顾客数量”(NUMBER-OF-CUSTOMERS-IN-THE-QUEUE (是一个从0到n的整数) )和“出纳员状态”(TELLER-STATUS (忙或空闲))。为了仿真系统随机性需要的随机变量(random variables)是“顾客到达间隔时间”(CUSTOMER-INTERARRIV AL-TIME)和“出纳员服务时间”(TELLER-SERVICE-TIME)。

目前已经提出的实现离散时间仿真的基本方法有基于事件的(event-based)、基于活动的(activity-based)、基于进程的(process-based)和三阶段(three-phase,Pidd1998)等方法。三阶段方法在很多商业化仿真软件包中得到了应用,但从用户角度看,所采用的仿真方法的细节一般是被隐藏掉的。

1. 基于事件的(event-based)离散事件仿真

2. 基于活动的(activity-based)离散事件仿真

3. 基于进程的(process-based)离散事件仿真

4. 三阶段(three-phase)离散事件仿真

二、离散事件仿真系统的组成

除了系统状态变量和系统事件发生逻辑外,离散事件仿真还包括以下组成部分:

1. 时钟(Clock)

仿真系统必须要保持对当前仿真时间的跟踪。在离散事件仿真中,与实时仿真(real time simulations)不同,时间是跳跃的(time ‘hops’ ),因为事件是瞬时发生的– 随着仿真的进展,时钟跳跃到下一事件的开始时间。

2. 事件列表(Events List)

仿真系统至少要维护一个仿真事件列表,这个列表有时称为挂起事件集(pending event set),因为这个列表列出了所有因为先前执行的仿真事件而挂起但仍需仿真的事件。一个事件用事件发生的时刻和类型来描述,事件类型标识用于仿真事件的代码,一般事件代码都是参数化的,事件描述中还包含表示事件代码的参数。

因为事件是瞬时发生的,具有一定事件跨度的动作(activities )则用事件序列(sequences of events)来仿真t。有些仿真系统框架允许事件时间用间隔时间来表示,间隔时间用事件

的开始时刻和结束时刻表示。

基于瞬时事件的单线程仿真引擎只有一个当前事件。相反,支持基于间隔事件模型的多线程仿真引擎可以有多个当前事件。在这两种情况中,都存在事件间同步这个重要问题。

挂起事件集(pending event set)通常用按事件时间分类的优先队列来表示(priority queue)。,那就是说,不管事件加入事件集的顺序怎样,他们都是严格按时间顺序移除。几个通用优先权队列算法证明对离散时间仿真是有效的[3],最著名的是分裂树算法(splay tree)。更新的算法包括skip lists和calendar queues.[4]

通常事件随着仿真的进行而进行动态地调度。如上述银行例子,如果顾客队列CUSTOMER_QUEUE 是空的且营业员TELLER 是空闲的,在时间t的事件CUSTOMER-ARRIV AL会创建在时间t+s发生的事件,其中s 是由服务时间SERVICE-TIME分布产生的一随机数。

3. 随机数发生器(Random-Number Generators)

根据系统模型,仿真系统需要产生各种类型的随机变量(random variables)。这由一个或多个伪随机数发生器(Pseudorandom number generators)产生。采用伪随机数,而不是实际的随机数,是为了保证仿真系统在重复运行中具有完全一致的行为。

在离散事件仿真中有关随机数的一个问题是事件时间的稳定状态分布事先可能是不知道的。因此,放入挂起事件集(pending event set)的初始事件集(the initial set of events)没有代表稳定状态分布的达到时间(arrival times )。一般采用引导仿真模型的方法来解决这一问题,让放入挂起事件集的事件去调度其他事件,随着仿真的进行,事件时间分布就会达到稳态分布,这种方法称为引导仿真模型(bootstrapping the simulation model)。从运行模型中收集统计数据时,要么丢弃达到稳定状态之前的数据,要么让仿真运行足够长的时间以便稳态数据可以消除引导过程的影响。(This use of the term bootstrapping can be contrasted with its use in both statistics and computing.)

4. 统计(Statistics)

仿真系统通常会记录系统的统计数据,用以表示感兴趣的一些统计量。在上述银行例子中,一个感兴趣的统计量是平均服务时间。

5. 结束条件(Ending Condition)

因为事件是自举的,理论上来说离散事件仿真系统可以永远运行下去。因此,仿真系统设计者必须决定仿真什么时候结束。典型的选择是“在事件t”(“at time t” )或者“在处理n个事件后”(“after processing n number of events”)或者,更一般地,“当统计量X达到值x时”(“when statistical measure X reaches the value x”)。

三、仿真引擎逻辑(Simulation Engine Logic)

离散事件仿真系统主循环结构如下:

1. 开始(Start)

?初始化结束条件(Ending Condition)为FALSE。

?初始化系统状态变量。

?初始化时钟(Clock)(通常从仿真时刻0开始) 。

?调度(Schedule)以初始化事件(例如,将初始事件缴入事件列表(Events List))。

2. 循环(“Do loop” or “While loop”)

While (结束条件(Ending Condition )为FALSE) then do:

?将时钟设置成下一事件发生时刻。

?执行下一事件,并将其从事件列表(Events List)中移除。

?更新统计数据。

3. 结束(End)

?产生统计报告。

排队论与离散事件仿真理论

2排队论与离散事件仿真理论 2. 1排队论概述 排队是生活中经常出现的现象,如学生或老师去图书馆借阅资料、书籍时等待等级 的情况,病人去医院看病在门诊处等待挂号,参加公司招聘在外面等待进入面试的过程,订单请求在配送中心计算机终端内的等待处理过程以及超市中顾客购物完毕之后在收 银台前等待付账的过程等均为排队现象。 研究排队问题即是研究服务机构设置与接受服务者数量之间的关系。若来到系统内 的顾客数目多于服务台的数目,这样就无法在第一时间办理业务,需要进入队列等候, 这便是排队现象,现实生活中不难发现,顾客的到达和服务的时间都是随机的,这就导 致了排队现象是无法完全消除的。2排队论与离散事件仿真理论 2. 1排队论概述 排队是生活中经常出现的现象,如学生或老师去图书馆借阅资料、书籍时等待等级 的情况,病人去医院看病在门诊处等待挂号,参加公司招聘在外面等待进入面试的过程,订单请求在配送中心计算机终端内的等待处理过程以及超市中顾客购物完毕之后在收 银台前等待付账的过程等均为排队现象。 研究排队问题即是研究服务机构设置与接受服务者数量之间的关系。若来到系统内 的顾客数目多于服务台的数目,这样就无法在第一时间办理业务,需要进入队列等候, 这便是排队现象,现实生活中不难发现,顾客的到达和服务的时间都是随机的,这就导 致了排队现象是无法完全消除的。2. 1. 4排队问题的求解 首先需要知道系统中各项因素的数据情况,即研究系统中服务机构的数量、服务效率、规则、顾客到达数量、到达间隔时间、排队规则等,从而分析系统特征,得到系统(1) LS:系统状态平稳时的队长的平均值(包括正在接受服务的顾客),是系统内顾客 数的均值。 (2) Lq:系统的平均等待队长,是系统内排队等候的顾客的均值。 (3) WS:平稳状态下顾客在系统中的平均逗留时间,即顾客在系统内逗留时间的均值。 (4) Wq:平稳状态下顾客在系统中的平均等待时间,它是顾客排队等候服务时间的 均值,如果设顾客接受服务的时间的均值为L}},则有WS一Wq + L}} o (5)绝对通过能力A,它为单位时间内被服务完顾客的均值。 (6)相对通过能力Q,它为单位时间内被服务完顾客数与请求服务顾客数之比值。 (7)服务窗连续繁忙的时间长度,即忙期Tb o 系统的状态是指系统中的顾客数,如果有n个顾客就说系统的状态为n,计算以上 这些指标的基础是表达系统状态的概率。系统的状态可能有以下几种情况: ①不限制队长,n=0,1,2,}}} ②限制队长,最大数位N , n = 0,1,2,}}}, N ③即时制,服务台个数为。时,n = 0,1,2, } } }, c 则Pn (t)表示在时刻t、系统状态为n时概率。

银行系统模拟

数 据 结 构 实 验 报 告 实验3:银行业务模拟系统姓名:范亚平 年级:2010级 学号:1008114061 专业:计算机科学与技术专业(1)班

数据结构实验报告 一、实验目的: 1)通过实验掌握对离散事件模拟的认识; 2)进一步理解队列的实现与应用; 3)对链表的操作有更深层次的理解; 二、实验条件: 学院提供公共机房,1台/学生微型计算机。 三、实验要求: 1问题描述: 假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。 2.一个完整的系统应具有以下功能: 1)初始化(OpenForDay),模拟银行开门时各数据结构的状态。 2事件驱动(EventDrived), 对客户到达和离开事件做相应处理。 3下班处理(CloseForDay), 模拟银行关门时的动作,统计客户平均逗留时间。 [备注]: 假设银行开门的时刻(间)设为0 , 银行每天营业的时间在程序运行时输入(例如480分钟)。 每个客户办理业务的时间不超过30分钟,两个相邻客户到达银行的时间间隔不超过5分钟要求程序执行时,只要给出银行每天的营业时间即可输出客户平均逗留的时间。四、总的设计思想: 为了计算这个平均的逗留时间,自然需要知道每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行的逗留时间。所有客户逗留时间的总和被一天内进入银行的客户数除便是所求的平均时间。称客户到达银行和离开银行这两个时间发生的事情为“事件”,则整个模拟程序将按事件的先后顺序进行处理。这样一种程序称做事件驱动模拟。下面是上述银行客户的离散事件驱动的模拟算法。 void Bank_Simulation( int CloseTime ){ // OpenForDay ( ); //初始化,模拟银行开门时各数据结构的状态。 while(有要处理的事件时) //有事件可处理 { EventDrived ; //事件驱动,从事件表中取出事件en; //根据en的类型(客户到达事件或客户离开事件)做相应的处理

实验报告银行业务模拟系统的设计与实现(1)

数据结构实验报告 银行业务模拟系统的设计与实现(该实验为综合性实验,共用6个学时)二、实验要求: 1.问题描述: 假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。 2.一个完整的系统应具有以下功能: 1)初始化(OpenForDay),模拟银行开门时各数据结构的状态。 2)事件驱动(EventDrived), 对客户到达和离开事件做相应处理。 3)下班处理(CloseForDay), 模拟银行关门时的动作,统计客户平均逗留时间。 [备注]: 假设银行开门的时刻(间)设为0 , 银行每天营业的时间在程序运行时输入(例如480分钟)。 每个客户办理业务的时间不超过30分钟,两个相邻客户到达银行的时间间隔不超过5分钟要求程序执行时,只要给出银行每天的营业时间即可输出客户平均逗留的时间。 三、总的设计思想、环境语言、工具等 总的设计思想: 为了计算这个平均的逗留时间,自然需要知道每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行的逗留时间。所有客户逗留时间的总和被一天内进入银行的客户数除便是所求的平均时间。称客户到达银行和离开银行这两个时间发生的事情为“事件”,则整个模拟程序将按事件的先后顺序进行处理。这样一种程序称做事件驱动模拟。下面是上述银行客户的离散事件驱动的模拟算法。 void Bank_Simulation( int CloseTime ){ // OpenForDay ( ); //初始化,模拟银行开门时各数据结构的状态。 while(有要处理的事件时) //有事件可处理 { EventDrived ; //事件驱动,从事件表中取出事件en; //根据en的类型(客户到达事件或客户离开事件)做相应的处理 if(en表示客户到达) CustomerArrived( );// 处理客户到达事件 else CustomerDeparture( ) ;// 处理客户离开事件 }//while CloseForDay( );//计算客户的平均逗留时间 }// Bank_Simulation 环境语言:Windows下的Microsoft VC++ 四、数据结构与模块说明 下面是模拟程序中需要的数据结构及其操作。

数据结构课程设计-银行业务模拟系统

山东理工大学计算机学院课程设计 (数据结构) 班级计升1001班 姓名 学号1022051029 指导教师 二○一一年一月二十日

课程设计任务书及成绩评定 课题名称银行业务模拟系统 Ⅰ、题目的目的和要求: 1、设计目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 2、设计题目要求: 1. 客户业务分为两种:第一种是申请从银行得到一笔资金,即取款或借款;第二种是向银行投入一笔资金,即存款或还款。 2. 银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足时,则立即排入第二个队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。 3. 每接待完一个第二种业务的客户,则顺序检查和处理第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。 4.假设检查不需要时间,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者),转而继续接待第一个队列的客户。 5. 任何时刻都只开一个窗口,营业时间结束时所有客户立即离开银行。通过模拟方法求出客户在银行内逗留的平均时间。

Ⅱ、设计进度及完成情况 Ⅲ、主要参考文献及资料 [1] 严蔚敏数据结构(C语言版)清华大学出版社 1999 [2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999 [3] 谭浩强 C语言程序设计清华大学出版社 [4] 与所用编程环境相配套的C语言或C++相关的资料

ns-3离散事件仿真引擎实现分析

NS-3离散事件仿真引擎实现 赵问道 浙江大学信息与通信工程研究所 2009年11月

目录 一、ns-3离散事件仿真引擎的基本概念 (3) 二、ns-3离散事件仿真引擎的基本原理 (4) 三、基本的仿真器类:Simulator (5) 四、仿真器实现类:SimulatorImpl类及其派生类 (10) 五、事件调度器类:Scheduler及其派生类 (12)

NS-3离散事件仿真引擎实现分析 一、ns-3离散事件仿真引擎的基本概念 Ns-3是一个基于事件的(event-based)仿真系统。除了系统状态变量和系统事件发生逻辑外,基于事件仿真还包括以下组成部分: (1)时钟(Clock) 仿真系统必须要保持对当前仿真时间的跟踪。离散事件仿真与实时仿真(real time simulations)不同,在离散事件仿真中时间是跳跃的(time ‘hops’ ),因为事件是瞬时发生的– 随着仿真的进展,时钟跳跃到下一事件的开始时间。 Ns-3内部仿真时钟用一个64比特的整数表示,其单位由用户通过TimeStepPrecision::Set函数设定。 (2)事件列表(Events List) 仿真系统至少要维护一个仿真事件列表,一个事件用事件发生的时刻和类型来描述,事件类型标识用于仿真事件的代码,一般事件代码都是参数化的,事件描述中还包含表示事件代码的参数。 Ns-3的事件列表由Scheduler类及其派生类实现,Simulator类提供创建具体的Scheduler对象的方法,以及插入各种事件的静态接口函数。 (3)随机数发生器(Random-Number Generators) 根据系统模型,仿真系统需要产生各种类型的随机变量(random variables)。这由一个或多个伪随机数发生器(Pseudorandom number generators)产生。 NS-3包含一个内置的伪随机数发生器,随机数由RandomVariable类及其派生类实现,可以产生具有各种分布特性的随机数,具体有UniformVariable类、ConstantVariable类、SequentialVariable类、ExponentialVariable类、ParetoVariable类、WeibullVariable类、NormalVariable类、EmpiricalVariable类、IntEmpiricalVariable类、DeterministicVariable类、LogNormalVariable类、GammaVariable类、ErlangVariable类、ZipfVariable类和TriangularVariable类等。 (4)统计(Statistics) 仿真系统通常会记录系统的统计数据,用以表示感兴趣的一些统计量。 (5)结束条件(Ending Condition) 因为事件是自举的,理论上来说离散事件仿真系统可以永远运行下去。因此,仿真系统设计者必须决定仿真什么时候结束。典型的选择是“在事件t”(“at time t” )或者“在处理n个事件后”(“after processing n number of events”)或者,更一般地,“当统计量X达到值x时”(“when statistical measure X reaches the value x”)。 一个仿真系统的主循环结构如下: (1)开始(Start):初始化结束条件(Ending Condition)为FALSE。初始化系统状态变量。初

c语言银行排队事件模拟

//离散事件模拟,模拟银行营业时的排队情况 //不考虑顾客中途离开,顾客到达事件随机,业务办理时间 //长度随机,选择最短的队排队,不再换队 //时间:2012年9月17日 #include #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 /**********************结构体************************************************/ //事件表节点 typedef struct Event { int OccurTime; //事件发生时刻 int NType; //事件类型,0表示到达事件,1至n表示四个窗口的离开事件 struct Event *next; }Event, *EventList; //队列节点 typedef struct QElemType { int ArriveTime;//到达时间 int Duration;//办理业务所需时间 struct QElemType *next; }QElemType; //队列指针 typedef struct { QElemType *front;//头指针 QElemType *rear;//尾指针 }LinkQueue; /********************函数申明*************************************************/

离散事件系统仿真实验

实验二离散事件系统仿真实验 目录 实验题目 (1) 一、实验目标 (1) 二、实验原理 (1) 1. 排队系统的一般理论 (1) 2. 离散系统常用的仿真策略 (2) 3. 本实验采用单服务台模型 (3) 4. 仿真运行方式 (3) 三、理论分析 (4) 1. 涉及的基本概念 (4) 2. 仿真的总体规划设计 (5) 四、建模过程 (7) 1. 思路分析 (7) 2. 仿真策略 (7) 3. 事件列表 (8) 4. 变量定义 (8) 5. 系统流程框图 (9) 五、仿真源程序(Matlab) (10) 六、结果分析 (12) 七、感受及建议 (15)

实验题目 实体(临时实体)到达模式:实体到达模式是顾客到达模式,设到达时间间隔Ai 服从均值5min A β=的指数分布 /1 ()(0) A A A f A e A ββ?=≥服务模式:设服务员为每个顾客服务的时间为Si .它也服从指数分布,均值为4min S β=/1 ()(0) S S s f S e S ββ?=≥服务规则:由于是单服务台系统,考虑系统顾客按单队排列,并按FIFO 方式服务 一、实验目标 通过单服务台排队系统的方针,理解和掌握对离散事件的仿真建模方法,以便对其他系统进行建模,并对其系统分析,应用到实际系统,对实际系统进行理论指导。 二、实验原理 1. 排队系统的一般理论 一般的排队系统都有三个基本组成部分:

(1)到达模式:指动态实体(顾客)按怎样的规律到达,描写实体到达的统计特性。通常假定顾客总体是无限的。 (2)服务机构:指同一时刻有多少服务设备可以接纳动态实体,它们的服务需要多少时间。它也具有一定的分布特性。通常,假定系统的容量(包括正在服务的人数加上在等待线等待的人数)是无限的。 (3)排队规则:指对下一个实体服务的选择原则。通用的排队规则包括先进先出(FIFO),后进先出(LIFO),随机服务(SIRO)等。 2. 离散系统常用的仿真策略 (1)事件调度法(Event Scheduling): 基本思想:离散事件系统中最基本的概念是事件,事件发生引起系统状态的变化,用事件的观点来分析真实系统。通过定义事件或每个事件发生系统状态的变化,按时间顺序确定并执行每个事件发生时有关逻辑关系。 (2)活动扫描法: 基本思想:系统有成分组成,而成分又包含活动。活动的发生必须满足某些条件,且每一个主动成分均有一个相应的活动例程。仿真过程中,活动的发生时间也作为条件之一,而且较之其他条件具有更高的优先权。 (3)进程交互法: 基本思想:将模型中的主动成分历经系统所发生的事件及活动,按时间发生的顺序进行组合,从而形成进程表。系统仿真钟的推进采

银行模拟系统实验报告

银行模拟系统的设计与实现

计算机与信息技术学院综合性、设计性实验 报告 专业:计算机科学与技术年级/班级:计科二班 一、实验目的 1)通过实验掌握对离散事件模拟的认识; 2)进一步理解队列的实现与应用; 3)对链表的操作有更深层次的理解; 该实验涉及到线性表的建立、插入、删除等操作,涉及到了队列的建立、插入、删除,涉及到了离散事件的应用思想,还涉及到了排序的概念。完成这个实验对线性表、队列及C语言编程等多方面的知识将是一个很好的利用,对离散事件也将有一个初步的认识。 二、实验仪器或设备 装有Visual C++ 6.0的计算机一台 三、总体设计(设计原理、设计方案及流程等) 实验问题描述: 假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。 设计原理: 根据前几章所学习的与链表、队列等相关的知识,了解到链表与队列的特点,联系实际,对题目思考可知: ①动态链表可以进行动态分配与存储,还可以在链表中适合的位置进行删除 和插入操作; ②多个相同类型的数据类型可将其放在一个数组中; ③结构体类型的数据可以有多个域,存放不同的数据信息; ④队列是一种先进后出的线性表,只允许在表的一端进行插入而在另一端进 行删除,和日常生活中的排队是一样的; ⑤在一天的营业过程中,银行的工作流程,包含开门事件、客户到达对客户

离散事件建模及仿真

第7章离散事件系统建模与仿真 离散事件系统指的是一组实体为了达到某些目的,以某些规则相互作用、关联而集合在一起。与连续事件系统不同,离散事件系统所包含的事件在时间上和空间上都是离散的。离散事件系统在生产和生活中是很常见的,例如一个超市就是一个离散事件系统,它由顾客和收银员组成。在离散事件系统中,各事件以某种顺序或在某种条件下发生,并且大都是随机性的,所以,其模型很难用某种规范的形式,一般采用流程图或者网络图的形式来定义实体在系统中的活动。这类系统在建模时,只要考虑系统内部状态发生变化的时间点和发生这些变化的原因,而不用描述系统内部状态发生变化的过程。本章将介绍几种常见的离散事件系统和离散事件系统建模方法。 7.1 离散事件系统模型 离散事件系统是指系统的状态仅在离散的时间点上发生变化的系统,而且这些离散时间点一般是不确定的。这类系统中引起状态变化的原因是事件,通常状态变化与事件发生是一一对应的。事件的发生没有持续性,可以看作在一个时间点上瞬间完成,事件发生的时间点是离散的,因而这类系统称为离散事件系统。首先看一个典型的离散系统的例子。 例7.1 超市服务系统 某理发店只有一名理发师。在正常的工作时间内,如果理发店没有顾客,则理发师空闲;如果有顾客,则为顾客理发。如果顾客到达理发店时,理发师正在为其他顾客服务,则新来的顾客在一旁排队等候。显然,每个顾客到达理发店的时间是随机的,而理发师为每个顾客服务的时间也是随机的,进而队列中每个顾客的等候时间也是随机的。 下面,结合例7.1介绍一下在离散事件系统仿真中所用到的一些基本概念。 (1)实体 实体是指有可区别性且独立存在的某种事物。在系统中,构成系统的各种成分称为实体,用系统论的术语,它是系统边界内的对象。在离散事件系统中,实体可分为两大类:临时实体和永久实体。临时实体指的是只在系统中存在一段时间的实体,这类实体由系统外部到达系统,在系统仿真过程中的某一时刻出现,最终在仿真结束前从系统中消失。例7.1中,顾客是临时实体,他们按一定的规律到达,经过理发师服务(可能要排队等待一段时间),最终离开系统。那些虽然达到,但未进入理发店的顾客则不能称为该系统的临时实体。永久实

银行业务模拟课程设计报告

安徽新华学院 数据结构课程设计报告 题目:银行业务模拟系统 学院:信息工程学院 专业:信息管理与信息系统 班级: 12 级信管 1 班 姓名:杨丹丹 学号: 1242152137 指导教师:李明 设计时间: 2013.12.12— 2013.12.30

课程设计任务书 一、目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解, 最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求 解过程并编写代码实现。 二、要求 1.客户业务分为两种:第一种是申请从银行得到一笔资金,即取款或借款;第二种是 向银行投入一笔资金,即存款或还款。 2.银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客 户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足时,则立 即排入第二个队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。 3.每接待完一个第二种业务的客户,则顺序检查和处理第二个队列中的客户 , 对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。 4.假设检查不需要时间 , 在此检查过程中 , 一旦银行资金总额少于或等于刚才第一个队列 中最后一个客户( 第二种业务) 被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者), 转而继续接待第一个队列的客户。 5.任何时刻都只开一个窗口 , 营业时间结束时所有客户立即离开银行。通过离散的模拟 方法求出客户在银行内逗留的平均时间 三、设计期限 日期内容 12.12-12.16 12.16-12.22选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。 创建相关数据结构 , 录入源程序。 12.22-12.26调试程序并记录调试中的问题,初步完成课程设计报告。 12.26-12.31上交课程设计报告打印版和电子版的论文程序

单服务台排队系统离散事件系统仿真实验

离散事件系统仿真实验 一、实验目标 通过单服务台排队系统的方针,理解和掌握对离散事件的仿真建模方法,以便对其他系统进行建模,并对其系统分析,应用到实际系统,对实际系统进行理论指导。 二、实验原理 1.排队系统的一般理论 一般的排队系统都有三个基本组成部分: (1)到达模式:指动态实体(顾客)按怎样的规律到达,描写实体到达的统计特性。通常假定顾客总体是无限的。 (2)服务机构:指同一时刻有多少服务设备可以接纳动态实体,它们的服务需要多少时间。它也具有一定的分布特性。通常,假定系统的容量(包括正在服务的人数加上在等待线等待的人数)是无限的。 (3)排队规则:指对下一个实体服务的选择原则。通用的排队规则包括先进先出(FIFO),后进先出(LIFO),随机服务(SIRO)等。 2.对于离散系统有三种常用的仿真策略:事件调度法、活动扫描法、进程交互法。 (1)事件调度法(Event Scheduling): 基本思想:离散事件系统中最基本的概念是事件,事件发生引起系统状态的变化,用事件的观点来分析真实系统。通过定义事件或每个事件发生系统状态的变化,按时间顺序确定并执行每个事件发生时有关逻辑关系。 (2)活动扫描法: 基本思想:系统有成分组成,而成分又包含活动。活动的发生必须满足某些条件,且每一个主动成分均有一个相应的活动例程。仿真过程中,活动的发生时间也作为条件之一,而且较之其他条件具有更高的优先权。 (3)进程交互法: 基本思想:将模型中的主动成分历经系统所发生的事件及活动,按时间发生的顺序进行组合,从而形成进程表。系统仿真钟的推进采用两张进程表,一是当前事件表,二是将来事件表。 3.本实验采用的单服务台模型 (1)到达模式:顾客源是无限的,顾客单个到达,相互独立,一定时间的到达数服从指数

数据结构课程设计报告-银行业务模拟

《数据结构》课程设计报告 题目:银行业务模拟 学院(系):数学与计算科学学院 班级: 11级信息与计算科学4班学生学号: 1107020404 姓名:石站锋 指导教师:彭叶辉 2013年 6月28 日

目录 摘要 (2) 一、需求分析 (2) 二、概要设计 (3) 三、详细设计 (3) 1、预定义和定义结构体 (3) 2、基本操作的算法描述 (6) 3、测试界面操作提示 (8) 4、不断进入队列,出队列,时间的更新,总金额的更新 (9) 5、营业结束时判断是否为所有客户服务,并输出最后的银行总金额 (9) 四、设计和调试分析 (10) 五、用户手册 (11) 六、测试结果 (11) 七、设计心得 (14) 八、参考文献 (14) 九、附录 (14)

摘要 在日常生活中,我们经常会遇到许多为了维护社会正常秩序而需要排队的情况,这样一类活动的模拟程序通常需要用到队列和线性表之类的数据结构,因此是队列的典型应用例子之一,而这次实验的题目银行业务的模拟程序就正是这样一个典型的例子。队列是一种先进先出的线性表,它只允许在表的一端插入,而在另一端删除元素。在队列中允许插入的一端叫做队尾,允许删除的一端则称为队头。我们需要编写一个程序已模拟银行的这种各种业务活动,并计算一天中客户在银行逗留的平均时间。这是一个离散事件驱动模拟程序。这也是一个的操作系统中的排队问题。假设某银行有3个窗口对外接待客户,从早晨银行开门(开门9:00am,关门5:00pm)起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户(客户进入时间使用随机函数产生),如果某个窗口的业务员正空闲,则可上前办理业务。 关键词:排队、队列、先进先出、离散事件驱动模拟程序、 一、需求分析 程序中处理的对象主要是“事件”,事件的主要信息是事件类型和事件发生的时刻。算法中处理的事件有两类:一类是客户到达事件,另一类是客户离开事件。前一类事件发生的时间随客户到来自然形成,后一类事件发生时刻则由客户事物所需时间和等待所耗时间而定。由于程序驱动是按事件发生时刻的先后顺序进行,则时间应是有序表,其主要操作是插入和删除事件。 由于在实际的银行中,客户到达的时刻及其办理事物所需时间都是随机的,在模拟中可用随机数代替。客户到达时间时需产生两个随机数,其一为此时刻到达的客户办理事务所需时间solvetime;其二为下一客户将到达的时间间隔waitTime,假设当前事件发生的时刻为occurtime,则下一个客户到达事件发生的时刻为occurtime+waitTime。由此应产生一个新的客户到达事件插入事件表。将客户到达事件插入事件表,刚到达的客户则插入到当前所含元素最少的队列中。 客户离开事件的处理比较简单。首先计算该客户在银行逗留时间,然后从队

数据结构课程设计之银行离散事件模拟

《数据结构》课程设计报告

银行业务模拟与离散事件模拟 一、实验目的 1. 通过此次课程设计中银行业务模拟的题目,掌握队列(或者链表) 等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解; 2. 将所学数据结构方面的知识与一门具体的语言相结合(C/C++)来进行实现,感受数据结构的强大作用,加深理解。 二、问题描述 1.问题描述 假设某银行有4个窗口对外接待客户,从早晨银行开门(开门9:00am,关门5:00pm)起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户(建议:客户进入时间使用随机函数产生),若某个窗口的业务员正空闲,则上前办理业务;反之,若4个窗口均有窗户所占,他便会排在人数最少的队伍后面。 2. 任务要求 编制一个程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。建议有如下设置: (1)客户到达时间随机产生,一天客户的人数设定为100人。 (2)银行业务员处理时间随机产生,平均处理时间10分钟。 (3)将一天的数据(包括业务员和客户)以文件方式输出。 三、算法的思想与算法实现步骤 1. 基本思想 通过队列数据类型进行基本操作,主要有三个模块:分别是主函数模块、 主要操作函数及基本操作函数。其中,主函数负责其他子函数的调用实现以及基本界面的操作,主要函数包括开门函数的实现:OpenForDay,顾客到达函数:CustomerArrived,顾客离开的函数:CustomerDepartion等;而基本操作函数

就是对其中牵扯到的操作进行具体的实现,如按时间先后插入队列OrderInsert、寻求最短的队列MinCuQueue、删除队列元素以及销毁等。 2. 实现步骤 首先,分析题目要求划分实现模块、画出大致的流程图,定义基本数据类型,诸如结构体、队列等; 其次,考虑基本大致的操作,比如要拟定开门的时间、顾客到来为其提供服务以及离开时的操作等; 再次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能; 最后,编写主函数对每个实现进行按需调用,实现操作。 3. 流程图 图-1 事件流程图

离散事件系统仿真策略

1 离散事件系统仿真策略 离散事件系统仿真策略:介绍三种仿真策略,即事件调度法、活动扫描、进程交互法。 主要术语: (1) 成分(Component ):相应于系统中的实体,用于构造模型中的各个部分,可分为两大类: 主动成分(Active-type Component ):可以主动产生活动的成分 如排队系统中的顾客,它的到达将产生排队活动或服务活动。 被动成分(Pasive-type Component ):本身不能激发活动,只有在主动成分作用下才产生状态变化。 (2)描述变量:成分状态、属性的描述。 (3)成分间的相互关系:描述成分之间相互影响的规则。 在一个模型中,主动成分对被动成分可能产生作用,而主动成分之间也可能产生作用。 C ={ α1. α2, …, αn }成分集合, αi 是第i 个成分分量(n i ≤≤1)。

2 C A ={α1. α2, …, αm } 主动成分子集, αj 是第j 个主动成分分量(1n m m j <≤≤,)。 C P ={α1. α2, …, αl } 被动成分子集, αk 是第k 个被动成分分量(1≤≤

银行业务模拟课程设计报告

安徽新华学院数据结构课程设计报告 题目:银行业务模拟系统 学院:信息工程学院 专业:信息管理与信息系统 班级:12级信管1班 姓名:杨丹丹 学号:1242152137 指导教师:李明 设计时间:2013.12.12—2013.12.30

课程设计任务书 一、目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 二、要求 1.客户业务分为两种:第一种是申请从银行得到一笔资金,即取款或借款;第二种是向银行投入一笔资金,即存款或还款。 2.银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足时,则立即排入第二个队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。 3. 每接待完一个第二种业务的客户,则顺序检查和处理第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。 4.假设检查不需要时间,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者),转而继续接待第一个队列的客户。 5. 任何时刻都只开一个窗口,营业时间结束时所有客户立即离开银行。通过离散的模拟方法求出客户在银行内逗留的平均时间 三、设计期限

排队系统的离散事件模拟-示例

2.4 M/M/1排队系统的模拟 这个排队系统的服务员为一人。顾客到达系统的间隔时间为平均值等于1分的指数分布随机变量。单位顾客服务时间为平均值等于0.5分的指数分布随机变量。单列排队,采取先进先出的规则,排队行列的最大容量为100。模拟的终止条件为有1000个顾客服务结束离开系统。 2.4.1 系统的实体、属性和事件 事件类型有顾客到达事件、服务开始事件以及服务结束事件。但是,服务开始事件一般与顾客到达事件或服务结束事件相互重合,所以决定有两类事件: a. 第1类事件——顾客到达事件; b. 第2类事件——顾客在服务结束后离开系统。 2.4.2 系统模拟程序 为了进行模拟,除了主程序外,还编制了一系列的子程序或函数,它们的功能如表1.2.3所示。 表1.2.3 排队服务系统模拟的子程序和函数 表1.2.4列举模型的变量的名称和定义。 表1.2.4 本模型的变量

图1.2.8是本模拟模型的主程序,它的主要功能如下: MAIN PROGRAM NEVNTS = 2 //事件类型 READ 10, MARRVT, MSERVT //到达间隔时间为1,服务时间为0.5 10 FORMA T(2F10.0) READ 20, TOTCUS //结束服务顾客总数1000 20 FORMA T(I 10) CALL INIT 30 CALL TIMING GO TO (40, 50), NEXT //NEXT = 1, GO TO 40; NEXT = 2, GO TO 50 40 CALL ARRIVE GO TO 60 50 CALL DEPART 60 IF(NUMCUS .LT. TOTCUS) GO TO 30 CALL REPORT STOP END 图1.2.8 排队服务系统模拟的主程序 SUBROUTINE INIT TIME = 0.0 STATUS = 0.0 //服务员状态 NIQ = 0 //系统中的停留人数 TLEVNT = 0.0 //上次事件时间 NUMCUS = 0 //已结束服务的顾客数 TOTDEL = 0.0 //顾客停留时间总和 ANIQ = 0.0 //系统中人数的时间积分值

银行业务模拟与离散事件模拟

兰州商学院陇桥学院 工学系课程设计报告 设计题目:银行业务模拟与离散事件模拟系别:工学系 专业 (方向): 年级、班: 学生姓名: 学生学号: 指导教师: 年月日

目录 一、系统开发的背景。 (1) (一)系统功能要求 (1) (二)系统模块结构设计 (1) 三、系统的设计与实现 (2) (一)开门函数: (3) (二)顾客到达函数: (4) (三)顾客离开函数: (5) 四、系统测试 (6) 五、总结 (7) 六、附件(代码、部分图表) (7)

银行业务模拟与离散事件模拟 一、系统开发的背景。 为了在现实生活中,方便银行业务员更好的操作和管理银行出现的各种事件,以及方便算出各种时间,我们设计了银行业务模拟与离散事件模拟系统。 通过此次课程设计中银行业务模拟的题目,掌握队列,或链表等数据结构的基本操作方面的知识并能灵活的解决一些基本的问题,加深对其性质及操作的理解。 将所学数据结构方面的知识与一门具体的语言相结合来进行实现,感受数据结构的强大作用,加深理解。 (一)系统功能要求 编制一个程序,可以以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间 1、客户到达时间随机产生,一天客户的人数设定为100人; 2、银行业务员处理时间随机产生,平均处理时间为10分钟; 3、将一天的数据结构(包括业务员和客户)以文件方式输出。 . (二)系统模块结构设计 通过对系统功能的分析,银行业务模拟与离散事件模拟系统功能如下图所示。

银行业务模拟与离散事件模拟系统 通过上图的功能分析,把整个系统划分为3个模块: 1、开门函数,该模块主要实现:银行开始正常营业时间,借助函数OpenForDay()来实现; 2、顾客到达函数,该模块主要实现:客户在银行里从排队到办理完银行业务的功能,借助函数CustomerArrive()来实现; 3、顾客离开函数,该模块主要实现:银行下班时间及顾客全部离开的功能,借助函数CustomerDepart()来实现。 三、系统的设计与实现 【流程图】

离散事件系统的建模仿真技术

离散事件系统的建模仿真技术 摘要:在现代社会,系统仿真,特别是离散事件系统仿真,已成为各种科研领域的研究热点,也是国家和国防关键技术发展计划之一。离散事件系统是一类在工程技术、经济、军事等领域常见的系统,它们的状态在一些不均匀的离散时刻发生变换且状态变换的内部机制比较复杂,往往无法用常规的数学方法来描述,而离散事件系统仿真是当前研究这一类系统的最有用处的方法之一。本文主要介绍了离散事件系统的概念、特点、要素、建模步骤,并以售票窗口服务系统为例介绍了建模的主流方法,即实体流图法和活动周期图法。 关键词:离散事件系统;仿真;建模 一、离散事件系统仿真一般概念 1、离散事件系统(Discrete Event System,DES):指系统的状态在一些离散时间点上由于某种事件的驱动而发生变化。 2、离散事件系统的特点 (1)系统中的状态只是在离散时间点上发生变化,而且这些离散时间点一般是不确定的; (2)系统中的状态变化往往无法用数学公式表示; (3)描述方式通常为图、表等接近自然语言的方式; (4)时间是仿真中的一个关键变量; (5)离散事件系统总包含排队过程[1]。 3、离散事件系统的要素 (1)实体(Entity):组成系统的物理单元。 永久实体:在整个仿真过程中始终存在。也称被动实体。 临时实体:在系统中只存在一段时间。也称主动实体、活动实体。 (2)属性(Attributes) :是指某一实体的特性,是实体所拥有的全部特征的一个子集,用特征参数变量表示。 (3)状态(Status) :是指系统在某一时刻实体及其属性值的集合。机器的状态:{开、停};或者{忙、空闲、停止} 。 状态可作为动态属性进行描述。 (4)事件(Event) : 引起离散事件系统状态发生变化的行为。

离散事件仿真

离散事件仿真基本原理 赵问道 浙江大学信息与通信工程研究所

目录 一、离散事件仿真的基本概念 (3) 1. 基于事件的(event-based)离散事件仿真 (3) 2. 基于活动的(activity-based)离散事件仿真 (3) 3. 基于进程的(process-based)离散事件仿真 (3) 4. 三阶段(three-phase)离散事件仿真 (3) 二、离散事件仿真系统的组成 (4) 1. 时钟(Clock) (4) 2. 事件列表(Events List) (4) 3. 随机数发生器(Random-Number Generators) (5) 4. 统计(Statistics) (5) 5. 结束条件(Ending Condition) (5) 三、仿真引擎逻辑(Simulation Engine Logic) (5) 1. 开始(Start) (5) 2. 循环(“Do loop” or “While loop”) (6) 3. 结束(End) (6)

离散事件仿真基本原理 一、离散事件仿真的基本概念 在离散事件仿真中,系统的操作通过按时间顺序排列的一组事件序列来表示。每个事件发生在某一时刻,表示系统的状态改变。例如,如果仿真电梯,那么事件可以是“6层的按钮按下了”,随之系统状态改成“电梯移动”,并且最后到达状态“电梯位于6层”i。 学习如何建立离散时间仿真的一个普通例子是仿真一个队列(queue),如顾客到达银行接受出纳员的服务,这里的系统实体是“顾客队列”(CUSTOMER-QUEUE)和“出纳员”(TELLERS)。系统事件是“顾客到达”(CUSTOMER-ARRIV AL)和“顾客离开”(CUSTOMER-DEPARTURE)(事件“出纳员开始服务”(TELLER-BEGINS-SERVICE )可以是到达和离开事件逻辑的组成部分) 。可以由这些事件改变的系统状态有“队列中的顾客数量”(NUMBER-OF-CUSTOMERS-IN-THE-QUEUE (是一个从0到n的整数) )和“出纳员状态”(TELLER-STATUS (忙或空闲))。为了仿真系统随机性需要的随机变量(random variables)是“顾客到达间隔时间”(CUSTOMER-INTERARRIV AL-TIME)和“出纳员服务时间”(TELLER-SERVICE-TIME)。 目前已经提出的实现离散时间仿真的基本方法有基于事件的(event-based)、基于活动的(activity-based)、基于进程的(process-based)和三阶段(three-phase,Pidd1998)等方法。三阶段方法在很多商业化仿真软件包中得到了应用,但从用户角度看,所采用的仿真方法的细节一般是被隐藏掉的。 1. 基于事件的(event-based)离散事件仿真 2. 基于活动的(activity-based)离散事件仿真 3. 基于进程的(process-based)离散事件仿真 4. 三阶段(three-phase)离散事件仿真

相关主题
文本预览
相关文档 最新文档