事件-驱动模拟(Event-driven simulation)
来源:互联网 发布:it教程 编辑:程序博客网 时间:2024/05/18 00:23
事件-驱动模拟
如果事件不能保证按照规律的时间间隔发生,并且事件发生的时间步长限定没有一个很好的值(步长如果太小,就会导致模拟需要的时间太长;步长过大,就会导致许多事件变得不可控),这种情况下,使用事件驱动的模拟是更合适的。
一个典型的例子可能是,模拟银行中的排队情况,银行里的客户不是以规律的时间间隔到达银行来办理业务,后来的客户办理业务时,并不一定马上能够进行业务办理,可能面对的是一个由其他等待办理业务的客户组成的长长的队伍。
这种方法(即银行客户等待办理业务的队列)使用的是发生在不同时间的事件的列表,并且按照时间增长的顺序处理这些事件。 处理这些事件可能导致后序事件的改变。这种模拟方式,时间从这个事件的时间“跳到”下个事件的时间。
我们怎么停止模拟呢?我们可以在时间达到某个点时停止,也可在系统达到某个状态时停止。下面是一个通用的事件-驱动算法:
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-simulation)在排队中的运用
- Example Program: Event-Driven Simulation
- Event-driven architecture(事件驱动架构)
- 接口连接架构(Interface Connection Architecture)和事件驱动架构(Event Driven Architecture)
- 以消息为基础,以事件驱动之(message based, event driven)
- MFC基于消息,使用事件驱动(Message Based,Event Driven)机制
- Java学习笔记(15)Event-Driven Programming and Animations 事件驱动编程与动画
- Event-Driven XML Programming Guide--事件驱动解析XML
- LibUsbDotNet的readwrite(Event Driven)
- 模拟:simulation,与 仿真:simulation
- 抛硬币模拟(Coin Tossing Simulation)
- UVa 804 - Petri Net Simulation(模拟)
- uva804 Petri Net Simulation [PKU2017SC](模拟)
- Event-driven programming
- Event-driven programming library
- Event-Driven Programming
- Simulation?Emulation?模拟?仿真?
- NYOJ 48 小明的调查作业
- AJAX传值
- 权限认证
- hdu-1403-Longest Common Substring
- javascript的伪多态
- 事件-驱动模拟(Event-driven simulation)
- 新农合bs版本参数一览表
- java中调用dll文件的两种方法
- Android之AndroidManifest.xml文件解析
- linux 下 命令行 mail 发邮件方法
- 寒假训练--字符串--串结构练习——字符串匹配
- ajaxUtil
- Javascript模块化编程(三):require.js的用法
- jsp,div 限制字数,超出部分用省略号代替