事件-驱动模拟(Event-driven simulation)
事件-驱动模拟
如果事件不能保证按照规律的时间间隔发生,并且事件发生的时间步长限定没有一个很好的值(步长如果太小,就会导致模拟需要的时间太长;步长过大,就会导致许多事件变得不可控),这种情况下,使用事件驱动的模拟是更合适的。
一个典型的例子可能是,模拟银行中的排队情况,银行里的客户不是以规律的时间间隔到达银行来办理业务,后来的客户办理业务时,并不一定马上能够进行业务办理,可能面对的是一个由其他等待办理业务的客户组成的长长的队伍。
这种方法(即银行客户等待办理业务的队列)使用的是发生在不同时间的事件的列表,并且按照时间增长的顺序处理这些事件。 处理这些事件可能导致后序事件的改变。这种模拟方式,时间从这个事件的时间“跳到”下个事件的时间。
我们怎么停止模拟呢?我们可以在时间达到某个点时停止,也可在系统达到某个状态时停止。下面是一个通用的事件-驱动算法:
1 Initialize system state
2 Initialize event list
3 While (simulation not finished)
3 Collect statistics from current state
3 Remove first event from list, handle it
3 Set time to the time of this event.
事件列表是如何管理的?它应该按照时间增加的顺序进行处理的(可以使用高效的优先级堆)。在模拟开始时,并不在队列中产生所有事件(产生所有的事件类似于在模拟开始时就知道整个事件的全部队列)。相反,我们通过某些的事件来初始化模拟,这些事件与其他事件有相关的时间联系。某些事件可以通过调动后来的事件来处理,后来的事件被插入到事件队列的合适位置。
诚如上文所述,我们可以在时间达到或超过某一点停止时停止模拟,或一旦系统达到一定的状态(比如上述提到例子中,银行排队超过两个队列)。有时我们想让模拟的终止条件本身是随机的:我们可以安排一个随机的伪事件,这个事件不会改变模型的状态,而只是停止模拟。
事件-驱动模拟(Event-driven simulation)相关推荐
- Event Driven Class OSAL 基于事件驱动的模拟操作系统
EventDrivenClassOSAL详解 Event Driven Class OSAL 基于事件驱动的模拟操作系统 ##前言 什么是OSAL OSAL为:Operating System Abs ...
- 数据结构学习(C++)——队列应用(事件驱动模拟) (转)
数据结构学习(C++)--队列应用(事件驱动模拟) (转)[@more@] 我看的两本教科书(<数据结构(C语言版)>还有这本黄皮书)都是以这个讲解队列应用的,而且都是银行营业模拟(太没新 ...
- ZStack OSAL的事件(event)与消息(message)——part1 part2
ZStack OSAL的事件(event)与消息(message)--part1 本文转载自:http://blog.csdn.net/ceci_zhou/article/details/978734 ...
- 记录-MySQL中的事件调度Event Scheduler
下面是自己的实例 /*查询event是否开启(查询结果Off为关闭 On为开启)*/ show variables like '%sche%'; /*开启/关闭命令(1开启--0关闭)*/ set g ...
- mysql数据库什么是事件_MySQL数据库之mysql 事件(Event) 总结
本文主要向大家介绍了MySQL数据库之mysql 事件(Event) 总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1 事件简介 事件(event)是MySQL在相应的时 ...
- javaScript中的事件对象event是怎样
事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包含了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...
- js进阶课程 12-9 jquery的事件对象event的方法有哪些?
js进阶课程 12-9 jquery的事件对象event的方法有哪些? 一.总结 一句话总结:三组六个,阻止默认事件一组,阻止冒泡一组,阻止冒泡和剩余事件一组. 1.事件的默认动作指什么? 比如点a标 ...
- C#事件(Event)的理解
文章目录 C#事件(Event)的理解 **事件的定义:** 事件的类型 C#事件(Event)的理解 事件的定义: C# 事件(Event): 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或 ...
- 技术干货 | JavaScript 之事件循环(Event Loop)
导读:学过 JavaScript(下文简称 JS) 的都知道它是一门单线程的.非阻塞的脚本语言.单线程意味着,JS 代码在执行的任何时候,都只有一个主线程来处理所有的任务,这也就意味着 JS 无法进行 ...
最新文章
- python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)
- Java的内存泄漏和垃圾回收机制
- mkfs.ext4 /dev/sdb 与 mkfs.ext4 /dev/sdb1
- Python 技术篇-用win32库实现读取、添加、修改注册表的值实例演示
- PRDICQR and PRD01QR
- python3 安装Crypto 出现的问题
- android搭建opencv开发环境,Android Studio搭建opencv开发环境
- python 操作系统学习_操作系统学习
- 【转载】移植FFMpeg到VC环境心得
- TestNG执行测试方法依赖关系
- dnf最新地图编号2020_2020手游崛起端游没落?网易新端游好玩刺激能搬砖,网友:妙...
- “我要彻底放弃 Debian 操作系统!”
- 中国大学MOOC(慕课)离线下载视频支持电脑播放
- java 拼音搜索功能设计与实现
- 计算机内部总线和外部总线,总线分为内部总线和外部总线
- Android 获取设备SN号
- c语言报告实验反思,c语言实验总结与反思
- 【Tools系列】Windows下一款好用的文件搜索工具:XSearch
- Windows平台的网速监控悬浮窗软件
- 比较横截面与时间序列的因子模型