✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
AOMDV(Ad hoc On-demand Multipath Distance Vector)是一种自组织、按需路由协议,适用于移动 ad hoc 网络(MANETs)。它基于传统的距离矢量路由协议,但通过引入多路径路由和按需路由机制,提高了网络的性能和鲁棒性。
主要特点
-
按需路由: AOMDV 仅在需要时才建立路由,以减少网络开销。
-
多路径路由: AOMDV 维护到目标节点的多条路径,以提高网络的可靠性和容错性。
-
自组织: AOMDV 不需要任何基础设施,节点可以自动发现和维护路由。
-
距离矢量路由: AOMDV 使用距离矢量算法来计算路由,并通过周期性更新路由表来维护网络拓扑。
工作原理
AOMDV 工作原理主要包括以下几个步骤:
-
路由发现: 当源节点需要向目标节点发送数据时,如果路由表中没有到目标节点的有效路径,则启动路由发现过程。源节点向网络广播一个路由请求 (RREQ) 消息,该消息包含目标节点的地址和源节点的序列号。
-
路由维护: 当中间节点收到 RREQ 消息时,如果其路由表中存在到目标节点的有效路径,则将该路径添加到 RREQ 消息中并转发。否则,中间节点丢弃该消息。
-
路由选择: 当目标节点或具有到目标节点有效路径的中间节点收到 RREQ 消息时,将向源节点发送路由回复 (RREP) 消息。RREP 消息包含到目标节点的多条路径,源节点根据路径的质量选择最佳路径。
-
路由更新: 当网络拓扑发生变化时,节点会向其邻居广播路由更新 (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;
tic
load ibov_sp_rets.txt
U=empiricalCDF(ibov_sp_rets); % Empirical transformation
u=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 Copula
kappabarN = 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 copula
lower = [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 copula
lower = [-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 optimisation
upper = 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 parameters
lower = -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 calculation
numgrad=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 matriz
robstd1 = 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 copula
lower = -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 calculation
numgrad=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 matriz
robstd2 = 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 Copula
n=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 Copula
figure(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径向基神经网络时序、回归预测和分类