事件-驱动模拟

如果事件不能保证按照规律的时间间隔发生,并且事件发生的时间步长限定没有一个很好的值(步长如果太小,就会导致模拟需要的时间太长;步长过大,就会导致许多事件变得不可控),这种情况下,使用事件驱动的模拟是更合适的。

一个典型的例子可能是,模拟银行中的排队情况,银行里的客户不是以规律的时间间隔到达银行来办理业务,后来的客户办理业务时,并不一定马上能够进行业务办理,可能面对的是一个由其他等待办理业务的客户组成的长长的队伍。

这种方法(即银行客户等待办理业务的队列)使用的是发生在不同时间的事件的列表,并且按照时间增长的顺序处理这些事件。 处理这些事件可能导致后序事件的改变。这种模拟方式,时间从这个事件的时间“跳到”下个事件的时间。

我们怎么停止模拟呢?我们可以在时间达到某个点时停止,也可在系统达到某个状态时停止。下面是一个通用的事件-驱动算法:

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)相关推荐

  1. Event Driven Class OSAL 基于事件驱动的模拟操作系统

    EventDrivenClassOSAL详解 Event Driven Class OSAL 基于事件驱动的模拟操作系统 ##前言 什么是OSAL OSAL为:Operating System Abs ...

  2. 数据结构学习(C++)——队列应用(事件驱动模拟) (转)

    数据结构学习(C++)--队列应用(事件驱动模拟) (转)[@more@] 我看的两本教科书(<数据结构(C语言版)>还有这本黄皮书)都是以这个讲解队列应用的,而且都是银行营业模拟(太没新 ...

  3. ZStack OSAL的事件(event)与消息(message)——part1 part2

    ZStack OSAL的事件(event)与消息(message)--part1 本文转载自:http://blog.csdn.net/ceci_zhou/article/details/978734 ...

  4. 记录-MySQL中的事件调度Event Scheduler

    下面是自己的实例 /*查询event是否开启(查询结果Off为关闭 On为开启)*/ show variables like '%sche%'; /*开启/关闭命令(1开启--0关闭)*/ set g ...

  5. mysql数据库什么是事件_MySQL数据库之mysql 事件(Event) 总结

    本文主要向大家介绍了MySQL数据库之mysql 事件(Event) 总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1 事件简介 事件(event)是MySQL在相应的时 ...

  6. javaScript中的事件对象event是怎样

    事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包含了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...

  7. js进阶课程 12-9 jquery的事件对象event的方法有哪些?

    js进阶课程 12-9 jquery的事件对象event的方法有哪些? 一.总结 一句话总结:三组六个,阻止默认事件一组,阻止冒泡一组,阻止冒泡和剩余事件一组. 1.事件的默认动作指什么? 比如点a标 ...

  8. C#事件(Event)的理解

    文章目录 C#事件(Event)的理解 **事件的定义:** 事件的类型 C#事件(Event)的理解 事件的定义: C# 事件(Event): 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或 ...

  9. 技术干货 | JavaScript 之事件循环(Event Loop)

    导读:学过 JavaScript(下文简称 JS) 的都知道它是一门单线程的.非阻塞的脚本语言.单线程意味着,JS 代码在执行的任何时候,都只有一个主线程来处理所有的任务,这也就意味着 JS 无法进行 ...

最新文章

  1. python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)
  2. Java的内存泄漏和垃圾回收机制
  3. mkfs.ext4 /dev/sdb 与 mkfs.ext4 /dev/sdb1
  4. Python 技术篇-用win32库实现读取、添加、修改注册表的值实例演示
  5. PRDICQR and PRD01QR
  6. python3 安装Crypto 出现的问题
  7. android搭建opencv开发环境,Android Studio搭建opencv开发环境
  8. python 操作系统学习_操作系统学习
  9. 【转载】移植FFMpeg到VC环境心得
  10. TestNG执行测试方法依赖关系
  11. dnf最新地图编号2020_2020手游崛起端游没落?网易新端游好玩刺激能搬砖,网友:妙...
  12. “我要彻底放弃 Debian 操作系统!”
  13. 中国大学MOOC(慕课)离线下载视频支持电脑播放
  14. java 拼音搜索功能设计与实现
  15. 计算机内部总线和外部总线,总线分为内部总线和外部总线
  16. Android 获取设备SN号
  17. c语言报告实验反思,c语言实验总结与反思
  18. 【Tools系列】Windows下一款好用的文件搜索工具:XSearch
  19. Windows平台的网速监控悬浮窗软件
  20. 比较横截面与时间序列的因子模型

热门文章

  1. jquery 动态为ul添加li
  2. 微信小程序显示cms里的html文章
  3. 即大数据后-贵阳能否成为区块链的机遇之城?
  4. Python 多个线程按先后顺序执行,并保持各子线程和主线程的通信
  5. 自动驾驶/智能网联矿山运输示范应用现状
  6. 九度OJ 1103:二次方程计算器 (解方程)
  7. 实现删除列表的重复值的功能
  8. Hadoop YARN配置(RM与NM)相关参数
  9. 很可爱的动画片小鸟三号
  10. 【IoT】NB-IoT模块对接移动oneNET平台流程