我目前正在寻找为C ++编写的离散事件模拟器。我在网上找不到很多以OO风格写的东西;有一些,但过时了。其他一些东西,比如Opnet,Omnet和ns3,对于我需要做的事情来说太复杂了。此外,我需要模拟基于代理的算法,该算法能够模拟数千个节点的系统。
有人知道任何适合我需要的东西吗?
我目前正在寻找为C ++编写的离散事件模拟器。我在网上找不到很多以OO风格写的东西;有一些,但过时了。其他一些东西,比如Opnet,Omnet和ns3,对于我需要做的事情来说太复杂了。此外,我需要模拟基于代理的算法,该算法能够模拟数千个节点的系统。
有人知道任何适合我需要的东西吗?
其他人有很好的直接答案,但我会提出一个替代方案。如果我理解你正确,你需要一个C ++系统或者你可以发布将来激活的事件,并且当这些事件触发时运行代码。
我有一个像这样做的项目,我开始尝试用C ++编写这样的事件系统,然后很快意识到我有一个更好的解决方案。
你有没有考虑过用行为Verilog编写你的程序?用硬件描述语言编写软件可能看起来很奇怪,但Verilog模拟器是一个基于事件的系统,而行为Verilog是表达事件,时间,触发器等非常方便的方式。有一个免费的Verilog模拟器(这就是我所说的Icarus Verilog。如果你没有在一个包中使用Ubuntu或一些带有Icarus的Linux发行版,那么从源代码构建是很简单的。
我建议再看看OmNet ++。乍一看,它可能看起来很复杂,但如果你仔细研究一下,你会发现大多数复杂性都在网络附加组件(INET框架)中。除非您要进行详细的网络模拟,否则您不需要INET。
使用OmNet ++核心并不是特别困难,它可能比其他类似的工具更简单。
你可能想看一下介绍(可能有点过时) http://www.arcos.inf.uc3m.es/~jdaniel/seminarios/omnet2/index.html
使OmNet ++对我有吸引力的一点是它的可扩展性。可以在桌面上运行大型模拟。此外,可以将相同的模拟缩放到集群而无需重写代码。
你应该考虑一下 SystemC的虽然我也建议再看看OmNet ++。
有CSIM来自 梅斯基特软件 它支持用C,C ++和Java开发模型。然而,它是付费商业,AFAIK。
我们用 SIMLIB 在我的学校。它非常快速,易于理解,面向对象,离散和连续模拟器。它可能看起来过时但仍然保持不变。
看一眼 GBL库。它是用现代C ++编写的,甚至支持C ++ 0x功能,如移动语义和lambda函数。它提供了几种建模机制:同步和异步事件处理程序,抢占线程和光纤。您可以创建纯粹的行为,周期准确和实时模型,或任何混合模型。