问题 用于C ++的离散事件模拟器


我目前正在寻找为C ++编写的离散事件模拟器。我在网上找不到很多以OO风格写的东西;有一些,但过时了。其他一些东西,比如Opnet,Omnet和ns3,对于我需要做的事情来说太复杂了。此外,我需要模拟基于代理的算法,该算法能够模拟数千个节点的系统。

有人知道任何适合我需要的东西吗?


2896
2017-10-22 18:15


起源

如果您对Python感到满意,可以尝试使用GarlicSim,它可以让您进行基于代理的模拟。 (我从来没有尝试过成千上万,但我不认为它会有问题。) - Ram Rachum


答案:


其他人有很好的直接答案,但我会提出一个替代方案。如果我理解你正确,你需要一个C ++系统或者你可以发布将来激活的事件,并且当这些事件触发时运行代码。

我有一个像这样做的项目,我开始尝试用C ++编写这样的事件系统,然后很快意识到我有一个更好的解决方案。

你有没有考虑过用行为Verilog编写你的程序?用硬件描述语言编写软件可能看起来很奇怪,但Verilog模拟器是一个基于事件的系统,而行为Verilog是表达事件,时间,触发器等非常方便的方式。有一个免费的Verilog模拟器(这就是我所说的Icarus Verilog。如果你没有在一个包中使用Ubuntu或一些带有Icarus的Linux发行版,那么从源代码构建是很简单的。


4
2018-02-19 15:07



请考虑发布一个链接到Verilog执行简单DES示例的示例。谢谢 - gatorback
@gatorback我不确定我是否曾经有其他人这样做过。我确定他们有,但我知道的唯一例子是我做的上述项目,我不知道我把代码放在哪里。 - Timothy Miller


我建议再看看OmNet ++。乍一看,它可能看起来很复杂,但如果你仔细研究一下,你会发现大多数复杂性都在网络附加组件(INET框架)中。除非您要进行详细的网络模拟,否则您不需要INET。

使用OmNet ++核心并不是特别困难,它可能比其他类似的工具更简单。

你可能想看一下介绍(可能有点过时) http://www.arcos.inf.uc3m.es/~jdaniel/seminarios/omnet2/index.html

使OmNet ++对我有吸引力的一点是它的可扩展性。可以在桌面上运行大型模拟。此外,可以将相同的模拟缩放到集群而无需重写代码。


3
2018-02-20 10:32





你应该考虑一下 SystemC的虽然我也建议再看看OmNet ++。


2
2018-02-20 10:41





有CSIM来自 梅斯基特软件 它支持用C,C ++和Java开发模型。然而,它是付费商业,AFAIK。


1
2017-07-12 00:44





我们用 SIMLIB 在我的学校。它非常快速,易于理解,面向对象,离散和连续模拟器。它可能看起来过时但仍然保持不变。


1
2018-02-23 12:30





看一眼 GBL库。它是用现代C ++编写的,甚至支持C ++ 0x功能,如移动语义和lambda函数。它提供了几种建模机制:同步和异步事件处理程序,抢占线程和光纤。您可以创建纯粹的行为,周期准确和实时模型,或任何混合模型。


0
2018-02-16 15:09



自我推销? - Jared Krumsie
如果它适合其中的上下文(它的答案),则允许自我引导 - Mooing Duck