【问题标题】:discrete event simulators for C++C++ 的离散事件模拟器
【发布时间】:2011-04-29 07:42:45
【问题描述】:

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

有人知道什么适合我的需要吗?

【问题讨论】:

  • 如果您对 Python 感到满意,可以尝试使用 GarlicSim,它可以让您进行基于代理的模拟。 (我从未尝试过数千次,但我认为它不会有问题。)

标签: c++ performance simulation agent discrete-space


【解决方案1】:

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

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

您可能想看看an intro

OmNet++ 吸引我的一个原因是它的可扩展性。可以在桌面上运行大型模拟。此外,可以在不重写代码的情况下将相同的模拟扩展到集群。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您应该考虑SystemC,尽管我也建议您再看看 OmNet++。

      【讨论】:

        【解决方案4】:

        其他人有很好的直接答案,但我会建议一个替代方案。如果我理解正确,您需要一个 C++ 或类似系统,您可以在其中发布将来触发的事件,并在这些事件触发时运行代码。

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

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

        【讨论】:

        • 请考虑发布一个 Verilog 执行简单 DES 示例的示例的链接。谢谢
        • @gatorback 我不确定我是否有其他人这样做过。我确定他们有,但我知道的唯一例子是我所做的上述项目,我不知道我把代码放在哪里。
        【解决方案5】:

        Mesquite Software 的 CSIM 支持使用 C、C++ 和 Java 开发模型。但是,它是付费商业的,AFAIK。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 如果它适合其所在的上下文(它的答案),则允许自我宣传
          猜你喜欢
          • 2012-10-22
          • 1970-01-01
          • 2014-04-12
          • 2017-05-31
          • 2017-12-30
          • 2019-09-07
          • 1970-01-01
          • 2012-07-02
          • 2017-09-20
          相关资源
          最近更新 更多