OMNEST是面向对象的离散事件网络仿真框架。该框架有一个通用的体系结构,它允许应用于各种问题域,其中需要以高性能模拟复杂行为:协议建模、有线和无线通信网络的建模、高性能集群的体系结构仿真;举几个例子。

非商业版本,OMNET++,拥有庞大的学术用户社区,有多个小组发布和支持仿真模型,以及每年发表数百篇关于无线网络和其他主题的仿真论文。

当用户问他们为什么选择OMNEST(或OMNET++)时,我们的用户通常会提到以下项目:
  1. 非常有效的 -- OMNEST模拟执行速度快,规模也很好,这可以让模拟库中的特征量感到惊讶。
  2. 可以快速学习 -- 需要一些C++知识,但是编程模型和API可以很快地被拾取,并且可以在短时间内变得高效。
  3. 伟大的社区 -- 模拟器拥有庞大的用户社区,大量信息可以在互联网上免费获得;当一个问题出现时,这是非常有用的,因为解决方案通常只是一个网络搜索(与公开可用的信息为0的专有工具进行比较,通常仅限于提供市场级别资料)。
  4. 组件模型 -- 仿真模型更易于理解和维护,并且可以以意外的方式组合(因为组件通常不直接在C++级别上相互交互,仅通过OMNEST提供的手段,例如消息)。
  5. 灵活性 -- 模拟器和模型可以以令人愉快的方式扩展;异类场景,例如与其他模拟器和外部系统的接口,并行仿真,,模拟,以及上述的组合都可以实现,并且完整的源代码在需要的时候可以用于研究和调试。



组件模型
OMNEST框架的基本原理之一是基于组件的仿真模型体系结构。模型是由可重用组件(称为模块)构建的,它们可以组合在一起形成更复杂的结构。模块嵌套的深度不受限制。模块主要通过消息传递、通过连接或直接发送进行通信。模块的行为可以在C++编程,使用仿真基础OMNEST提供。             
组件体系结构提供了多种好处:OMNEST模型由嵌套的模块组成,这些模块主要通过交换消息进行通信。

  • 仿真模型更易于理解和维护,并且可以有效地组合,(因为组件不直接在C++级别上彼此交互,仅通过OMNEST提供的手段,例如消息)。            
  • 促进代码重用            
  • 帮助您选择正确的抽象级别:模型中的组件可以稍后替换为更详细或更不详细的版本,并且还可以用复合的组件替换单个组件,反之亦然。
组件使用特定于域的语言NED来组装,可以用图形和源来编辑。NED语言定义组件(模块)的外观、参数和连接点,以及子模块和内部连接(网表)。NED支持参数拓扑、包、继承、接口、元数据注释、文档注释以及创建和处理大型模型框架所需的许多其他语言特征。              仿真模型可以被参数化。模块参数可以携带简单的(int,双,字符串,布尔)和复合数据类型(例如XML),并且可以被设置为正常值(1.0,0.3),以作为随机数源。为了减少参数化模型所需的配置量,参数可能具有默认值,并且NED和配置文件都允许使用通配符模式将多个模型参数设置在一起。             
配置文件还允许您定义参数研究,也就是说,多个迭代遍历一个参数(或参数)的多个值,每个重复n次具有不同的随机数种子。




仿真库
简单的模块用C++语言编写,使用仿真库提供的API。该功能包括:

  • 消息传递             
            模块主要通过消息传递、通过连接或直接发送进行通信。消息可以表示作业、网络分组、控制信息或其他实体。OMNEST提供从紧凑描述生成C++消息类(例如分组头)的支持。计时器也用模块发送给自身的消息来表示。             
  • 随机数             
            OMNEST提供多个随机数流,可插拔RNG算法(默认为梅森捻线机),以及许多离散和连续分布。RNG很少在代码中直接访问,因为大多数时间模块参数被用作随机数的来源。             
  • 发布订阅通信             
            OMNEST提供了用于模块间发布订阅通信的信号框架,获得关于结构模型更改的通知、暴露统计等。从模块发射的信号在模块层次结构中传播到根,模块和其他代码可以在任何级别上订阅所选信号。
  • 结果记录            
            模型代码可以记录任何数据作为仿真结果。数据可以直接记录,或者模型可以发射它们作为信号,并让仿真框架注意以适当的形式和细节记录它们。结果可以被记录为标量(例如总和、计数、平均值、其他其他属性的值)、直方图、统计摘要、或作为向量的所有值(即时间序列)。可以使用IDE绘制结果文件,或者从GNU R(我们有一个了解结果文件的R包)或其他编程环境编程。             
  • 登录中             
            代码中的良好日志消息(无论是您的还是第三方代码)都有助于了解模型的行为,也可以减少调试时间。OMNEST还可以将日志消息(连同模型的其他活动)保存到事件日志文件中,后者可以被模块过滤、模拟时间或其他属性,可以被搜索和检查,并且可以与动态绘制的序列图一起查看。             
  • 模型的访问和运行时间操纵             
            OMNEST支持在运行时创建和删除模块和连接,打开建模动态变化网络的可能性,以及在运行时从外部源导入拓扑。也可以将网络拓扑提取到图形表示中,例如寻找最短路径。



性能、集成和可扩展性

OMNEST包含了许多有趣的可能性

  • 开放接口             
            所有的模型文件和输出文件都是纯文本,使您更容易用自己的自定义或第三方工具处理它们。我们还提供命令行工具和库来操作它们。              
  • 可扩展的             
            C++插件接口可用于定制仿真内核的各个方面:事件调度、配置和模型参数化、结果记录等。              
  • 可嵌入仿真内核             
            您可以在内部创建自己的应用程序,这些应用程序依赖于OMNEST仿真内核,用于模拟功能:仿真内核、模型组件甚至整个模拟都可以嵌入到C++程序库中。阅读更多              
  • 并行仿真             
            可以使用集群或多核/多处理器体系结构上的并行分布式仿真来执行仿真模型,以加速模拟或分发内存需求。仿真模型不需要被用于并行仿真,但是它们需要遵守某些限制(例如,不使用全局变量,而不直接使用在不同分区中实例化的组件)。并行仿真运行在MPI之上,并采用保守同步。使用命名管道或其他通信手段代替MPI也是可能的。
  • 并行多重复制             
            OMNEST让您加速稳态模拟使用阿卡罗阿包。阿卡罗阿在计算集群的节点上运行模型的多次复制。(阿卡罗阿软件和许可证需要与作者单独取得)。              
  • 实时与半实物仿真             
            仿真内核通过插件接口支持实时仿真和半实物仿真。一个功能强大、注释广泛的源代码示例将帮助您快速实现自己的特定于应用程序的硬件在环仿真。              
  • 网络仿真能力             
            可用作为模型包的一部分,如IET框架。              
  • SystemC集成             
            OMNEST SystemC集成特征允许在同一个仿真程序中混合OMNEST和SystemC模块,而无性能损失通常是联合仿真解决方案的特征。阅读更多 
  • HLA支持             
            允许通过HLA/IEEE 1516连接OMNEST与其他模拟器。



支持多平台

OMNEST仿真可以在Windows上运行,实际上可以在任何具有强大功能的UNIX类环境中运行,并有一个现代的C++编译器,包括MaOS和Linux。             
OMNEST仿真IDE目前在Windows、MACOS和Linux上可用。