离散事件仿真

本文介绍了离散事件仿真的概念、优势及如何进行仿真,特别讲解了事件驱动模型,包括其核心构件事件队列的工作原理。提供了一个简单的C++事件驱动仿真模型示例,展示了如何处理事件并实现一个M/M/1排队系统仿真,通过记录客户数量随时间变化绘制图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚在陈硕老师的blog看到他针对一个模拟银行叫号系统给出的答案和代码。陈老师代码文章都写得好,令人佩服。恰好我的很大一部分工作都是基于仿真来做的,这里按照我自己的理解,简要介绍一些主要的仿真技术,给出一个非常简单的事件驱动的仿真程序,并用一个排队系统初步演示一下仿真程序的使用。

 

为什么要仿真

说起为什么需要仿真,理由可以列举很多,简要来说,它是在纯数学建模和实际系统的优缺点之间的一个折中。相对数学模型来说,仿真不需要高深的数学技巧,也不需要作过多的简化和假设,并且在求解复杂系统时,不会面对状态和空间爆炸的问题。再者,仿真也可以用来验证数学模型的正确性。而相比实际系统,仿真的成本要小得多,并且容易取得更多的统计信息。有时候,实际系统甚至是不可得的,比如对于Peer-to-Peer (P2P)网络的研究者来说,大部分时候,大部分人都不可能获得一个拥有上百万用户的P2P网络的控制,如果没有仿真,只怕很多做研究的都要无事可做了。

 

如何仿真

要进行仿真,首先需要对被仿真的系统进行建模。系统的模型由若干实体以及实体间的关系组成。实体的属性构成了系统的状态,而事件是引起系统状态发生改变的行为。通常来说,系统的状态随着时间的不断发生而不断变化。因此,要模拟一个系统的行为,最重要的就是模拟系统中的事件。

 

一般说来,仿真模型分为两中,一种称为周期驱动模型,也称为时间驱动,系统以固定的时间间隔增量累积时间,每次时钟的走动要求某些动作必须发生,这种模型的好处是非常简单,但真实性比较差;另一种是事件驱动模型,在这种模型中,系统状态的改变仅仅由事件的发生引发,系统时间也由事件的发生时间来确定,由于事件发生时间的随机性,系统时间的推进步长也是随机的。由于两个相邻事件之间的时间内系统状态不会发生改变,所以系统时钟可以直接从一个事件发生的时间推进到下一个事件的发生时刻。事件驱动的仿真模型能够比较精确地模拟复杂的系统,因此应用范围更加广泛。本文接下来只讨论事件驱动的仿真模型。

 

事件驱动的仿真模型的核心构件是“事件队列”,事件队列保存系统中还未发生的事件,并且事件是以其发生的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值