Omnet++排队模型仿真实验
- 格式:doc
- 大小:506.50 KB
- 文档页数:5
第1篇一、实验背景排队论是运筹学的一个重要分支,主要研究在服务系统中顾客的等待时间和服务效率等问题。
在现实生活中,排队现象无处不在,如银行、医院、超市、餐厅等。
通过对排队问题的研究,可以帮助我们优化服务系统,提高顾客满意度,降低运营成本。
本实验旨在通过模拟排队系统,探究排队论在实际问题中的应用。
二、实验目的1. 理解排队论的基本概念和原理。
2. 掌握排队模型的建立方法。
3. 熟悉排队系统参数的估计和调整。
4. 分析排队系统的性能指标,如平均等待时间、服务效率等。
5. 培养运用排队论解决实际问题的能力。
三、实验内容1. 建立排队模型本实验以银行排队系统为例,建立M/M/1排队模型。
该模型假设顾客到达服从泊松分布,服务时间服从负指数分布,服务台数量为1。
2. 参数估计根据实际数据,估计排队系统参数。
假设顾客到达率为λ=2(人/分钟),服务时间为μ=5(分钟/人)。
3. 模拟排队系统使用计算机模拟排队系统,记录顾客到达、等待、服务、离开等过程。
4. 性能分析分析排队系统的性能指标,如平均等待时间、服务效率、顾客满意度等。
四、实验步骤1. 初始化参数设置顾客到达率λ、服务时间μ、服务台数量n。
2. 生成顾客到达序列根据泊松分布生成顾客到达序列。
3. 模拟排队过程(1)当服务台空闲时,允许顾客进入队列。
(2)当顾客进入队列后,开始计时,等待服务。
(3)当服务台服务完毕,顾客离开,开始下一个顾客的服务。
4. 统计性能指标记录顾客等待时间、服务时间、顾客满意度等数据。
5. 分析结果根据实验数据,分析排队系统的性能,并提出优化建议。
五、实验结果与分析1. 平均等待时间根据模拟结果,平均等待时间为2.5分钟。
2. 服务效率服务效率为80%,即每分钟处理0.8个顾客。
3. 顾客满意度根据模拟结果,顾客满意度为85%。
4. 优化建议(1)增加服务台数量,提高服务效率。
(2)优化顾客到达率,降低顾客等待时间。
(3)调整服务时间,缩短顾客等待时间。
摘要本文主要工作是介绍OMNeT++仿真平台,并基于OMNeT++搭建Ad hoc网络环境来进行仿真试验。
首先是详细介绍OMNeT++仿真器的构成原理,尤其是对其NED语言和编程语法等做深入讲解,同时也对OMNeT++的移动框架(MF,Mobility Framework)组成原理进行了系统的讲解,因为它为我们提供了仿真无线移动网络所需各种基本模块,把我们从设计底层的模块结构和拓扑结构中解放出来,让我们能够把精力放在具体协议的实现上,加快了搭建仿真网络的过程,最后是进行Ad hoc 网络仿真环境的搭建,并在该环境中对在计算机网络中常用来检测网络连通性的Ping 命令进行了仿真试验,并对抽取所需的数据进行分析。
关键字网络仿真OMNeT++ Ad hoc网络AbstractThe main work of this thesis introduces the OMNeT++, and organize a Ad hoc network for the simulation test based on OMNeT++. Firstly, it introduces the structure of OMNeT++ in detail, especially its NED language and the syntax of program, as well as OMNeT++’s Mobile Framework (MF, Mobility Framework) principle, because it provides with basic modules for wireless and mobile network simulation, and free from the designing of the bottom of the module’s structure and topological, so that , it can put more efforts on the achievement of the realization of the protocol, speed up the simulation process. At last, it organizes an Ad hoc network, and simulate the Ping instruction, which is always used in the computer network to detect the network’s connectivity, at the same time, it collects the required data for analysis.Key words Network Simulation OMNeT + + Ad hoc Network目录摘要 (I)Abstract (II)第1章绪论 (1)1.1 课题背景与意义 (1)1.2 本文的主要工作 (2)1.3 本文的组织结构 (3)第2章OMNeT++基础 (4)2.1 OMNeT++简介 (4)2.2 OMNET++框架 (6)2.2.1 OMNeT++组成 (6)2.2.2 OMNeT++框架 (7)2.3 OMNeT++语法 (8)2.3.1 NED语言 (8)2.3.2 简单模块算法实现和消息传递 (11)2.4 MF移动框架 (14)2.4.1 主机模型 (14)2.4.2 信道控制模块 (16)2.4.3 基本概念 (18)第3章Ad hoc网络基础 (22)3.1 Ad Hoc网络的概念 (22)3.2 Ad hoc网络特点 (23)3.3 Ad hoc网络协议栈 (25)3.4 Ad hoc网络的应用领域 (26)第4章Ad hoc网络仿真的实现 (29)4.1 仿真试验 (29)4.1.1 NIC模块 (30)4.1.2 移动模块 (32)4.1.3 网络层模块 (32)4.1.4 信道控制模块 (35)4.1.5 应用层模块 (36)4.2 仿真结果分析 (37)4.2.1 丢包分析 (37)4.2.2 往返时延分析 (38)4.2.3 数据分析 (38)结论 (39)致谢 (40)参考文献 (41)附录1 外文文献译文 (43)附录2 外文文献原文 (48)第1章绪论1.1 课题背景与意义由于研究方向的不同,许多领域,并不太适合采用实地试验的方式,或者是为了节省时间、资金等目的,最好采用仿真的方式。
基于O MN e T++ 的INET 框架消息传递研究唐敏(中国直升机设计研究所, 江西景德镇333001)摘要:文章在研究O M N e T++平台的基础上,对仿真模型I N E T 框架进行了深入剖析,对在O M N e T++平台上使用I N E T 进行网络协议层之间的信息传输进行了剖析与研究,同时文章还就I N E T 框架中新协议扩展的方法作了初步讨论,为进一步的研究工作提供了前提条件。
关键词:O M N e T++;I N E T;消息传递;协议扩展;数据封装中图分类号:TP393文献标识码:AR esea r c h on INE T Message Tr a n s m i ss i on Based on O MN e T++T A N G M i n(China Helicopter Research and Development Institute,Jiangx i 333001,China)A b s t r act:Based on the research on O M N eT + + pl a t f orm,th i s a rt i c l e a n a l y s i s the s i mu l a t i on model I N ET f r a m e work in- depth, m ea nwh il e,the tr a n s m i ss i on i n f orm a t i on among the network protocol l a y e r in O M N eT + + pl a t f orm i s a l s o been studied in th i s a rt i c l e. In a ddit i on,we a l s o did pr e li m i n a ry di s cu ss i on s on the new protocol e xt e n s i on with I N ET f r a m e work, which prov i de t he pr e condit i on for f urth e r research work .K e y wor ds: O M N e T++;I N ET;message tr a n s m i ss i on;protoc a l e xt e n s i on;dat a e nc a psu l a t i on网络仿真是使用计算机技术构造拓扑结构,模拟网络协议的工作过程。
实验二Omnet++停等式ARQ模型仿真实验一.实验目的1.熟悉omnet++软件使用。
2.对停等式ARQ模型进行更形象的分析与学习,了解此协议的思想。
二.实验工具Omnet++软件三.实验步骤1.用omnet++软件,创建一个arq.ned文件,编写代码,建立两个具有收发功能的节点并连接,传输延迟设置为100ms。
代码如下:simplesender{parameters:@display("i=block/process");gates:inputin;outputout;}simplereciever{parameters:@display("i=block/process");gates:inputin;outputout;}networkArq{submodules:sender:sender{parameters:@display("i=,cyan");}reciever:reciever{parameters:@display("i=,gold");}connections:sender.out-->{delay=100ms;}-->reciever.in;sender.in<--{delay=100ms;}<--reciever.out;}图形如下图所示:2.对停等式ARQ协议进行编程实现。
在发送端设置定时器,当超出一定时间未收到接收端返回的ACK就认为所发message丢失,再次发送相同message。
按时接到相对应的ACK后,定时器重启。
模块声明及初始化代码如下:classsender:publiccSimpleModule{private:simtime_ttimeout;//timeoutcMessage*timeoutEvent;//holdspointertothetimeoutself-messageintseq;//messagesequencenumbercMessage*message;//messagethathastobere-sentontimeoutpublic:sender();virtual~sender();protected:virtualcMessage*generateNewMessage();virtualvoidsendCopyOf(cMessage*msg);virtualvoidinitialize();virtualvoidhandleMessage(cMessage*msg);};Define_Module(sender);sender::sender(){timeoutEvent=message=NULL;}sender::~sender(){cancelAndDelete(timeoutEvent);deletemessage;}voidsender::initialize(){//Initializevariables.seq=0;timeout=1.0;timeoutEvent=newcMessage("timeoutEvent");//Generateandsendinitialmessage.EV<<"Sendinginitialmessage\n";message=generateNewMessage();sendCopyOf(message);scheduleAt(simTime()+timeout,timeoutEvent);}我们在设定发送端sender的时候,考虑到如果接收端reciever没有接到,sender的上一个message不能被清除,则规定接到相对应的ACK后,将刚刚发送的message清除,否则重发。
实验3---多服务台排队系统的仿真姓名:学号:一、目标任务已知一个系统有N个服务员,能力相等,服务时间服从指数分布。
顾客的到达时间间隔服从指数分布。
用Monte-Carlo仿真,分别求按下列方案的总体平均排队时间:① M|M|N。
② N个单通道系统并列,按1/N概率分裂到达流。
③ N个单通道并列,挑选最短的队。
要求:①给出程序设计的过程。
②如果采用固定的N,则要求N>2。
③至少取ρ=0.3和ρ=0.7两种强度运行程序。
④对结果进行分析。
二、编程语言Matlab三、关键代码方案一:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务间隔server_id = mod(client_num, N); % 按1..N的顺序循环排入服务员窗口if server_id ==0server_id = N;endif server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间和总体平均等待时间线状图x = 1:100;%plot(x, avg_wait_time, x, mean_avg_wait_time);scatter(x, avg_wait_time, '.');方案二:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务时间间隔server_id = randi([1 N]); % 按1/N的概率排入服务员窗口if server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间散点图x = 1:100;scatter(x, avg_wait_time, '.');方案三:N = 3; % 服务员人数r = 6; % 顾客到达流强度u = 20; % 服务员服务强度T = 1000; % 仿真运行时间avg_wait_time = []; % 平均等待时间for i=1:100% 模拟排队函数server_time = [0.0, 0.0, 0.0]; % 用来保存服务员下一空闲时间time = 0; % 绝对时钟,初始为0client_num = 0; % 顾客总数,初始为0CRTime = 0; % 顾客到达时间间隔ServeTime = 0; % 顾客服务时间server_id = 0; % 当前进入排队窗口的服务员编号total_wait_time = 0;% 系统中到达顾客的总等待时间while 1CRTime = exprnd(1/r); % 按指数分布产生顾客到达时间间隔time = time + CRTime; % 更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; % 顾客数加1ServeTime = exprnd(1/u); % 按指数分布产生顾客服务时间间隔temp = min(server_time); % 寻找排队时间最短的服务员窗口[x, y] = find(temp == min(min(server_time)));server_id = y; % 按队伍最短排入服务员窗口if server_time(1, server_id) <= time % 如果当前server_id号服务员空闲,则直接接收服务server_time(1, server_id) = time + ServeTime; % 服务员下一空闲时间为当前绝对时钟加上当前服务时间else % 否则所有服务员都在忙碌,顾客要排队等候total_wait_time = total_wait_time + server_time(1, server_id) - time; % 顾客排队等候时间为当前服务员下一空闲时间减去绝对时钟server_time(1, server_id) = server_time(1, server_id) + ServeTime;endendavg_wait_time = [avg_wait_time, total_wait_time/client_num];end% 计算平均等待时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f\n', r/u, mean_avg_wait_time); % 打印平均等待时间% 绘制每次仿真的平均等待时间散点图x = 1:100;scatter(x, avg_wait_time, '.');四、实验结果与分析方案一:图1 方案一仿真的平均等待时间散点图图2 方案一平均等待时间M|M|N1. 输入参数:服务员人数N,顾客到达流强度r,服务员服务强度u,仿真运行时间T;2. 各变量初始值置0:绝对时钟time,服务员下一空闲时刻数组server_time[](其中按顺序保存每一个服务员的下一空闲时刻),顾客总数client_num,顾客到达时间间隔CRTime,顾客服务时间ServeTime,当前进入排队窗口的服务员编号server_id,系统中顾客总等待时间total_wait_time;3. 按照指数分布产生下一顾客到达的时间间隔CRTime,time+=CRTime。
OPNET网络仿真试验设计网络仿真是一种以计算机技术为基础的试验方法,通过对网络的建模和模拟,来模拟真实网络环境中的各种状况和问题。
网络仿真试验设计使用OPNET软件,通过搭建网络拓扑结构、配置网络参数以及设定仿真试验场景,来探究网络性能和应用性能,为网络设计和优化提供指导。
一、试验背景和目标网络仿真试验是在真实网络上进行操纵性试验的一种方法,它通过仿真试验,给出网络资源的利用率以及响应速度等性能参数,援助设计者了解网络的寻址和路由机制以及各种网络规划的可行性。
本试验设计旨在通过OPNET软件进行网络仿真试验,深度了解和精通网络性能分析和网络性能优化方法,提高网络设计和管理的能力。
二、试验步骤和方法1. 确定仿真场景:依据试验目标,选择合适的仿真场景,例如数据中心网络、无线传感器网络等。
确定仿真场景后,依据场景需求设计网络拓扑结构。
2. 设计网络拓扑结构:使用OPNET软件中的拓扑工具,依据试验需求搭建网络拓扑结构,包括网络节点、链路、路由器等。
3. 配置网络参数:依据仿真试验需求,设置各个节点的属性和参数,例如传输速率、延迟、丢包率等。
4. 设定应用场景:依据试验目标,设定合适的应用场景和流量模式,例如FTP、HTTP、视频传输等。
设置应用场景时,可以指定流量起始节点、传输数据量、传输时间等参数。
5. 运行仿真试验:对设计好的网络拓扑和参数进行仿真试验,观察和记录仿真结果,并进行性能分析。
可以通过监测网络性能指标、观察系统运行状况等方式,评估网络的性能和可靠性。
6. 性能分析和优化:依据试验结果,分析网络的性能问题,并提出相应的性能优化方案。
可以针对网络瓶颈、时延、拥塞等问题进行优化措施的设计和实施。
7. 试验结果和总结:通过对仿真试验的结果进行总结和分析,得出试验结论。
可以依据试验结果来评估网络设计和优化方案的有效性,并提出改进意见。
三、试验设计的特点和意义1. 省时省力:相比于在真实网络环境中进行试验,网络仿真试验具有明显的省时省力的优势。
OMnet++初学者教程第⼆节运⾏仿真2.1启动仿真程序完成上述步骤后,可以通过选择%omnetpp.ini⽂档(在编辑器区域或_Project Explorer中_)并按“_运⾏”_按钮来启动仿真。
IDE将⾃动构建您的项⽬。
如果存在编译错误,则需要纠正这些错误,直到获得⽆错误的编译和链接。
您可以通过从菜单中选择_Project-> Build All_或_按Ctrl + B_来⼿动触发构建。
笔记如果你想建⽴在命令⾏中的可执⾏模拟,创建⼀个_Makefile中_使⽤opp_makemake命令,然后输⼊make要⽣成项⽬。
它将产⽣⼀个可执⾏⽂件,可以通过输⼊来运⾏./tictoc。
2.2运⾏模拟成功构建并启动仿真后,您应该会看到⼀个新的GUI窗⼝,类似于下⾯的截图。
该窗⼝属于_Qtenv_,它是OMNeT ++仿真运⾏时GUI。
您还应该可以再主体区域中看到以图形⽅式显⽰的包含_tic_和_toc_的⽹络。
按下⼯具栏上的“_RUN”_按钮开始仿真。
您应该看到的是_tic_和_toc_正在彼此交换消息。
主窗⼝⼯具栏显⽰当前模拟时间。
这是虚拟时间,与程序执⾏的实际(或挂钟)时间⽆关。
实际上,在⼀秒钟内可以仿真多少秒,在很⼤程度上取决于硬件的速度,甚⾄更多地取决于仿真模型本⾝的性质和复杂性。
请注意,节点处理消息所需的模拟时间为零。
在此模型中消耗仿真时间的是连接的传播延迟。
您可以放慢动画的播放速度,也可以使⽤图形窗⼝顶部的滑块来加快动画的播放速度。
您可以通过以下⽅式停⽌仿真:按下F8(相当于⼯具栏上的“停⽌”按钮),单步执⾏(F4),使⽤(F5)动画或不使⽤(F6)动画运⾏它。
F7(快速模式)完全关闭跟踪功能,以实现最⼤速度。
注意主窗⼝状态栏上的事件/秒和⾟秒/秒标尺(仅当模拟以快速或快速模式运⾏时才可见)。
练习通过多次运⾏仿真来探索GUI。
尝试运⾏,运⾏直到,_重建⽹络_以及其他功能。
您可以通过单击其_关闭_图标或选择_File-> Exit退出_模拟程序。
M/M/1排队系统实验报告一、实验目的本次实验要现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间到达k 个呼叫的概率 服从Poisson 分布,即e t kk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。
2、 服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、 服务规则先进先服务的规则(FIFO )4、 理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。
三、实验容M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO 方式服务。
四、采用的语言MatLab 语言源代码:clear;clc;%M/M/1排队系统仿真SimTotal=input('请输入仿真顾客总数SimTotal='); %仿真顾客总数;Lambda=0.4; %到达率Lambda;Mu=0.9; %服务率Mu;t_Arrive=zeros(1,SimTotal);t_Leave=zeros(1,SimTotal);ArriveNum=zeros(1,SimTotal);LeaveNum=zeros(1,SimTotal);Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间t_Arrive(1)=Interval_Arrive(1);%顾客到达时间ArriveNum(1)=1;for i=2:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Wait_avg=mean(t_Wait);t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间t_Queue_avg=mean(t_Queue);Timepoint=[t_Arrive,t_Leave];%系统中顾客数随时间的变化Timepoint=sort(Timepoint);ArriveFlag=zeros(size(Timepoint));%到达时间标志CusNum=zeros(size(Timepoint));temp=2;CusNum(1)=1;for i=2:length(Timepoint)if (temp<=length(t_Arrive))&&(Timepoint(i)==t_Arrive(temp)) CusNum(i)=CusNum(i-1)+1;temp=temp+1;ArriveFlag(i)=1;CusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_fromStart=[0 CusNum];CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end);QueLength=zeros(size(CusNum));for i=1:length(CusNum)if CusNum(i)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end);%系统平均等待队长%仿真图figure(1);set(1,'position',[0,0,1000,700]);subplot(2,2,1);title('各顾客到达时间和离去时间');stairs([0 ArriveNum],[0 t_Arrive],'b');hold on;stairs([0 LeaveNum],[0 t_Leave],'y');legend('到达时间','离去时间');hold off;subplot(2,2,2);stairs(Timepoint,CusNum,'b')title('系统等待队长分布');xlabel('时间');ylabel('队长');subplot(2,2,3);title('各顾客在系统中的排队时间和等待时间');stairs([0 ArriveNum],[0 t_Queue],'b');stairs([0 LeaveNum],[0 t_Wait],'y');hold off;legend('排队时间','等待时间');%仿真值与理论值比较disp(['理论平均等待时间t_Wait_avg=',num2str(1/(Mu-Lambda))]);disp(['理论平均排队时间t_Wait_avg=',num2str(Lambda/(Mu*(Mu-Lambda)))]);disp(['理论系统中平均顾客数=',num2str(Lambda/(Mu-Lambda))]);disp(['理论系统中平均等待队长=',num2str(Lambda*Lambda/(Mu*(Mu-Lambda)))]);disp(['仿真平均等待时间t_Wait_avg=',num2str(t_Wait_avg)])disp(['仿真平均排队时间t_Queue_avg=',num2str(t_Queue_avg)])disp(['仿真系统中平均顾客数=',num2str(CusNum_avg)]);disp(['仿真系统中平均等待队长=',num2str(QueLength_avg)]);五、数据结构1.仿真设计算法(主要函数)利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔,结果与调用exprnd(1/Lambda,m)函数产生的结果相同Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间间隔t_Arrive(1)=Interval_Arrive(1);%顾客到达时间时间计算t_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Queue=t_Wait-Interval_Serve; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
实验一Omnet++排队模型仿真实验
一.实验目的
1.熟悉omnet++软件使用。
2.对排队模型进行更形象的分析与学习。
二.实验工具
Omnet++软件
三.实验步骤
1.用omnet++软件将排队模型以模块形式构建出来。
2.对网络环境进行设置,内部到达时间设置为0,即所有到达的job立即添
加到排队网络中。
设置不同队列的服务时间(成1、2、3的指数分布),以及排队模型模拟运行时间。
3.运行仿真程序并记录结果。
4.对实验结果进行分析总结。
四.实验结果及分析
1.排队模型搭建如下图所示:
此部分在source页面下也可以用代码进行构造,编写代码如下:
package demo;
import org.omnetpp.queueing.Queue;
import org.omnetpp.queueing.Source;
network Demo
{
@display("bgb=517,314");
submodules:
source: Source {
@display("p=140,146");
}
queue1: Queue {
@display("p=297,146");
}
queue2: Queue {
@display("p=404,78");
}
queue3: Queue {
@display("p=404,214");
}
connections:
source.out --> queue1.in++;
queue1.out --> queue2.in++;
queue3.out --> queue1.in++;
queue2.out --> queue3.in++;
}
2.进行设置内部到达时间及初始job数:
设置完成后规定不同队列的服务时间(按指数分布),以及模拟运行时间
切换到代码显示配置信息如下:
[General]
network = demo.Demo
cmdenv-status-frequency = 500s
sim-time-limit = 20000s
**.source.numJobs = ${jobs=30,60}
**.source.interArrivalTime = 0
**.serviceTime = exponential(${serviceMean=1..3 step 1}s) 3.运行详细情况如下图所示:
4.新建立.anf文件,对结果进行分析。
我们只选择run ID 为3 的仿真看下结果,选择队列长度选项筛选出如下三个结果:
绘制出图像:
更改横纵坐标,绘制出点图如下:
平滑后如下图:
打开一个.elog 文件,来看下序列图sequence chart。
在General-0.elog 文件中我们可以看到最初的60 个信息被推入一个队列中。
如下图所示:。