【通信】自组织按需多路径距离矢量(AOMDV)附matlab代码

 ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab完整代码及仿真定制内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

物理应用             机器学习

🔥 内容介绍

AOMDV(Ad hoc On-demand Multipath Distance Vector)是一种自组织、按需路由协议,适用于移动 ad hoc 网络(MANETs)。它基于传统的距离矢量路由协议,但通过引入多路径路由和按需路由机制,提高了网络的性能和鲁棒性。

主要特点

  • 按需路由: AOMDV 仅在需要时才建立路由,以减少网络开销。

  • 多路径路由: AOMDV 维护到目标节点的多条路径,以提高网络的可靠性和容错性。

  • 自组织: AOMDV 不需要任何基础设施,节点可以自动发现和维护路由。

  • 距离矢量路由: AOMDV 使用距离矢量算法来计算路由,并通过周期性更新路由表来维护网络拓扑。

工作原理

AOMDV 工作原理主要包括以下几个步骤:

  1. 路由发现: 当源节点需要向目标节点发送数据时,如果路由表中没有到目标节点的有效路径,则启动路由发现过程。源节点向网络广播一个路由请求 (RREQ) 消息,该消息包含目标节点的地址和源节点的序列号。

  2. 路由维护: 当中间节点收到 RREQ 消息时,如果其路由表中存在到目标节点的有效路径,则将该路径添加到 RREQ 消息中并转发。否则,中间节点丢弃该消息。

  3. 路由选择: 当目标节点或具有到目标节点有效路径的中间节点收到 RREQ 消息时,将向源节点发送路由回复 (RREP) 消息。RREP 消息包含到目标节点的多条路径,源节点根据路径的质量选择最佳路径。

  4. 路由更新: 当网络拓扑发生变化时,节点会向其邻居广播路由更新 (RERR) 消息,通知邻居路由失效。

优点

  • 高性能: AOMDV 通过按需路由和多路径路由机制,提高了网络的吞吐量和延迟。

  • 高鲁棒性: AOMDV 通过维护多条路径,提高了网络的可靠性和容错性。

  • 低开销: AOMDV 仅在需要时才建立路由,减少了网络开销。

  • 易于实现: AOMDV 基于传统的距离矢量路由协议,易于实现和部署。

缺点

  • 环路问题: AOMDV 可能出现环路问题,需要额外的机制来避免环路。

  • 安全问题: AOMDV 容易受到攻击,需要安全机制来保护网络。

总结

AOMDV 是一种高效、鲁棒的路由协议,适用于移动 ad hoc 网络。它通过按需路由和多路径路由机制,提高了网络的性能和可靠性。但是,AOMDV 也存在一些缺点,如环路问题和安全问题,需要进一步研究和改进。

📣 部分代码

 % These are example codes, which are included in the Markov_Copula_code.rar file, % showing how to use some Log-likelihood functions for Markov Switching Copula % model presented in "Modelling Dependence Dynamics through Copulas with Regime Switching" % with Fl?vio A. Ziegelmann and Michael J. Dueker, Insurance: Mathematics and Economics, % Volume 50, Issue 3, May 2012, Pages 346-356.%% To use this, one needs the Patton Copula Toolbox which can be downloaded% from http://public.econ.duke.edu/~ap172/Patton_copula_toolbox.zip% % tCopula.m, tCopula_cdf.m, tcopula_pdf.m and tcopulaCL.m from Patton% toolbox has been updated taking into account Student-t cdf, pdf % and inverse functions for newer versions of Matlab,% and included in the Markov_Copula_code.rar file as well.%% In these example codes are estimated models with static, time-varying Patton like and% time-varying Markov switching dependence parameters. The whole process takes about 2 hours. The code can% be easily modified to estimate just the Markov copula model.  (Student-t% takes longer than other copulas) %% Initial values are chosen ad hoc only to run this example and should be modified for accuracy.% % All functions included here are just a first draft for a Markov Copula% Toolbox that will be available soon. I apologize for any error and% greatly appreciate if you could report it.%% Any comments or suggestions are welcome.%% It was added for the copulas 15 and 25 a way to calculate robust standard% errors by Godambe Info Matrix. It follows Manthos Vogiatizoglou's Dynamic% Copula Toolbox 3.0(http://www.mathworks.com/matlabcentral/fileexchange/29303-dynamic-copula-toolbox-3-0)% suggestion. One can replicate this example for any% LLF function in the Markov_copula_code.% % MyFuncScores.m and hessian_2sided.m added here come from Copula Toolbox 3.0%clc;clear all;ticload ibov_sp_rets.txt U=empiricalCDF(ibov_sp_rets); % Empirical transformationu=U(:,1);v=U(:,2);transmarg=[u,v];options = optimset('Algorithm','interior-point','Display','iter','Hessian','bfgs','MaxFunEvals',1000);options = optimset(options,'FinDiffType','central','MaxIter',1500,'TolCon',10^-12,'TolFun',10^-5,'TolX',10^-5);dados=transmarg;% 1. Normal CopulakappabarN = corrcoef12(norminv(u),norminv(v));LL1 = NormalCopula_CL(kappabarN,[u,v]);% 3. Clayton copula lower = 0.0001;theta0 = 1; %Initial value[kappabarCL LL3] = fmincon('claytonCL',theta0,[],[],[],[],lower,[],[],options,dados);% 4. Gumbel copula lower = 1.1;theta0 = 1.11;[kappabarGL LL4] = fmincon('gumbelCL',theta0,[],[],[],[],lower,[],[],options,dados);% 5. Symmetrised Joe-Clayton copulalower = [0 , 0 ];upper = [ 1 , 1];theta0 = [0.25;0.25];[kappabarSJC LL5] = fmincon('sym_jc_CL',theta0,[],[],[],[],lower,upper,[],options,dados);% 8. Student's t copulalower = [-0.9 , 2.1 ];upper = [ 0.9 , 100 ];theta0 = [kappabarN;10];[kappabarT LL8] = fmincon('tcopulaCL',theta0,[],[],[],[],lower,upper,[],options,[u,v]);kappa0=[1 -1 0]; %initial values for time-varying copulas lower = -25*ones(3,1);  % in theory there are no constraints, but setting loose constraints sometimes helps in the numerical optimisationupper =  25*ones(3,1);% 11. Time-varying normal Copula%kappa0 = [log((1+kappabarN)/(1-kappabarN));0;0];[kappa11 LL11] = fmincon('bivnorm_tvp1_CL',kappa0,[],[],[],[],lower,upper,[],options,[u,v],kappabarN);[LL10, kappaN] = bivnorm_tvp1_CL(kappa11,[u,v],kappabarN);% 13. Time-varying Clayton copula[kappa13 LL13] = fmincon('Clayton_tvp1_CL',kappa0,[],[],[],[],lower,upper,[],options,[u,v],kappabarCL);[LL13 kappaCL] = Clayton_tvp1_CL(kappa13,[u,v],kappabarCL);% 14. Time-varying Gumbel copula[kappa14 LL14] = fmincon('Gumbel_tvp1_CL',kappa0,[],[],[],[],lower,upper,[],options,[u,v],kappabarGL);[LL14 kappaGL] = Gumbel_tvp1_CL(kappa14,[u,v],kappabarGL);kappa0=[1 -1 0 1 0 -1]; %initial values for time-varying copulas with 2 parameterslower = -40*ones(6,1);  upper =  40*ones(6,1);% 15. Time-varying Symetrized Joe-Clayton copula[kappa15 LL15] = fmincon('sym_jc_tvp_CL',kappa0,[],[],[],[],lower,upper,[],options,[u,v],kappabarSJC);[LL15 tauU tauL] = sym_jc_tvp_CL(kappa15,[u,v],kappabarSJC);% Robust standard errors calculationnumgrad=MyFuncScores('sym_jc_tvp_CL',kappa15',U,kappabarSJC);H = hessian_2sided('sym_jc_tvp_CL',kappa15',U,kappabarSJC); T = length(U);VCV = (inv(H/T)*cov(numgrad)*inv(H/T))/T; % covariance matrizrobstd1 = sqrt(diag(VCV)); % robust standard errors % 18. Time-varying T-copula[kappa18 LL18] = fmincon('bivt_tvp1_CL',kappa0,[],[],[],[],lower,upper,[],options,[u,v],kappabarT);[LL18, kappaT, nuT] = bivt_tvp1_CL(kappa18,[u,v],kappabarT);kappa0=[1 5 0 0 4 5];% 21. Time-varying Normal Markov copula[param21 LL21] = fmincon('markovnormal_LLF',kappa0,[],[],[],[],lower,upper,[],options,dados,kappabarN);[LL21, CL21, theta_s0N, theta_s1N, pf1N, pf2N, pplus1N, pplus2N] = markovnormal_LLF(param21,dados,kappabarN);% 23. Time-varying Clayton Markov copula[param23 LL23] = fmincon('markovclayton_LLF',kappa0,[],[],[],[],lower,upper,[],options,dados,kappabarCL);[LL23, CL23,theta_s0CL, theta_s1CL, pf1CL, pf2CL, pplus1CL, pplus2CL] = markovclayton_LLF(param23,dados,kappabarCL);% 24. Time-varying Gumbel Markov copula[param24 LL24] = fmincon('markovgumbel_LLF',kappa0,[],[],[],[],lower,upper,[],options,dados,kappabarGL);[LL24, CL24, theta_s0GL, theta_s1GL, pf1GL, pf2GL, pplus1GL, pplus2GL] = markovgumbel_LLF(param24,dados,kappabarGL);kappa0=[1 1 -1 -1 0 0 -1 -1 4 5]; %Initials for Time-varying Markov copula 2 parameters% 25. Time-varying SJC Markov copulalower = -30*ones(10,1);  upper =  30*ones(10,1);[param25 LL25] = fmincon('markovsjc_LLF',kappa0,[],[],[],[],lower,upper,[],options,dados,kappabarSJC);[LL25 CL25 TAU1_s0SJC TAU2_s0SJC TAU1_s1SJC TAU2_s1SJC pf1SJC pf2SJC pplus1SJC pplus2SJC] = markovsjc_LLF(param25,dados,kappabarSJC);% Robust standard errors calculationnumgrad=MyFuncScores('markovsjc_LLF',param25',U,kappabarSJC);H = hessian_2sided('markovsjc_LLF',param25',U,kappabarSJC); VCV = (inv(H/T)*cov(numgrad)*inv(H/T))/T; % covariance matrizrobstd2 = sqrt(diag(VCV)); % Robust standard errors% 28. Time-varying T copula[param28 LL28] = fmincon('markovt_LLF',kappa0,[],[],[],[],lower,upper,[],options,dados,kappabarT);[LL28, theta_s0T, theta_s1T, pf1T, pf2T, pplus1T, pplus2T] = markovt_LLF(param28,dados,kappabarT);toc/60/60;formatSpec = 'Elapsed time hours %4.2f hours.\n';fprintf(formatSpec,ans)% Graphic example for Normal Markov Copulan=size(pplus1N,1);figure(1),subplot(2,1,1),plot((1:n)',theta_s0N,(1:n)',kappabarN*ones(n,1),'r--'),legend('Time-varying','Constant'),title('(a) Normal copula - estado S0'),axis([0,n,-.4,1]);subplot(2,1,2),plot((1:n)',theta_s1N,(1:n)',kappabarN*ones(n,1),'r--'),legend('Time-varying','Constant'),title('(b) Normal copula - estado S1'),axis([0,n,0,1]);figure(2),subplot(2,1,1),plot((1:n)',pplus2N),legend('Probabilidades filtradas S0'),title('(a) Normal copula - estado S0'),axis([0,n,0,1]);subplot(2,1,2),plot((1:n)',pplus1N),legend('Prbabilidades filtradas S1'),title('(b) Normal copula - estado S1'),axis([0,n,0,1]);% Graphic example for SJC Markov Copulafigure(3),subplot(4,1,1),plot((1:n)',TAU2_s0SJC,(1:n)',kappabarSJC(2)*ones(n,1),'r--'),legend('Time-varying','Constant'),title('(a) SJC copula(Lower tail) - estado S0'),axis([0,n,0,1]);subplot(4,1,2),plot((1:n)',TAU1_s0SJC,(1:n)',kappabarSJC(1)*ones(n,1),'r--'),legend('Time-varying','Constant'),title('(b) SJC copula(Upper tail) - estado S0'),axis([0,n,0,1]);subplot(4,1,3),plot((1:n)',TAU2_s1SJC,(1:n)',kappabarSJC(2)*ones(n,1),'r--'),legend('Time-varying','Constant'),title('(c) SJC copula(Lower tail) - estado S1'),axis([0,n,0,1]);subplot(4,1,4),plot((1:n)',TAU1_s1SJC,(1:n)',kappabarSJC(1)*ones(n,1),'r--'),legend('Time-varying','Constant'),title('(d) SJC copula(Upper tail) - estado S1'),axis([0,n,0,1]);figure(4),subplot(2,1,1),plot((1:n)',pplus2SJC),legend('Probabilidades filtradas S0'),title('(a) SJC copula - estado S0'),axis([0,n,0,1]);subplot(2,1,2),plot((1:n)',pplus1SJC),legend('Prbabilidades filtradas e suavizadas S1'),title('(b) SJC copula - estado S1'),axis([0,n,0,1]);

⛳️ 运行结果

🔗 参考文献

 [1]冯邦成.Ad hoc网络按需多路径距离矢量路由协议的研究[D].西南交通大学,2007.DOI:10.7666/d.y1131189.

🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁  关注我领取海量matlab电子书和数学建模资料

👇  私信完整代码和数据获取及论文数模仿真定制

1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题
2 机器学习和深度学习方面

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
4 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
5 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
6 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
7 电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电
8 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
9 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AOMDV算法是一种用于自适应多路径路由的路由协议。在Python中实现AOMDV算法可以通过以下步骤: 1. 导入所的库: ```python import networkx as nx import random ``` 2. 定义AOMDV路由器类: ```python class AOMDVRouter: def __init__(self, node_id): self.node_id = node_id self.routes = {} ``` 3. 定义路由发现和更新函数: ```python def discover_route(source, destination, graph): all_paths = nx.all_simple_paths(graph, source=source, target=destination) paths = list(all_paths) if len(paths) > 0: return random.choice(paths) else: return None def update_route(source, destination, graph, routes, path): cost = len(path) if (source, destination) in routes: if cost < routes[(source, destination)][0]: routes[(source, destination)] = (cost, path) else: routes[(source, destination)] = (cost, path) ``` 4. 定义AOMDV算法主要函数: ```python def aomdv_algorithm(graph, source, destination): router = AOMDVRouter(source) route = discover_route(source, destination, graph) update_route(source, destination, graph, router.routes, route) for node in route: if node != source and node != destination: next_hop = node update_route(source, destination, graph, router.routes, route[route.index(node):]) return router.routes[(source, destination)] ``` 这只是一个简单的示例实现,AOMDV算法还有其他复杂的细节要考虑,例如路由表维护和路由更新策略等。因此,实际使用时可能要根据具体求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值