我目前正在寻找为 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++ 内核并不是特别困难,它可能比其他类似工具更简单。
您可能想看一下介绍。
让 OmNet++ 对我有吸引力的一件事是它的可扩展性。可以在桌面上运行大型模拟。此外,可以在不重写代码的情况下将相同的模拟扩展到一个集群。
您应该考虑SystemC,尽管我也建议您再看看 OmNet++。
我们在我的学校使用SIMLIB。它是非常快速、易于理解、面向对象、离散和连续的模拟器。它可能看起来已经过时,但仍然保持不变。
Mesquite Software的 CSIM支持使用 C、C++ 和 Java 开发模型。但是,它是付费商业的,AFAIK。
看看GBL 库。它是用现代 C++ 编写的,甚至支持移动语义和 lambda 函数等 C++0x 特性。它提供了几种建模机制:同步和异步事件处理程序、抢占式线程和纤程。您可以创建纯粹的行为、周期精确和实时模型,或这些模型的任何混合。