基于OMNET++仿真平台的4维超立方体网络仿真

  • 实验要求
  • 实验环境
  • 打开工程
  • 大致思路
  • 实验知识
  • 开始上手
    • 修改维度
  • 查看完整原文
  • 旧博客地址修改了

实验要求

编程实现一个4维的立方体网络仿真,网络节点按照如下方式运行,
实验要求:

  • 1.网络节点按照默认的顺序,如节点标识0,1,…,15从小到大的顺序依次产生一个数据包。
  • 2.节点产生(或接收到)一个数据包后,随机选择一个相邻节点发送数据包,依此规则重复执行,直至产生数据包的节点接收到自己的数据包后,直接删除该数据包。

实验环境

  • Win10 2004
  • OMNeT++ 5.5.1
  • VSCode

打开工程

首先我们需要做一些实验前的准备工作。点击这里去之前的我的一篇博客记录了OMNeT的安装以及如何开始上手一个简单的工程。这里我不再重复造轮子。

注意,我以omnetpp-5.5.1\samples\hypercube 作为demo,基于hypercube例程来完成这一次实验。最好直接在这个项目里进行修改,如果新建一个完全空白的项目来完成这一实验的话,可能出现很多找不到函数的问题。

最好先备份hypercube文件夹,以免改动太多导致报错而无法挽回。当然你也可以自己新建一个空白的工程从0开始或者选择其他例程上手。

大致思路

首先来看下超立方的定义:

超级立方体网络指具有 d 个维度的网络具有2d个网络节点,网络节点按照0,1,2,…2d-1顺序进行编号。标识 i 的节点采用二进制方式可表示为d 位的二进制序列,网络任意两个节点二进制形式表示的d位标识符,对应位只有某一位不同时,表示节点是直接相邻接,否则,两个节点之间不存在直接相邻接。例如,对于一个3维的超级立方体网络,网络中存在8(8 = 23)个网络节点,如0(000),1(001) ,2(010) ,3(011) ,4(100) ,5(101) ,6(110) ,7(111)。网络拓扑结构按照如下方式连接,节点 0(000)与节点1(001) ,2(010) ,4(100) 直接相临接,因节点 0(000)与节点1,2,4分别在第1位,第2位,第3位不同(从左往右数),其他节点按此规律相邻接。

简单来说,在4维的情况下,每个节点将会与4个节点相连接。但是不是随便和某个编号的节点相连接的。

假设我是一个节点,那么和我相互连接的节点的编号的二进制必须只能和我有1位不同。

更具体的假设:假设我是0号节点,我的二进制编号是0000,和我有1位不同的话,那么就是0001,0010,0100,1000咯。

对吧。再把二进制转换回来,那就是编号为1,2,4,8的节点和我连接。

和上一次的实验有所不同的是,这一次实验里每一个节点都同时扮演了三个角色,也就是HCGenerator(消息产生器),HCRouter(路由器),HCSink(汇聚点)。

上面的括号里是我随意取的名字,叫它们什么不重要。重点是它们分别的作用。

  • HCGenerator:产生消息出去。
  • HCRouter:我的邻居节点发消息给我我负责转发。
  • HCSink:消息汇聚到这里。

和上面名字相关的代码有 “.cc”,“.ned”,这些和之前实验的是一个意思。

总体的思路:
HCGenerator里节点按顺序产生消息 --> HCRouter里节点处理收到的消息 --> HCSink里判断是不是到了目的节点,是的话就删除这个消息

按照要求,在HCRouter里需要随机选择一个邻居节点转发出去。

  • 最近时间确实有点紧,有时间的话我会在这里更新一个流程图。

当然,还是那句话,思路很简单。引用屈博士的话,“说谁不会说”。纸上谈来终觉浅,绝知此事要躬行。Talk is cheap ,Show me the code.

实验知识

  • .cc文件是对所有模块生效的代码,不是只对特定的某一个模块或者节点生效。
  • 删除网络中的所有消息可以结束仿真,调用endSimulation()函数也可以结束仿真。
  • 在win10下,如果按下开始仿真任务栏有图标但是没有界面,可以尝试外接一个显示器。
  • 在仿真界面的左上角有一个fast图标,可以快速仿真到仿真结束。
  • 数据包和消息(Message)是一个意思。
  • EV相当于cout。
  • send(msg, “out”)函数只是把消息推送到out门,出了门后消息具体怎么走不属于它管。
  • NED文件描述消息出门后具体路线。

开始上手

我以omnetpp-5.5.1\samples\hypercube 作为demo,基于hypercube例程来完成这一次实验。

修改维度

官方的hypercube例程默认维度是3。而实验要求是4维空间。

在HypercubeNetwork.ned里,修改dim(维度)为4.

network HypercubeNetwork extends Hypercube
{parameters:dim = default(4);//维度nodetype = "HypercubeNode";
}

其他位置暂时不做改动,我们直接就可以运行试试。

可以验证一个我上面的举例:假设我是0号节点,我的二进制编号是0000,和我有1位不同的话,那么就是0001,0010,0100,1000。再把二进制转换回来,那就是编号为1,2,4,8的节点和我连接。

提示;上面的图片是我使用的其他图床,不是csdn的。如果图片查看不了,请移步到我的博客查看。地址是:https://stefancharles.xyz/

查看完整原文

这里不提供全文。需要全文查看请移步我的自搭建博客

Stefan的博客

本文地址在这里

旧博客地址修改了

新地址是:http://oldblog.stefancharles.cn

基于OMNET++仿真平台的4维超立方体网络仿真相关推荐

  1. 基于芯片研发平台构建运维体系

    基于芯片研发平台构建运维体系 说起芯片研发平台的运维,一定要从EDA(电子设计自动化)研发环境的信息化建设说起.一块电脑主板的研发,到整台服务器的研发,都涉及到EDA研发环境的运维,是一个复杂的信息化 ...

  2. 初中计算机教案3D,基于3D 仿真平台的初中机器人 教学设计

    原标题:基于3D 仿真平台的初中机器人 教学设计 本文发表于 <数字教育> 2018年第5期(总第23期)实践案例栏目,页码:71-77.转载请注明出处. 摘 要:本文采用实践教学法,以社 ...

  3. matlab仿真的英文文献,matlab 外文翻译 外文文献 英文文献 MATALAB 混合仿真平台控制算法的概述...

    matlab 外文翻译 外文文献 英文文献 MATALAB 混合仿真平台控制算法的概述 MATALAB 混合仿真平台控制算法的概述 MATALB 混合仿真平台,即为将硬件引入到仿真回路里的半实物仿真系 ...

  4. matlab中的routte,matlab外文翻译外文文献英文文献MATALAB混合仿真平台控制算法的概述...

    <matlab外文翻译外文文献英文文献MATALAB混合仿真平台控制算法的概述>由会员分享,可在线阅读,更多相关<matlab外文翻译外文文献英文文献MATALAB混合仿真平台控制算 ...

  5. 自动驾驶仿真平台概述

    自动驾驶仿真平台概述 文章目录 自动驾驶仿真平台概述 1. 前言 2. 51 Sim-One平台 3. Virtual Test Drive 3.1 静态场景文件 **3.1.1 tdo文件** ** ...

  6. 干货 | 浅谈机器人仿真平台

    " 仿真是机器人学习和研究过程中最重要的工具之一,是指通过计算机对实际的物理系统进行模拟的技术.机器人仿真基于交互式计算机图形技术和机器人学理论,生成机器人的几何图形,并对其进行三维显示,用 ...

  7. iverilog搭建简易仿真平台

    iverilog搭建简易仿真平台 对于xsim和modelsim这种仿真测试平台,对操作系统要求过于严格,为了实现远程verilog编译仿真调试,我选择了linux+iverilog+gtkwave来 ...

  8. DSPACE仿真平台的使用

    DSPACE仿真平台的使用 文章目录 DSPACE仿真平台的使用 1.ModelDesk新建项目 2.MotionDesk引入项目 3.ControlDesk引入项目 4.项目整合运行 我们使用DSP ...

  9. Ubuntu18.04基于ROS和PX4的仿真平台配置

    1.前言 作者只是一名双非本科院校飞控专业的大二学生,想以此记录一下自学飞控的经历,也希望能给刚刚入门的同学一些微薄的帮助. 这个环境的安装可以说是西天取经一般,但安装完后发现如果有领路的人,其实花费 ...

  10. Ubuntu18.04配置搭建基于Gazebo的虚拟仿真平台(Px4):无人机(UAV)、无人车等模拟实验平台

    这篇我觉得是写得比较详细完整的 摘自:https://dgzc.ganahe.top/ganahe/2021/uavgazebomoni.html Ubuntu18.04配置搭建基于Gazebo的虚拟 ...

最新文章

  1. oracle asm dd命令,ASM来用DD命令模拟数据块损坏
  2. 字库点阵测试程序代码
  3. api文档 luci_研究LuCI - 技术手札 - OSCHINA - 中文开源技术交流社区
  4. spark宽依赖和窄依赖
  5. boost::regex模块部分正则表达式迭代相关的测试程序
  6. boost::hana::test::TestGroup用法的测试程序
  7. 收起.NET程序的dll来
  8. stream 定长循环_Java8之Stream流代替For循环操作
  9. spss入门——简单的数据预处理到时间序列分析系列(一)
  10. 计算机接口技术试题,广西工学院计算机接口技术考核试题(4套,有答案)
  11. ArcGIS数据编辑操作
  12. 【Elasticsearch】优秀实践-Elasticsearch查询调优
  13. Linux/debian/ubuntu/deepin 等系统禁用鼠标中键(滚轮)按下粘贴的方法
  14. 区块链在供应链金融中的应用分析
  15. 1.10 新概念 have a cold/headache
  16. 华硕笔记本开机直接进入bios解决方法
  17. seo伪原创文章优化(怎么找可以做伪原创的文章)
  18. VBA--LBound函数与UBound函数用法详解
  19. refind引导的win10+ubuntu18.04开机启动
  20. 用户正确使用趋势跟随的交易系统的方法

热门文章

  1. 数独基本规则_独数游戏,数独题目大全
  2. 2019/04/15 在调试https://blog.csdn.net/hjw2719/article/details/83473199中程序时出现的问题
  3. 电脑的一些基本常识和简单操作
  4. 【win 10】win 10:远程连接 Windows 服务器工具下载、安装和使用:PowerShell server Putty —— win 10 之间通过 ssh 登录
  5. ESP8266烧录选项中的QIO 和 DIO解释
  6. 《指弹:周杰伦青花瓷》
  7. 什么是涡以及vortex和eddy的区别
  8. ospf中DR/BDR选举及接口网络类型
  9. Android 安卓超级简单 修改图片RGB颜色,实现图片冷暖色变化
  10. html怎么定义403页面,自定义 403 错误页面(示例代码)